cc2420.c
cc2420.c
如下:
#include "sys.h"
#include "CC2420.h"
#include "delay.h"
uint8 CC2420_PSDU[1 + CC2420_PSDU_Len];
uint8 CC2420_Source_PANID[2] = {
0xcc, 0xcc};
uint8 CC2420_Source_ShortAddr[2] = {
0xcc, 0xcc};
uint8 CC2420_Source_IEEEAddr[8] = {
0x12, 0x34, 0x56, 0x7c, 0xcc, 0xcc, 0xcc, 0xcc}; /* 本机地址 */
uint8 CC2420_Destination_PANID[2] = {
0xcc, 0xcc};
uint8 CC2420_Destination_ShortAddr[2] = {
0xcc, 0xcc};
uint8 CC2420_Destination_IEEEAddr[8] = {
0x12, 0x34, 0x56, 0x7c, 0xcc, 0xcc, 0xcc, 0xcc}; /* 目标地址 */
void CC2420_IOinit ( void ) {
/* CC2420引脚初始化 */
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOA, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_9; /* 输出引脚 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init ( GPIOA, &GPIO_InitStructure );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_8; /* 输入引脚 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init ( GPIOA, &GPIO_InitStructure );
GPIO_SetBits ( GPIOB, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 |
GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 );
SPI_Init();
}
void SPI_Init ( void ) {
/* SPI初始化函数 */
SCLK_OFF();
CSN_ON();
}
uint8 SPI_Read ( void ) {
/* SPI单字节读取函数 */
uint8 i, rxdata = 0x00;
for ( i = 0; i < 8; i++ ) {
rxdata = rxdata << 1;
SCLK_ON();
if ( MISO_IN ) {
rxdata |= 0x01;
} else {
rxdata &= ~0x01;
}
SCLK_OFF();
}
return rxdata;
}
void SPI_Write ( uint8 txdata ) {
/* SPI单字节写入函数 */
uint8 i;
for ( i = 0; i < 8; i++ ) {
if ( txdata & 0x80 ) {
MOSI_ON();
} else {
MOSI_OFF();
}
SCLK_ON();
txdata = txdata << 1;
SCLK_OFF();
}
}
uint8 SPI_WriteRead ( uint8 txdata ) {
/* SPI单字节写入读取函数 */
uint8 i, rxdata;
rxdata = 0x00;
for ( i = 0; i < 8; i++ ) {
rxdata = rxdata << 1;
if ( txdata & 0x80 ) {
MOSI_ON();
} else {
MOSI_OFF();
}
SCLK_ON();
if ( MISO_IN ) {
rxdata |= 0x01;
} else {
rxdata &= ~0x01;
}
SCLK_OFF();
txdata = txdata << 1;
}
return rxdata;
}
uint16 SPI_Word_Read ( void ) {
/* SPI双字节读取函数 */
uint8 i;
uint16 rxdata;
rxdata = 0x0000;
for ( i = 0; i < 16; i++ ) {
rxdata = rxdata << 1;
SCLK_ON();
if ( MISO_IN ) {
rxdata |= 0x01;
} else {
rxdata &= ~0x01;
}
SCLK_OFF();
}
return rxdata;
}
void SPI_Word_Write ( uint16 txdata ) {
/* SPI双字节写入函数 */
uint8 i;
for ( i = 0; i < 16; i++ ) {
if ( txdata & 0x8000 ) {
MOSI_ON();
} else {
MOSI_OFF();
}
SCLK_ON();
txdata = txdata << 1;
SCLK_OFF();
}
}
uint16 CC2420_ReadReg ( uint8 addr ) {
/* CC2420寄存器读取函数 */
uint16 value;
CSN_OFF();
SPI_Write ( addr | REG_READ );
value = SPI_Word_Read();
CSN_ON();
return value;
}
void CC2420_WriteReg ( uint8 addr, uint16 value ) {
/* CC2420寄存器写入函数 */
CSN_OFF();
SPI_Write ( addr | REG_WRITE );
SPI_Word_Write ( value );
CSN_ON();
}
void CC2420_ReadRXFIFO ( void ) {
/* 读取FIFO寄存器 */
uint8 i;
CSN_OFF();
SPI_Write ( REG_RXFIFO | REG_READ );
CC2420_PSDU[0] = SPI_Read();
for ( i = 0; i < CC2420_PSDU[0]; i++ ) {
CC2420_PSDU[1 + i] = SPI_Read();
}
CSN_ON();
CC2420_Command ( CMD_SFLUSHRX );
}
void CC2420_WriteTXFIFO ( void ) {
/* 写入FIFO寄存器 */
uint8 i;
CC2420_Command ( CMD_SFLUSHTX ); /* 刷新发送寄存器 */
CSN_OFF();
SPI_Write ( REG_TXFIFO | REG_WRITE ); /* 先写入写FIFO操作命令 */
SPI_Write ( CC2420_PSDU[0] );
for ( i = 0; i < CC2420_PSDU[0]; i++ ) {
SPI_Write ( CC2420_PSDU[1 + i] );
}
CSN_ON();
}
void CC2420_Command ( uint8 cmd ) {
/* CC2420命令函数 */
CSN_OFF();
SPI_Write ( cmd );
CSN_ON();
}
uint8 CC2420_RAM_Read ( uint8 addr, uint8 block ) {
/* CC2420的RAM读取函数 */
uint8 value;
CSN_OFF();
SPI_Write ( addr | RAM );
SPI_Write ( ( block << 6 ) | RAM_READ );
value = SPI_Read();
CSN_ON();
return value;
}
void CC2420_RAM_Write ( uint8 addr, uint8 block, uint8 value ) {
/* CC2420的RAM写入函数 */
CSN_OFF();
SPI_Write ( addr | RAM );
SPI_Write ( ( block << 6 ) | RAM_WRITE );
SPI_Write ( value );
CSN_ON();
}
void CC2420_SetRxMode ( void ) {
/* CC2420设置接收函数 */
CC2420_Command ( CMD_SRFOFF );
CC2420_Command ( CMD_SRXON );
}
uint8 CC2420_RxPacket ( void ) {
/* CC2420判断接收函数 */
SFD_IN = 1;
FIFO_IN = 1;
if ( ( !SFD_IN ) && ( FIFO_IN ) ) {
return TRUE;
}
return FALSE;
}
void CC2420_TxPacket ( void ) {
/* CC2420发送函数 */
CC2420_Command ( CMD_SRFOFF );
CC2420_Command ( CMD_STXON );
while ( !SFD_IN );
while ( SFD_IN );
}
void CC2420_Init ( void ) {
/* CC2420射频芯片初始化函数 */
RESET_OFF();
delay_ms ( 10 );
RESET_ON();
delay_ms ( 10 );
CC2420_Command ( CMD_SXOSCON );
delay_ms ( 10 );
CC2420_PSDU[1] = ( PAN_ID_COMPRESSION << 6 ) | ( ACKNOWLEDGMENT_REQUEST << 5 ) | ( FRAME_PENDING << 4 ) |
( SECURITY_ENABLE << 3 ) | ( FRAME_TYPE_DATA << 0 );
CC2420_PSDU[2] = ( SOURCE_ADDRESSING_MODE << 6 ) | ( FRAME_VERSION << 4 ) | ( DEST_ADDRESSING_MODE << 2 );
CC2420_PSDU[3] = SEQUENCE_NUMBER;
CC2420_PSDU[4] = CC2420_Destination_PANID[0];
CC2420_PSDU[5] = CC2420_Destination_PANID[1];
CC2420_PSDU[6] = CC2420_Destination_IEEEAddr[0];
CC2420_PSDU[7] = CC2420_Destination_IEEEAddr[1];
CC2420_PSDU[8] = CC2420_Destination_IEEEAddr[2];
CC2420_PSDU[9] = CC2420_Destination_IEEEAddr[3];
CC2420_PSDU[10] = CC2420_Destination_IEEEAddr[4];
CC2420_PSDU[11] = CC2420_Destination_IEEEAddr[5];
CC2420_PSDU[12] = CC2420_Destination_IEEEAddr[6];
CC2420_PSDU[13] = CC2420_Destination_IEEEAddr[7];
CC2420_PSDU[14] = CC2420_Source_PANID[0];
CC2420_PSDU[15] = CC2420_Source_PANID[1];
CC2420_RAM_Write ( RAM_PANID, 2, CC2420_Source_PANID[0] );
CC2420_RAM_Write ( RAM_PANID + 1, 2, CC2420_Source_PANID[1] );
CC2420_PSDU[16] = CC2420_Source_IEEEAddr[0];
CC2420_PSDU[17] = CC2420_Source_IEEEAddr[1];
CC2420_PSDU[18] = CC2420_Source_IEEEAddr[2];
CC2420_PSDU[19] = CC2420_Source_IEEEAddr[3];
CC2420_PSDU[20] = CC2420_Source_IEEEAddr[4];
CC2420_PSDU[21] = CC2420_Source_IEEEAddr[5];
CC2420_PSDU[22] = CC2420_Source_IEEEAddr[6];
CC2420_PSDU[23] = CC2420_Source_IEEEAddr[7];
CC2420_RAM_Write ( RAM_IEEEADR, 2, CC2420_Source_IEEEAddr[0] );
CC2420_RAM_Write ( RAM_IEEEADR + 1, 2, CC2420_Source_IEEEAddr[1] );
CC2420_RAM_Write ( RAM_IEEEADR + 2, 2, CC2420_Source_IEEEAddr[2] );
CC2420_RAM_Write ( RAM_IEEEADR + 3, 2, CC2420_Source_IEEEAddr[3] );
CC2420_RAM_Write ( RAM_IEEEADR + 4, 2, CC2420_Source_IEEEAddr[4] );
CC2420_RAM_Write ( RAM_IEEEADR + 5, 2, CC2420_Source_IEEEAddr[5] );
CC2420_RAM_Write ( RAM_IEEEADR + 6, 2, CC2420_Source_IEEEAddr[6] );
CC2420_RAM_Write ( RAM_IEEEADR + 7, 2, CC2420_Source_IEEEAddr[7] );
CC2420_WriteReg ( REG_MDMCTRL0, CCA_HYST | CCA_MODE | PREAMBLE_LENGTH | AUTOCRC | ADR_DECODE );
CC2420_WriteReg ( REG_SYNCWORD, SYNCWORD );
CC2420_WriteReg ( REG_SECCTRL0, 0 );
CSN_OFF();
SPI_Write ( REG_RXFIFO | REG_READ );
SPI_Read();
CSN_ON();
CC2420_Command ( CMD_SFLUSHRX );
CC2420_Command ( CMD_SFLUSHTX );
delay_ms ( 10 );
}
cc2420.h
cc2420.h
如下:
#ifndef _CC2420_H_
#define _CC2420_H_
#include "public.h"
#define CC2420_PSDU_Len 127
/* SPI口访问方式定义 */
#define REG_READ 0x40
#define REG_WRITE 0x00
#define RAM 0x80
#define RAM_READ 0x20
#define RAM_WRITE 0x00
/* CC2420 命令字定义 */
#define CMD_SNOP (0x00 )
#define CMD_SXOSCON (0x01 )
#define CMD_STXCAL (0x02 )
#define CMD_SRXON (0x03 )
#define CMD_STXON (0x04 )
#define CMD_STXONCCA (0x05 )
#define CMD_SRFOFF (0x06 )
#define CMD_SXOSCOFF (0x07 )
#define CMD_SFLUSHRX (0x08 )
#define CMD_SFLUSHTX (0x09 )
#define CMD_SACK (0x0a )
#define CMD_SACKPEND (0x0b )
#define CMD_SRXDEC (0x0c )
#define CMD_STXENC (0x0d )
#define CMD_SAES (0x0e )
/* CC2420配置寄存器 */
#define REG_MAIN (0x10 )
#define RESETN (0x01 << 15)
#define ENC_RESETN (0x01 << 14)
#define DEMOD_RESETN (0x01 << 13)
#define MOD_RESETN (0x01 << 12)
#define FS_RESETN (0x01 << 11)
#define XOSC16M_BYPASS (0x01 << 0 )
#define REG_MDMCTRL0 (0x11 )
#define RESERVED_FRAME_MODE (0x00 << 13)
#define PAN_COORDINATOR (0x01 << 12)
#define ADR_DECODE (0x01 << 11)
#define CCA_HYST (0x02 << 8 )
#define CCA_MODE (0x03 << 6 )
#define AUTOCRC (0x01 << 5 )
#define AUTOACK ( << 4 )
#define PREAMBLE_LENGTH (0x02 << 0 )
#define REG_MDMCTRL1 (0x12 )
#define CORR_THR (0x20 << 6 )
#define DEMOD_AVG_MODE ( << 5 )
#define MODULATION_MODE ( << 4 )
#define TX_MODE ( << 2 )
#define RX_MODE ( << 0 )
#define REG_RSSI (0x13 )
#define REG_SYNCWORD (0x14 )
#define SYNCWORD (0xA70F )
#define REG_TXCTRL (0x15 )
#define TXMIXBUF_CUR ( << 14)
#define TX_TURNAROUND ( << 13)
#define TXMIX_CAP_ARRAY ( << 11)
#define TXMIX_CURRENT ( << 9 )
#define PA_CURRENT ( << 6 )
#define PA_LEVEL ( << 0 )
#define REG_RXCTRL0 (0x16 )
#define RXMIXBUF_CUR ( << 12)
#define HIGH_LNA_GAIN ( << 10)
#define MED_LNA_GAIN ( << 8 )
#define LOW_LNA_GAIN ( << 6 )
#define HIGH_LNA_CURRENT ( << 4 )
#define MED_LNA_CURRENT ( << 2 )
#define LOW_LNA_CURRENT ( << 0 )
#define REG_RXCTRL1 (0x17 )
#define RXBPF_LOCUR ( << 13)
#define RXBPF_MIDCUR ( << 12)
#define LOW_LOWGAIN ( << 11)
#define MED_LOWGAIN ( << 10)
#define HIGH_HGM ( << 9 )
#define MED_HGM ( << 8 )
#define LNA_CAP_ARRAY ( << 6 )
#define RXMIX_TAIL ( << 4 )
#define RXMIX_VCM ( << 2 )
#define RXMIX_CURRENT ( << 0 )
#define REG_FSCTRL (0x18 )
#define LOCK_THR ( << 14)
#define CAL_DONE ( << 13)
#define CAL_RUNNING ( << 12)
#define LOCK_LENGTH ( << 11)
#define LOCK_STATUS ( << 10)
#define FREQ ( << 0 )
#define REG_SECCTRL0 (0x19 )
#define RXFIFO_PROTECTION ( << 9 )
#define SEC_CBC_HEAD ( << 8 )
#define SEC_SAKEYSEL ( << 7 )
#define SEC_TXKEYSEL ( << 6 )
#define SEC_RXKEYSEL ( << 5 )
#define SEC_M ( << 2 )
#define SEC_MODE ( << 0 )
#define REG_SECCTRL1 (0x1a )
#define SEC_TXL ( << 8 )
#define SEC_RXL ( << 0 )
#define REG_BATTMON (0x1b )
#define BATTMON_EN ( << 5 )
#define BATTMON_VOLTAGE ( << 0 )
#define REG_IOCFG0 (0x1c )
#define BCN_ACCEPT ( << 11)
#define FIFO_POLARITY ( << 10)
#define FIFOP_POLARITY ( << 9 )
#define SFD_POLARITY ( << 8 )
#define CCA_POLARITY ( << 7 )
#define FIFOP_THR ( << 0 )
#define REG_IOCFG1 (0x1d )
#define HSSD_SRC ( << 10)
#define SFDMUX ( << 5 )
#define CCAMUX ( << 0 )
#define REG_MANFIDL (0x1e )
#define REG_MANFIDH (0x1f )
#define REG_FSMTC (0x20 )
#define TC_RXCHAIN2RX ( << 13)
#define TC_SWITCH2TX ( << 10)
#define TC_PAON2TX ( << 6 )
#define TC_TXEND2SWITCH ( << 3 )
#define TC_TXEND2PAOFF ( << 0 )
#define REG_MANAND (0x21 )
#define MANAND_VGA_RESET_N ( << 15)
#define MANAND_BIAS_PD ( << 14)
#define MANAND_BALUN_CTRL ( << 13)
#define MANAND_RXTX ( << 12)
#define MANAND_PRE_PD ( << 11)
#define MANAND_PA_N_PD ( << 10)
#define MANAND_PA_P_PD ( << 9 )
#define MANAND_DAC_LPF_PD ( << 8 )
#define MANAND_XOSC16M_PD ( << 7 )
#define MANAND_RXBPF_CAL_PD ( << 6 )
#define MANAND_CHP_PD ( << 5 )
#define MANAND_FS_PD ( << 4 )
#define MANAND_ADC_PD ( << 3 )
#define MANAND_VGA_PD ( << 2 )
#define MANAND_RXBPF_PD ( << 1 )
#define MANAND_LNAMIX_PD ( << 0 )
#define REG_MANOR (0x22 )
#define MANOR_VGA_RESET_N ( << 15)
#define MANOR_BIAS_PD ( << 14)
#define MANOR_BALUN_CTRL ( << 13)
#define MANOR_RXTX ( << 12)
#define MANOR_PRE_PD ( << 11)
#define MANOR_PA_N_PD ( << 10)
#define MANOR_PA_P_PD ( << 9 )
#define MANOR_DAC_LPF_PD ( << 8 )
#define MANOR_XOSC16M_PD ( << 7 )
#define MANOR_RXBPF_CAL_PD ( << 6 )
#define MANOR_CHP_PD ( << 5 )
#define MANOR_FS_PD ( << 4 )
#define MANOR_ADC_PD ( << 3 )
#define MANOR_VGA_PD ( << 2 )
#define MANOR_RXBPF_PD ( << 1 )
#define MANOR_LNAMIX_PD ( << 0 )
#define REG_AGCCTRL (0x23 )
#define VGA_GAIN_OE ( << 11)
#define VGA_GAIN ( << 4 )
#define LNAMIX_GAINMODE_O ( << 2 )
#define REG_AGCTST0 (0x24 )
#define LNAMIX_HYST ( << 12)
#define LNAMIX_THR_H ( << 6 )
#define LNAMIX_THR_L ( << 0 )
#define REG_AGCTST1 (0x25 )
#define AGC_BLANK_MODE ( << 14)
#define PEAKDET_CUR_BOOST ( << 13)
#define AGC_SETTLE_WAIT ( << 11)
#define AGC_PEAK_DET_MODE ( << 8 )
#define AGC_WIN_SIZE ( << 6 )
#define AGC_REF ( << 0 )
#define REG_AGCTST2 (0x26 )
#define MED2HIGHGAIN ( << 5 )
#define LOW2MEDGAIN ( << 0 )
#define REG_FSTST0 (0x27 )
#define VCO_ARRAY_SETTLE_LONG ( << 11)
#define VCO_ARRAY_OE ( << 10)
#define VCO_ARRAY_O ( << 5 )
#define VCO_ARRAY_RES ( << 0 )
#define REG_FSTST1 (0x28 )
#define VCO_TX_NOCAL ( << 15)
#define VCO_ARRAY_CAL_LONG ( << 14)
#define VCO_CURRENT_REF ( << 10)
#define VCO_CURRENT_K ( << 4 )
#define VC_DAC_EN ( << 3 )
#define VC_DAC_VAL ( << 0 )
#define REG_FSTST2 (0x29 )
#define VCO_CURCAL_SPEED ( << 13)
#define VCO_CURRENT_OE ( << 12)
#define VCO_CURRENT_O ( << 6 )
#define VCO_CURRENT_RES ( << 0 )
#define REG_FSTST3 (0x2a )
#define CHP_CAL_DISABLE ( << 15)
#define CHP_CURRENT_OE ( << 14)
#define CHP_TEST_UP ( << 13)
#define CHP_TEST_DN ( << 12)
#define CHP_DISABLE ( << 11)
#define PD_DELAY ( << 10)
#define CHP_STEP_PERIOD ( << 8 )
#define STOP_CHP_CURRENT ( << 4 )
#define START_CHP_CURRENT ( << 0 )
#define REG_RXBPFTST (0x2b )
#define RXBPF_CAP_OE ( << 14)
#define RXBPF_CAP_O ( << 7 )
#define REG_FSMSTATE (0x2c )
#define REG_ADCTST (0x2d )
#define REG_DACTST (0x2e )
#define DAC_SRC ( << 12)
#define DAC_I_O ( << 6 )
#define DAC_Q_O ( << 0 )
#define REG_TOPTST (0x2f )
#define RAM_BIST_RUN ( << 7 )
#define TEST_BATTMON_EN ( << 6 )
#define VC_IN_TEST_EN ( << 5 )
#define ATESTMOD_PD ( << 4 )
#define ATESTMOD_MODE ( << 0 )
#define REG_TXFIFO (0x3e )
#define REG_RXFIFO (0x3f )
#define RAM_IEEEADR (0x60 )
#define RAM_PANID (0x68 )
#define RAM_SHORTADR (0x6A )
/* PSDU相关定义 */
#define FRAME_TYPE_BEACCON 0x00
#define FRAME_TYPE_DATA 0x01
#define FRAME_TYPE_ACK 0x02
#define FRAME_TYPE_MAC 0x03
#define SECURITY_ENABLE 0x00
#define FRAME_PENDING 0x00
#define ACKNOWLEDGMENT_REQUEST 0x00
#define PAN_ID_COMPRESSION 0x00
#define DEST_ADDRESSING_MODE 0x03
#define FRAME_VERSION 0x01
#define SOURCE_ADDRESSING_MODE 0x03
#define SEQUENCE_NUMBER 0x02
/* CC2420引脚定义 */
#define RESET PAout(0)
#define SFD PAin(1)
#define CCA PAin(2)
#define FIFOP PAin(3)
#define FIFO PAin(4)
#define CSN PAout(5)
#define SCLK PAout(6)
#define MOSI PAout(7)
#define MISO PAin(8)
#define VREG_EN PAout(9)
#define RESET_ON() RESET = 1
#define RESET_OFF() RESET = 0
#define SCLK_ON() SCLK = 1
#define SCLK_OFF() SCLK = 0
#define MOSI_ON() MOSI = 1
#define MOSI_OFF() MOSI = 0
#define CSN_ON() CSN = 1
#define CSN_OFF() CSN = 0
#define FIFO_IN FIFO
#define MISO_IN MISO
#define CCA_IN CCA
#define SFD_IN SFD
#define FIFOP_IN FIFOP
void CC2420_IOinit ( void );
void SPI_Init ( void );
uint8 SPI_Read ( void );
void SPI_Write ( uint8 txdata );
uint8 SPI_WriteRead ( uint8 txdata );
uint16 SPI_Word_Read ( void );
void SPI_Word_Write ( uint16 txdata );
void CC2420_Init ( void );
uint16 CC2420_ReadReg ( uint8 addr );
void CC2420_WriteReg ( uint8 addr, uint16 value );
void CC2420_Command ( uint8 cmd );
uint8 CC2420_RAM_Read ( uint8 addr, uint8 block );
void CC2420_RAM_Write ( uint8 addr, uint8 block, uint8 value );
void CC2420_SetRxMode ( void );
uint8 CC2420_RxPacket ( void ) ;
void CC2420_TxPacket ( void );
void CC2420_ReadRXFIFO ( void );
void CC2420_WriteTXFIFO ( void );
#define UART_READ_BACK 0x01
#define CC2420_REG_READ 0xE0
#define CC2420_REG_WRITE 0xE1
#define CC2420_RAM_READ 0xE2
#define CC2420_RAM_WRITE 0xE3
#define CC2420_TX 0xE4
#define CC2420_RX 0xE5
#define CC2420_SETRX 0xE6
#define CC2420_RXFIFO 0xE7
#define CC2420_TXFIFO 0xE8
#define CC2420_INIT 0xEE
#define CC2420_EXT 0xEF
#endif
public.h
public.h
如下:
#ifndef _PUBLIC_H_
#define _PUBLIC_H_
typedef unsigned char uint8;
typedef signed char int8;
typedef unsigned short uint16;
typedef signed short int16;
typedef unsigned long uint32;
typedef signed long int32;
typedef float fp32;
typedef double fp64;
#define TRUE 1
#define FALSE 0
#define NULL 0
#endif
main.c
main.c
如下:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "cc2420.h"
extern uint8 CC2420_PSDU[];
#define SEND_MESSAGE 0
int main ( void ) {
delay_init();
LED_Init();
CC2420_IOinit();
VREG_EN = 1;
delay_ms ( 1000 );
CC2420_Init();
CC2420_SetRxMode();
CC2420_PSDU[0] = 23 + 48 + 2;
while ( 1 ) {
#if SEND_MESSAGE
CC2420_PSDU[25] = 100;
CC2420_WriteTXFIFO();
CC2420_TxPacket();
CC2420_SetRxMode();
LED = !LED;
delay_ms ( 500 );
#else
if ( CC2420_RxPacket() ) {
CC2420_ReadRXFIFO();
if ( CC2420_PSDU[25] == 100 ) {
LED = !LED;
CC2420_PSDU[25] = 0;
}
}
#endif
}
}