不能使用dma的原因

不能使用dma的原因

ID:1771668

大小:32.00 KB

页数:4页

时间:2017-11-13

不能使用dma的原因_第1页
不能使用dma的原因_第2页
不能使用dma的原因_第3页
不能使用dma的原因_第4页
资源描述:

《不能使用dma的原因》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1.假如接收采用DMA传输的话,DMA没有超时中断,DMA传输多少个数据是预先设置好的,因为profibus的帧不是固定的,DMA都是传输定长的帧,这点就不容忽视。事先不知道从PLC或者CP5611等主站中传来的数据是什么,所以传输多少个数据这个是设置不了;而用一个数组来接收的话,那会很难辨别帧从数组的那个位置开始是有效的,辨别的时候必将是哪里是0x10,0x68…然后结束位是0x16,假如有一个数据是0x16的话,那这个帧的辨别将会是错误的,这样子将会加大CPU的任务。还有一种方案是先接收几个数据来判断是否要传输几个数据,以方便设置,比如先接收0x100x680x05知道即将下来的帧是

2、什么,然后在设置接收剩下的数据,那么这么做之后可能会丢失一部分数据,这个是网上的说法,具体是如何是没验证过。2.假如用DMA来发送的话,必须要随时改变发送传输的长度,比如:uDMAChannelTransferSet(UDMA_CHANNEL_UART0TX

3、UDMA_PRI_SELECT,UDMA_MODE_BASIC,TxDataBuff,(void*)(UART0_BASE+UART_O_DR),1);//这是初始化的一个过程uDMAChannelEnable(UDMA_CHANNEL_UART0TX);到下一个发送的时候又改,如:GPIOPinWrite(GPIO_PORTB_B

4、ASE,GPIO_PIN_0,0x01);uDMAChannelTransferSet(UDMA_CHANNEL_UART0TX

5、UDMA_PRI_SELECT,UDMA_MODE_BASIC,TxDataBuff,(void*)(UART0_BASE+UART_O_DR),41);//这是数据交换过程uDMAChannelEnable(UDMA_CHANNEL_UART0TX);在这里,经过我的实验可知,设置一下,花的时间很长,并且会出现发送timeout使得模拟软件都不能接收到。而采用FIFO发送的话,时间都比采用DMA的快,DMA改变传输一次的函数如下:voiduDMAChanne

6、lTransferSet(unsignedlongulChannel,unsignedlongulMode,void*pvSrcAddr,void*pvDstAddr,unsignedlongulTransferSize){tDMAControlTable*pControlTable;unsignedlongulControl;unsignedlongulSize;unsignedlongulInc;////Checkthearguments.//ASSERT(ulChannel<64);ASSERT(HWREG(UDMA_CTLBASE)!=0);ASSERT(ulMode<=UDMA

7、_MODE_PER_SCATTER_GATHER);ASSERT((unsignedlong)pvSrcAddr>=0x20000000);ASSERT((unsignedlong)pvDstAddr>=0x20000000);ASSERT((ulTransferSize!=0)&&(ulTransferSize<=1024));////Getthebaseaddressofthecontroltable.//pControlTable=(tDMAControlTable*)HWREG(UDMA_CTLBASE);////Getthecurrentcontrolwordvalueandm

8、askoffthemodeandsize//fields.//ulControl=(pControlTable[ulChannel].ulControl&~(UDMA_CHCTL_XFERSIZE_M

9、UDMA_CHCTL_XFERMODE_M));////Adjustthemodeifthealtcontrolstructureisselected.//if(ulChannel&UDMA_ALT_SELECT){if((ulMode==UDMA_MODE_MEM_SCATTER_GATHER)

10、

11、(ulMode==UDMA_MODE_PER_SCATTER_GATHER)){ulMod

12、e

13、=UDMA_MODE_ALT_SELECT;}}////Setthetransfersizeandmodeinthecontrolword(butdontwritethe//controlwordyetasitcouldkickoffatransfer).//ulControl

14、=ulMode

15、((ulTransferSize-1)<<4);////Getthedataitemsizefromthecontrolword(set

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。