?? main.c
字號:
//----------------------------------------------------------------------------
// 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"
//#define _TRANSMITTER
#define _RECEIVER
//#define _SWOR
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}; //第一個字節是發送的數據長度,第二個字節是地址
char rxBuffer[8];
char next,last,first,third,forth,fifth,n;
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_LED_PxDIR |= TI_CC_LED1 + TI_CC_LED2; //點亮LED1;
TI_CC_LED_PxOUT &= ~(TI_CC_LED1 + TI_CC_LED2);
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_SW_PxIES = TI_CC_SW3; //按鍵選擇下降沿觸發
TI_CC_SW_PxIFG &= ~(TI_CC_SW3); //清除按鍵中斷請求
TI_CC_SW_PxIE = TI_CC_SW3; //按鍵中斷使能
TI_CC_LED_PxDIR = TI_CC_LED1; //設定輸出狀態
#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
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
TI_CC_SPIStrobe(TI_CCxxx0_SWORRST); // Initialize CCxxxx WOR Timer.
TI_CC_SPIStrobe(TI_CCxxx0_SWOR); // Start off in WOR mode.
#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<500;len1++)
if(j)
{
/*TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);*/
RFSendPacket(txBuffer1, 9); // Send value over RF
TI_CC_LED_PxOUT |= TI_CC_LED2 + TI_CC_LED1;
TI_CC_Wait(60000);
RFSendPacket(txBuffer2, 9);
TI_CC_LED_PxOUT &= ~(TI_CC_LED2 + TI_CC_LED1);
TI_CC_Wait(60000);
RFSendPacket(txBuffer2, 9);
TI_CC_Wait(60000);
RFSendPacket(txBuffer2, 9);
TI_CC_Wait(60000);
j = 0;
}
else
{
/*TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);
TI_CC_Wait(30000);*/
RFSendPacket(txBuffer2, 9); // Send value over RF
TI_CC_LED_PxOUT |= TI_CC_LED2 + TI_CC_LED1;
TI_CC_Wait(60000);
RFSendPacket(txBuffer2, 9);
TI_CC_LED_PxOUT &= ~(TI_CC_LED2 + TI_CC_LED1);
TI_CC_Wait(60000);
RFSendPacket(txBuffer2, 9);
TI_CC_Wait(60000);
RFSendPacket(txBuffer2, 9);
TI_CC_Wait(60000);
j = 1;
}
if (RFReceivePacket(rxBuffer,&len1)) // 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(60000); //要調的延時
TI_CC_Wait(60000); //要調的延時
TI_CC_Wait(60000);
_BIS_SR(LPM3_bits + GIE);
#endif
#ifdef _RECEIVER
/* RFReceivePacket(rxBuffer,&len1);
TI_CC_Wait(30000);
//_BIS_SR(LPM3_bits + GIE);
*/
///TI_CC_Wait(30);
if (RFReceivePacket(rxBuffer,&len1)) // Fetch packet from CCxxxx
//next++;
// 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); //要調的延時
// _EINT(); // Enable interrupts
_BIS_SR(LPM0_bits + GIE);
#endif
#ifdef _SWOR
if (RFReceivePacket(rxBuffer,&len1)) // Fetch packet from CCxxxx
j++;//next++;
// Toggle LEDs according to pkt data
//TI_CC_SPIStrobe(TI_CCxxx0_SFRX);//不能和RFReceivePacket()分得太遠
//TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
// TI_CC_SPIStrobe(TI_CCxxx0_SWORRST); // Initialize CCxxxx WOR Timer.
//TI_CC_SPIStrobe(TI_CCxxx0_SWOR); //后面的延時比較難調
TI_CC_Wait(30000); //要調的延時
TI_CC_Wait(30000); //要調的延時
TI_CC_Wait(30000); //要調的延時
_BIS_SR(LPM3_bits + GIE);
#endif /* _SWOR */
///if (RFReceivePacket(rxBuffer,&len)) // Fetch packet from CCxxxx
/// TI_CC_LED_PxOUT ^= rxBuffer[1]; // Toggle LEDs according to pkt data
//for(j = 2;j >=0;j--)
// {rxBuffer[j] = 0;}*/
// txBuffer[0] = 0x02; // Packet length
// j = txBuffer[0];
// txBuffer[1] = 0x01; // Packet address
//j = txBuffer[1];
//txBuffer[2] = (~TI_CC_SW3) & 0x0F;// Load four switch inputs
// j = txBuffer[2];
}
/*
// Configure ports -- switch inputs, LEDs, GDO0 to RX packet info from CCxxxx
TI_CC_SW_PxIES = TI_CC_SW3;///+TI_CC_SW2+TI_CC_SW1+TI_CC_SW4;//Int on falling edge
TI_CC_SW_PxIFG &= ~(TI_CC_SW3//TI_CC_SW1+TI_CC_SW2++TI_CC_SW4//);//Clr flags
TI_CC_SW_PxIE = TI_CC_SW3;///+TI_CC_SW2+TI_CC_SW1+TI_CC_SW4;//Activate enables
TI_CC_LED_PxDIR = TI_CC_LED1 + TI_CC_LED2;/// + TI_CC_LED3 + TI_CC_LED4; //Outputs
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
TI_CC_SPIStrobe(TI_CCxxx0_SRX); // Initialize CCxxxx in RX mode.
// When a pkt is received, it will
// signal on GDO0 and wake CPU
////TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
////TI_CC_SPIStrobe(TI_CCxxx0_SPWD);
_BIS_SR(LPM3_bits + GIE);*/ // Enter LPM3, enable interrupts
}
// The ISR assumes the interrupt came from a press of one of the four buttons
// and therefore does not check the other four inputs.
/*#pragma vector=PORT1_VECTOR
__interrupt void port1_ISR (void)
{
// Build packet
TI_CC_LED_PxDIR |= TI_CC_LED2 ; //led green
txBuffer[0] = 2; // Packet length
txBuffer[1] = 0x01; // Packet address
txBuffer[2] = (~TI_CC_SW_PxIN >> 4) & 0x0F;// Load four switch inputs
TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); // 切到空閑狀態
RFSendPacket(txBuffer, 3); // Send value over RF
P1IFG &= ~(TI_CC_SW3 //TI_CC_SW1+TI_CC_SW2++TI_CC_SW4);//Clr flag that caused int
P2IFG &= ~TI_CC_GDO0_PIN; // After pkt TX, this flag is set.
} */ // Clear it.
// 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)
// Clear flag 在這里才能在調試狀態下不斷進入中斷
// TI_CC_SPIStrobe(TI_CCxxx0_SRX);//后面的延時比較難調
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(60000); //要調的延時
TI_CC_Wait(60000); //要調的延時
TI_CC_Wait(60000); //要調的延時
n=rxBuffer[7];
if(n==0x08)
// if(rxBuffer[1]==0x02)
{
first++;
TI_CC_LED_PxOUT ^= TI_CC_LED1;
TI_CC_Wait(30000); //要調的延時
TI_CC_Wait(30000); //要調的延時
}
else if (n==0x02)
{
last++;
TI_CC_LED_PxOUT ^= TI_CC_LED2;
TI_CC_Wait(30000); //要調的延時
TI_CC_Wait(30000); //要調的延時
}
else if (n== 0x03) third++;
else if(n== 0x04) forth++;
else if(n== 0x01)
{
fifth++;
TI_CC_LED_PxOUT ^= TI_CC_LED1;
TI_CC_Wait(30000); //要調的延時
TI_CC_Wait(30000); //要調的延時
}
P2IFG &= ~TI_CC_GDO0_PIN;
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -