對于RL78系列的MCU,為了提高運行效率,減少CPU的占用,建議UART數據收發(fā)使用DMA功能。DMA(Direct Memory Access)是RL78 MCU內置的一個控制器,能在支持DMA外圍硬件的SFR和內部RAM之間不經過CPU而自動傳送數據。
打開DMA0的配置界面如下,首先要確定DMA0的傳送方向,其次選擇外設SFR寄存器,以及RAM的地址和指定DMA0傳送的數據長度,第三要設置DMA0的觸發(fā)源。DAM1的設置和DMA0是相同的,根據應用需求,進行相應的配置。
UART的配置比較簡單,在此不在累述,配置好后,點擊“code generator”,生成對應的驅動代碼,順便說,自動生產的串口API函數是沒有__far類型的,但是實際測試的時候,發(fā)送的數據可能是錯誤的,因為定義的數據buffer可能不在鏡像區(qū),這樣會導致傳送的地址是錯誤的,所以為避免類似的情況發(fā)生,建議在如下地方修改為__far類型。
定義好接收數據的uart_buf[10], 并把數據buffer的地址給到DRA0,如下,DMA0被觸發(fā)后,會把在SFR接收到的數據直接送給uart_buf[10]。
左右滑動查看完整內容
左右滑動查看完整內容
通過DMA1發(fā)送數據時,也是一樣,要發(fā)送數據的buffer的地址賦給DRA1,DMA1被觸發(fā)后,會把RAM buffer的數據送給SFR進行發(fā)送。
左右滑動查看完整內容
在主函數main里,初始化相關的函數,如下。
左右滑動查看完整內容
連接好硬件,并把生成的.mot文件下載到MCU里,通過串口助手給MCU發(fā)送8個字符數據“12345678”,在應用程序里沒有對接收的SFR數據進行處理的情況下,通過DMA0會把接收到SFR的8個數據送到指定的buffer 里,經檢查結果,數據接收正確。
-
mcu
+關注
關注
146文章
17148瀏覽量
351183 -
控制器
+關注
關注
112文章
16361瀏覽量
178027 -
寄存器
+關注
關注
31文章
5343瀏覽量
120348 -
uart
+關注
關注
22文章
1235瀏覽量
101387 -
dma
+關注
關注
3文章
561瀏覽量
100583
原文標題:RL78系列MCU DMA在UART中的使用
文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論