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"
 Include dependency graph for cc2538_rf.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.  More... | |
| #define | IEEE802154_MAX_FREQ (2480) | 
| Max.  More... | |
| #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.  | |
| enum | { SET_RXENMASK_ON_TX = BIT(0) , IGNORE_TX_UNDERF = BIT(1) , PENDING_OR = BIT(2) } | 
| RFCORE_XREG_FRMCTRL0 bits.  | |
| enum | { ENERGY_SCAN = BIT(4) , AUTOACK = BIT(5) , AUTOCRC = BIT(6) , APPEND_DATA_MODE = BIT(7) } | 
| RFCORE_XREG_FRMCTRL1 bits.  | |
| 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.  | |
| enum | { rfc_obs_sig0 = 0 , rfc_obs_sig1 = 1 , rfc_obs_sig2 = 2 } | 
| Values for use with CCTEST_OBSSELx registers.  | |
| 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.  More... | |
| 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.  More... | |
| void | cc2538_get_addr_long (uint8_t *addr) | 
| Get the configured long address of the device.  More... | |
| void | cc2538_get_addr_short (uint8_t *addr) | 
| Get the configured short address of the device.  More... | |
| unsigned int | cc2538_get_chan (void) | 
| Get the configured channel number of the device.  More... | |
| bool | cc2538_get_monitor (void) | 
| Check if device is in monitor (promiscuous) mode.  More... | |
| uint16_t | cc2538_get_pan (void) | 
| Get the configured PAN ID of the device.  More... | |
| int | cc2538_get_tx_power (void) | 
| Get the configured transmission power of the device.  More... | |
| void | cc2538_init (void) | 
| Initialise the CC2538 radio hardware.  | |
| bool | cc2538_is_on (void) | 
| Check if device is active.  More... | |
| 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.  More... | |
| void | cc2538_set_addr_short (const uint8_t *addr) | 
| Set the short address of the device.  More... | |
| void | cc2538_set_addr_long (const uint8_t *addr) | 
| Set the long address of the device.  More... | |
| void | cc2538_set_chan (unsigned int chan) | 
| Set the channel number of the device.  More... | |
| void | cc2538_set_freq (unsigned int MHz) | 
| Set the frequency of the device.  More... | |
| void | cc2538_set_monitor (bool mode) | 
| Enable/disable monitor (promiscuous) mode for the device.  More... | |
| void | cc2538_set_pan (uint16_t pan) | 
| Set the PAN ID of the device.  More... | |
| void | cc2538_set_state (cc2538_rf_t *dev, netopt_state_t state) | 
| Set the state of the device.  More... | |
| void | cc2538_set_tx_power (int dBm) | 
| Set the transmission power for the device.  More... | |
| #define IEEE802154_MAX_FREQ (2480) | 
| #define IEEE802154_MIN_FREQ (2405) | 
| #define RFCORE_WAIT_UNTIL | ( | expr | ) | 
Definition at line 113 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 171 of file cc2538_rf.h.
| anonymous enum | 
Values for RFCORE_XREG_RFC_OBS_CTRLx registers.
Definition at line 206 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.
| 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 |