我正在尝试根据 off eusci_a_spi_ex1master.c 文件设置 SPI 主器件事务。 该文件显示了如何启用 SPI RX 中断、但它也会检查 TX 中断是否已被明确启用。 Tx 中断是如何工作的? 我不理解如何设置 SPI RX ISR。 RX ISR 在第五个事务之后触发、 我可以获得一个要停止的断点。 但是、
RXData = EUSCI_A_SPI_receiveData (EUSCI_A1_BASE);显示 RXData 的值为0。 我手头没有示波器、我不明白为什么数据没有显示?
谢谢、
Priya
/*
*初始化 EUSCI A1上的 SPI 外设
*
空 init_spi_peripheral()
{
//初始化主设备
EUSCI_A_SPI_initMasterParam param ={0};
param.selectClockSource = EUSCI_A_SPI_CLOCKSOURCE_SMCLK;
param.clockSourceFrequency = CS_getSMCLK();
param.desiredSpiClock = 1000000;
param.msbFirst = UCMSB;
param.clockPhase = UCCKPH;
param.clockPolarity = 0;
param.spiMode = EUSCI_A_SPI_3引脚;
EUSCI_A_SPI_initMaster (EUSCI_A1_base、¶m);
EUSCI_A_SPI_ENABLE (EUSCI_A1_BASE);
}
void CheckUSCI_A1_TxReady (void){
//USCI_A1 TX 缓冲器准备好了吗?
while (!eUSCI_A_SPI_getInterruptStatus (eUSCI_A1_base、
EUSCI_A_SPI_Transmit 中断);
}
void MaximUARTDaisyChainInitStart (void){
daisyChainInit = 1;
//USCI_A1 TX 缓冲器准备好了吗?
CheckUSCI_A1_TxReady ();
//向从器件发送数据
对于(I = 0;I < 2;I++)
eUSCI_A_SPI_transmitData (eUSCI_A1_base、DCInit_transaction1[i]);
TXData++;
CheckUSCI_A1_TxReady ();
//启用 Rx 中断标志
对于(I = 0;I < 2;I++)
eUSCI_A_SPI_transmitData (eUSCI_A1_base、DCInit_transaction2[i]);
TXData++;
CheckUSCI_A1_TxReady ();
//清除接收缓冲区
eUSCI_A_SPI_transmitData (eUSCI_A1_base、DCInit_transaction3);
TXData++;
CheckUSCI_A1_TxReady ();
//唤醒 UART 从设备
对于(I = 0;I < 2;I++)
eUSCI_A_SPI_transmitData (eUSCI_A1_base、DCInit_transaction4[i]);
TXData++;
CheckUSCI_A1_TxReady ();
//等待所有 UART 从设备唤醒
eUSCI_A_SPI_transmitData (eUSCI_A1_base、DCInit_transaction5);
}
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
init_gpio();//设置 IO 引脚
init_clock();//将系统时钟设置为16MHz (在 MSP430上)
//设置外设现在已设置 GPIO 和时钟
init_spi_peripheral();// Init Maxim SPI 外围设备
//清除接收中断标志
EUSCI_A_SPI_clearInterrupt (EUSCI_A1_base、
EUSCI_A_SPI_Receive_interrupt
);
//启用 USCI_A1 RX 中断
EUSCI_A_SPI_enableInterrupt (EUSCI_A1_BASE、
EUSCI_A_SPI_Receive_interrupt);
//等待从器件初始化
_DELAY_CYCLES (100);
TXData = 0x1;//保留 TX 数据
MaximUART菊花 链 InitStart();
_bis_SR_register (LPM0_bits + GIE);// CPU 关闭、启用中断
_NO_OPERATION ();//保持在 LPM0中
返回0;
}
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=USCI_A1_vector
_interrupt
#Elif defined (_GNU_)
__attribute__((中断(USCI_A1_vector))
#endif
空 USCI_A1_ISR (空)
{
IF (USCI_SPI_UCRXIFG){
RXData = EUSCI_A_SPI_receiveData (EUSCI_A1_BASE);
if (daisyChainInit = 1 &&(TXData = 0x5)){
if (RXData = 0x21){
TXData++;
}
}
//从机处理信息的传输之间的延迟
_DELAY_CYCLES (40);
}
}
PS:我知道接收器可与评估板交易的评估 GUI 配合使用。 这是关于 MSP430 SPI 的问题、我没有正确关闭。