您好!
我将 msp430fr4133 launchpad 用作主控模式、将另一个 msp430fr4133控制器板用作从控模式。
我只需将数据从主器件发送到从器件、然后监控回传数据。
我只想在 LCD 上显示接收到的数据。 但我没有得到任何结果。
请提供任何帮助。 我的代码在这里。
**** 主控器件*******
#include
#include "global.h"
unsigned char RXData = 0;
unsigned char TXData;
int main (空)
{
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
P5SEL0 |= BIT0 | BIT1 | BIT2 | BIT3; //将4-SPI 引脚设置为第二个功能
UCB0CTLW0 |= UCSWRST; //**将状态机置于重置中**
UCB0CTLW0 |= UCMST|UCSYNC|UCCKPL|UCMSB|UCMODE_1_UCSTEM; // 4引脚、8位 SPI 主器件
//时钟极性高,MSB
UCB0CTLW0 |= UCSSEL_SMCLK; //选择 SMCLK
UCB0BR0 = 0x01; ///2、fBitClock = fBRCLK/(UCBRx+1)。
UCB0BR1 = 0;
// UCA0MCTLW = 0; //无调制
UCB0CTLW0 &=~UCSWRST; //**初始化 USCI 状态机**
UCB0IE |= UCRXIE; //启用 USCI_A0 RX 中断
TXData = 0x01; //保留 TX 数据
PM5CTL0 &=~LOCKLPM5;//禁用 GPIO 上电默认高阻抗模式
//激活先前配置的端口设置
while (1)
{
UCB0IE |= UCTXIE; //启用 TX 中断
_bis_SR_register (LPM0_bits | GIE); //启用全局中断,进入 LPM0
_DELAY_CYCLES (2000); //下次传输前延迟
TXData++; //递增发送数据
//__delay_cycles (20000);
}
}
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=USCI_B0_vector
_interrupt void USCI_B0_ISR (void)
#Elif defined (_GNU_)
void __attribute__((中断(USCI_B0_vector)) USCI_B0_ISR (void)
其他
错误编译器不受支持!
#endif
{
开关(__evo_in_range (UCB0IV、USCI_SPI_UCTXIFG))
{
USCI_NONE 案例:中断; //向量0 -无中断
USCI_SPI_UCRXIFG 案例:
RXData = UCB0RXBUF;
UCB0IFG &=~UCRXIFG;
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//唤醒以设置下一个 TX
LCDDataOut (RXData、pos1); //在 LCD 上显示接收数据
中断;
USCI_SPI_UCTXIFG 案例:
UCB0TXBUF = TXData; //发送字符
UCB0IE &=~UCTXIE;
中断;
默认值:break;
}
}
(三 从属方********
#include
int main (空)
{
WDTCTL = WDTPW|WDTHOLD; //停止看门狗计时器
P5SEL0 |= BIT0 | BIT1 | BIT2 | BIT3; //将4-SPI 引脚设置为第二个功能
UCB0CTLW0 |= UCSWRST; //**将状态机置于重置中**
UCB0CTLW0 |= UCSYNC|UCCKPL|UCMSB|UCMODE_1|UCSTEM; // 4引脚、8位 SPI 从器件
//时钟极性高,MSB
UCB0CTLW0 |= UCSSEL_SMCLK; //选择 SMCLK
UCB0BR0 = 0x01; ///2、fBitClock = fBRCLK/(UCBRx+1)。
UCB0BR1 = 0;
// UCB0MCTLW = 0;//无调制
UCB0CTLW0 &=~UCSWRST; //**初始化 USCI 状态机**
UCB0IE |= UCRXIE; //启用 USCI_A0 RX 中断
PM5CTL0 &=~LOCKLPM5; //禁用 GPIO 上电默认高阻抗模式
//激活先前配置的端口设置
_bis_SR_register (LPM0_bits | GIE); //输入 LPM0,启用中断
}
#pragma vector=USCI_B0_vector
_interrupt void USCI_B0_ISR (void)
{
while (!(UCB0IFG&UCTXIFG)); // USCI_A0 TX 缓冲器就绪?
UCB0TXBUF = UCB0RXBUF; //回显接收到的数据
}