TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430F5 (SPI使用DMA方式) 初始化DMA为什么需要保证SPI模块处于复位状态?

void DMA01_Init(uint8_t *const SrcAddr, uint8_t *const DstAddr, uint16_t Len)

{

UCB0CTL1 |= UCSWRST; //标记
DMACTL0 = DMA1TSEL_18 + DMA0TSEL_19; __data16_write_addr((unsigned short)&DMA0SA, (unsigned long)SrcAddr); __data16_write_addr((unsigned short)&DMA0DA, (unsigned long)&UCB0TXBUF); DMA0SZ = Len; DMA0CTL = DMADT_2 + DMASRCINCR_3 + DMADSTBYTE + DMASRCBYTE + DMALEVEL; __data16_write_addr((unsigned short)&DMA1SA, (unsigned long)&UCB0RXBUF); __data16_write_addr((unsigned short)&DMA1DA, (unsigned long)DstAddr); DMA1SZ = Len; DMA1CTL = DMADT_2 + DMADSTINCR_3 + DMADSTBYTE + DMASRCBYTE + DMALEVEL;
UCB0CTL1 &= ~UCSWRST; //标记 }

备注:

SPI模块只是在上电初期初始化一次。

DMA模块在程序运行期间需要多次初始化。

问题:

为什么需要在DMA初始化期间调用UCB0CTL1 &= ~UCSWRST; 和UCB0CTL1 |= UCSWRST;语句(删除这两条语句程序将出错)?根据我的理解,只要我重新初始化SPI,理论上我就不需要调用这两条语句。

恳请指教,感谢!

Susan Yang:

删除的话会有什么错误呢?

关于初始化或者重新配置USCI,在TRM内给出了建议

Susan Yang:

关于SPI DMA,请您参考下面的程序

dev.ti.com/…/node

您上面的程序能否给出相关出处?

赞(0)
未经允许不得转载:TI中文支持网 » MSP430F5 (SPI使用DMA方式) 初始化DMA为什么需要保证SPI模块处于复位状态?
分享到: 更多 (0)