main.c
上传用户:zhingjinbo
上传日期:2014-07-24
资源大小:32k
文件大小:5k
源码类别:

邮电通讯系统

开发平台:

Visual C++

  1. //----------------------------------------------------------------------------
  2. //  RF Lab
  3. //  ATC 2006
  4. //  Participant's Code
  5. //
  6. //  Presenter:  K. Quiring
  7. //  Texas Instruments, Inc.
  8. //  November 2006
  9. //  IAR Embedded Workbench v3.41
  10. //----------------------------------------------------------------------------
  11. #include "include.h"
  12. extern char paTable[];
  13. extern char paTableLen;
  14. char txBuffer[20];
  15. char rxBuffer[20];
  16. const unsigned int kTableCount=20;
  17. char kCrLn[2] = {0x0A, 0x0D};
  18. unsigned int i, address_bind;
  19. void main (void)
  20. {
  21.   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  22.   address_bind = 0;
  23.   // Wait for xtal to stabilize
  24.   do
  25.   {
  26.   IFG1 &= ~OFIFG;                           // Clear OSCFault flag
  27.   for (i = 0x47FF; i > 0; i--);             // Time for flag to set
  28.   }
  29.   while ((IFG1 & OFIFG));                   // OSCFault flag still set?
  30.   TI_CC_SPISetup();                         // Initialize SPI port
  31.   TI_CC_PowerupResetCCxxxx();               // Reset CCxxxx
  32.   writeRFSettings();                        // Write RF settings to config reg
  33.   TI_CC_SPIWriteBurstReg(TI_CCxxx0_PATABLE, paTable, paTableLen);//Write PATABLE
  34.   // Configure ports -- switch inputs, LEDs, GDO0 to RX packet info from CCxxxx
  35.   TI_CC_SW_PxIES = TI_CC_SW1;               // Int on falling edge
  36.   TI_CC_SW_PxIFG &= ~(TI_CC_SW1);           // Clr flags
  37.   TI_CC_SW_PxIE = TI_CC_SW1;                // Activate enables
  38.   TI_CC_GDO0_PxIES |= TI_CC_GDO0_PIN;       // Int on falling edge (end of pkt)
  39.   TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN;      // Clear flag
  40.   TI_CC_GDO0_PxIE |= TI_CC_GDO0_PIN;        // Enable int on end of packet
  41.   // *** PHASE 1 TEST CODE ***
  42.   // To test the SPI connection, uncomment this code and set a breakpoint to
  43.   // observe testBuffer after the burst read is executed.  The register settings
  44.   // should match the ones programmed in writeRFSettings().
  45.   char testBuffer[0x3A];
  46.   TI_CC_SPIReadBurstReg(TI_CCxxx0_IOCFG2, testBuffer, 0x3B);
  47.   _NOP();
  48.   halUARTSetup();
  49.   TI_CC_SPIStrobe(TI_CCxxx0_SRX);           // Initialize CCxxxx in RX mode.
  50.                                             // When a pkt is received, it will
  51.                                             // signal on GDO0 and wake CPU
  52.   _BIS_SR(LPM3_bits + GIE);                 // Enter LPM3, enable interrupts
  53. }
  54. // The ISR assumes the interrupt came from a press of one of the four buttons
  55. // and therefore does not check the other four inputs.
  56. #pragma vector=PORT1_VECTOR
  57. __interrupt void port1_ISR (void)
  58. {
  59.   unsigned int i;
  60.   const char kTableStr[] = "MSP430 TEST";
  61.   char len;
  62.   if(P1IFG&TI_CC_SW1)                       // If interrupt comes from switch
  63.   {
  64.     if (!address_bind)
  65.     {
  66.       txBuffer[0] = 7;
  67.       txBuffer[1] = 0x01;                     // Pkt address
  68.       txBuffer[2] = 0x35;
  69.       txBuffer[3] = 0xFF;
  70.       txBuffer[4] = 0xFF;
  71.       txBuffer[5] = 0xFF;
  72.       txBuffer[6] = 0x80;
  73.       txBuffer[7] = 0x35;
  74.       RFSendPacket(txBuffer, 8);             // Send Address Binding
  75.       address_bind = 1;
  76.       for (i=0; i<50000; i++);               // delay
  77.     }
  78.     // Build packet
  79.     txBuffer[0] = 19;                        // Pkt length (not inc. len byte)
  80.     txBuffer[1] = 0x01;                     // Pkt address
  81.     txBuffer[2] = 0x35;
  82.     txBuffer[3] = 0x12;
  83.     txBuffer[4] = 0x13;
  84.     txBuffer[5] = 0x14;
  85.     txBuffer[6] = 0x00;
  86.     for (i=0; i<11; i++)
  87.       txBuffer[i+7] = kTableStr[i];
  88.     txBuffer[18] = 0xA;
  89.     txBuffer[19] = 0xD;
  90.     RFSendPacket(txBuffer, 20);             // Send Data Packet
  91.     txBuffer[1] = 0x35;
  92.     RFSendPacket(txBuffer, 20);
  93.     for (i=0; i<50000; i++);               // delay
  94.     txBuffer[0] = 7;                        // Pkt length (not inc. len byte)
  95.     txBuffer[1] = 0x01;                     // Pkt address
  96.     txBuffer[2] = 0x35;
  97.     txBuffer[3] = 0x12;
  98.     txBuffer[4] = 0x13;
  99.     txBuffer[5] = 0x14;
  100.     txBuffer[6] = 0x20;
  101.     txBuffer[7] = 0x0A;
  102.     RFSendPacket(txBuffer, 8);             // Send Data Request
  103.   }
  104.   //else if(P1IFG&TI_CC_GDO0_PIN)             // If int comes from rx'ed packet
  105.   //{
  106.     if (RFReceivePacket(rxBuffer,&len))     // Fetch packet from CCxxxx
  107.     {
  108.        txBuffer[0] = 6;                        // Pkt length (not inc. len byte)
  109.        txBuffer[1] = 0x01;                     // Pkt address
  110.        txBuffer[2] = 0x35;
  111.        txBuffer[3] = 0x12;
  112.        txBuffer[4] = 0x13;
  113.        txBuffer[5] = 0x14;
  114.        txBuffer[6] = 0x40|*(rxBuffer+5);
  115.        RFSendPacket(txBuffer, 7);             // Send Ack
  116.        if (len > 6)
  117.        {
  118.         blastString(rxBuffer+6,len-6);
  119.         blastString(kCrLn,2);                 // Carriage return / new line
  120.        }
  121.     }
  122.   //}
  123.   P1IFG &= ~(TI_CC_SW1+TI_CC_GDO0_PIN);     // Clr flags set by switch and GDO0
  124. }