blob: 6a67bde73f451e25d406aa0952562688c989245d [file] [log] [blame]
/* ieee802154_cc2520_regs.h - Registers definition for TI CC2520 */
/*
* Copyright (c) 2016 Intel Corporation.
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef __IEEE802154_CC2520_REGS_H__
#define __IEEE802154_CC2520_REGS_H__
/* Instructions (see chapter 13) */
#define CC2520_INS_SNOP (0x00)
#define CC2520_INS_IBUFLD (0x02)
#define CC2520_INS_SIBUFEX (0x03)
#define CC2520_INS_SSAMPLECCA (0x04)
#define CC2520_INS_SRES (0x0F)
#define CC2520_INS_MEMRD (0x10)
#define CC2520_INS_MEMWR (0x20)
#define CC2520_INS_RXBUF (0x30)
#define CC2520_INS_RXBUFCP (0x38)
#define CC2520_INS_RXBUFMOV (0x32)
#define CC2520_INS_TXBUF (0x3A)
#define CC2520_INS_TXBUFCP (0x3E)
#define CC2520_INS_RANDOM (0x3C)
#define CC2520_INS_SXOSCON (0x40)
#define CC2520_INS_STXCAL (0x41)
#define CC2520_INS_SRXON (0x42)
#define CC2520_INS_STXON (0x43)
#define CC2520_INS_STXONCCA (0x44)
#define CC2520_INS_SRFOFF (0x45)
#define CC2520_INS_SXOSCOFF (0x46)
#define CC2520_INS_SFLUSHRX (0x47)
#define CC2520_INS_SFLUSHTX (0x48)
#define CC2520_INS_SACK (0x49)
#define CC2520_INS_SACKPEND (0x4A)
#define CC2520_INS_SNACK (0x4B)
#define CC2520_INS_SRXMASKBITSET (0x4C)
#define CC2520_INS_SRXMASKBITCLR (0x4D)
#define CC2520_INS_RXMASKAND (0x4E)
#define CC2520_INS_RXMASKOR (0x4F)
#define CC2520_INS_MEMCP (0x50)
#define CC2520_INS_MEMCPR (0x52)
#define CC2520_INS_MEMXCP (0x54)
#define CC2520_INS_MEMXWR (0x56)
#define CC2520_INS_BCLR (0x58)
#define CC2520_INS_BSET (0x59)
#define CC2520_INS_CTR_UCTR (0x60)
#define CC2520_INS_CBCMAC (0x64)
#define CC2520_INS_UCBCMAC (0x66)
#define CC2520_INS_CCM (0x68)
#define CC2520_INS_UCCM (0x6A)
#define CC2520_INS_ECB (0x70)
#define CC2520_INS_ECBO (0x72)
#define CC2520_INS_ECBX (0x74)
#define CC2520_INS_INC (0x78)
#define CC2520_INS_ABORT (0x7F)
#define CC2520_INS_REGRD (0x80)
#define CC2520_INS_REGWR (0xC0)
/* FREG registers (see chapter 28 part 3) */
#define CC2520_FREG_FRMFILT0 (0x00)
#define FRMFILT0_FRAME_FILTER_EN BIT(0)
#define FRMFILT0_PAN_COORDINATOR BIT(1)
#define FRMFILT0_MAX_FRAME_VERSION(_mfv_) (_mfv_ << 2)
#define CC2520_FREG_FRMFILT1 (0x01)
#define FRMFILT1_ACCEPT_FT_0_BEACON BIT(3)
#define FRMFILT1_ACCEPT_FT_1_DATA BIT(4)
#define FRMFILT1_ACCEPT_FT_2_ACK BIT(5)
#define FRMFILT1_ACCEPT_FT_3_MAC_CMD BIT(6)
#define FRMFILT1_ACCEPT_ALL (FRMFILT1_ACCEPT_FT_0_BEACON | \
FRMFILT1_ACCEPT_FT_1_DATA | \
FRMFILT1_ACCEPT_FT_2_ACK | \
FRMFILT1_ACCEPT_FT_3_MAC_CMD)
#define CC2520_FREG_SRCMATCH (0x02)
#define SRCMATCH_SRC_MATCH_EN BIT(0)
#define SRCMATCH_AUTOPEND BIT(1)
#define SRCMATCH_PEND_DATAREQ_ONLY BIT(2)
#define SRCMATCH_DEFAULTS (SRCMATCH_SRC_MATCH_EN | \
SRCMATCH_AUTOPEND | \
SRCMATCH_PEND_DATAREQ_ONLY)
#define CC2520_FREG_SRCSHORTEN0 (0x04)
#define CC2520_FREG_SRCSHORTEN1 (0x05)
#define CC2520_FREG_SRCSHORTEN2 (0x06)
#define CC2520_FREG_SRCEXTEN0 (0x08)
#define CC2520_FREG_SRCEXTEN1 (0x09)
#define CC2520_FREG_SRCEXTEN2 (0x0A)
#define CC2520_FREG_FRMCTRL0 (0x0C)
#define FRMCTRL0_ENERGY_SCAN BIT(4)
#define FRMCTRL0_AUTOACK BIT(5)
#define FRMCTRL0_AUTOCRC BIT(6)
#define FRMCTRL0_APPEND_DATA_MODE BIT(7)
#define CC2520_FREG_FRMCTRL1 (0x0D)
#define FRMCTRL1_SET_RXENMASK_ON_TX BIT(0)
#define FRMCTRL1_IGNORE_TX_UNDERF BIT(1)
#define FRMCTRL1_PENDING_OR BIT(2)
#define CC2520_FREG_RXENABLE0 (0x0E)
#define CC2520_FREG_RXENABLE1 (0x0F)
#define CC2520_FREG_EXCFLAG0 (0x10)
#define EXCFLAG0_RF_IDLE BIT(0)
#define EXCFLAG0_TX_FRM_DONE BIT(1)
#define EXCFLAG0_TX_ACK_DONE BIT(2)
#define EXCFLAG0_TX_UNDERFLOW BIT(3)
#define EXCFLAG0_TX_OVERFLOW BIT(4)
#define EXCFLAG0_RX_UNDERFLOW BIT(5)
#define EXCFLAG0_RX_OVERFLOW BIT(6)
#define EXCFLAG0_RXENABLE_ZERO BIT(7)
#define EXCFLAG0_RESET_TX_FLAGS ((u8_t) \
~(EXCFLAG0_TX_FRM_DONE | \
EXCFLAG0_TX_ACK_DONE | \
EXCFLAG0_TX_UNDERFLOW | \
EXCFLAG0_TX_OVERFLOW))
#define EXCFLAG0_RESET_RX_FLAGS ((u8_t) \
~(EXCFLAG0_RX_UNDERFLOW | \
EXCFLAG0_RX_OVERFLOW | \
EXCFLAG0_RXENABLE_ZERO))
#define CC2520_FREG_EXCFLAG1 (0x11)
#define EXCFLAG1_RX_FRM_DONE BIT(0)
#define EXCFLAG1_RX_FRM_ACCEPTED BIT(1)
#define EXCFLAG1_SRC_MATCH_DONE BIT(2)
#define EXCFLAG1_SRC_MATCH_FOUND BIT(3)
#define EXCFLAG1_FIFOP BIT(4)
#define EXCFLAG1_SFD BIT(5)
#define EXCFLAG1_DPU_DONE_L BIT(6)
#define EXCFLAG1_DPU_DONE_H BIT(7)
#define EXCFLAG1_RESET_RX_FLAGS ((u8_t) \
~(EXCFLAG1_RX_FRM_DONE | \
EXCFLAG1_RX_FRM_ACCEPTED | \
EXCFLAG1_FIFOP))
#define CC2520_FREG_EXCFLAG2 (0x12)
#define EXCFLAG2_MEMADDR_ERROR BIT(0)
#define EXCFLAG2_USAGE_ERROR BIT(1)
#define EXCFLAG2_OPERAND_ERROR BIT(2)
#define EXCFLAG2_SPI_ERROR BIT(3)
#define EXCFLAG2_RF_NO_LOCK BIT(4)
#define EXCFLAG2_RX_FRM_ABORTED BIT(5)
#define EXCFLAG2_RFBUFMOV_TIMEOUT BIT(6)
#define EXCFLAG2_UNUSED BIT(7)
#define CC2520_FREG_EXMASKA0 (0x13)
#define CC2520_FREG_EXMASKA1 (0x14)
#define CC2520_FREG_EXMASKA2 (0x15)
#define CC2520_FREG_EXMASKB0 (0x18)
#define CC2520_FREG_EXMASKB1 (0x19)
#define CC2520_FREG_EXMASKB2 (0x1A)
#define CC2520_FREG_EXCBINDX0 (0x1C)
#define CC2520_FREG_EXCBINDX1 (0x1D)
#define CC2520_FREG_EXCBINDY0 (0x1E)
#define CC2520_FREG_EXCBINDY1 (0x1F)
#define CC2520_FREG_GPIOCTRL0 (0x20)
#define GPIOCTRL0_CTRL0(_ctrl_) (_ctrl_ & 0x7F)
#define GPIOCTRL0_IN0 BIT(7)
#define CC2520_FREG_GPIOCTRL1 (0x21)
#define GPIOCTRL1_CTRL1(_ctrl_) (_ctrl_ & 0x7F)
#define GPIOCTRL1_IN1 BIT(7)
#define CC2520_FREG_GPIOCTRL2 (0x22)
#define GPIOCTRL2_CTRL2(_ctrl_) (_ctrl_ & 0x7F)
#define GPIOCTRL2_IN2 BIT(7)
#define CC2520_FREG_GPIOCTRL3 (0x23)
#define GPIOCTRL3_CTRL3(_ctrl_) (_ctrl_ & 0x7F)
#define GPIOCTRL3_IN3 BIT(7)
#define CC2520_FREG_GPIOCTRL4 (0x24)
#define GPIOCTRL4_CTRL4(_ctrl_) (_ctrl_ & 0x7F)
#define GPIOCTRL4_IN4 BIT(7)
#define CC2520_FREG_GPIOCTRL5 (0x25)
#define GPIOCTRL5_CTRL5(_ctrl_) (_ctrl_ & 0x7F)
#define GPIOCTRL5_IN5 BIT(7)
#define CC2520_FREG_GPIOPOLARITY (0x26)
#define GPIOPOLARITY_POLARITY0 BIT(0)
#define GPIOPOLARITY_POLARITY1 BIT(1)
#define GPIOPOLARITY_POLARITY2 BIT(2)
#define GPIOPOLARITY_POLARITY3 BIT(3)
#define GPIOPOLARITY_POLARITY4 BIT(4)
#define GPIOPOLARITY_POLARITY5 BIT(5)
#define CC2520_FREG_GPIOCTRL (0x28)
#define GPIOCTRL_GPIO_PUE0 BIT(0)
#define GPIOCTRL_GPIO_PUE1 BIT(1)
#define GPIOCTRL_GPIO_PUE2 BIT(2)
#define GPIOCTRL_GPIO_PUE3 BIT(3)
#define GPIOCTRL_GPIO_PUE4 BIT(4)
#define GPIOCTRL_GPIO_PUE5 BIT(5)
#define GPIOCTRL_GPIO_ACTRL BIT(6)
#define GPIOCTRL_SC BIT(7)
#define CC2520_FREG_DPUCON (0x2A)
#define DPUCON_RXTIMEOUT BIT(0)
#define CC2520_FREG_DPUSTAT (0x2C)
#define DPUSTAT_DPUL_ACTIVE BIT(0)
#define DPUSTAT_DPUH_ACTIVE BIT(1)
#define DPUSTAT_AUTHSTAT_L BIT(2)
#define DPUSTAT_AUTHSTAT_H BIT(3)
#define CC2520_FREG_FREQCTRL (0x2E)
#define FREQCTRL_FREQ(_f_) (_f_ & 0x7F)
#define CC2520_FREG_FREQTUNE (0x2F)
#define FREQTUNE_XOSC32M_TUNE(_xt_) (_xt_ & 0x07)
#define CC2520_FREG_TXPOWER (0x30)
#define CC2520_FREG_TXCTRL (0x31)
#define CC2520_FREG_FSMSTAT0 (0x32)
#define FSMSTAT0_CAL_RUNNING BIT(6)
#define FSMSTAT0_CAL_DONE BIT(7)
#define CC2520_FREG_FSMSTAT1 (0x33)
#define FSMSTAT1_RX_ACTIVE BIT(0)
#define FSMSTAT1_TX_ACTIVE BIT(1)
#define FSMSTAT1_LOCK_STATUS BIT(2)
#define FSMSTAT1_CCA_SAMPLED BIT(3)
#define FSMSTAT1_CCA BIT(4)
#define FSMSTAT1_SFD BIT(5)
#define FSMSTAT1_FIFOP BIT(6)
#define FSMSTAT1_FIFO BIT(7)
#define CC2520_FREG_FIFOPCTRL (0x34)
#define FIFOPCTRL_FIFOP_THR(_ft_) (_ft_ & 0x7F)
#define CC2520_FREG_FSMCTRL (0x35)
#define FSMCTRL_RX2RX_TIME_OFF BIT(0)
#define FSMCTRL_SLOTTED_ACK BIT(1)
#define CC2520_FREG_CCACTRL0 (0x36)
#define CC2520_FREG_CCACTRL1 (0x37)
#define CCACTRL1_CCA_HYST(_ch_) (_ch_ & 0x07)
#define CCACTRL1_CCA_MODE(_cm_) ((_cm_ << 3) & 0x18)
#define CC2520_FREG_RSSI (0x38)
#define RSSI_RSSI_VALID BIT(0)
#define CC2520_FREG_RSSISTAT (0x39)
#define CC2520_FREG_RXFIRST (0x3C)
#define CC2520_FREG_RXFIFOCNT (0x3E)
#define CC2520_FREG_TXFIFOCNT (0x3F)
/* SREG registers (see chapter 28 part 3) */
#define CC2520_SREG_CHIPID (0x40)
#define CC2520_SREG_VERSION (0x42)
#define CC2520_SREG_EXTCLOCK (0x44)
#define EXTCLOCK_EXT_FREQ(_ef_) (_ef_ & 0x1F)
#define EXTCLOCK_EXTCLOCK_EN BIT(5)
#define CC2520_SREG_MDMCTRL0 (0x46)
#define MDMCTRL0_TX_FILTER BIT(0)
#define MDMCTRL0_PREAMBLE_LENGTH(_pl_) ((_pl_ << 1) & 0x1E)
#define MDMCTRL0_DEMOD_AVG_MODE BIT(5)
#define MDMCTRL0_DEM_NUM_ZEROS(_dnz_) ((_dnz_ << 6) & 0xC0)
#define CC2520_SREG_MDMCTRL1 (0x47)
#define MDMCTRL1_CORR_THR(_ct_) (_ct_ & 0x1F)
#define MDMCTRL1_CORR_THR_SFD BIT(5)
#define CC2520_SREG_FREQEST (0x48)
#define CC2520_SREG_MDMTEST1 (0x49)
#define MDMTEST1_MODULATION_MODE BIT(1)
#define MDMTEST1_RFC_SNIFF_EN BIT(2)
#define CC2520_SREG_RXCTRL (0x4A)
#define CC2520_SREG_FSCTRL (0x4C)
#define CC2520_SREG_FSCAL0 (0x4E)
#define CC2520_SREG_FSCAL1 (0x4F)
#define CC2520_SREG_FSCAL2 (0x50)
#define CC2520_SREG_FSCAL3 (0x51)
#define CC2520_SREG_AGCCTRL0 (0x52)
#define CC2520_SREG_AGCCTRL1 (0x53)
#define CC2520_SREG_AGCCTRL2 (0x54)
#define CC2520_SREG_AGCCTRL3 (0x55)
#define CC2520_SREG_ADCTEST0 (0x56)
#define CC2520_SREG_ADCTEST1 (0x57)
#define CC2520_SREG_ADCTEST2 (0x58)
#define CC2520_SREG_MDMTEST0 (0x5A)
#define CC2520_SREG_DACTEST0 (0x5C)
#define CC2520_SREG_DACTEST1 (0x5D)
#define CC2520_SREG_ATEST (0x5E)
#define CC2520_SREG_DACTEST2 (0x5F)
#define CC2520_SREG_PTEST0 (0x60)
#define CC2520_SREG_PTEST1 (0x61)
#define CC2520_SREG_DPUBIST (0x7A)
#define CC2520_SREG_ACTBIST (0x7C)
#define CC2520_SREG_RAMBIST (0x7E)
/* Useful RAM addresses (see chapter 15 part 6) */
#define CC2520_MEM_SHORT_ADDR (0x03F4)
#define CC2520_MEM_PAN_ID (0x03F2)
#define CC2520_MEM_EXT_ADDR (0x03EA)
#define CC2520_MEM_SRCSHORTPENDEN2 (0x03E9)
#define CC2520_MEM_SRCSHORTPENDEN1 (0x03E8)
#define CC2520_MEM_SRCSHORTPENDEN0 (0x03E7)
#define CC2520_MEM_SRCEXTPENDEN2 (0x03E6)
#define CC2520_MEM_SRCEXTPENDEN1 (0x03E5)
#define CC2520_MEM_SRCEXTPENDEN0 (0x03E4)
#define CC2520_MEM_SRCRESINDEX (0x03E3)
#define CC2520_MEM_SRCRESMASK2 (0x03E2)
#define CC2520_MEM_SRCRESMASK1 (0x03E1)
#define CC2520_MEM_SRCRESMASK0 (0x03E0)
#define CC2520_MEM_START (0x0200)
#define CC2520_MEM_DATA (CC2520_MEM_START)
#define CC2520_MEM_KEY_POS (0x90)
#define CC2520_MEM_KEY (CC2520_MEM_START + \
CC2520_MEM_KEY_POS)
#define CC2520_MEM_NONCE_POS (0xa0)
#define CC2520_MEM_NONCE (CC2520_MEM_START + \
CC2520_MEM_NONCE_POS)
/* Default settings (see chapter 28 part 1) */
#define CC2520_TXPOWER_DEFAULT (0x32)
#define CC2520_CCACTRL0_DEFAULT (0xF8)
#define CC2520_MDMCTRL0_DEFAULT (0x85)
#define CC2520_MDMCTRL1_DEFAULT (0x14)
#define CC2520_RXCTRL_DEFAULT (0x3F)
#define CC2520_FSCTRL_DEFAULT (0x5A)
#define CC2520_FSCAL1_DEFAULT (0x2B)
#define CC2520_AGCCTRL1_DEFAULT (0x11)
#define CC2520_ADCTEST0_DEFAULT (0x10)
#define CC2520_ADCTEST1_DEFAULT (0x0E)
#define CC2520_ADCTEST2_DEFAULT (0x03)
/* Status bits (see chapter 13 part 4) */
#define CC2520_STATUS_RX_ACTIVE BIT(0)
#define CC2520_STATUS_TX_ACTIVE BIT(1)
#define CC2520_STATUS_DPU_L_ACTIVE BIT(2)
#define CC2520_STATUS_DPU_H_ACTIVE BIT(3)
#define CC2520_STATUS_EXCEPTION_CHANNEL_B BIT(4)
#define CC2520_STATUS_EXCEPTION_CHANNEL_A BIT(5)
#define CC2520_STATUS_RSSI_VALID BIT(6)
#define CC2520_STATUS_XOSC_STABLE_N_RUNNING BIT(7)
#define CC2520_FCS_CRC_OK (0x80)
#define CC2520_FCS_CORRELATION (0x7f)
#endif /* __IEEE802154_CC2520_REGS_H__ */