19.10
實驗4:DTC+UART串口收發
19.10.1
軟件設計
19.10.1.1
新建工程
本實驗新建工程的步驟與上面的實驗3基本一致。
對于e2studio開發環境:
拷貝一份我們之前的e2s工程 “19_UART_Receive_Send”,然后將工
程文件夾重命名為“20_DTC_Using_UART”,最后再將它導入到我們的e2studio工作空間中。
對于Keil開發環境:
拷貝一份我們之前的Keil工程“19_UART_Receive_Send”,然后將工程文
件夾重命名為“20_DTC_Using_UART”,并進入該文件夾里面雙擊Keil工程文件,打開該工程。
工程新建好之后,在工程根目錄的“src”文件夾下面新建“dtc”文件夾,再進入“dtc”文件夾里面新建源文件和頭文件:“bsp_dtc.c”和“bsp_dtc.h”。工程文件結構如下。
列表26:文件結構
左右滑動查看完整內容
20_DTC_External_Interrupt ├─ ...... └─src ├─ led │ ├─ bsp_led.c │ └─ bsp_led.h ├─ debug_uart │ ├─ bsp_debug_uart.c │ └─ bsp_debug_uart.h ├─ dtc │ ├─ bsp_dtc.c │ └─ bsp_dtc.h └─ hal_entry.c
19.10.1.2
FSP配置
打開該工程的FSP配置界面。
在“Stacks”一欄里面我們可以看到,工程“19_UART_Receive_Send”已有UART模塊的配置了,如下圖所示。

在這個已有的UART模塊上面,我們下一步直接在該UART模塊的底層添加DTC傳輸驅動。如下圖所示。

按照如下的步驟操作,為UART的發送和接收都添加DTC底層驅動:
UART發送:用鼠標依次點擊“Add DTC Driver for Transmission”→“New”→“Transfer (r_dtc)”。
UART接收:用鼠標依次點擊“Add DTC Driver for Reception”→“New”→“Transfer(r_dtc)”。
我們注意到:“Add DTC Driver for Transmission”之后有“[Recommended but optional]”的字眼、“Add DTC Driver for Reception”之后有“[Not recommended]”的字眼,即:瑞薩FSP庫官方推薦我們使用DTC來發送UART數據(雖然也可以不使用DTC),但不推薦使用DTC來接收UART數據。后面我們再來講講這是為什么。
添加完成后如下圖所示:

上圖中顯示的UART模塊顯示為紅色,是報錯的,對此還需要修改下UART模塊的配置。點擊UART 模塊,在屬性配置里將“Common”→“DTC Support”屬性由“Disable”改為“Enable”即可。
接著順便也點擊下UART下面的DTC模塊,會發現DTC是基本默認配置好的了,不用我們更改,也無法更改,能改的只有名字,我們把名字改一下,就可以點擊生成代碼,然后編譯了。

與上面使用DTC一些不同的地方是,瑞薩已經將DTC融入到UART中了,所以我們在使用過程中基本感覺不到我們在使用DTC傳輸數據給UART。
比如,正常情況下會有一個open函數去開啟DTC的,但現在不同自己去調用該函數,因為我們在使用g_uart_on_sci.open函數去開啟串口時,就已經在內部調用了DTC的開啟函數。
我們只需調用g_transfer_on_dtc.enable函數進行使能就好了。
列表27:代碼清單20?23使能dtc
左右滑動查看完整內容
err = g_transfer_on_dtc.enable(g_uart4.p_cfg->p_transfer_rx->p_ctrl); assert(FSP_SUCCESS == err);
使能后就可以像正常使用串口基本一樣了。區別主要在于:
使用DTC后,串口可以不用等待發送完成,只需激活DTC后自動進行搬運數據,不占用CPU;
中斷開啟DTC后相當于DTC接管了串口的中斷。
使用g_uart_on_sci.write或者R_SCI_UART_Write函數將字符串數據發送到串口,該函數內部會采用DTC來傳輸。
列表28:代碼清單20?24測試dtc串口
左右滑動查看完整內容
uint8_t sci_tx_data[] = {"embedfire-野火 www.embedfire.com
"};
/* 在 while(1) 中循環調用 */
// 可以嘗試在 configuration.xml 中將 DTC 模塊去除,再進行代碼調試,看看會有什么區別
g_uart_on_sci.write(g_uart4.p_ctrl, (uint8_t *)(sci_tx_data),sizeof(sci_
→tx_data)/sizeof(sci_tx_data[0]));
19.10.1.3
為什么不用DTC接收串口數據
在實際使用過程中DTC有一些限制:
在本實驗中使用DTC發送串口數據,但我們沒有配置使用DTC接收串口數據,因為具體配置過程可能會很復雜,而且我們并不知道串口具體要接收多少數據,而DTC是傳輸完成了才會產生中斷,這樣就可能存在,我設定接受數據長度為128,但實際傳輸可能只有100,這時候就不會產生中斷,雖然接收了數據,但我們不知道。
如果使用DTC接口進行傳輸,則傳輸大小必須小于或等于64K字節。
所以,雖然在FSP配置頁面上,顯示有DTC這個選項,但不建議去使用DTC進行接收。
19.10.2
實驗現象
運行例程代碼時,可以在串口助手看到字符串“embedfire-野火 www.embedfire.com”,以一秒傳輸一次的頻率傳輸字符串,led 也是一秒變換一次。
-
瑞薩
+關注
關注
37文章
22481瀏覽量
90850 -
串口
+關注
關注
15文章
1618瀏覽量
82803 -
uart
+關注
關注
22文章
1314瀏覽量
106634 -
開發環境
+關注
關注
1文章
270瀏覽量
17637
原文標題:實驗4:DTC+UART串口收發——瑞薩RA系列FSP庫開發實戰指南(61)
文章出處:【微信號:瑞薩嵌入式小百科,微信公眾號:瑞薩嵌入式小百科】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
瑞薩RA系列FSP庫開發實戰指南之DMAC+UART串口收發實驗
瑞薩RA系列FSP庫開發實戰指南之QSPI讀寫外部Flash芯片實驗
瑞薩RA系列FSP庫開發實戰指南之DTC+UART串口收發實驗
評論