请问下,我现在正在使用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个波形,不知道是我程序的问题还是什么,请帮忙分析一下,谢谢!
此帖出自
小平头技术问答
一周热门 更多>