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.

[参考译文] DAC8775EVM:在MSP432和DAC8775EVM之间进行SPI通信时遇到问题

Guru**** 2538950 points
Other Parts Discussed in Thread: DAC8775EVM, DAC8775

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/600406/dac8775evm-trouble-in-making-spi-communication-between-msp432-and-dac8775evm

部件号:DAC8775EVM
主题中讨论的其他部件: DAC8775

您好,  

我正在使用 MSP-432P401R 来配置和使用DAC8775EVM板。 我在设备之间建立SPI通信时遇到了困难。  

我的SPI配置如下所示,

void DAC_SPI_Init(void){

eUSI_SPI_MasterConfig spiMasterConfig =
{
EUSCI_B_SPI_CLOCKSOURCE_SMCLK, // SMCLK时钟源
cs_getSMCLK(), //获取SMCLK频率
48万, // SPICLK = 48 KHz
EUSCI_A_SPI_MSB_FIRST, // MSB优先
EUSCI_A_SPI_PHASE DATA_Captured_ONFIRST_Changed_on_NEXT,//相位
EUSCI_A_SPI_CLOCKPOLARITY_INACILY_HIGH,//高极性
EUSCI_A_SPI_3引脚 // 3线SPI模式
};

GPIO_setAsPeripheralModuleFunctionOutputPin (GPIO端口P9,GPIO PIN7,GPIO主要模块功能);
GPIO_setAsPeripheralModuleFunctionInputPin (GPIO端口P9,GPIO PIN6,GPIO主要模块功能);
GPIO_setAsPeripheralModuleFunctionOutputPin (GPIO端口P9,GPIO _PIN5,GPIO主要模块功能);

GPIO_setAsOutputPin (GPIO端口P9,DAC_sync_PIN);


SPI_initMaster(EUSI_A3_base,&spiMasterConfig);

SPI_clearInterruptFlag (EUSCI_A3_BASE,EUSCI_A_SPI_Receive_interrupt);
SPI_enableModule(EUSI_A3_base);


} 

我的读写功能就在这里,

void dc_spi_writeData (uint8_t地址,uint16_t数据)
{
UINT8_t ui8Data;

布尔状态;
//准备和发送字节2
ui8Data =地址;
GPIO _setOutputLowOnPin (GPIO端口P9,GPIO _PIN4);
while (!SPI_getInterruptStatus (EUSCI_A3_BASE,
EUSCI_A_SPI_Transmit_Interrupt);

UCA3TXBUF = ui8Data;

//准备和发送字节1
ui8Data =(uint8_t)(data >> 8);
while (!SPI_getInterruptStatus (EUSCI_A3_BASE,
EUSCI_A_SPI_Transmit_Interrupt);
UCA3TXBUF = ui8Data;


//准备并发送字节0
ui8Data =(uint8_t)(数据和0xff);
while (!SPI_getInterruptStatus (EUSCI_A3_BASE,
EUSCI_A_SPI_Transmit_Interrupt);
UCA3TXBUF = ui8Data;


__DELAY周期(600);

GPIO _setOutputHighOnPin (GPIO_PORT_P9, GPIO _PIN4);

}

uint16_t DAC_SPI_ReadData (uint8_t地址)
{
静态uint8_t ui8Data = 0x00;

INT8_t RxAddress = 0x00;
uint16_t Rxdata = 0x0000;

uint16_t shift= 0x0000;


//发送读取命令
地址=地址| 0x80; ///发送命令字节2 GPIO _setOutputLowOnPin (GPIO端口P9,GPIO _PIN4); while (!SPI_getInterruptStatus (EUSCI_A3_BASE, EUSCI_A_SPI_Transmit_Interrupt); UCA3TXBUF =地址; ///发送命令字节1 while (!SPI_getInterruptStatus (EUSCI_A3_BASE, EUSCI_A_SPI_Transmit_Interrupt); UCA3TXBUF = 0x00; ///发送命令字节0 while (!SPI_getInterruptStatus (EUSCI_A3_BASE, EUSCI_A_SPI_Transmit_Interrupt); UCA3TXBUF = 0x00; __DELAY周期(600); GPIO _SETTOutputHighOnPin (GPIO端口P9,GPIO _PIN4); 延迟(100); ///发送NOP命令以接收数据 GPIO _setOutputLowOnPin (GPIO端口P9,GPIO _PIN4); //接收字节2 while (!SPI_getInterruptStatus (EUSCI_A3_BASE, EUSCI_A_SPI_Transmit_Interrupt); UCA3TXBUF = 0x00; //Rxdata =(uint16_t) UCA3RXBUF; RxAddress = SPI_receiveData(EUSSCI_A3_base); //接收字节1 while (!SPI_getInterruptStatus (EUSCI_A3_BASE, EUSCI_A_SPI_Transmit_Interrupt); UCA3TXBUF = 0x00; rxdata =(uint16_t)SPI_receiveData(EUSI_A3_base); Rxdata = Rxdata <8; //接收字节0 while (!SPI_getInterruptStatus (EUSCI_A3_BASE, EUSCI_A_SPI_Transmit_Interrupt); UCA3TXBUF = 0x00; Shift =(uint16_t)SPI_receiveData(EUSI_A3_base); Rxdata =(Rxdata和0xFF00)|移位; __DELAY周期(600); while (EUSCI_A_SPI_isBusy (EUSCI_A3_BASE)); GPIO_setOutputHighOnPin (GPIO端口P9,GPIO _PIN4); 返回Rxdata; }

根据 DAC8775EVM的数据表, 我知道必须有NOP操作命令(24位)才能使用寄存器数据对miso行进行时钟处理,我始终从miso行获得0x0000。  

尝试在CRO上封装miso行,并在NOP命令期间得到所有零(0x0万),并在发送24位读取命令时将一些随机位置于miso行中。

请告诉我我配置的正确性。

请务必为MSP432的DAC8775EVM提供简单SPI读/写功能的任何示例代码。

谢谢!  

 

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

    您好,

    遗憾的是,我不太精通与MSP432平台相关的API。 我建议您将该代码发布到MSP432支持论坛,以便进行代码审查,以确保该代码按您的期望执行。

    从DAC8775的角度来看,该器件预期在SCLK的下降边缘上锁定数据,并且可能与时钟极性0或1兼容。 因此,支持的传统定义SPI接口将是:

    • 时钟极性= 0,时钟相位= 1
    • 时钟极性= 1,时钟相位= 0

    如果使用第二个选项,请注意T4要求-同步下降边缘的第一个关键边缘的设置时间。 (最后一个时钟有一个类似的时间T5,用于同步上升沿)。

    否则,该设备支持高达25MHz的SPI时钟速率。 在这些速度下,我希望MSP432 SPI外设不会出现满足设置和保持时间要求的问题。

    如果您想从硬件角度进行调试,最好在这些事务期间提供SPI线路的示波器捕获,以确保从MPS432实现正确的输出。

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

    您好Kevin,

    感谢您的及时反馈。 我在通信中找到了问题的原因。 我们发现,在连接DAC8775EVM的同时,当我在MSP430中重新启动固件时,SPI信号电压会下降到~Ω 1.2 V。 我尝试在MSP固件重新启动后重置DAC板,信号电压设置为3.3 V  

    当时钟和相位配置为 极性= 1,相位= 1,从而使我能够成功地读取/写入数据时的平均值。

    此致,

    Kevin  

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

    很高兴这家酒店被解决了 如果您有任何其他问题,请告知我们。

    谢谢。