📄 hal_cc2520.h
字号:
/***********************************************************************************
Filename: hal_cc2520.h
Description: This file defines the interface to the CC2520 radio.
***********************************************************************************/
#ifndef HALCC2520_H
#define HALCC2520_H
/***********************************************************************************
* INCLUDES
*/
#include "hal_board.h"
/***********************************************************************************
* MACROS
*/
#define RF_WAIT_TRANSCEIVER_READY() st( WAIT_SFD_LOW();)
#define WAIT_RSSI_VALID() st( while (!CC2520_RSSI_VALID_PIN);)
#define WAIT_SFD_HIGH() st( while (!CC2520_SFD_PIN);)
#define WAIT_SFD_LOW() st( while (CC2520_SFD_PIN);)
#define CLEAR_EXC_RX_FRM_DONE() st(CC2520_CLEAR_EXC(CC2520_EXC_RX_FRM_DONE);)
#define DPU_ACTIVE_H_BM 0x08
#define WAIT_DPU_DONE_H() st( while (CC2520_INS_STROBE(CC2520_INS_SNOP) \
& DPU_ACTIVE_H_BM);)
// Configure a GPIO pin 'n' as input bound to the function 'fn'
#define CC2520_CFG_GPIO_IN(n, fn) \
st( \
CC2520_GPIO_DIR_IN(n); \
CC2520_REGWR8(CC2520_GPIOCTRL0 + (n), 0x80 | (fn)); \
)
// Configure a GPIO pin 'n' as output bound to the function 'fn'
#define CC2520_CFG_GPIO_OUT(n, fn) \
st( \
CC2520_REGWR8(CC2520_GPIOCTRL0 + (n), (fn)); \
CC2520_GPIO_DIR_OUT(n); \
)
// Read exception map
#define CC2520_GET_EXC(dwMap) \
CC2520_REGRD(CC2520_EXCFLAG0, 4, (uint8 *)&(dwMap))
// Read FSM state value
#define CC2520_GET_FSM_STATE() \
(CC2520_REGRD8(CC2520_FSMSTAT0) & CC2520_FSMSTAT_FSM_STATE_BV)
// Clear exception 'n'
#define CC2520_CLEAR_EXC(n) \
CC2520_BCLR(CC2520_MAKE_BIT_ADDR(CC2520_EXCFLAG0 + ((n >> 3)&0x3), (n) & 0x07))
// Set exception mask A or B
#define CC2520_SET_EXCMASK(m, value) (CC2520_REGWR24(CC2520_EXCMASK##m##0, value))
// Make a BIT address from register address and bit number.
#define CC2520_MAKE_BIT_ADDR(regAddr, bitIndex) (((regAddr) << 3) | (bitIndex))
/***********************************************************************************
* CONSTANTS AND DEFINES
*/
// TXPOWER values
#define CC2520_TXPOWER_MIN_4_DBM 0x88 // Gives ~ -3.1 dBm TX output power
#define CC2520_TXPOWER_0_DBM 0x32 // Gives ~ 0.3 dBm TX output power
#define CC2520_TXPOWER_4_DBM 0xF7 // Gives ~ 4.6 dBm TX output power
#define CC2520_RSSI_OFFSET 76 // dBm (from data sheet)
// CC2520 pin assignments
#define CC2520_RX_FRM_DONE_PIN CC2520_GPIO0_IPIN
#define CC2520_SAMPLED_CCA_PIN CC2520_GPIO1_IPIN
// GPIO2 are reused for RSSI Valid or TX_FRM_DONE
#define CC2520_RSSI_VALID_PIN CC2520_GPIO2_IPIN
#define CC2520_TX_FRM_DONE_PIN CC2520_GPIO2_IPIN
#define CC2520_SFD_PIN CC2520_GPIO3_IPIN
#define CC2520_GPIO_SNIFFER_DATA_PIN CC2520_GPIO4_IPIN
#define CC2520_GPIO_SNIFFER_CLK_PIN CC2520_GPIO5_IPIN
#define CC2520_MEMORY_SIZE 0x400
// Startup time values (in microseconds)
#define CC2520_XOSC_MAX_STARTUP_TIME 2000
#define CC2520_VREG_MAX_STARTUP_TIME 2000
#define CC2520_SRXON_TO_RANDOM_READY_TIME 144
// Address definitions
// FREG definitions (BSET/BCLR supported)
#define CC2520_FRMFILT0 0x000
#define CC2520_FRMFILT1 0x001
#define CC2520_SRCMATCH 0x002
#define CC2520_SRCSHORTEN0 0x004
#define CC2520_SRCSHORTEN1 0x005
#define CC2520_SRCSHORTEN2 0x006
#define CC2520_SRCEXTEN0 0x008
#define CC2520_SRCEXTEN1 0x009
#define CC2520_SRCEXTEN2 0x00A
#define CC2520_FRMCTRL0 0x00C
#define CC2520_FRMCTRL1 0x00D
#define CC2520_RXENABLE0 0x00E
#define CC2520_RXENABLE1 0x00F
#define CC2520_EXCFLAG0 0x010
#define CC2520_EXCFLAG1 0x011
#define CC2520_EXCFLAG2 0x012
#define CC2520_EXCMASKA0 0x014
#define CC2520_EXCMASKA1 0x015
#define CC2520_EXCMASKA2 0x016
#define CC2520_EXCMASKB0 0x018
#define CC2520_EXCMASKB1 0x019
#define CC2520_EXCMASKB2 0x01A
#define CC2520_EXCBINDX0 0x01C
#define CC2520_EXCBINDX1 0x01D
#define CC2520_EXCBINDY0 0x01E
#define CC2520_EXCBINDY1 0x01F
#define CC2520_GPIOCTRL0 0x020
#define CC2520_GPIOCTRL1 0x021
#define CC2520_GPIOCTRL2 0x022
#define CC2520_GPIOCTRL3 0x023
#define CC2520_GPIOCTRL4 0x024
#define CC2520_GPIOCTRL5 0x025
#define CC2520_GPIOPOLARITY 0x026
#define CC2520_GPIOCTRL 0x028
#define CC2520_DPUCON 0x02A
#define CC2520_DPUSTAT 0x02C
#define CC2520_FREQCTRL 0x02E
#define CC2520_FREQTUNE 0x02F
#define CC2520_TXPOWER 0x030
#define CC2520_TXCTRL 0x031
#define CC2520_FSMSTAT0 0x032
#define CC2520_FSMSTAT1 0x033
#define CC2520_FIFOPCTRL 0x034
#define CC2520_FSMCTRL 0x035
#define CC2520_CCACTRL0 0x036
#define CC2520_CCACTRL1 0x037
#define CC2520_RSSI 0x038
#define CC2520_RSSISTAT 0x039
#define CC2520_TXFIFO_BUF 0x03A
#define CC2520_RXFIRST 0x03C
#define CC2520_RXFIFOCNT 0x03E
#define CC2520_TXFIFOCNT 0x03F
// SREG definitions (BSET/BCLR unsupported)
#define CC2520_CHIPID 0x040
#define CC2520_VERSION 0x042
#define CC2520_EXTCLOCK 0x044
#define CC2520_MDMCTRL0 0x046
#define CC2520_MDMCTRL1 0x047
#define CC2520_FREQEST 0x048
#define CC2520_RXCTRL 0x04A
#define CC2520_FSCTRL 0x04C
#define CC2520_FSCAL0 0x04E
#define CC2520_FSCAL1 0x04F
#define CC2520_FSCAL2 0x050
#define CC2520_FSCAL3 0x051
#define CC2520_AGCCTRL0 0x052
#define CC2520_AGCCTRL1 0x053
#define CC2520_AGCCTRL2 0x054
#define CC2520_AGCCTRL3 0x055
#define CC2520_ADCTEST0 0x056
#define CC2520_ADCTEST1 0x057
#define CC2520_ADCTEST2 0x058
#define CC2520_MDMTEST0 0x05A
#define CC2520_MDMTEST1 0x05B
#define CC2520_DACTEST0 0x05C
#define CC2520_DACTEST1 0x05D
#define CC2520_ATEST 0x05E
#define CC2520_DACTEST2 0x05F
#define CC2520_PTEST0 0x060
#define CC2520_PTEST1 0x061
#define CC2520_RESERVED 0x062
#define CC2520_DPUBIST 0x07A
#define CC2520_ACTBIST 0x07C
#define CC2520_RAMBIST 0x07E
// RAM size definitions
#define CC2520_RAM_START_ADDR 0x100
#define CC2520_RAM_SIZE 640
// RX and TX buffer definitions
#define CC2520_RAM_TXBUF 0x100
#define CC2520_RAM_RXBUF 0x180
// Security work buffer definitions
#define CC2520_RAM_CBCTEMPL 0x360
#define CC2520_RAM_CBCTEMPH 0x370
// Source address matching definitions
#define CC2520_RAM_SRCTABLEBASE 0x380
#define CC2520_RAM_SRCRESMASK0 0x3E0
#define CC2520_RAM_SRCRESMASK1 0x3E1
#define CC2520_RAM_SRCRESMASK2 0x3E2
#define CC2520_RAM_SRCRESINDEX 0x3E3
#define CC2520_RAM_SRCEXTPENDEN0 0x3E4
#define CC2520_RAM_SRCEXTPENDEN1 0x3E5
#define CC2520_RAM_SRCEXTPENDEN2 0x3E6
#define CC2520_RAM_SRCSHORTPENDEN0 0x3E7
#define CC2520_RAM_SRCSHORTPENDEN1 0x3E8
#define CC2520_RAM_SRCSHORTPENDEN2 0x3E9
// Local address definitions
#define CC2520_RAM_EXTADDR 0x3EA
#define CC2520_RAM_PANID 0x3F2
#define CC2520_RAM_SHORTADDR 0x3F4
// Command strobes (identifiers to be used with GPIO and exception binding)
#define CC2520_STR_SIBUFEX 0x00
#define CC2520_STR_SRXMASKBITCLR 0x01
#define CC2520_STR_SRXMASKBITSET 0x02
#define CC2520_STR_SRXON 0x03
#define CC2520_STR_SSAMPLECCA 0x04
#define CC2520_STR_SACK 0x05
#define CC2520_STR_SACKPEND 0x06
#define CC2520_STR_SNACK 0x07
#define CC2520_STR_STXON 0x08
#define CC2520_STR_STXONCCA 0x09
#define CC2520_STR_SFLUSHRX 0x0A
#define CC2520_STR_SFLUSHTX 0x0B
#define CC2520_STR_SRXFIFOPOP 0x0C
#define CC2520_STR_STXCAL 0x0D
#define CC2520_STR_SRFOFF 0x0E
#define CC2520_STR_SXOSCOFF 0x0F
// Exceptions
#define CC2520_EXC_RF_IDLE 0
#define CC2520_EXC_TX_FRM_DONE 1
#define CC2520_EXC_TX_ACK_DONE 2
#define CC2520_EXC_TX_UNDERFLOW 3
#define CC2520_EXC_TX_OVERFLOW 4
#define CC2520_EXC_RX_UNDERFLOW 5
#define CC2520_EXC_RX_OVERFLOW 6
#define CC2520_EXC_RXENABLE_ZERO 7
#define CC2520_EXC_RX_FRM_DONE 8
#define CC2520_EXC_RX_FRM_ACCEPTED 9
#define CC2520_EXC_SRC_MATCH_DONE 10
#define CC2520_EXC_SRC_MATCH_FOUND 11
#define CC2520_EXC_FIFOP 12
#define CC2520_EXC_SFD 13
#define CC2520_EXC_DPU_DONE_L 14
#define CC2520_EXC_DPU_DONE_H 15
#define CC2520_EXC_MEMADDR_ERROR 16
#define CC2520_EXC_USAGE_ERROR 17
#define CC2520_EXC_OPERAND_ERROR 18
#define CC2520_EXC_SPI_ERROR 19
#define CC2520_EXC_RF_NO_LOCK 20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -