1.1硬件平臺介紹
RT-Thread和瑞薩推出的HMI-Board上的主控芯片型號為R7FA6M3AH3CFB。
瑞薩電子 RA6M3 微控制器 (MCU) 群組使用高性能 Arm? Cortex?-M4 內核,提供具備 2D 加速器和 JPEG 解碼器的 TFT 控制器。此外,RA6M3 MCU 提供具有單獨 DMA 和 USB 高速接口的以太網 MAC,可確保大的數據吞吐量。RA6M3 MCU 采用高效的 40nm 工藝,由開放且靈活的生態系統概念提供支持,即基于 FreeRTOS 的靈活配置軟件包 (FSP),能夠擴展以使用其他 RTOSes 和中間件。RA6M3 適用于需要 TFT、以太網、安全性、大型嵌入式 RAM 和 USB 高速 (HS) 的物聯網應用。芯片的特性如下:
20MHz Arm? Cortex?-M4
1MB - 2MB 閃存以及 640kB SRAM
與 EEPROM 存儲數據功能類似的 64kB 數據閃存
可從 100 引腳封裝擴展至 176 引腳封裝
具備 DMA 的以太網控制器
TFT 控制器/2D 加速器/JPEG 解碼器
電容式觸摸傳感單元
USB 2.0 全速/USB 高速
CAN 2.0B
SCI(UART、簡單 SPI、簡單 I2C)
SPI/ I2C 多主機接口/SDHI
在RT-Stuido的工程創建界面可以看到板卡的芯片數據手冊、使用手冊,以及開發板的原理圖。
1.2 瑞薩FSP配置安裝和代碼生成
RT-Thread框架如下所示。
其中針對開發板的BSP驅動部分,使用瑞薩推出的FSP配置工具RASC來生成板卡的硬件驅動程序。在Github上的可以下載到不同版本的FSP。HMI-Board使用的RASC的版本為v3.5.0。下載完成后,采用默認安裝即可。
1.3 嘗試生成Keil工程
使用RASC生成的工程是面向Keil或者IAR等第三方工具,本文選擇使用Keil開發環境。
在之前安裝好的的FSP目錄下打開rasc.exe。
在彈出的工程創建界面中,輸入要創建的工程名稱以及路徑。
由于HMI-Board不是Renesas官方推出的開發板,在Board欄中選則“Cunstom User Board(Any Device)”,芯片選擇R7FA6M3AH3CFB,IDE Project Type 選擇Keil MDK Version5。
在RTOS選擇頁選擇”No RTOS”,不需要操作系統支持。
在工程模板選擇中選擇“Bare Metal - Minimal”,創建出的工程不會進行任何操作,在此基礎上,可以根據Renesas定義的函數接口來實現用戶自定義的功能。
工程創建完成后在FSP Configuration的配置頁中,對芯片的外設、模塊、協議棧等進行添加和配置。
查看開發手冊可以看到P209和P210上外接了兩個LED燈,P205(TX)和P206(RX)為串口4的引腳。在FSP->Configuration的Stack中添加相應的IO模塊和串口模塊。添加完成后的模塊組成如圖所示。
模塊添加完成后,需要根據硬件的參數對其進行相應的配置,主要是引腳和使用到的串口號。LED控制屬于通用GPIO輸出。IO模塊的參數采用默認參數即可。
串口模塊需要指定使用的串口號、波特率、數據位、校驗位、停止位以及引腳等信息,模塊的配置如下:
其他外設的配置方式與此類似,這里就不在進行介紹了。點擊Generate Project Content生成相應的工程,就可以在工程使用上述模塊的接口函數,不再需要自己編寫底層的代碼。
生成的Keil工程的目錄如下圖所示。
RASC會自動生成的代碼都在Flex Software標簽下,而工程相關的代碼則存在其它的文件目錄中。
注:目前使用過程中,在RASC中添加新的模塊并重新生成Keil工程后,會把Keil中的配置選項重置,這對開發是一個不友好的功能,不知道該如何解決。
1.4 串口通訊和IO控制
在RASC中配置的IO和串口模塊在hal_data.c中定義了xx_data.c中定義了相關模塊的配置、接口和實例變量。
在瑞薩的提供的HAL庫中,函數的接口定義格式為:
R__();
比如
err = R_SCI_UART_Open (&g_uart4_ctrl, &g_uart4_cfg);
err = R_SCI_UART_Write (&g_uart4_ctrl, p_msg, msg_len);
R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_02_PIN_09,pin_level);
串口的中斷函數在RASC聲明為user_uart4_callback,定義如下:
void user_uart4_callback(uart_callback_args_t *p_args)
{
g_data_received_flag=true;
}
定義功能函數
fsp_err_t uart_ep_demo(void)
{
/* Holds level to set for pins /
bsp_io_level_t pin_level = BSP_IO_LEVEL_LOW;
while (true)
{
if(g_data_received_flag)
{
g_data_received_flag = false;
R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_02_PIN_09,pin_level);
R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_02_PIN_10,pin_level);
/ Toggle level for next write */
if (BSP_IO_LEVEL_LOW == pin_level)
{
pin_level = BSP_IO_LEVEL_HIGH;
}
else
{
pin_level = BSP_IO_LEVEL_LOW;
}
}
}
}
在入口函數hal_entry中調用上述的函數
void hal_entry(void)
{
/* TODO: add your own code here /
......
/ Initializing IOPORT /
err=R_IOPORT_Open(&g_ioport_ctrl,&g_bsp_pin_cfg);
if(err!=FSP_SUCCESS)
{
APP_PRINT ("rn ** IO PORT INIT FAILED ** rn");
APP_ERR_TRAP(err);
}
/ Initializing UART /
err = uart_initialize();
if (FSP_SUCCESS != err)
{
APP_PRINT ("rn ** UART INIT FAILED ** rn");
APP_ERR_TRAP(err);
}
/ User defined function to demonstrate UART functionality /
err = uart_ep_demo();
if (FSP_SUCCESS != err)
{
APP_PRINT ("rn ** UART EP Demo FAILED ** rn");
deinit_uart();
APP_ERR_TRAP(err);
}
#if BSP_TZ_SECURE_BUILD
/ Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
編譯前勾選使用“Use MicroLIB”
編譯完成后,在下載時需要在調試器的配置界面設定以下參數,這些參數中的RAM項和指定MCU的SRAM空間分布相關,需要查看使用手冊來確定。
下載后運行,通過串口發送任意字符,可以觀察到板卡上的LED燈在閃爍。
-
加速器
+關注
關注
2文章
806瀏覽量
38016 -
EEPROM
+關注
關注
9文章
1033瀏覽量
81845 -
電容式觸摸
+關注
關注
0文章
40瀏覽量
18739 -
以太網控制器
+關注
關注
0文章
39瀏覽量
12754 -
RT-Thread
+關注
關注
31文章
1305瀏覽量
40313
發布評論請先 登錄
相關推薦
評論