工具/软件:Code Composer Studio
我正在尝试使 SPI 与 DMA 配合使用、以将数据传输到 UCAxTXBUF。 我遇到的问题是数据与时钟失去同步。 它似乎也不会进入 DMA ISR。 在 SPI 方面、我使用具有1.54Mhz 位时钟的 UCA3总线来实现连续的16位数据流。 我不确定我的行为是什么(甚至 MSP430FR5994也可以这么做)。 我已经附上了如何配置 SPI 和 DMA 寄存器的代码。
// UCA3设置: //主设备 // 4引脚 SPI // 8个数据位 //时钟源:SMCLK (24MHz) //位速率分频器:(用于1.536MHz) //无调制 // MSB 优先 //时钟相位- UCCKPL = 0、UCCKPH = 1 // MSB 优先 UCA3CTLW0 |= UCSWRST;//将状态机复位 UCA3CTLW0 |= UCCKPH | UCMSB | UCMST | UCMODE_1 | UCSYNC; UCA3CTLW0 &=~(UCCKPL); UCA3CTLW0 |= UCSSEL_SMCLK; UCA3BRW = 0x11;//时钟= 1.536Mhz 的缩放值 UCA3CTLW0 &=~UCSWRST; //DMA3初始化配置 char SPI_buffer[2]={0}; DMACTL1 |= DMA3TSEL_17;//根据 UCA3TXIFG 的触发器编号 DMA3CTL = DMADT_4 + DMADSTBYTE + DMASRCBYTE + DMAIE + DMAEN+DMASRCINCR_3+ DMADSTINCR_0; __data16_write_addr ((unsigned short)&DMA3SA、(unsigned long) SPI_buffer); __data16_write_addr ((无符号短整型)&DMA3DA、(无符号长整型)&UCA3TXBUF); DMA3SZ = 2;
这就是我要初始化传输的操作、我没有包含 ISR、因为它不相关。 我还注意到、我无法在调试模式下使用断点进入 ISR。
//触发活动突发 UCA3IFG &=~(UCTXIFG); UCA3IFG |=(UCTXIFG); SPI_buffer[0]= 0x02; SPI_buffer[1]= 0x01; while (1) { IF (!(DMA3CTL 和 DMAEN)) { DMA3SZ = 2; DMA3CTL |= DMAEN; } IF (DMA3CTL 和 DMAIFG) { 温度= DMA3CTL; } }
感谢您的帮助!