CC2420.H

来源:互联网 发布:衣服搭配男软件 编辑:程序博客网 时间:2024/05/16 10:09

#ifndef _CC2420_H
#define _CC2420_H

#include "common.h"

//以下定义15个命令寄存器
#define SNOP     0X00    //空操作,仅为读取状态寄存器
#define SXOSCON  0X01    //开启晶体振荡器(设置XOSC16M=0,BIAS_PD=0)
#define STXCAL   0X02    //使能和校准频率合成器
#define SRXON    0X03    //RX使能
#define STXON    0X04    //TX使能
#define STXONCCA 0X05    //
#define SRFOFF   0X06    //关闭RX/TX和频率合成器
#define SXOSCOFF 0X07    //关闭晶体振荡器和RF
#define SFLUSHRX 0X08    //清楚接收FIFO缓存
#define SFLUSHTX 0X09    //清楚发送FIFO缓存
#define SACK     0X0A    //发送确认帧,pending域清0
#define SACKPEND 0X0B    //发送确认帧,pending域置1
#define SRXDEC   0X0C    //启动RXFIFO在线解码/认证
#define STXENC   0X0D    //启动TXFIFO在线编码/认证
#define SAES     0X0E    //AES编码

//以下定义33个16位的配置寄存器
#define MAIN      0X10    //主控制寄存器
#define MDMCTRL0  0X11    //调制解调控制寄存器0
#define MDMCTRL1  0X12    //调制解调控制寄存器1
#define RSSI      0X13    //RSSI和CCA状态控制寄存器
#define SYNCWORD  0X14    //同步字i控制寄存器
#define TXCTRL    0X15    //发送控制寄存器
#define RXCTRL0   0X16    //接收控制寄存器0
#define RXCTRL1   0X17    //接收控制寄存器1
#define FSCTRL    0X18    //频率合成器控制与状态寄存器
#define SECCTRL0  0X19    //安全控制寄存器0
#define SECCTRL1  0X1A    //安全控制寄存器1
#define BATTMON   0X1B    //电池监测控制寄存器
#define IOCFG0    0X1C    //I/O配置寄存器0
#define IOCFG1    0X1D    //I/O配置寄存器1
#define MANFIDL   0X1E    //厂商ID号低16位,只读
#define MANFIDH   0X1F    //厂商ID号高16位,只读
#define FSMTC     0X20    //有限状态机定时常数寄存器
#define MANAND    0X21    //人工信号与代理寄存器
#define MANOR     0X22    //人工信号或代理寄存器
#define AGCCTRL   0X23    //AGC控制寄存器
#define FSMSTATE  0X2C    //有限状态机信息寄存器,只读
#define RESERVED  0X30    //保留
#define TXFIFO    0X3E    //TXFIFO寄存器
#define RXFIFO    0X3F    //RXFIFO寄存器

//以下寄存器只用于测试目的
#define AGCTST0   0X24
#define AGCTST1   0X25
#define AGCTST2   0X26
#define FSTST0    0X27
#define FSTST1    0X28
#define FSTST2    0X29
#define FSTST3    0X2A
#define RXBPFTST  0X2B
#define ADCTST    0X2D
#define DACTST    0X2E
#define TOPTST    0X2F

//定义状态寄存器中各个位
#define XOSC16M_STABLE 6   //晶振是否稳定运行
#define TX_UNDERFLOE   5   //发送TXFIFO是否发生下溢
#define ENC_BUSY       4   //编码模块是否处于忙状态
#define TX_ACTIVE      3   //射频发送是否处于活动状态
#define LOCK           2   //频率合成器PLL是否处于锁存状态
#define RSSI_VALID     1   //RSSI值是否有效

//声明各种访问CC2420的方式
unsigned char write_command(unsigned char command);   //写命令寄存器
unsigned char read_status(void);                          //读状态寄存器
unsigned char write_configure_word(unsigned char Addr,unsigned char DataH,unsigned char DataL);//写配置字
unsigned char read_configure_word(unsigned char Addr,unsigned char *DataH,unsigned char *DataL); //读配置字
unsigned char read_rxfifo(unsigned char Data_Num,unsigned char *p_Data);    //读RXFIFO
unsigned char write_txfifo(unsigned char Data_Num,unsigned char *p_Data);   //写TXFIFO
unsigned char write_ram(unsigned char AddrH,unsigned char AddrL,unsigned char Data_Num,unsigned char *p_Data);  //写RAM
unsigned char read_ram(unsigned char AddrH,unsigned char AddrL,unsigned char Data_Num,unsigned char *p_Data);   //读RAM

unsigned char read_rxfifo_byte(void);                                     //读一字节RXFIFO
unsigned char write_txfifo_byte(unsigned char p_Data);                    //写一字节TXFIFO
unsigned char write_ram_byte(unsigned char AddrH,unsigned char AddrL,unsigned char p_Data);  //写一字节RAM
unsigned char read_ram_byte(unsigned char AddrH,unsigned char AddrL);                        //读一字节RAM

//声明CC2420的各种工作模式及模式之间的转换
void power_off(void);          //关闭电压校准器模式
void pwoff_pwdown(void);      //从电压校准器关闭模式转换到掉电模式
void allstates_pwdown(void);  //其他任何模式转换到掉电模式
void pwdown_idle(void);       //从掉电模式转换到空闲模式
void allstates_idle(void);    //从其他任何模式转换到空闲模式
void idle_tx(void);           //从空闲模式启动发送
void rx_tx(void);             //从接收状态转换到发送模式
void idle_rx(void);           //从空闲模式启动接收模式

void set_configure(void);     //设置配置字(用于初始化)

void cc2420_init(void); // CC2420初始化

#endif