📄 main.c
字号:
#include "msp430x22x4.h"
//此程序是USCIA0的SPI模式中断方式的主机程序
//首先按下图连接好导线,在启动主机程序前先启动从机程序
//然后再启动主机程序,主机程序以中断的方式将每次收到的数据存入0400开始的ram中
//在将收中断的(i=0;)指令处设置断点,当程序运行到此处时观察0400-0500的ram数据
// MSP430F2274 MSP430F2274
// master slavor
// ----------------- -----------------
// /|\| XIN|- -|XIN |/|\
// | | | | | |
// --|RST XOUT|- -|XOUT RST|--
// | | | |
// | P1.0|-->LED LED<--| |
// | p3.0UCA0CLK |------------------->|P3.0 |
// | p3.4UCA0SIMO|------------------->|p3.4UCA0SIMO |
// | P3.5UCA0SOMI|<-------------------|P3.5UCA0SOMI |
// | DVSS|--------------------|DVSS |
__no_init char rec_data[256] @ 0x0400;
char send_data=1;
int main( void )
{
unsigned int n;
WDTCTL=WDTPW+WDTHOLD; //关看门狗
BCSCTL1 =CALBC1_1MHZ; //设定DCO为1MHZ
DCOCTL =CALBC1_1MHZ;
do{ //等待晶振稳定
IFG1 &=~OFIFG;
for(n=5000;n>0;n--);
}while(OFIFG&IFG1);
P1DIR |=BIT0; //LED使能
P3SEL |=BIT0+BIT4+BIT5; //p3.4为TX,P3.5为RX,P3.0为UCA0CLK
P3DIR |=BIT4; //P3.4为输出方向
UCA0CTL1 |=UCSSEL0; //时钟源选择32768晶振
UCA0CTL0 |=UCMST+UCSYNC+UCCKPL+UCMSB; //spi主机模式,spi通讯,时钟极性选为高电平无效,选择最高有效位先发
UCA0BR1=0; //32768/1200=27.3
UCA0BR0=27;
UCA0MCTL=0;
UCA0CTL1 &=~UCSWRST; //进入SPI工作模式
IE2 |= UCA0RXIE; //使能spi接收中断
_BIS_SR(GIE); //使能总中断
UCA0TXBUF=send_data; //主机首先发一帧,其收到的第一个数据不确定
_BIS_SR(LPM3_bits); //进入低功耗3
return 0;
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void rx_isr(void)
{
static unsigned int i=0;
rec_data[i]=UCA0RXBUF; //将收到的数据放入0x0400开始的ram地址
i++;
if(i==256) //到了256个,再从头开始放
{
i=0;
}
while(!(UCA0TXIFG&IFG2)); //查询发送标志位
send_data++; //增1后发送
UCA0TXBUF=send_data;
P1OUT ^=BIT0; //LED翻转
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -