原创 PIC32MX795F12L单片机DMA方式UART数据传输的研究(下)

2016-4-8 10:25 2104 18 18 分类: MCU/ 嵌入式 文集: 硬件开发学习

三、普通方式串口通信验证测试

普通方式串口通信实现较为简单,只要通过对具体UART口进行相应的配置即可实现串口收发数据,通过参考pic32_examples例程,串口配置的代码及说明如下:

绘图10.jpg

以上代码是对U5和U6芯片(MAX3491)的REN\和DE两个引脚定义和配置输出,使能UART口收发;

绘图11.jpg
绘图12.jpg

配置中断服务程序:

绘图13.jpg

UART发送通过定义发送函数完成,如下图:

绘图14.jpg

实际中对该函数的调用如下:

绘图15.jpg

接收在中断服务程序中完成,而发送数据我们基本上不关心中断;

以上为UART串口通信的普通中断实现方式,可参考以下网络上的资料:

http://blog.163.com/yucheng_xiao/blog/static/76600192201382415451367/

http://www.dzsc.com/data/html/2011-9-4/97820.html

http://www.microchip.com/forums/m794814.aspx

http://www.doc88.com/tag/PIC32%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99--%E4%B8%AD%E6%96%AD

四、DMA方式实现UART串口数据的传输

         以UART1为例,对DMA方式实现UART串口数据的传输进行研究。首先得充分了解DMA的概念,DMA控制器是总线主模块,用于无需CPU干预的情况下在不同外设之间传输数据。DMA传输的源和目标可以是PIC32MX中包含的任何存储器映射的模块如存储器本身、外设总线设备SPI、UART和IIC等。如下图所示,可以初步了解DMA的概念,若需深入了解请通过百度谷歌等其他途径展开学习。

绘图16.jpg

本次在PIC32单片机中DMA方式实现UART串口数据的传输,以UART1通信为例,具体配置、注意事项以及调试遇到的问题具体如下:(此外本人在项目开发中为了主控板上的FPGA对外围三块板卡进行相关数据采集,在FPGA中搭建了DMA控制器,后续将其一一给大家介绍)

绘图17.jpg

本项目包括串口的收发,因此需采用两个DMA通道进行数据传输,以上是两DMA通道的初始化,需要说明的是初始化工作完成后,UART1的TX和RX中断均被DMA中断所取代,DMA中断服务程序如下:

绘图18.jpg

以上是DMA发送中断,当数据DMA通过UART1发送完成后进入中断,将中断事件标志位以及中断标志清除;

绘图19.jpg
绘图20.jpg

以上是DMA接收中断服务程序代码,本实验通过串口助手向单片机发送一组数据,PIC单片机接收到后,对接收数据进行简单验证,验证通过后再通过DMA向UART1口回发该组数据,从该中断服务可以看出:DMA第一通道初始化配置好后,只需通过以下两条指令便可将数据DMA方式串口发送

DmaChnSetTxfer(DMA_CHANNEL1, GETDATA, (void*)&U1TXREG, 12, 1, 1);

DmaChnStartTxfer(DMA_CHANNEL1, DMA_WAIT_NOT, 0);

DelayMS(20);

调试过程中发现,DelayMS(20)语句需要保证数据在所定义的波特率下有足够的时间将其发送出去,否则会出现数据发送不全的现象。

         对于DMA接收,初始化配置中DmaChnEnable(DMA_CHANNEL2);必不可少,否则该通道没有使能不接收数据,而DMA发送则不需要该语句,此外,经过充分调试验证,请看下条语句:

DmaChnSetTxfer(DMA_CHANNEL2, (void*)&U1RXREG, GETDATA, 1, 12, 1);

当串口数据全部接收完后进入DMA接收中断服务程序,GETDATA数据已完全得到U1RXREG中的数据,对GETDATA数据进行相关处理后,清DMA接收中断事件标志位和中断标志位后,若要继续接收数据还需增加以下两条语句:

DmaChnSetTxfer(DMA_CHANNEL2, (void*)&U1RXREG, GETDATA, 1, 12, 1);

DmaChnEnable(DMA_CHANNEL2);

从而开启下一次接收数据的等待,否则DMA接收只能完成当前的一次传输。

具体PIC32单片机DMA方式传输可参考以下资料:

http://www.doc88.com/p-9072783694931.html

http://www.imgtec.eetrend.com/blog/2507

http://www.docin.com/p-1057535176.html

http://www.docin.com/p-102432127.html

http://codego.net/10067316/

https://www.microchip.com/forums/m/tm.aspx?m=798444

http://www.microchip.com/forums/m814398.aspx

文章评论0条评论)

登录后参与讨论
我要评论
0
18
关闭 站长推荐上一条 /2 下一条