Low-level radio driver for the CC2538. More...
Low-level radio driver for the CC2538.
Definition in file cc2538_rf.h.
#include <stdbool.h>
#include "board.h"
#include "cc2538_rfcore.h"
#include "net/ieee802154.h"
#include "kernel_defines.h"
#include "net/ieee802154/radio.h"
#include "net/netopt.h"
Go to the source code of this file.
Data Structures | |
struct | cc2538_rf_t |
Device descriptor for CC2538 transceiver. More... | |
#define | CC2538_AUTOCRC_LEN (2) |
#define | CC2538_RF_FIFO_SIZE (128) |
#define | CC2538_PACKET_LENGTH_SIZE (1) |
#define | CC2538_LENGTH_BYTE_MASK (0x7F) |
Mask for the length byte in the packet. | |
#define | CC2538_RF_MAX_DATA_LEN (CC2538_RF_FIFO_SIZE - CC2538_PACKET_LENGTH_SIZE) |
#define | IEEE802154_MIN_FREQ (2405) |
Min. | |
#define | IEEE802154_MAX_FREQ (2480) |
Max. | |
#define | IEEE802154_CHANNEL_SPACING (5) |
Channel spacing in MHz | |
#define | IEEE802154_CHAN2FREQ(chan) ( IEEE802154_MIN_FREQ + ((chan) - IEEE802154_CHANNEL_MIN) * IEEE802154_CHANNEL_SPACING ) |
#define | IEEE802154_FREQ2CHAN(freq) ( IEEE802154_CHANNEL_MIN + ((freq) - IEEE802154_MIN_FREQ) / IEEE802154_CHANNEL_SPACING ) |
#define | CC2538_MIN_FREQ (2394) |
#define | CC2538_MAX_FREQ (2507) |
#define | CC2538_RF_POWER_DEFAULT (CONFIG_IEEE802154_DEFAULT_TXPOWER) |
Default output power in dBm. | |
#define | CC2538_RF_CHANNEL_DEFAULT (CONFIG_IEEE802154_DEFAULT_CHANNEL) |
#define | OUTPUT_POWER_MIN (-24) |
Min output power in dBm. | |
#define | OUTPUT_POWER_MAX (7) |
Max output power in dBm. | |
#define | NUM_POWER_LEVELS ( OUTPUT_POWER_MAX - OUTPUT_POWER_MIN + 1 ) |
#define | CC2538_CORR_VAL_MIN (50U) |
#define | CC2538_CORR_VAL_MAX (110U) |
#define | CC2538_CORR_VAL_MASK (0x7F) |
#define | CC2538_CRC_BIT_MASK (0x80) |
#define | CC2538_CCA_THR_MASK (0x000000FF) |
CCA Threshold mask. | |
#define | CC2538_CCA_MODE_MASK (0x18) |
CCA Mode mask. | |
#define | CC2538_CCA_MODE_POS (3U) |
CCA Mode pos. | |
#define | CC2538_CSP_SKIP_INST_MASK (0x70) |
CSP Skip instruction mask. | |
#define | CC2538_CSP_SKIP_INST_POS (4U) |
CSP Skip instruction pos. | |
#define | CC2538_CSP_SKIP_N_MASK (0x08) |
CSP Skip condition negation mask. | |
#define | CC2538_CSP_SKIP_COND_CCA (0x00) |
CSP Skip condition is valid CCA. | |
#define | CC2538_CSP_SKIP_COND_CSPZ (0x06) |
CSP Skip condition is CSPZ is 0. | |
#define | CC2538_CSP_SKIP_COND_RSSI (0x07) |
CSP Skip condition is valid RSSI. | |
#define | CC2538_SFR_MTMSEL_MASK (0x7) |
MAC Timer selection mask. | |
#define | CC2538_SFR_MTMSEL_TIMER_P (0x2) |
Selects Timer period. | |
#define | CC2538_MCTRL_SYNC_MASK (0x2) |
Sync MAC Timer to external clock. | |
#define | CC2538_MCTRL_RUN_MASK (0x1) |
Run MAC Timer. | |
#define | CC2538_CSP_MCU_CTRL_MASK (0x1) |
MCU Ctrl mask. | |
#define | CC2538_CSP_INCMAXY_MAX_MASK (0x7) |
CSP INCMAXY instruction (increment Register CSPX without exceeding CSPY) | |
#define | CC2538_RXENABLE_RXON_MASK (0x80) |
RX on mask. | |
#define | CC2538_RSSI_OFFSET (-73) |
Signal strength offset value. | |
#define | CC2538_RF_SENSITIVITY (-97) |
dBm typical, normal conditions | |
#define | CC2538_ACCEPT_FT_0_BEACON (1 << 3) |
enable or disable the BEACON filter | |
#define | CC2538_ACCEPT_FT_1_DATA (1 << 4) |
enable or disable the DATA filter | |
#define | CC2538_ACCEPT_FT_2_ACK (1 << 5) |
enable or disable the ACK filter | |
#define | CC2538_ACCEPT_FT_3_CMD (1 << 6) |
enable or disable the CMD filter | |
#define | CC2538_STATE_SFD_WAIT_RANGE_MIN (0x03U) |
min range value of SFD wait state | |
#define | CC2538_STATE_SFD_WAIT_RANGE_MAX (0x06U) |
max range value of SFD wait state | |
#define | CC2538_FRMCTRL1_PENDING_OR_MASK (0x04) |
mask for enabling or disabling the frame pending bit | |
#define | CC2538_FRMCTRL0_RX_MODE_DIS (0xC) |
mask for disabling RX Chain during CCA | |
#define | RFCORE_ASSERT(expr) (void)( (expr) || RFCORE_ASSERT_failure(#expr, __FUNCTION__, __LINE__) ) |
#define | RFCORE_WAIT_UNTIL(expr) |
#define | RFCORE_FLUSH_RECEIVE_FIFO() rfcore_strobe(ISFLUSHRX) |
#define | ABS_DIFF(x, y) ( ((x) < (y))? ((y) - (x)) : ((x) - (y)) ) |
#define | BOOLEAN(x) ( (x) != 0 ) |
#define | NOT(x) ( (x) == 0 ) |
#define | GET_BYTE(buffer, index) ( (unsigned char*)(buffer) )[index] |
#define | BIT(n) ( 1 << (n) ) |
enum | { FSM_STATE_IDLE = 0 , FSM_STATE_RX_CALIBRATION = 2 , FSM_STATE_TX_CALIBRATION = 32 } |
enum | { STROBE_ERR = BIT(6) , TXUNDERF = BIT(5) , TXOVERF = BIT(4) , RXUNDERF = BIT(3) , RXOVERF = BIT(2) , RXABO = BIT(1) , NLOCK = BIT(0) } |
RFCORE_XREG_RFERRM bits. More... | |
enum | { SET_RXENMASK_ON_TX = BIT(0) , IGNORE_TX_UNDERF = BIT(1) , PENDING_OR = BIT(2) } |
RFCORE_XREG_FRMCTRL0 bits. More... | |
enum | { ENERGY_SCAN = BIT(4) , AUTOACK = BIT(5) , AUTOCRC = BIT(6) , APPEND_DATA_MODE = BIT(7) } |
RFCORE_XREG_FRMCTRL1 bits. More... | |
enum | { ACT_UNUSED = BIT(0) , SFD = BIT(1) , FIFOP = BIT(2) , SRC_MATCH_DONE = BIT(3) , SRC_MATCH_FOUND = BIT(4) , FRAME_ACCEPTED = BIT(5) , RXPKTDONE = BIT(6) , RXMASKZERO = BIT(7) } |
RFCORE_XREG_RFIRQM0 / RFCORE_XREG_RFIRQF0 bits. More... | |
enum | { TXACKDONE = BIT(0) , TXDONE = BIT(1) , RF_IDLE = BIT(2) , CSP_MANINT = BIT(3) , CSP_STOP = BIT(4) , CSP_WAIT = BIT(5) } |
RFCORE_XREG_RFIRQM1 / RFCORE_XREG_RFIRQF1 bits. More... | |
enum | { rfc_obs_sig0 = 0 , rfc_obs_sig1 = 1 , rfc_obs_sig2 = 2 } |
Values for use with CCTEST_OBSSELx registers. More... | |
enum | { constant_value_0 = 0x00 , constant_value_1 = 0x01 , rfc_sniff_data = 0x08 , rfc_sniff_clk = 0x09 , rssi_valid = 0x0c , demod_cca = 0x0d , sampled_cca = 0x0e , sfd_sync = 0x0f , tx_active = 0x10 , rx_active = 0x11 , ffctrl_fifo = 0x12 , ffctrl_fifop = 0x13 , packet_done = 0x14 , rfc_xor_rand_i_q = 0x16 , rfc_rand_q = 0x17 , rfc_rand_i = 0x18 , lock_status = 0x19 , pa_pd = 0x20 , lna_pd = 0x2a , disabled = 0xff } |
Values for RFCORE_XREG_RFC_OBS_CTRLx registers. More... | |
RF CORE observable signals settings | |
#define | CONFIG_CC2538_RF_OBS_0 tx_active |
#define | CONFIG_CC2538_RF_OBS_1 rx_active |
#define | CONFIG_CC2538_RF_OBS_2 rssi_valid |
#define | CONFIG_CC2538_RF_OBS_SIG_0_PCX 0 /* PC0 = LED_1 (red) */ |
#define | CONFIG_CC2538_RF_OBS_SIG_1_PCX 1 /* PC0 = LED_2 (red) */ |
#define | CONFIG_CC2538_RF_OBS_SIG_2_PCX 2 /* PC0 = LED_3 (red) */ |
void | cc2538_rf_hal_setup (ieee802154_dev_t *hal) |
Setup CC2538 in order to be used with the IEEE 802.15.4 Radio HAL. | |
static void | cc2538_rf_enable_irq (void) |
Enable CC2538 RF IRQs. | |
static void | cc2538_rf_disable_irq (void) |
Disable CC2538 RF IRQs. | |
void | cc2538_irq_handler (void) |
IRQ handler for RF events. | |
bool | cc2538_channel_clear (void) |
Trigger a clear channel assessment. | |
void | cc2538_get_addr_long (uint8_t *addr) |
Get the configured long address of the device. | |
void | cc2538_get_addr_short (uint8_t *addr) |
Get the configured short address of the device. | |
unsigned int | cc2538_get_chan (void) |
Get the configured channel number of the device. | |
bool | cc2538_get_monitor (void) |
Check if device is in monitor (promiscuous) mode. | |
uint16_t | cc2538_get_pan (void) |
Get the configured PAN ID of the device. | |
int | cc2538_get_tx_power (void) |
Get the configured transmission power of the device. | |
void | cc2538_init (void) |
Initialise the CC2538 radio hardware. | |
bool | cc2538_is_on (void) |
Check if device is active. | |
void | cc2538_off (void) |
Deactivate the CC2538 radio device. | |
bool | cc2538_on (void) |
Activate the CC2538 radio device. | |
void | cc2538_setup (cc2538_rf_t *dev) |
Setup a CC2538 radio device. | |
void | cc2538_set_addr_short (const uint8_t *addr) |
Set the short address of the device. | |
void | cc2538_set_addr_long (const uint8_t *addr) |
Set the long address of the device. | |
void | cc2538_set_chan (unsigned int chan) |
Set the channel number of the device. | |
void | cc2538_set_freq (unsigned int MHz) |
Set the frequency of the device. | |
void | cc2538_set_monitor (bool mode) |
Enable/disable monitor (promiscuous) mode for the device. | |
void | cc2538_set_pan (uint16_t pan) |
Set the PAN ID of the device. | |
void | cc2538_set_state (cc2538_rf_t *dev, netopt_state_t state) |
Set the state of the device. | |
void | cc2538_set_tx_power (int dBm) |
Set the transmission power for the device. | |
#define ABS_DIFF | ( | x, | |
y | |||
) | ( ((x) < (y))? ((y) - (x)) : ((x) - (y)) ) |
Definition at line 128 of file cc2538_rf.h.
#define BIT | ( | n | ) | ( 1 << (n) ) |
Definition at line 133 of file cc2538_rf.h.
#define BOOLEAN | ( | x | ) | ( (x) != 0 ) |
Definition at line 129 of file cc2538_rf.h.
#define CC2538_ACCEPT_FT_0_BEACON (1 << 3) |
enable or disable the BEACON filter
Definition at line 104 of file cc2538_rf.h.
#define CC2538_ACCEPT_FT_1_DATA (1 << 4) |
enable or disable the DATA filter
Definition at line 105 of file cc2538_rf.h.
#define CC2538_ACCEPT_FT_2_ACK (1 << 5) |
enable or disable the ACK filter
Definition at line 106 of file cc2538_rf.h.
#define CC2538_ACCEPT_FT_3_CMD (1 << 6) |
enable or disable the CMD filter
Definition at line 107 of file cc2538_rf.h.
#define CC2538_AUTOCRC_LEN (2) |
Definition at line 41 of file cc2538_rf.h.
#define CC2538_CCA_MODE_MASK (0x18) |
CCA Mode mask.
Definition at line 77 of file cc2538_rf.h.
#define CC2538_CCA_MODE_POS (3U) |
CCA Mode pos.
Definition at line 78 of file cc2538_rf.h.
#define CC2538_CCA_THR_MASK (0x000000FF) |
CCA Threshold mask.
Definition at line 75 of file cc2538_rf.h.
#define CC2538_CORR_VAL_MASK (0x7F) |
Definition at line 71 of file cc2538_rf.h.
#define CC2538_CORR_VAL_MAX (110U) |
Definition at line 70 of file cc2538_rf.h.
#define CC2538_CORR_VAL_MIN (50U) |
Definition at line 69 of file cc2538_rf.h.
#define CC2538_CRC_BIT_MASK (0x80) |
Definition at line 73 of file cc2538_rf.h.
#define CC2538_CSP_INCMAXY_MAX_MASK (0x7) |
CSP INCMAXY instruction (increment Register CSPX without exceeding CSPY)
Definition at line 97 of file cc2538_rf.h.
#define CC2538_CSP_MCU_CTRL_MASK (0x1) |
MCU Ctrl mask.
Definition at line 94 of file cc2538_rf.h.
#define CC2538_CSP_SKIP_COND_CCA (0x00) |
CSP Skip condition is valid CCA.
Definition at line 85 of file cc2538_rf.h.
#define CC2538_CSP_SKIP_COND_CSPZ (0x06) |
CSP Skip condition is CSPZ is 0.
Definition at line 86 of file cc2538_rf.h.
#define CC2538_CSP_SKIP_COND_RSSI (0x07) |
CSP Skip condition is valid RSSI.
Definition at line 87 of file cc2538_rf.h.
#define CC2538_CSP_SKIP_INST_MASK (0x70) |
CSP Skip instruction mask.
Definition at line 80 of file cc2538_rf.h.
#define CC2538_CSP_SKIP_INST_POS (4U) |
CSP Skip instruction pos.
Definition at line 81 of file cc2538_rf.h.
#define CC2538_CSP_SKIP_N_MASK (0x08) |
CSP Skip condition negation mask.
Definition at line 83 of file cc2538_rf.h.
#define CC2538_FRMCTRL0_RX_MODE_DIS (0xC) |
mask for disabling RX Chain during CCA
Definition at line 113 of file cc2538_rf.h.
#define CC2538_FRMCTRL1_PENDING_OR_MASK (0x04) |
mask for enabling or disabling the frame pending bit
Definition at line 111 of file cc2538_rf.h.
#define CC2538_LENGTH_BYTE_MASK (0x7F) |
Mask for the length byte in the packet.
Definition at line 44 of file cc2538_rf.h.
#define CC2538_MAX_FREQ (2507) |
Definition at line 60 of file cc2538_rf.h.
#define CC2538_MCTRL_RUN_MASK (0x1) |
Run MAC Timer.
Definition at line 92 of file cc2538_rf.h.
#define CC2538_MCTRL_SYNC_MASK (0x2) |
Sync MAC Timer to external clock.
Definition at line 91 of file cc2538_rf.h.
#define CC2538_MIN_FREQ (2394) |
Definition at line 59 of file cc2538_rf.h.
#define CC2538_PACKET_LENGTH_SIZE (1) |
Definition at line 43 of file cc2538_rf.h.
#define CC2538_RF_CHANNEL_DEFAULT (CONFIG_IEEE802154_DEFAULT_CHANNEL) |
Definition at line 63 of file cc2538_rf.h.
#define CC2538_RF_FIFO_SIZE (128) |
Definition at line 42 of file cc2538_rf.h.
#define CC2538_RF_MAX_DATA_LEN (CC2538_RF_FIFO_SIZE - CC2538_PACKET_LENGTH_SIZE) |
Definition at line 46 of file cc2538_rf.h.
#define CC2538_RF_POWER_DEFAULT (CONFIG_IEEE802154_DEFAULT_TXPOWER) |
Default output power in dBm.
Definition at line 62 of file cc2538_rf.h.
#define CC2538_RF_SENSITIVITY (-97) |
dBm typical, normal conditions
Definition at line 102 of file cc2538_rf.h.
#define CC2538_RSSI_OFFSET (-73) |
Signal strength offset value.
Definition at line 101 of file cc2538_rf.h.
#define CC2538_RXENABLE_RXON_MASK (0x80) |
RX on mask.
Definition at line 99 of file cc2538_rf.h.
#define CC2538_SFR_MTMSEL_MASK (0x7) |
MAC Timer selection mask.
Definition at line 89 of file cc2538_rf.h.
#define CC2538_SFR_MTMSEL_TIMER_P (0x2) |
Selects Timer period.
Definition at line 90 of file cc2538_rf.h.
#define CC2538_STATE_SFD_WAIT_RANGE_MAX (0x06U) |
max range value of SFD wait state
Definition at line 109 of file cc2538_rf.h.
#define CC2538_STATE_SFD_WAIT_RANGE_MIN (0x03U) |
min range value of SFD wait state
Definition at line 108 of file cc2538_rf.h.
#define CONFIG_CC2538_RF_OBS_0 tx_active |
Definition at line 261 of file cc2538_rf.h.
#define CONFIG_CC2538_RF_OBS_1 rx_active |
Definition at line 264 of file cc2538_rf.h.
#define CONFIG_CC2538_RF_OBS_2 rssi_valid |
Definition at line 267 of file cc2538_rf.h.
#define CONFIG_CC2538_RF_OBS_SIG_0_PCX 0 /* PC0 = LED_1 (red) */ |
Definition at line 272 of file cc2538_rf.h.
#define CONFIG_CC2538_RF_OBS_SIG_1_PCX 1 /* PC0 = LED_2 (red) */ |
Definition at line 275 of file cc2538_rf.h.
#define CONFIG_CC2538_RF_OBS_SIG_2_PCX 2 /* PC0 = LED_3 (red) */ |
Definition at line 278 of file cc2538_rf.h.
#define GET_BYTE | ( | buffer, | |
index | |||
) | ( (unsigned char*)(buffer) )[index] |
Definition at line 131 of file cc2538_rf.h.
#define IEEE802154_CHAN2FREQ | ( | chan | ) | ( IEEE802154_MIN_FREQ + ((chan) - IEEE802154_CHANNEL_MIN) * IEEE802154_CHANNEL_SPACING ) |
Definition at line 55 of file cc2538_rf.h.
#define IEEE802154_CHANNEL_SPACING (5) |
Channel spacing in MHz
Definition at line 53 of file cc2538_rf.h.
#define IEEE802154_FREQ2CHAN | ( | freq | ) | ( IEEE802154_CHANNEL_MIN + ((freq) - IEEE802154_MIN_FREQ) / IEEE802154_CHANNEL_SPACING ) |
Definition at line 56 of file cc2538_rf.h.
#define IEEE802154_MAX_FREQ (2480) |
#define IEEE802154_MIN_FREQ (2405) |
#define NOT | ( | x | ) | ( (x) == 0 ) |
Definition at line 130 of file cc2538_rf.h.
#define NUM_POWER_LEVELS ( OUTPUT_POWER_MAX - OUTPUT_POWER_MIN + 1 ) |
Definition at line 67 of file cc2538_rf.h.
#define OUTPUT_POWER_MAX (7) |
Max output power in dBm.
Definition at line 66 of file cc2538_rf.h.
#define OUTPUT_POWER_MIN (-24) |
Min output power in dBm.
Definition at line 65 of file cc2538_rf.h.
#define RFCORE_ASSERT | ( | expr | ) | (void)( (expr) || RFCORE_ASSERT_failure(#expr, __FUNCTION__, __LINE__) ) |
Definition at line 115 of file cc2538_rf.h.
#define RFCORE_FLUSH_RECEIVE_FIFO | ( | ) | rfcore_strobe(ISFLUSHRX) |
Definition at line 126 of file cc2538_rf.h.
#define RFCORE_WAIT_UNTIL | ( | expr | ) |
Definition at line 118 of file cc2538_rf.h.
anonymous enum |
Definition at line 135 of file cc2538_rf.h.
anonymous enum |
RFCORE_XREG_RFERRM bits.
Definition at line 144 of file cc2538_rf.h.
anonymous enum |
RFCORE_XREG_FRMCTRL0 bits.
Definition at line 157 of file cc2538_rf.h.
anonymous enum |
RFCORE_XREG_FRMCTRL1 bits.
Definition at line 166 of file cc2538_rf.h.
anonymous enum |
RFCORE_XREG_RFIRQM0 / RFCORE_XREG_RFIRQF0 bits.
Enumerator | |
---|---|
SFD | Start of frame event. |
RXPKTDONE | End of frame event. |
Definition at line 176 of file cc2538_rf.h.
anonymous enum |
RFCORE_XREG_RFIRQM1 / RFCORE_XREG_RFIRQF1 bits.
Definition at line 190 of file cc2538_rf.h.
anonymous enum |
Values for use with CCTEST_OBSSELx registers.
Definition at line 202 of file cc2538_rf.h.
anonymous enum |
Values for RFCORE_XREG_RFC_OBS_CTRLx registers.
Definition at line 211 of file cc2538_rf.h.
bool cc2538_channel_clear | ( | void | ) |
Trigger a clear channel assessment.
void cc2538_get_addr_long | ( | uint8_t * | addr | ) |
Get the configured long address of the device.
[out] | addr | The currently set (8-byte) long address |
void cc2538_get_addr_short | ( | uint8_t * | addr | ) |
Get the configured short address of the device.
[out] | addr | The currently set (2-byte) short address |
unsigned int cc2538_get_chan | ( | void | ) |
Get the configured channel number of the device.
bool cc2538_get_monitor | ( | void | ) |
Check if device is in monitor (promiscuous) mode.
uint16_t cc2538_get_pan | ( | void | ) |
Get the configured PAN ID of the device.
int cc2538_get_tx_power | ( | void | ) |
Get the configured transmission power of the device.
bool cc2538_is_on | ( | void | ) |
Check if device is active.
|
inlinestatic |
Disable CC2538 RF IRQs.
Definition at line 314 of file cc2538_rf.h.
|
inlinestatic |
Enable CC2538 RF IRQs.
Definition at line 305 of file cc2538_rf.h.
void cc2538_rf_hal_setup | ( | ieee802154_dev_t * | hal | ) |
Setup CC2538 in order to be used with the IEEE 802.15.4 Radio HAL.
[in] | hal | pointer to the HAL descriptor associated to the device. |
void cc2538_set_addr_long | ( | const uint8_t * | addr | ) |
Set the long address of the device.
[in] | addr | (8-byte) short address to set |
void cc2538_set_addr_short | ( | const uint8_t * | addr | ) |
Set the short address of the device.
[in] | addr | (2-byte) short address to set |
void cc2538_set_chan | ( | unsigned int | chan | ) |
Set the channel number of the device.
[in] | chan | Channel number to set |
void cc2538_set_freq | ( | unsigned int | MHz | ) |
Set the frequency of the device.
[in] | MHz | Frequency to set in MHz |
void cc2538_set_monitor | ( | bool | mode | ) |
Enable/disable monitor (promiscuous) mode for the device.
[in] | mode | True for enable, false for disable |
void cc2538_set_pan | ( | uint16_t | pan | ) |
Set the PAN ID of the device.
[in] | pan | PAN ID to set |
void cc2538_set_state | ( | cc2538_rf_t * | dev, |
netopt_state_t | state | ||
) |
Set the state of the device.
[out] | dev | Device descriptor |
[in] | state | State to set device to |
void cc2538_set_tx_power | ( | int | dBm | ) |
Set the transmission power for the device.
[in] | dBm | Transmission power to set in dBm |
void cc2538_setup | ( | cc2538_rf_t * | dev | ) |
Setup a CC2538 radio device.
[out] | dev | Device descriptor |