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

邮电通讯系统

开发平台:

Visual C++

  1. //----------------------------------------------------------------------------
  2. //  Description:  This file contains functions that configure the CC1100/2500
  3. //  device.
  4. //
  5. //  Demo Application for MSP430/CC1100-2500 Interface Code Library v1.0
  6. //
  7. //  K. Quiring
  8. //  Texas Instruments, Inc.
  9. //  July 2006
  10. //  IAR Embedded Workbench v3.41
  11. //----------------------------------------------------------------------------
  12. #include "include.h"
  13. #include "TI_CC_CC1100-CC2500.h"
  14. #define TI_CC_RF_FREQ  2400  // 315, 433, 450, 868, 915, 2400
  15. //-------------------------------------------------------------------------------------------------------
  16. //  void writeRFSettings(void)
  17. //
  18. //  DESCRIPTION:
  19. //  Used to configure the CCxxxx registers.  There are five instances of this
  20. //  function, one for each available carrier frequency.  The instance compiled
  21. //  is chosen according to the system variable TI_CC_RF_FREQ, assigned within
  22. //  the header file "TI_CC_hardware_board.h".
  23. //
  24. //  ARGUMENTS:
  25. //      none
  26. //-------------------------------------------------------------------------------------------------------
  27. #if TI_CC_RF_FREQ == 315                          // 315 MHz
  28. // Product = CC1100
  29. // Crystal accuracy = 40 ppm
  30. // X-tal frequency = 26 MHz
  31. // RF output power = 0 dBm
  32. // RX filterbandwidth = 540.000000 kHz
  33. // Deviation = 0.000000
  34. // Return state:  Return to RX state upon leaving either TX or RX
  35. // Datarate = 250.000000 kbps
  36. // Modulation = (7) MSK
  37. // Manchester enable = (0) Manchester disabled
  38. // RF Frequency = 315.000000 MHz
  39. // Channel spacing = 199.951172 kHz
  40. // Channel number = 0
  41. // Optimization = Sensitivity
  42. // Sync mode = (3) 30/32 sync word bits detected
  43. // Format of RX/TX data = (0) Normal mode, use FIFOs for RX and TX
  44. // CRC operation = (1) CRC calculation in TX and CRC check in RX enabled
  45. // Forward Error Correction = (0) FEC disabled
  46. // Length configuration = (1) Variable length packets, packet length configured by the first received byte after sync word.
  47. // Packetlength = 255
  48. // Preamble count = (2)  4 bytes
  49. // Append status = 1
  50. // Address check = (1)  address check
  51. // FIFO autoflush = 0
  52. // Device address = 1
  53. // GDO0 signal selection = ( 6) Asserts when sync word has been sent / received, and de-asserts at the end of the packet
  54. // GDO2 signal selection = (11) Serial Clock
  55. void writeRFSettings(void)
  56. {
  57.     // Write register settings
  58.     TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG2,   0x0B); // GDO2 output pin config.
  59.     TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG0,   0x06); // GDO0 output pin config.
  60.     TI_CC_SPIWriteReg(TI_CCxxx0_PKTLEN,   0xFF); // Packet length.
  61.     TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL1, 0x05); // Packet automation control.
  62.     TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL0, 0x05); // Packet automation control.
  63.     TI_CC_SPIWriteReg(TI_CCxxx0_ADDR,     0x01); // Device address.
  64.     TI_CC_SPIWriteReg(TI_CCxxx0_CHANNR,   0x00); // Channel number.
  65.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL1,  0x0B); // Freq synthesizer control.
  66.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL0,  0x00); // Freq synthesizer control.
  67.     TI_CC_SPIWriteReg(TI_CCxxx0_FREQ2,    0x0C); // Freq control word, high byte
  68.     TI_CC_SPIWriteReg(TI_CCxxx0_FREQ1,    0x1D); // Freq control word, mid byte.
  69.     TI_CC_SPIWriteReg(TI_CCxxx0_FREQ0,    0x89); // Freq control word, low byte.
  70.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG4,  0x2D); // Modem configuration.
  71.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG3,  0x3B); // Modem configuration.
  72.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG2,  0x73); // Modem configuration.
  73.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG1,  0x22); // Modem configuration.
  74.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG0,  0xF8); // Modem configuration.
  75.     TI_CC_SPIWriteReg(TI_CCxxx0_DEVIATN,  0x00); // Modem dev (when FSK mod en)
  76.     TI_CC_SPIWriteReg(TI_CCxxx0_MCSM1 ,   0x3F); //MainRadio Cntrl State Machine
  77.     TI_CC_SPIWriteReg(TI_CCxxx0_MCSM0 ,   0x18); //MainRadio Cntrl State Machine
  78.     TI_CC_SPIWriteReg(TI_CCxxx0_FOCCFG,   0x1D); // Freq Offset Compense. Config
  79.     TI_CC_SPIWriteReg(TI_CCxxx0_BSCFG,    0x1C); //  Bit synchronization config.
  80.     TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL2, 0xC7); // AGC control.
  81.     TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL1, 0x00); // AGC control.
  82.     TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL0, 0xB2); // AGC control.
  83.     TI_CC_SPIWriteReg(TI_CCxxx0_FREND1,   0xB6); // Front end RX configuration.
  84.     TI_CC_SPIWriteReg(TI_CCxxx0_FREND0,   0x10); // Front end RX configuration.
  85.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL3,   0xEA); // Frequency synthesizer cal.
  86.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL2,   0x0A); // Frequency synthesizer cal.
  87.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL1,   0x00); // Frequency synthesizer cal.
  88.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL0,   0x11); // Frequency synthesizer cal.
  89.     TI_CC_SPIWriteReg(TI_CCxxx0_FSTEST,   0x59); // Frequency synthesizer cal.
  90.     TI_CC_SPIWriteReg(TI_CCxxx0_TEST2,    0x88); // Various test settings.
  91.     TI_CC_SPIWriteReg(TI_CCxxx0_TEST1,    0x31); // Various test settings.
  92.     TI_CC_SPIWriteReg(TI_CCxxx0_TEST0,    0x0B); // Various test settings.
  93. }
  94. // PATABLE (0 dBm output power)
  95. extern char paTable[] = {0x51};
  96. extern char paTableLen = 1;
  97. #endif
  98. #if TI_CC_RF_FREQ == 433                          // 433 MHz
  99. // Product = CC1100
  100. // Crystal accuracy = 40 ppm
  101. // X-tal frequency = 26 MHz
  102. // RF output power = 0 dBm
  103. // RX filterbandwidth = 540.000000 kHz
  104. // Deviation = 0.000000
  105. // Return state:  Return to RX state upon leaving either TX or RX
  106. // Datarate = 250.000000 kbps
  107. // Modulation = (7) MSK
  108. // Manchester enable = (0) Manchester disabled
  109. // RF Frequency = 433.000000 MHz
  110. // Channel spacing = 199.951172 kHz
  111. // Channel number = 0
  112. // Optimization = Sensitivity
  113. // Sync mode = (3) 30/32 sync word bits detected
  114. // Format of RX/TX data = (0) Normal mode, use FIFOs for RX and TX
  115. // CRC operation = (1) CRC calculation in TX and CRC check in RX enabled
  116. // Forward Error Correction = (0) FEC disabled
  117. // Length configuration = (1) Variable length packets, packet length configured by the first received byte after sync word.
  118. // Packetlength = 255
  119. // Preamble count = (2)  4 bytes
  120. // Append status = 1
  121. // Address check = (0) No address check
  122. // FIFO autoflush = 0
  123. // Device address = 0
  124. // GDO0 signal selection = ( 6) Asserts when sync word has been sent / received, and de-asserts at the end of the packet
  125. // GDO2 signal selection = (11) Serial Clock
  126. void writeRFSettings(void)
  127. {
  128.     // Write register settings
  129.     TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG2,   0x0B); // GDO2 output pin config.
  130.     TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG0,   0x06); // GDO0 output pin config.
  131.     TI_CC_SPIWriteReg(TI_CCxxx0_PKTLEN,   0xFF); // Packet length.
  132.     TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL1, 0x05); // Packet automation control.
  133.     TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL0, 0x05); // Packet automation control.
  134.     TI_CC_SPIWriteReg(TI_CCxxx0_ADDR,     0x01); // Device address.
  135.     TI_CC_SPIWriteReg(TI_CCxxx0_CHANNR,   0x00); // Channel number.
  136.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL1,  0x0B); // Freq synthesizer control.
  137.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL0,  0x00); // Freq synthesizer control.
  138.     TI_CC_SPIWriteReg(TI_CCxxx0_FREQ2,    0x10); // Freq control word, high byte
  139.     TI_CC_SPIWriteReg(TI_CCxxx0_FREQ1,    0xA7); // Freq control word, mid byte.
  140.     TI_CC_SPIWriteReg(TI_CCxxx0_FREQ0,    0x62); // Freq control word, low byte.
  141.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG4,  0x2D); // Modem configuration.
  142.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG3,  0x3B); // Modem configuration.
  143.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG2,  0x73); // Modem configuration.
  144.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG1,  0x22); // Modem configuration.
  145.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG0,  0xF8); // Modem configuration.
  146.     TI_CC_SPIWriteReg(TI_CCxxx0_DEVIATN,  0x00); // Modem dev (when FSK mod en)
  147.     TI_CC_SPIWriteReg(TI_CCxxx0_MCSM1 ,   0x3F); //MainRadio Cntrl State Machine
  148.     TI_CC_SPIWriteReg(TI_CCxxx0_MCSM0 ,   0x18); //MainRadio Cntrl State Machine
  149.     TI_CC_SPIWriteReg(TI_CCxxx0_FOCCFG,   0x1D); // Freq Offset Compens. Config
  150.     TI_CC_SPIWriteReg(TI_CCxxx0_BSCFG,    0x1C); //  Bit synchronization config.
  151.     TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL2, 0xC7); // AGC control.
  152.     TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL1, 0x00); // AGC control.
  153.     TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL0, 0xB2); // AGC control.
  154.     TI_CC_SPIWriteReg(TI_CCxxx0_FREND1,   0xB6); // Front end RX configuration.
  155.     TI_CC_SPIWriteReg(TI_CCxxx0_FREND0,   0x10); // Front end RX configuration.
  156.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL3,   0xEA); // Frequency synthesizer cal.
  157.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL2,   0x0A); // Frequency synthesizer cal.
  158.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL1,   0x00); // Frequency synthesizer cal.
  159.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL0,   0x11); // Frequency synthesizer cal.
  160.     TI_CC_SPIWriteReg(TI_CCxxx0_FSTEST,   0x59); // Frequency synthesizer cal.
  161.     TI_CC_SPIWriteReg(TI_CCxxx0_TEST2,    0x88); // Various test settings.
  162.     TI_CC_SPIWriteReg(TI_CCxxx0_TEST1,    0x31); // Various test settings.
  163.     TI_CC_SPIWriteReg(TI_CCxxx0_TEST0,    0x0B); // Various test settings.
  164. }
  165. // PATABLE (0 dBm output power)
  166. extern char paTable[] = {0x51};
  167. extern char paTableLen = 1;
  168. #endif
  169. #if TI_CC_RF_FREQ == 450                          // 450 MHz
  170. // Product = CC1100
  171. // Crystal accuracy = 40 ppm
  172. // X-tal frequency = 26 MHz
  173. // RF output power = 0 dBm
  174. // RX filterbandwidth = 540.000000 kHz
  175. // Deviation = 0.000000
  176. // Return state:  Return to RX state upon leaving either TX or RX
  177. // Datarate = 250.000000 kbps
  178. // Modulation = (7) MSK
  179. // Manchester enable = (0) Manchester disabled
  180. // RF Frequency = 450.000000 MHz
  181. // Channel spacing = 199.951172 kHz
  182. // Channel number = 0
  183. // Optimization = Sensitivity
  184. // Sync mode = (3) 30/32 sync word bits detected
  185. // Format of RX/TX data = (0) Normal mode, use FIFOs for RX and TX
  186. // CRC operation = (1) CRC calculation in TX and CRC check in RX enabled
  187. // Forward Error Correction = (0) FEC disabled
  188. // Length configuration = (1) Variable length packets, packet length configured by the first received byte after sync word.
  189. // Packetlength = 255
  190. // Preamble count = (2)  4 bytes
  191. // Append status = 1
  192. // Address check = (0) No address check
  193. // FIFO autoflush = 0
  194. // Device address = 0
  195. // GDO0 signal selection = ( 6) Asserts when sync word has been sent / received, and de-asserts at the end of the packet
  196. // GDO2 signal selection = (11) Serial Clock
  197. void writeRFSettings(void)
  198. {
  199.     // Write register settings
  200.     TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG2,   0x0B); // GDO2 output pin config.
  201.     TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG0,   0x06); // GDO0 output pin config.
  202.     TI_CC_SPIWriteReg(TI_CCxxx0_PKTLEN,   0xFF); // Packet length.
  203.     TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL1, 0x05); // Packet automation control.
  204.     TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL0, 0x05); // Packet automation control.
  205.     TI_CC_SPIWriteReg(TI_CCxxx0_ADDR,     0x01); // Device address.
  206.     TI_CC_SPIWriteReg(TI_CCxxx0_CHANNR,   0x00); // Channel number.
  207.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL1,  0x0B); // Freq synthesizer control.
  208.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL0,  0x00); // Freq synthesizer control.
  209.     TI_CC_SPIWriteReg(TI_CCxxx0_FREQ2,    0x11); // Freq control word, high byte
  210.     TI_CC_SPIWriteReg(TI_CCxxx0_FREQ1,    0x4E); // Freq control word, mid byte.
  211.     TI_CC_SPIWriteReg(TI_CCxxx0_FREQ0,    0xC4); // Freq control word, low byte.
  212.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG4,  0x2D); // Modem configuration.
  213.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG3,  0x3B); // Modem configuration.
  214.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG2,  0x73); // Modem configuration.
  215.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG1,  0x22); // Modem configuration.
  216.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG0,  0xF8); // Modem configuration.
  217.     TI_CC_SPIWriteReg(TI_CCxxx0_DEVIATN,  0x00); // Modem dev (when FSK mod en)
  218.     TI_CC_SPIWriteReg(TI_CCxxx0_MCSM1 ,   0x3F); //MainRadio Cntrl State Machine
  219.     TI_CC_SPIWriteReg(TI_CCxxx0_MCSM0 ,   0x18); //MainRadio Cntrl State Machine
  220.     TI_CC_SPIWriteReg(TI_CCxxx0_FOCCFG,   0x1D); // Freq Offset Compens. Config
  221.     TI_CC_SPIWriteReg(TI_CCxxx0_BSCFG,    0x1C); //  Bit synchronization config.
  222.     TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL2, 0xC7); // AGC control.
  223.     TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL1, 0x00); // AGC control.
  224.     TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL0, 0xB2); // AGC control.
  225.     TI_CC_SPIWriteReg(TI_CCxxx0_FREND1,   0xB6); // Front end RX configuration.
  226.     TI_CC_SPIWriteReg(TI_CCxxx0_FREND0,   0x10); // Front end RX configuration.
  227.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL3,   0xEA); // Frequency synthesizer cal.
  228.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL2,   0x0A); // Frequency synthesizer cal.
  229.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL1,   0x00); // Frequency synthesizer cal.
  230.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL0,   0x11); // Frequency synthesizer cal.
  231.     TI_CC_SPIWriteReg(TI_CCxxx0_FSTEST,   0x59); // Frequency synthesizer cal.
  232.     TI_CC_SPIWriteReg(TI_CCxxx0_TEST2,    0x88); // Various test settings.
  233.     TI_CC_SPIWriteReg(TI_CCxxx0_TEST1,    0x31); // Various test settings.
  234.     TI_CC_SPIWriteReg(TI_CCxxx0_TEST0,    0x0B); // Various test settings.
  235. }
  236. // PATABLE (0 dBm output power)
  237. extern char paTable[] = {0x51};
  238. extern char paTableLen = 1;
  239. #endif
  240. #if TI_CC_RF_FREQ == 868                          // 868 MHz
  241. // Product = CC1100
  242. // Crystal accuracy = 40 ppm
  243. // X-tal frequency = 26 MHz
  244. // RF output power = 0 dBm
  245. // RX filterbandwidth = 540.000000 kHz
  246. // Deviation = 0.000000
  247. // Return state:  Return to RX state upon leaving either TX or RX
  248. // Datarate = 250.000000 kbps
  249. // Modulation = (7) MSK
  250. // Manchester enable = (0) Manchester disabled
  251. // RF Frequency = 868.000000 MHz
  252. // Channel spacing = 199.951172 kHz
  253. // Channel number = 0
  254. // Optimization = Sensitivity
  255. // Sync mode = (3) 30/32 sync word bits detected
  256. // Format of RX/TX data = (0) Normal mode, use FIFOs for RX and TX
  257. // CRC operation = (1) CRC calculation in TX and CRC check in RX enabled
  258. // Forward Error Correction = (0) FEC disabled
  259. // Length configuration = (1) Variable length packets, packet length configured by the first received byte after sync word.
  260. // Packetlength = 255
  261. // Preamble count = (2)  4 bytes
  262. // Append status = 1
  263. // Address check = (0) No address check
  264. // FIFO autoflush = 0
  265. // Device address = 0
  266. // GDO0 signal selection = ( 6) Asserts when sync word has been sent / received, and de-asserts at the end of the packet
  267. // GDO2 signal selection = (11) Serial Clock
  268. void writeRFSettings(void)
  269. {
  270.     // Write register settings
  271.     TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG2,   0x0B); // GDO2 output pin config.
  272.     TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG0,   0x06); // GDO0 output pin config.
  273.     TI_CC_SPIWriteReg(TI_CCxxx0_PKTLEN,   0xFF); // Packet length.
  274.     TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL1, 0x05); // Packet automation control.
  275.     TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL0, 0x05); // Packet automation control.
  276.     TI_CC_SPIWriteReg(TI_CCxxx0_ADDR,     0x43); // Device address.
  277.     TI_CC_SPIWriteReg(TI_CCxxx0_CHANNR,   0x00); // Channel number.
  278.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL1,  0x0B); // Freq synthesizer control.
  279.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL0,  0x00); // Freq synthesizer control.
  280.     TI_CC_SPIWriteReg(TI_CCxxx0_FREQ2,    0x21); // Freq control word, high byte
  281.     TI_CC_SPIWriteReg(TI_CCxxx0_FREQ1,    0x62); // Freq control word, mid byte.
  282.     TI_CC_SPIWriteReg(TI_CCxxx0_FREQ0,    0x76); // Freq control word, low byte.
  283.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG4,  0x2D); // Modem configuration.
  284.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG3,  0x3B); // Modem configuration.
  285.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG2,  0x73); // Modem configuration.
  286.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG1,  0x22); // Modem configuration.
  287.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG0,  0xF8); // Modem configuration.
  288.     TI_CC_SPIWriteReg(TI_CCxxx0_DEVIATN,  0x00); // Modem dev (when FSK mod en)
  289.     TI_CC_SPIWriteReg(TI_CCxxx0_MCSM1 ,   0x3F); //MainRadio Cntrl State Machine
  290.     TI_CC_SPIWriteReg(TI_CCxxx0_MCSM0 ,   0x18); //MainRadio Cntrl State Machine
  291.     TI_CC_SPIWriteReg(TI_CCxxx0_FOCCFG,   0x1D); // Freq Offset Compens. Config
  292.     TI_CC_SPIWriteReg(TI_CCxxx0_BSCFG,    0x1C); //  Bit synchronization config.
  293.     TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL2, 0xC7); // AGC control.
  294.     TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL1, 0x00); // AGC control.
  295.     TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL0, 0xB2); // AGC control.
  296.     TI_CC_SPIWriteReg(TI_CCxxx0_FREND1,   0xB6); // Front end RX configuration.
  297.     TI_CC_SPIWriteReg(TI_CCxxx0_FREND0,   0x10); // Front end RX configuration.
  298.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL3,   0xEA); // Frequency synthesizer cal.
  299.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL2,   0x0A); // Frequency synthesizer cal.
  300.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL1,   0x00); // Frequency synthesizer cal.
  301.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL0,   0x11); // Frequency synthesizer cal.
  302.     TI_CC_SPIWriteReg(TI_CCxxx0_FSTEST,   0x59); // Frequency synthesizer cal.
  303.     TI_CC_SPIWriteReg(TI_CCxxx0_TEST2,    0x88); // Various test settings.
  304.     TI_CC_SPIWriteReg(TI_CCxxx0_TEST1,    0x31); // Various test settings.
  305.     TI_CC_SPIWriteReg(TI_CCxxx0_TEST0,    0x0B); // Various test settings.
  306. }
  307. // PATABLE (0 dBm output power)
  308. extern char paTable[] = {0x60};
  309. extern char paTableLen = 1;
  310. #endif
  311. #if TI_CC_RF_FREQ == 915                          // 915 MHz
  312. // Product = CC1100
  313. // Crystal accuracy = 40 ppm
  314. // X-tal frequency = 26 MHz
  315. // RF output power = 0 dBm
  316. // RX filterbandwidth = 540.000000 kHz
  317. // Deviation = 0.000000
  318. // Return state:  Return to RX state upon leaving either TX or RX
  319. // Datarate = 250.000000 kbps
  320. // Modulation = (7) MSK
  321. // Manchester enable = (0) Manchester disabled
  322. // RF Frequency = 915.000000 MHz
  323. // Channel spacing = 199.951172 kHz
  324. // Channel number = 0
  325. // Optimization = Sensitivity
  326. // Sync mode = (3) 30/32 sync word bits detected
  327. // Format of RX/TX data = (0) Normal mode, use FIFOs for RX and TX
  328. // CRC operation = (1) CRC calculation in TX and CRC check in RX enabled
  329. // Forward Error Correction = (0) FEC disabled
  330. // Length configuration = (1) Variable length packets, packet length configured by the first received byte after sync word.
  331. // Packetlength = 255
  332. // Preamble count = (2)  4 bytes
  333. // Append status = 1
  334. // Address check = (0) No address check
  335. // FIFO autoflush = 0
  336. // Device address = 0
  337. // GDO0 signal selection = ( 6) Asserts when sync word has been sent / received, and de-asserts at the end of the packet
  338. // GDO2 signal selection = (11) Serial Clock
  339. void writeRFSettings(void)
  340. {
  341.     // Write register settings
  342.     TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG2,   0x0B); // GDO2 output pin config.
  343.     TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG0,   0x06); // GDO0 output pin config.
  344.     TI_CC_SPIWriteReg(TI_CCxxx0_PKTLEN,   0xFF); // Packet length.
  345.     TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL1, 0x05); // Packet automation control.
  346.     TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL0, 0x05); // Packet automation control.
  347.     TI_CC_SPIWriteReg(TI_CCxxx0_ADDR,     0x01); // Device address.
  348.     TI_CC_SPIWriteReg(TI_CCxxx0_CHANNR,   0x00); // Channel number.
  349.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL1,  0x0B); // Freq synthesizer control.
  350.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL0,  0x00); // Freq synthesizer control.
  351.     TI_CC_SPIWriteReg(TI_CCxxx0_FREQ2,    0x23); // Freq control word, high byte
  352.     TI_CC_SPIWriteReg(TI_CCxxx0_FREQ1,    0x31); // Freq control word, mid byte.
  353.     TI_CC_SPIWriteReg(TI_CCxxx0_FREQ0,    0x3B); // Freq control word, low byte.
  354.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG4,  0x2D); // Modem configuration.
  355.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG3,  0x3B); // Modem configuration.
  356.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG2,  0x73); // Modem configuration.
  357.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG1,  0x22); // Modem configuration.
  358.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG0,  0xF8); // Modem configuration.
  359.     TI_CC_SPIWriteReg(TI_CCxxx0_DEVIATN,  0x00); // Modem dev (when FSK mod en)
  360.     TI_CC_SPIWriteReg(TI_CCxxx0_MCSM1 ,   0x3F); //MainRadio Cntrl State Machine
  361.     TI_CC_SPIWriteReg(TI_CCxxx0_MCSM0 ,   0x18); //MainRadio Cntrl State Machine
  362.     TI_CC_SPIWriteReg(TI_CCxxx0_FOCCFG,   0x1D); // Freq Offset Compens. Config
  363.     TI_CC_SPIWriteReg(TI_CCxxx0_BSCFG,    0x1C); //  Bit synchronization config.
  364.     TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL2, 0xC7); // AGC control.
  365.     TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL1, 0x00); // AGC control.
  366.     TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL0, 0xB2); // AGC control.
  367.     TI_CC_SPIWriteReg(TI_CCxxx0_FREND1,   0xB6); // Front end RX configuration.
  368.     TI_CC_SPIWriteReg(TI_CCxxx0_FREND0,   0x10); // Front end RX configuration.
  369.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL3,   0xEA); // Frequency synthesizer cal.
  370.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL2,   0x0A); // Frequency synthesizer cal.
  371.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL1,   0x00); // Frequency synthesizer cal.
  372.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL0,   0x11); // Frequency synthesizer cal.
  373.     TI_CC_SPIWriteReg(TI_CCxxx0_FSTEST,   0x59); // Frequency synthesizer cal.
  374.     TI_CC_SPIWriteReg(TI_CCxxx0_TEST2,    0x88); // Various test settings.
  375.     TI_CC_SPIWriteReg(TI_CCxxx0_TEST1,    0x31); // Various test settings.
  376.     TI_CC_SPIWriteReg(TI_CCxxx0_TEST0,    0x0B); // Various test settings.
  377. }
  378. // PATABLE (0 dBm output power)
  379. extern char paTable[] = {0x50};
  380. extern char paTableLen = 1;
  381. #endif
  382. #if TI_CC_RF_FREQ == 2400                          // 2.4GHz
  383. // Product = CC2500
  384. // Crystal accuracy = 40 ppm
  385. // X-tal frequency = 26 MHz
  386. // RF output power = 0 dBm
  387. // RX filterbandwidth = 540.000000 kHz
  388. // Deviation = 0.000000
  389. // Return state:  Return to RX state upon leaving either TX or RX
  390. // Datarate = 250.000000 kbps
  391. // Modulation = (7) MSK
  392. // Manchester enable = (0) Manchester disabled
  393. // RF Frequency = 2433.000000 MHz
  394. // Channel spacing = 199.950000 kHz
  395. // Channel number = 0
  396. // Optimization = Sensitivity
  397. // Sync mode = (3) 30/32 sync word bits detected
  398. // Format of RX/TX data = (0) Normal mode, use FIFOs for RX and TX
  399. // CRC operation = (1) CRC calculation in TX and CRC check in RX enabled
  400. // Forward Error Correction = (0) FEC disabled
  401. // Length configuration = (1) Variable length packets, packet length configured by the first received byte after sync word.
  402. // Packetlength = 255
  403. // Preamble count = (2)  4 bytes
  404. // Append status = 1
  405. // Address check = (0) No address check
  406. // FIFO autoflush = 0
  407. // Device address = 0
  408. // GDO0 signal selection = ( 6) Asserts when sync word has been sent / received, and de-asserts at the end of the packet
  409. // GDO2 signal selection = (11) Serial Clock
  410. void writeRFSettings(void)
  411. {
  412.     // Write register settings
  413.     TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG2,   0x0B);  // GDO2 output pin config.
  414.     TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG0,   0x06);  // GDO0 output pin config.
  415.     TI_CC_SPIWriteReg(TI_CCxxx0_PKTLEN,   0xFF);  // Packet length.
  416.     TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL1, 0x05);  // Packet automation control.
  417.     TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL0, 0x05);  // Packet automation control.
  418.     TI_CC_SPIWriteReg(TI_CCxxx0_ADDR,     0x35);  // Device address.
  419.     TI_CC_SPIWriteReg(TI_CCxxx0_CHANNR,   0x00); // Channel number.
  420.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL1,  0x07); // Freq synthesizer control.
  421.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL0,  0x00); // Freq synthesizer control.
  422.     TI_CC_SPIWriteReg(TI_CCxxx0_FREQ2,    0x5D); // Freq control word, high byte
  423.     TI_CC_SPIWriteReg(TI_CCxxx0_FREQ1,    0x93); // Freq control word, mid byte.
  424.     TI_CC_SPIWriteReg(TI_CCxxx0_FREQ0,    0xB1); // Freq control word, low byte.
  425.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG4,  0x2D); // Modem configuration.
  426.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG3,  0x3B); // Modem configuration.
  427.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG2,  0x73); // Modem configuration.
  428.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG1,  0x22); // Modem configuration.
  429.     TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG0,  0xF8); // Modem configuration.
  430.     TI_CC_SPIWriteReg(TI_CCxxx0_DEVIATN,  0x00); // Modem dev (when FSK mod en)
  431.     TI_CC_SPIWriteReg(TI_CCxxx0_MCSM1 ,   0x3F); //MainRadio Cntrl State Machine
  432.     TI_CC_SPIWriteReg(TI_CCxxx0_MCSM0 ,   0x18); //MainRadio Cntrl State Machine
  433.     TI_CC_SPIWriteReg(TI_CCxxx0_FOCCFG,   0x1D); // Freq Offset Compens. Config
  434.     TI_CC_SPIWriteReg(TI_CCxxx0_BSCFG,    0x1C); //  Bit synchronization config.
  435.     TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL2, 0xC7); // AGC control.
  436.     TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL1, 0x00); // AGC control.
  437.     TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL0, 0xB2); // AGC control.
  438.     TI_CC_SPIWriteReg(TI_CCxxx0_FREND1,   0xB6); // Front end RX configuration.
  439.     TI_CC_SPIWriteReg(TI_CCxxx0_FREND0,   0x10); // Front end RX configuration.
  440.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL3,   0xEA); // Frequency synthesizer cal.
  441.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL2,   0x0A); // Frequency synthesizer cal.
  442.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL1,   0x00); // Frequency synthesizer cal.
  443.     TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL0,   0x11); // Frequency synthesizer cal.
  444.     TI_CC_SPIWriteReg(TI_CCxxx0_FSTEST,   0x59); // Frequency synthesizer cal.
  445.     TI_CC_SPIWriteReg(TI_CCxxx0_TEST2,    0x88); // Various test settings.
  446.     TI_CC_SPIWriteReg(TI_CCxxx0_TEST1,    0x31); // Various test settings.
  447.     TI_CC_SPIWriteReg(TI_CCxxx0_TEST0,    0x0B);  // Various test settings.
  448. }
  449. // PATABLE (0 dBm output power)
  450. extern char paTable[] = {0xFB};
  451. extern char paTableLen = 1;
  452. #endif
  453. //-----------------------------------------------------------------------------
  454. //  void RFSendPacket(char *txBuffer, char size)
  455. //
  456. //  DESCRIPTION:
  457. //  This function transmits a packet with length up to 63 bytes.  To use this
  458. //  function, GD00 must be configured to be asserted when sync word is sent and
  459. //  de-asserted at the end of the packet, which is accomplished by setting the
  460. //  IOCFG0 register to 0x06, per the CCxxxx datasheet.  GDO0 goes high at
  461. //  packet start and returns low when complete.  The function polls GDO0 to
  462. //  ensure packet completion before returning.
  463. //
  464. //  ARGUMENTS:
  465. //      char *txBuffer
  466. //          Pointer to a buffer containing the data to be transmitted
  467. //
  468. //      char size
  469. //          The size of the txBuffer
  470. //-----------------------------------------------------------------------------
  471. void RFSendPacket(char *txBuffer, char size)
  472. {
  473.   TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
  474.   TI_CC_SPIWriteBurstReg(TI_CCxxx0_TXFIFO, txBuffer, size); // Write TX data
  475.   TI_CC_SPIStrobe(TI_CCxxx0_STX);         // Change state to TX, initiating
  476.                                             // data transfer  */
  477.   while (!(TI_CC_GDO0_PxIN&TI_CC_GDO0_PIN));// Wait GDO0 to go hi -> sync TX'ed
  478.   while (TI_CC_GDO0_PxIN&TI_CC_GDO0_PIN);   // Wait GDO0 to clear -> end of pkt
  479.   TI_CC_SPIStrobe(TI_CCxxx0_SRX);
  480. }
  481. //-----------------------------------------------------------------------------
  482. //  char RFReceivePacket(char *rxBuffer, char *length)
  483. //
  484. //  DESCRIPTION:
  485. //  Receives a packet of variable length (first byte in the packet must be the
  486. //  length byte).  The packet length should not exceed the RXFIFO size.  To use
  487. //  this function, APPEND_STATUS in the PKTCTRL1 register must be enabled.  It
  488. //  is assumed that the function is called after it is known that a packet has
  489. //  been received; for example, in response to GDO0 going low when it is
  490. //  configured to output packet reception status.
  491. //
  492. //  The RXBYTES register is first read to ensure there are bytes in the FIFO.
  493. //  This is done because the GDO signal will go high even if the FIFO is flushed
  494. //  due to address filtering, CRC filtering, or packet length filtering.
  495. //
  496. //  ARGUMENTS:
  497. //      char *rxBuffer
  498. //          Pointer to the buffer where the incoming data should be stored
  499. //
  500. //  RETURN VALUE:
  501. //      char
  502. //          0x80:  CRC OK
  503. //          0x00:  CRC NOT OK (or no pkt was put in the RXFIFO due to filtering)
  504. //-----------------------------------------------------------------------------
  505. char RFReceivePacket(char *rxBuffer, char *length)
  506. {
  507.   char status[2];
  508.   char pktLen;
  509.   if ((TI_CC_SPIReadStatus(TI_CCxxx0_RXBYTES) & TI_CCxxx0_NUM_RXBYTES))
  510.   {
  511.     //pktLen = TI_CC_SPIReadReg(TI_CCxxx0_RXFIFO); // Read length byte
  512.     //TI_CC_SPIReadBurstReg(TI_CCxxx0_RXFIFO, rxBuffer, pktLen); // Pull data
  513.     //TI_CC_SPIReadBurstReg(TI_CCxxx0_RXFIFO, status, 2);
  514.                                           // Read appended status bytes
  515.     // Use the appropriate library function to read the first byte in the
  516.     // RX FIFO, which is the length of the packet (the total remaining bytes
  517.     // in this packet after reading this byte).
  518.     // Hint:  how many bytes are being retrieved?  One or multiple?
  519.     pktLen = TI_CC_SPIReadReg(TI_CCxxx0_RXFIFO);
  520.     // Use the appropriate library function to read the rest of the packet into
  521.     // rxBuffer (i.e., read pktLen bytes out of the FIFO)
  522.     // Hint:  how many bytes are being retrieved?  One or multiple?
  523.     TI_CC_SPIReadBurstReg(TI_CCxxx0_RXFIFO, rxBuffer, pktLen); // Pull data
  524.     *length = pktLen;                     // Return the actual size
  525.     // Our initialization code configured this CC1100 to append two status
  526.     // bytes to the end of the received packets.  These bytes are still in the
  527.     // FIFO.  Use the appropriate library function to read these two bytes into
  528.     // the status array
  529.     TI_CC_SPIReadBurstReg(TI_CCxxx0_RXFIFO, status, 2);
  530.     return (char)(status[TI_CCxxx0_LQI_RX]&TI_CCxxx0_CRC_OK);
  531.   }
  532.   else
  533.   {
  534.     return 0;                               // Error
  535.   }
  536. }