📄 main.c.bak
字号:
//----------------------------------------------------------------------------
// Demo Application for MSP430/CC1100-2500 Interface Code Library v1.0
//
// K. Quiring
// Texas Instruments, Inc.
// July 2006
// IAR Embedded Workbench v3.41
//08年7月29日,弄了Lpm3中断响应,TI_CC_RF_FREQ 2400还是只能接收一次,
//TI_CC_RF_FREQ 弄了Lpm3中断响应401还是能接收多次,不能保证每时都收到东西
//7月30日-wor状态成功,没有弄状态转换
//----------------------------------------------------------------------------
#include "include.h"
unsigned char temperature; //整数温度
#define _TRANSMITTER
//#define _SWOR
void CCxxx0ExitWorMode(void);
void CCxxx0EnWorMode(void);
extern char paTable[]; //功率能量
extern char paTableLen;
char txBuffer1[] = {0x08,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08}; //第一个字节是发送的数据长度,第二个字节是地址
char txBuffer2[] = {0x08,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01}; //第一个字节是发送的数据长度,第二个字节是地址
static char rxBuffer[8];
char next;
unsigned int i;
void main (void)
{
char j = 0;
char len1; //Len of pkt to be RXed (only addr
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
TI_CC_GDO0_PxDIR &= ~TI_CC_GDO0_PIN; //设GDOO为输入状
BCSCTL1 = CALBC1_1MHZ; // Set DCO after random function
DCOCTL = CALDCO_1MHZ;
P2SEL &=0x00;
IFG1 &= ~OFIFG;
TI_CC_Wait(30);
TI_CC_SPISetup(); // Initialize SPI port -modify-
TI_CC_PowerupResetCCxxxx(); // Reset CCxxxx,TI_CC_SPI.c
writeRFSettings(); // Write RF settings to config reg
//设置功率
TI_CC_SPIWriteBurstReg(TI_CCxxx0_PATABLE, paTable, paTableLen);//Write PATABLE memory locations:TI_CCxxx0_PATABLE=0x3f
TI_CC_GDO0_PxDIR &= ~TI_CC_GDO0_PIN; //设置GDO0为输入;
TI_CC_GDO0_PxSEL &= ~TI_CC_GDO0_PIN; //设置P2.6脚为I/O端口;
TI_CC_GDO0_PxIES |= TI_CC_GDO0_PIN; //下降沿触发中断;
TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; // 清除中断标志;
TI_CC_GDO0_PxIE |= TI_CC_GDO0_PIN; // 使能中断总允许;
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); ////设置芯片为空闲状态;
TI_CC_SPIStrobe(TI_CCxxx0_SPWD); ////设置芯片为sleep状态;
//TI_CC_LED_PxDIR = TI_CC_LED1 + TI_CC_LED2; //设定输出状态
#ifdef _RECEIVER
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
TI_CC_SPIStrobe(TI_CCxxx0_SRX); // Initialize CCxxxx in RX mode.
#endif
//如果接收到数据,则激活MCU // When a pkt is received, it will
// signal on GDO0 and wake CPU
//_BIS_SR(LPM3_bits + GIE); //省电模式 Enter LPM3, enable interrupts
#ifdef _SWOR
CCxxx0EnWorMode();
#endif /* _SWOR */
//TI_CC_LED_PxDIR &= ~TI_CC_SW1;
while(1)
{
// Len of pkt to be RXed (only addr
// plus data; size byte not incl b/c
#ifdef _TRANSMITTER
//for(len1=0;len1<50;len1++)
if(j)
{
TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
RFSendPacket(txBuffer1, 9); // Send value over RF
//TI_CC_Wait(30000);
TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
RFSendPacket(txBuffer1, 9); // Send value over RF
// TI_CC_Wait(30000);
TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
RFSendPacket(txBuffer1, 9); // Send value over RF
// TI_CC_Wait(30000);
// TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
j = 0;
}
else
{
RFSendPacket(txBuffer2, 9); // Send value over RF
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
RFSendPacket(txBuffer2, 9); // Send value over RF
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
RFSendPacket(txBuffer2, 9); // Send value over RF
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
RFSendPacket(txBuffer2, 9); // Send value over RF
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
RFSendPacket(txBuffer2, 9); // Send value over RF
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
j = 1;
}
TI_CC_SPIStrobe(TI_CCxxx0_SFRX);//不能和RFReceivePacket()分得太远
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
TI_CC_SPIStrobe(TI_CCxxx0_SRX);//后面的延时比较难调
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000); //要调的延时
TI_CC_Wait(30000);
_BIS_SR(LPM3_bits + GIE);
#endif
#ifdef _SWOR
if (RFReceivePacket(rxBuffer,&len1)) // Fetch packet from CCxxxx
j++;//;
TI_CC_Wait(30000); //要调的延时
TI_CC_Wait(30000); //要调的延时
TI_CC_Wait(30000); //要调的延时
_BIS_SR(LPM3_bits + GIE);
#endif
}
}
// The ISR assumes the int came from the pin attached to GDO0 and therefore
// does not check the other seven inputs. Interprets this as a signal from
// CCxxxx indicating packet received.
//#ifdef _RECEIVER
#pragma vector=PORT2_VECTOR
__interrupt void port2_ISR (void)
{
// disEnable interrupts
char len; // Len of pkt to be RXed (only addr
// plus data; size byte not incl b/c
next++; // stripped away within RX function)
////CCxxx0ExitWorMode();
//TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
//TI_CC_SPIStrobe(TI_CCxxx0_SRX);//后面的延时比较难调
TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN; // Clear flag 在这里才能在调试状态下不断进入中断
if (RFReceivePacket(rxBuffer,&len)) // Fetch packet from CCxxxx
// Toggle LEDs according to pkt data
TI_CC_SPIStrobe(TI_CCxxx0_SFRX);//不能和RFReceivePacket()分得太远
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
TI_CC_SPIStrobe(TI_CCxxx0_SRX);//后面的延时比较难调
TI_CC_Wait(30000); //要调的延时
TI_CC_Wait(30000); //要调的延时
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
#ifdef _SWOR
TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
RFSendPacket(txBuffer1, 9);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
RFSendPacket(txBuffer1, 9);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
RFSendPacket(txBuffer1, 9);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_SPIStrobe(TI_CCxxx0_SFTX);
RFSendPacket(txBuffer1, 9);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
#endif
////CCxxx0EnWorMode();
//_BIC_SR_IRQ(LPM3_bits);
//_DINT();
}
//#endif
void CCxxx0EnWorMode(void)
{
// Set Event0 timeout = 300 ms (RX polling interval)
// WOR_RES = 0
// T_event0 = 750 / f_xosc * EVENT0 * 2^(5*WOR_RES) = 300 ms // Assuming f_xosc = 27 MHz
// => EVENT0 = 10800 = 0x28A0 TI_CCxxx0_WOREVT1
TI_CC_SPIWriteReg(TI_CCxxx0_WOREVT1,0x28 ); // WOR High byte Event Timeout. 0x32
TI_CC_SPIWriteReg(TI_CCxxx0_WOREVT0, 0xa0); // WOR Low byte Event Timeout. 0xC8
// Enable automatic initial calibration of RCosc.
// Set T_event1 ~ 345 us, enough for XOSC stabilize before starting calibration.
// Enable RC oscillator before starting with WOR (or else it will not wake up).
// Not using AUTO_SYNC function.
TI_CC_SPIWriteReg(TI_CCxxx0_WORCTRL, 0x38); // WOR control 电磁波激活控制0x79
// Setting Rx_timeout < 0.5 %.
// => MCSM2.RX_TIME = 101b
// => Rx_timeout = (EVENT0 * 0.1127) = (10800 * 0.1127) = 1.172 ms, i.e. 0.391% RX duty cycle
TI_CC_SPIWriteReg(TI_CCxxx0_MCSM2,0x00); // 主通道控制状态机配置
TI_CC_SPIWriteReg(TI_CCxxx0_MCSM1,0x30); //设置读取包后进入IDLE态
//TI_CC_SPIWriteReg(TI_CCxxx0_MCSM0,0x18); //主通道控制状态机配置calibrate when going from IDLE to RX
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
TI_CC_SPIStrobe(TI_CCxxx0_SWORRST); // Initialize CCxxxx WOR Timer.
TI_CC_SPIStrobe(TI_CCxxx0_SWOR); // Start automatic RX polling sequence
}
//************************************************************************************
//Returns : None
//Parameters : None
//Purpose : void CCxxx0ExitWorMode(void)
// CC2500 退出WOR模式 要配置这些些寄存器
//功能描述:退出CCxxx0电磁波激活模式
//注意事项:None
//************************************************************************************
void CCxxx0ExitWorMode(void)
{
TI_CC_SPIWriteReg(TI_CCxxx0_MCSM2,0x07);
//RX_TIME[2:0]=111 ,无工作暂停
TI_CC_SPIWriteReg(TI_CCxxx0_MCSM1,0x30);
//CCA_MODE[5:4]=11,RXOFF_MODE[3:2]=00 , TXOFF_MODE[1:0]=00
// TI_CC_SPIWriteReg(TI_CCxxx0_MCSM0,0x18);
//Enable automatic FS calibration when going from IDLE to RX/TX/FSTXON
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -