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.

[参考译文] MSP430F6779A:TRF7970A 通过 SPI 与 msp430f6779a 相集成

Guru**** 2457760 points
Other Parts Discussed in Thread: MSP430F6779A, TRF7970A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1445397/msp430f6779a-trf7970a-integration-with-msp430f6779a-through-spi

器件型号:MSP430F6779A
主题中讨论的其他器件: TRF7970AMSP430WARE

工具与软件:

尊敬的 TI 社区:

我正在尝试通过 SPI 协议将 TRF7970A 与 msp430f6779a 集成到 NFC 应用中、我正在使用 driverlib 来设置 SPI、从而生成低于我所使用设置的4MHz 时钟频率  

void SPI_setup(void)
{	
    GPIO_setAsPeripheralModuleFunctionOutputPin(SPI_PORT, SPI_CLK | SPI_MOSI | SPI_MISO);

    //Initialize Master
    EUSCI_A_SPI_initMasterParam param = {0};
    param.selectClockSource = EUSCI_A_SPI_CLOCKSOURCE_SMCLK;
//    param.clockSourceFrequency = UCS_getMCLK();
    param.clockSourceFrequency = 25165824;
    param.desiredSpiClock = SPI_CLK_FREQ;
    param.msbFirst = EUSCI_A_SPI_MSB_FIRST;
    param.clockPhase = EUSCI_A_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT;
    param.clockPolarity = EUSCI_A_SPI_CLOCKPOLARITY_INACTIVITY_LOW;
    param.spiMode = EUSCI_A_SPI_3PIN;
    EUSCI_A_SPI_initMaster(EUSCI_A3_BASE, &param);

    //Enable SPI module
    EUSCI_A_SPI_enable(EUSCI_A3_BASE);

    EUSCI_A_SPI_clearInterrupt(EUSCI_A3_BASE,
            EUSCI_A_SPI_RECEIVE_INTERRUPT);

    EUSCI_A_SPI_enable(EUSCI_A3_BASE);

}

在通过 SPI 发送和接收字节时、使用以下功能:

void SPI_SendByte(uint8_t data){

//    TODO=======================================================
//    while (!(EUSCI_A_SPI_getInterruptStatus(EUSCI_A3_BASE, EUSCI_A_SPI_TRANSMIT_INTERRUPT)));
//        EUSCI_A_SPI_transmitData(EUSCI_A3_BASE,data);
//    ==========================================================
   SLAVE_SELECT_LOW;

    EUSCI_A_SPI_transmitData(EUSCI_A3_BASE, data);
//    UCA3TXBUF = data;
 //   while (UCA3STATW & UCBUSY);
  SLAVE_SELECT_HIGH;
}

uint8_t SPI_ReceiveByte(){

   SLAVE_SELECT_LOW;
//    UCA3TXBUF = 0x00;
 //       while (UCA3STATW & UCBUSY);

//	UCB0TXBUF = 0x00;
//	while (UCB0STAT & UCBUSY);
 //   return UCB0RXBUF;
    return EUSCI_A_SPI_receiveData(EUSCI_A3_BASE);
   SLAVE_SELECT_HIGH;

//        return UCA3RXBUF;

}

SPI 时钟没有生成、下面是逻辑分析仪的屏幕截图。

我已将代码移植自以下参考文献:

https://www.ti.com/product/TRF7970A#software-development

 我非常感谢大家提出更好的建议。  

谢谢。此致

Vishal Tyagi

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

    您好、 

    对于 SPI 通信、最好写入一个读取字节的字节来清除 SPI 接收寄存器。

    对于从外设读取、需要发送一个字节来启用 SPI 控制器的 SCLK。

    ---

    能否将 SPI 寄存器与此文件夹中的演示进行比较? 以验证项目的初始化代码。

    C:\ti\MSP\MSP\MSP430Ware_3_80_14_01\examples\devices\MSP430F5xx_6xx\MSP430F677x (1) A_MSP430F676x (1) A_MSP430F674x (1) A_MSP430F674x\C Code_Examples

    此处有寄存器 SPI 示例: msp430f677xA_uscia0_spi_09.c

    此致、

    Helic