LM3S 的DMA,设置传输数目后,传输的实际数目不对?

2019-03-24 15:04发布

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

一周热门 更多>

相关问题

    相关文章