📄 main.c
字号:
#include "In430.h"
#include "include.h"
extern char paTable[];
extern char paTableLen;
char txBuffer[4];
int adc[2];//用来取出ADC转换结果
#define spiMode (1)
#define adcMode (0)
void init_SPI();
void init_ADC();
void init_sysCLK();
void init_timeA();
int get_ANGL_OUTX();
int get_ANGL_OUTY();
unsigned int i;
int data_x,data_y;//接受返回的ADIS的x,y通道采集的数据
int time_flag=0;
//char c,d,Tstart,Tend,TFIFO,pkt;
void main (void)
{
WDTCTL = WDTPW + WDTHOLD;
init_sysCLK();//初始化系统时钟,选择XT2为时钟源,2MHz
TI_CC_SPISetup();
TI_CC_PowerupResetCCxxxx();
writeRFSettings();
TI_CC_SPIWriteBurstReg(TI_CCxxx0_PATABLE, paTable, paTableLen);
TI_CC_GDO0_PxIES |= TI_CC_GDO0_PIN; // Int on falling edge (end of pkt)
TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; // Clear flag
TI_CC_GDO0_PxIE |= TI_CC_GDO0_PIN; // Enable int on end of packet
#if adcMode
init_ADC();
#endif
#if spiMode
init_SPI();
#endif
_EINT(); //开中断
txBuffer[0] = 3; // Packet length
txBuffer[1] = 0x02; // Packet address
txBuffer[2] = 0x00;
txBuffer[3] = 0x00;
//TI_CC_SPIWriteBurstReg(TI_CCxxx0_TXFIFO, txBuffer, 4);//写入数据
//Tstart=TI_CC_SPIReadStatus(TI_CCxxx0_TXBYTES)&0x7F;
//TI_CC_SPIStrobe(TI_CCxxx0_STX);//开始发送
//pkt=TI_CC_SPIReadStatus(TI_CCxxx0_PKTSTATUS);
//Tend=TI_CC_SPIReadStatus(TI_CCxxx0_TXBYTES)&0x7F;
while(1)
{
#if spiMode
if(time_flag)
{
time_flag=0;
data_x=get_ANGL_OUTX();
txBuffer[3]=(char)((data_x&0xFF00)>>8);
txBuffer[2]=(char)(data_x&0x00FF);
RFSendPacket(txBuffer,4);//发送采集的第一个ADIS通道x数据
data_y=get_ANGL_OUTY();
txBuffer[3]=(char)((data_y&0xFF00)>>8);
txBuffer[2]=(char)(data_y&0x00FF);
RFSendPacket(txBuffer,4);//发送采集的第二个ADIS通道y数据
}
#endif
#if adcMode
if(time_flag)
{
ADC12CTL0 |= ADC12SC;//开始转换
time_flag=0;
}
#endif
_BIS_SR(LPM3_bits + GIE);
}
}
void init_SPI()
{
P5SEL=0x0E;
P5DIR=0x0B;
U1CTL = CHAR+SYNC+MM+SWRST;
U1TCTL=CKPH+SSEL0+SSEL1+STC;
U1BR0=0x002;
U1BR1=0x000;
U1MCTL=0x000;
ME2=USPIE1;
U0CTL &=~ SWRST;
}
void init_sysCLK()
{
BCSCTL1 &= ~XT2OFF;
do
{
IFG1 &= ~OFIFG;
for(i=0xFF;i>0;i--);
}while((IFG1&OFIFG)!=0);
BCSCTL2=SELM1+SELS+DIVM_2+DIVS_1;//MCLK由XT2 4分频,SMCLK 2分频
}
void init_timeA()
{
TACTL=TASSEL1+ID1+ID0+MC0+TACLR;//MCLK时钟8分频,增计数模式
TACCTL0=CCIE;
TACCR0=5000;
}
void init_ADC()
{
P6SEL=0xC0;
ADC12CTL0 &=~ ENC;
ADC12CTL0=REFON+REF2_5V+ADC12ON;
ADC12CTL1=CSTARTADD_6+SHS_1+SHP+CONSEQ_1;
ADC12MEM6=SREF_1+INCH_6;
ADC12MEM7=SREF_1+INCH_7+EOS;
ADC12IE=0x80;//使能中断ADC12IFG.7
ADC12CTL0 |= ENC;
}
int get_ANGL_OUTX()
{
int angl_datax;
int angl_dataxh,angl_dataxl;
P5SEL &=~ BIT0;
P5DIR |= BIT0;
P5OUT &=~ BIT0;
IFG2&=~URXIFG1;
U1TXBUF=0x0E;//发送角度输出的地址
while(!(IFG2&URXIFG1));
IFG2&=~URXIFG1;
U1TXBUF=0x0E;
while(!(IFG2&URXIFG1));
IFG2&=~URXIFG1;
U1TXBUF=0x0E; //伪写获得高8位角度数据
while(!(IFG2&URXIFG1));
IFG2&=~URXIFG1;
angl_dataxh=U1RXBUF;
U1TXBUF=0x0E; //伪写获得低8位角度数据
while(!(IFG2&URXIFG1));
IFG2&=~URXIFG1;
angl_dataxl=U1RXBUF;
P5OUT |= BIT0;
angl_datax=((angl_dataxh<<8)&0xFF00)+angl_dataxl;
return angl_datax;
}
int get_ANGL_OUTY()
{
int angl_datay;
int angl_datayh,angl_datayl;
P3SEL &=~ BIT7;
P3DIR |= BIT7;
P3OUT &=~ BIT7;
IFG2&=~URXIFG1;
U1TXBUF=0x0E;//发送角度输出的地址
while(!(IFG2&URXIFG1));
IFG2&=~URXIFG1;
U1TXBUF=0x0E;
while(!(IFG2&URXIFG1));
IFG2&=~URXIFG1;
U1TXBUF=0x0E; //伪写获得高8位角度数据
while(!(IFG2&URXIFG1));
IFG2&=~URXIFG1;
angl_datayh=U1RXBUF;
U1TXBUF=0x0E; //伪写获得低8位角度数据
while(!(IFG2&URXIFG1));
IFG2&=~URXIFG1;
angl_datayl=U1RXBUF;
P3OUT |= BIT7;
angl_datay=((angl_datayh<<8)&0xFF00)+angl_datayl;
return angl_datay;
}
#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA(void)
{
time_flag = 1;
//清除定时器A的中断标志
}
#pragma vector=ADC_VECTOR
__interrupt void adc_ISR (void)
{
adc[0]=ADC12MEM6;//清除AD转换中断标志
adc[1]=ADC12MEM7;
txBuffer[3]=(char)((adc[0]&0x0F00)>>8);
txBuffer[2]=(char)(adc[0]&0xFF);
RFSendPacket(txBuffer,4);//发送采集到的AD转换第6通道数据
txBuffer[3]=(char)((adc[1]&0x0F00)>>8);
txBuffer[2]=(char)(adc[1]&0xFF);
RFSendPacket(txBuffer,4);//发送采集到的AD转换第7通道数据
}
#pragma vector=PORT2_VECTOR
__interrupt void port2_ISR (void)
{
P2IFG &=~ TI_CC_GDO0_PIN;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -