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.
您好!
这是完整的代码吗? 您是进入 LPM 模式还是保持在激活模式? 如果您进入 LPM3、SMCLK 可能会被关闭。 在中
下面的代码示例应该适用于 UCA0、P2.4和 P2.5、它只通过进入 LPM0来打开 CPU。 这可能是您错过的东西。
根据 Init、假设 UCMODE_0 =代表0x00真正进入3引脚模式、我不会看到一个大问题。 也许您可以在 TX 缓冲区被填满后发布寄存器设置(调试视图寄存器)。
#include
unsigned char MST_Data、SLV_Data;
int 计数器;
int main (空)
{
volatile unsigned int i;
WDTCTL = WDTPW+WDTHOLD; //停止看门狗计时器
FLL_CTL0 |= XCAP11PF; //配置负载电容
//等待 xtal 稳定
操作
{
IFG1 &=~OFIFG; //清除 OSCFault 标志
对于(I = 0x47FF;I > 0;I-); //设置标志的时间
}
while ((IFG1 & OFIFG)); // OSCFault 标志仍然置1?
for (i=2100;i>0;i--); //现在具有稳定的 ACLK,请等待
// DCO 稳定。
P5OUT = BIT2; //针对 LED 和从器件复位的 P5设置
P5DIR |= BIT1+BIT2; //
P2SEL |= BIT4+BIT5;
P3SEL |= BIT0;
UCA0CTL0 |= UCMST+UCSYNC+UCCKPL+UCMSB; //3引脚、8位 SPI 主器件
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 0x0F; ///2
UCA0BR1 = 0; //
UCA0MCTL = 0; //无调制
UCA0CTL1 &=~UCSWRST; //**初始化 USCI 状态机**
IE2 |= UCA0RXIE; //启用 USCI_A0 RX 中断
P5OUT &=~BIT2; //现在 SPI 信号已初始化、
P5OUT |= BIT2; //复位从器件
for (i=5000;i>0;i--); //等待从设备初始化
MST_Data = 0x001; //初始化数据值
SLV_Data = 0x000; //
UCA0TXBUF = MST_Data; //发送第一个字符
_bis_SR_register (LPM0_bits + GIE); // CPU 关闭、启用中断
}
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=USCIAB0RX_vector
_interrupt void USCIA0RX_ISR (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (USCIAB0RX_vector)) USCIA0RX_ISR (void)
其他
错误编译器不受支持!
#endif
{
volatile unsigned int i;
while (!(IFG2 & UCA0TXIFG)); // USART1 TX 缓冲器准备就绪?
if (UCA0RXBUF==SLV_Data) //测试正确的字符 RXd
P5OUT |= BIT1; //如果正确,亮起 LED
其他
P5OUT &=~BIT1; //如果不正确,请清除 LED
MST_Data++; //递增数据
SLV_Data++;
UCA0TXBUF = MST_Data; //发送下一个值
for (i=30;i>0;i--); //将传输之间的时间添加到
}