LM3S 的DMA,设置传输数目后,传输的实际数目不对?
[复制链接]
请问下,我现在正在使用LM3S9B92,在SSI0的发送通道使用DMA,目前发现一个问题,当设置仲裁为1的时候,实际传输的数据总会比设置传输的少1个字节,而如果设置仲裁为其他值,则少的更离谱,比如设置为2,则少4个字节,设置为4,则少7个。我的初始化代码如下:
void uDMAInit() {
SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA); // 使能DMA时钟
uDMAEnable(); // 使能DMA模块
uDMAControlBaseSet(ucDMAControlTable); // 对DMA的控制表进行设置
uDMAChannelAttributeDisable(UDMA_CHANNEL_SSI0TX , //
清除通道属性 UDMA_ATTR_USEBURST
| UDMA_ATTR_ALTSELECT
| UDMA_ATTR_REQMASK);
uDMAChannelAttributeEnable(UDMA_CHANNEL_SSI0TX ,
UDMA_ATTR_HIGH_PRIORITY); // 通道为高优先级
uDMAChannelControlSet(UDMA_CHANNEL_SSI0TX | //
通道为SSI0TX UDMA_PRI_SELECT, //
数据结构 UDMA_SIZE_8 | //
数据长度8位 UDMA_SRC_INC_8 | //
源地址累加 UDMA_DST_INC_NONE | //
目的地址不累加 UDMA_ARB_1); //
仲裁大小为8 uDMAChannelTransferSet(UDMA_CHANNEL_SSI0TX | //
通道为SSI0TX UDMA_PRI_SELECT , //
数据结构 UDMA_MODE_BASIC , //
基本DMA模式 (void*)(scrollBuffer1), //
源地址 (void*)0x40008008 , //
目的地址为SSI0的数据寄存器
DPI_SIZE); // 一次传输为8个数据
uDMAChannelEnable(UDMA_CHANNEL_SSI0TX); //
使能UDMA_CHANNEL_SSI0TX通道 uDMAChannelIsEnabled(UDMA_CHANNEL_SSI0TX);
//IntEnable(INT_UDMA); // 使能uDMA软件中断
uDMAChannelRequest(UDMA_CHANNEL_SSI0TX); //
软件请求一次DMA传输 }
调用的地方如下:
if(uDMAChannelIsEnabled(UDMA_CHANNEL_SSI0TX)); else { uDMAChannelTransferSet(UDMA_CHANNEL_SSI0TX
| // 重新设置DMA传输的参数 UDMA_PRI_SELECT ,
UDMA_MODE_BASIC ,
(void*)(&scrollBuffer4[g_ulCounter]),
(void*)0x40008008 , 32);
uDMAChannelEnable(UDMA_CHANNEL_SSI0TX); uDMAChannelRequest(UDMA_CHANNEL_SSI0TX);
}
上述调用的地方是设置的传输32个字节,而我在实际使用的时候,用示波器测量的结果只有31个波形,不知道是我程序的问题还是什么,请帮忙分析一下,谢谢!
|