主题中讨论的其他器件: TRF7970A、 MSP430WARE
工具与软件:
尊敬的 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, ¶m);
//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