📄 2012_cc2500_lpm4.c
字号:
//----------------------------------------------------------------------------
// 2012 发送接收程序
// 449 CC2500获取控制数据
// 449发送控制信号
//
// 2012接收 控制电机返回状态
// 449接收方接收
//
//----------------------------------------------------------------------------
#include "include.h"
extern char paTable[]; // 外部调用 paTable[] = {0x51}
extern char paTableLen; // 外部调用 paTableLen = 1
char txBuffer[5];
char rxBuffer[5],Speed,Stop = 8,lowpower = 8;
unsigned int i,Count = 0;
unsigned int rx_dianj9,adc_tx2 = 102; //16 Bit
unsigned int time_con = 0 ;
void delay(int x) // 5*x+12 nop
{ //128- 23 256-49
while(x--);
} //192- 36 280- 54 448- 87
void main (void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
// /***************
// DCOCTL = Init 60h
BCSCTL1 = XT2OFF+RSEL3; // f DCO IN 1.5MHz
CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = 50000;
CCTL1 = OUTMOD_3; // CCR1 set/reset
TACTL = TASSEL_2 + MC_1; // SMACLK, up mode
TI_CC_SPISetup(); // Initialize SPI port 初始化cc2500
TI_CC_PowerupResetCCxxxx(); // Reset CCxxxx
writeRFSettings(); // Write RF settings to config reg
TI_CC_SPIWriteBurstReg(TI_CCxxx0_PATABLE, paTable, paTableLen);//Write PATABLE
// 数据接口
TI_CC_GDO0_PxIES |= TI_CC_GDO0_PIN + BIT0; // Int on falling edge (end of pkt)
TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN + ~BIT0; // Clear flag
TI_CC_GDO0_PxIE |= TI_CC_GDO0_PIN + BIT0; // Enable int on end of packet
delay(300);
TI_CC_SPIStrobe(TI_CCxxx0_SPWD); // Enter power down mode when CSn goes high
// P1DIR |= 0X09;
P1OUT |= 0X09;
P1REN |= 0X09;
_NOP();
_BIS_SR(LPM4_bits + GIE); // Enter LPM4, enable interrupts
}
#pragma vector=PORT1_VECTOR
__interrupt void port1_ISR (void)
{
if (P1IFG & BIT0)
{
lowpower ^= 0x01;
if(lowpower == 9)
{
_BIC_SR_IRQ(LPM4_bits); // Exit LPM4
TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG2, 0x0B); // GDO2 output pin config.
TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG0, 0x25); // GDO0 output pin config.
TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG1, 0x2E); // GDO1 output pin config.
TI_CC_SPIWriteReg(TI_CCxxx0_WORCTRL, 0x30);
TI_CC_SPIStrobe(TI_CCxxx0_SWORRST); // Reset real time clock
TI_CC_SPIStrobe(TI_CCxxx0_SWOR); // Start automatic RX polling sequence (Wake-on-Radio) 3.2mA
txBuffer[0] = 3; // Packet length
txBuffer[1] = 0x01; // Packet address
txBuffer[2] = rx_dianj9;
txBuffer[3] = adc_tx2 ;
RFSendPacket(txBuffer, 4); // Send value over RF
TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; // Clear Flag
P1IFG &= ~BIT0; //Clear flag 清除中断标志位
}
else
{
P1IFG &= ~BIT0;
TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG2, 0x2F); // GDO2 output pin HW to 0
TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG1, 0x2F);
TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG0, 0x2F);
TI_CC_SPIStrobe(TI_CCxxx0_SPWD); // Enter power down mode when CSn goes high
_BIS_SR(LPM4_bits + GIE); // Enter LPM4, enable interrupts
}
}
TI_CC_SPIStrobe(TI_CCxxx0_SRX); //15mA ~
char len=4; // Len of pkt to be RXed (only addr
RFReceivePacket(rxBuffer,&len); // Fetch packet from CCxxxx
rx_dianj9 = 0;
Speed = rxBuffer[1];
rx_dianj9 = rxBuffer[2];
// TI_CC_SPIStrobe(TI_CCxxx0_SWOR);
switch(rx_dianj9)
{ case 80: // 暂停---》开始
Stop ^= 0x01;
if(Stop == 8)
CCTL1 = OUTMOD_3; // CCR1 set/reset mode
// TACTL = TASSEL_2 + ID_1 + MC_1; //SMCLK/2 up
CCTL0 = CCIE; // CCR0 interrupt enabled
break ;
case 20: //顺时针开始
P1SEL &=~0x04; // P1.2 TA option unable
P1DIR &=~0x04; // P1.2 TA option unable
P2IE = 0X00; // P2.6 interruput unable
P2DIR |= 0x40; // P2.6 output
P2SEL = 0x40; // P2.6 TA option
CCR1 = 49900-100*Speed;
TACTL = TASSEL_2 + ID_1 + MC_1; //SMCLK/2 Start
CCTL0 = CCIE; // CCR0 interrupt enabled
adc_tx2 = Speed ; //3顺时针完成
Count = 1; //
break;
case 40: //逆时针开始
P2SEL &=~0x40; // P2.6 TA option unable
P2DIR = 0x00; // P2.6 input
P1IE &= ~0X04; // P1.2 interruput unable
P1DIR |= 0x04; // P1.2 output
P1SEL |= 0x04; // P1.2 TA option
CCR1 = 49900-100*Speed;
TACTL = TASSEL_2 +ID_1 + MC_1; //SMCLK/2 Start
CCTL0 = CCIE; // CCR0 interrupt enabled
adc_tx2 = Speed; //5逆时针完成
Count = 1; //
break;
case 10: //未用****
Stop ^= 0x01;
if(Stop == 8)
CCTL1 = OUTMOD_3; // CCR1 set/reset mode
TACTL = TASSEL_2 + ID_1 + MC_1; //SMCLK/2 up
CCTL0 = CCIE; // CCR0 interrupt enabled
break ;
default :
TACTL = TASSEL_2 + ID_1 + MC_0; //SMCLK/2 Stop
P2SEL &=~0x40; // P2.6 TA option unable
P1SEL &=~0x04; // P1.2 TA option unable
P2DIR = 0x00; // P2.6 input
P1DIR &=~0x04; // P1.2 TA option unable
}
// P1OUT = 0X01;
// P1DIR |= 0x01;
TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; // Clear flag
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
time_con ++;
if(Stop == 9)
{
CCTL1 = OUTMOD_5; // CCR1 reset mode
TACTL = TASSEL_2 + ID_1 + MC_0; //SMCLK/2 Stop
CCTL0 &= ~CCIE; // CCR0 interrupt unabled
}
if(time_con >= Count)
{
if(time_con ==1)
CCTL0 &= ~CCIE; // CCR0 interrupt unabled
time_con = 0;
/********
txBuffer[0] = 3; // Packet length
txBuffer[1] = 0x01; // Packet address
txBuffer[2] = rx_dianj9;
txBuffer[3] = adc_tx2 ;
RFSendPacket(txBuffer, 4); // Send value over RF
TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; // Clear Flag
***********************/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -