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.

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

Guru**** 2560080 points
Other Parts Discussed in Thread: DAC8775EVM

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/600407/msp-exp432p401r-trouble-in-making-spi-communication-between-msp432-and-dac8775evm

器件型号:MSP-EXP432P401R

您好!  

我使用 MSP-432P401R 来配置和使用 DAC8775EVM 板。 我正在努力在器件之间建立 SPI 通信。  

我的 SPI 配置如下所示、

void DAC_SPI_Init (void){

eUSCI_SPI_MasterConfig spiMasterConfig =
{
EUSCI_B_SPI_CLOCKSOURCE_SMCLK、 // SMCLK 时钟源
CS_getSMCLK()、 //获取 SMCLK 频率
480000、 // SPICLK = 48KHz
EUSCI_A_SPI_MSB_FIRST、 // MSB 优先
EUSCI_A_SPI_PHASE_DATA_Captured_ONFIRST_Changed_ON_NEXT、//相位
EUSCI_A_SPI_CLOCKPOLARITY_INACT_HIGH、//高极性
EUSCI_A_SPI_3引脚 // 3线 SPI 模式
};

GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P9、GPIO_PIN7、GPIO_PRIMARY_MODULE_Function);
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P9、GPIO_PIN6、GPIO_PRIMARY_MODULE_Function);
GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P9、GPIO_PIN5、GPIO_PRIMARY_MODULE_Function);

GPIO_setAsOutputPin (GPIO_PORT_P9、DAC_SYNC_PIN);


SPI_initMaster (EUSCI_A3_base、&spiMasterConfig);

SPI_clearInterruptFlag (EUSCI_A3_base、EUSCI_A_SPI_Receive_interrupt);
SPI_enableModule (EUSCI_A3_base);


} 

我的写入和读取函数在这里、

void DAC_SPI_writeData (uint8_t 地址、uint16_t 数据)
{
uint8_t ui8Data;

bool 状态;
//准备并发送字节2
ui8Data =地址;
GPIO_setOutputLowOnPin (GPIO_PORT_P9、GPIO_PIN4);
while (!SPI_getInterruptStatus (EUSCI_A3_base、
EUSCI_A_SPI_Transmit 中断);

UCA3TXBUF = ui8Data;

//准备并发送字节1
ui8Data =(uint8_t)(数据>> 8);
while (!SPI_getInterruptStatus (EUSCI_A3_base、
EUSCI_A_SPI_Transmit 中断);
UCA3TXBUF = ui8Data;


//准备并发送字节0
ui8Data =(uint8_t)(data & 0xff);
while (!SPI_getInterruptStatus (EUSCI_A3_base、
EUSCI_A_SPI_Transmit 中断);
UCA3TXBUF = ui8Data;


_DELAY_CYCLES (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_PORT_P9、GPIO_PIN4); while (!SPI_getInterruptStatus (EUSCI_A3_base、 EUSCI_A_SPI_Transmit 中断); UCA3TXBUF =地址; ///发送命令字节1 while (!SPI_getInterruptStatus (EUSCI_A3_base、 EUSCI_A_SPI_Transmit 中断); UCA3TXBUF = 0x00; //发送命令字节0 while (!SPI_getInterruptStatus (EUSCI_A3_base、 EUSCI_A_SPI_Transmit 中断); UCA3TXBUF = 0x00; _DELAY_CYCLES (600); GPIO_setOutputHighOnPin (GPIO_PORT_P9、GPIO_PIN4); 延迟(100); ///发送 NOP 命令以接收数据 GPIO_setOutputLowOnPin (GPIO_PORT_P9、GPIO_PIN4); //接收字节2 while (!SPI_getInterruptStatus (EUSCI_A3_base、 EUSCI_A_SPI_Transmit 中断); UCA3TXBUF = 0x00; //Rxdata =(uint16_t) UCA3RXBUF; RxAddress = SPI_receiveData (EUSCI_A3_base); //接收字节1 while (!SPI_getInterruptStatus (EUSCI_A3_base、 EUSCI_A_SPI_Transmit 中断); UCA3TXBUF = 0x00; Rxdata =(uint16_t) SPI_receiveData (EUSCI_A3_base); Rxdata = Rxdata << 8; //接收字节0 while (!SPI_getInterruptStatus (EUSCI_A3_base、 EUSCI_A_SPI_Transmit 中断); UCA3TXBUF = 0x00; shift =(uint16_t) SPI_receiveData (EUSCI_A3_base); Rxdata =(Rxdata & 0xFF00)|移位; _DELAY_CYCLES (600); while (EUSCI_A_SPI_isBusy (EUSCI_A3_base)); GPIO_setOutputHighOnPin (GPIO_PORT_P9、GPIO_PIN4); 返回 Rxdata; }

根据 DAC8775EVM 的数据表 、我知道必须有一个 NOP 操作命令(24位)来使用寄存器数据时钟输出 MISO 线路、我始终从 MISO 线路获得0x0000。  

在发送24位读取命令时、尝试将 MISO 行粘贴到 CRO 上、并在 NOP 命令期间获得所有零(0x000000)、并在 MISO 行中添加一些随机位。

请告知我配置的正确性。

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

谢谢、  

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我将尝试仔细观察、但我认为问题是、在接收函数中、while 是根据发送中断而不是接收中断进行预测的。 请注意、传输被缓冲、并且发送中断 IFG 意味着内容已从缓冲区移位至串行输出寄存器、而不是数据已被发送。 在有效数据可用之前、恐怕您正在读取 receiveData 寄存器。

    请告诉我这是否不清楚。

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

    您好 Chris、

    感谢您的及时反馈。 我在沟通中弄清楚了问题的原因。 当我在 MSP430中重新启动固件并连接 DAC8775EVM 时、发现 SPI 信号电压下降至~1.2V。 在 MSP 固件重新启动后、我尝试重置 DAC 板、信号电压设置为3.3V  

    此致、

    Kevin