This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430FR5994:16位 SPI 数据同步问题

Guru**** 2577385 points
Other Parts Discussed in Thread: MSP430FR5994

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/900209/ccs-msp430fr5994-16-bit-spi-data-sync-issues

器件型号:MSP430FR5994

工具/软件: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;
}

}

感谢您的帮助!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不太确定"数据与时钟失去同步"的含义。  您是否看到字节中错误的总线周期?

    您正在使用 UCSTEM=0的 UCMODE=1。

    1) 1) UCA3STE 引脚是如何连接/配置的? 此引脚上的活动可能导致主(您的)侧冻结。 [参考 UG (SLAU367O)第31.3.3.1节和表31-1]如果您不需要/CS、我建议 UCMODE=0。

    2)请参阅 Erratum USCI50是否适用[参考勘误表(SLAZ681M)第12页]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Bruce McKenney47378"]我不确定它意味着"数据与时钟失去同步"。  您是否看到字节中错误的总线周期?

    当我在逻辑分析仪上查看数据时、数据可能在一个实例上是正确的、但往往会偏离时钟。 这意味着在数据线上发送0x1会显示为0x10、0x80等  

    [引用用户="Bruce McKenney47378"]

    您正在使用 UCSTEM=0的 UCMODE=1。

    [/报价]

    我需要使用4线 SPI、因为我正在尝试将4线 SPI 转换为左对齐 I2S。 设置 UCSTEM = 1可完全停止输出。  

    我已参考此 TI 文档来解决此问题。  

    http://www.ti.com/lit/an/slaa449a/slaa449a.pdf

    非常感谢您的帮助!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    AppNote 似乎也使用 UCMODE=0。 他们似乎根本不关心/CS (/FS)。 我想 UCMODE=1将会妨碍您的工作。

    我不确定如何告诉您明显的位偏斜。 同步 SCLK 和 MOSI 几乎是 SPI 的任务#1。 您是否有可以发布的范围跟踪? 此外、您是否使用了图3中提到的 LRCLK 计数器(连接到 SCLK)?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    使用 UCMODE = 0似乎可以解决我的问题。 谢谢!