工具/软件:Code Composer Studio
大家好,我是微处理器MSP430的新用户。 我正在尝试使用SPI协议与闪存M25P40通信。 我n´t UCB1TXBUF寄存器发送数据,但我没有收到任何数据。
#include <MSP4S.h>
unsigned char MST_Data, SLV_Data;
内部主(无效)
{
易失性无符号int I;
WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器
IF (CALBC1_1MHz=0xFF)// If calibration constant erased
{
while (1);//不加载,捕获CPU!!
}
DCOCTL = 0;//选择最低DCOx和MODx设置
BCSCTL1 = CALC1_1MHz;//设置DCO
DCOCTL = CALDCO_1MHz;
对于(i=2100;i>0;i--);//等待DCO稳定。
P1OUT = 0x00;// P1 LED设置
P1DIR |= 0x01;//
P3OUT = 0x20;//设置从属复位- WFP 3.5
P3DIR |= 0x20;//
P5SEL |= 0x0E;// WFP 5.1 ,2,3 USI_B1选项选择
UCB1CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC;// 3引脚,8位SPI主控
UCB1CTL1 |= UCSSEL_2;// SMCLK
UCB1BR0 |= 0x02;// BRCLK = SMCLK/2
UCB1BR1 = 0;//
UCB1CTL1 &=~UCSWRST;//**初始化USCI状态机**
UC1IE |= UCB1RXIE;//启用USCI1 RX中断
P3OUT &=~0x20;//重置从机- RST -活动低电平
P3OUT |= 0x20;//现已初始化SPI信号,
对于(i = 50;i > 0;i --);//等待从属设备初始化
MST_Data = 0x01;//初始化数据值
SLV_Data = 0x00;
UCB1TXBUF = MST_Data;// Tx (01)和Rx (00)-第一个字符
__bis_sr_register(LPM0_bits + GIE);// CPU关闭,启用中断
}
//测试有效的RX和TX字符
#if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__)
#pragma vector=USCIAB1RX_vector
__interrupt void USCIB1RX_ISR(void)
#Elif已定义(__GMNU__)
void __attribute__((interrupt (USBIAB1RX_vector))) USBIB1RX_ISR (void)
#否则
错误编译器不受支持!
#endif
{
易失性无符号int I;
同时(!(UC1IFG和UCB1TXIFG);// USI_B1 TX缓冲器就绪?
IF (UCB1RXBUF == SLV_Data)//测试正确的RX字符
P1OUT |= 0x01;//如果正确,则指示灯亮起
否则
P1OUT &=~0x01;//如果不正确,请清除LED
MST_Data++;//递增主值
SLV_Data+;//增加预期的从属值
UCB1TXBUF = MST_Data;//发送下一个值(Tx和Rx)
对于(I = 1万;I;I--);//将传输之间的时间添加到
}//确保从属设备可以保持连接