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 "net/ieee802154.h"
#include "kernel_defines.h"
#include "net/netdev.h"
#include "net/netdev/ieee802154.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... | |
Functions | |
void | cc2538_irq_handler (void) |
IRQ handler for RF events. More... | |
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. More... | |
bool | cc2538_is_on (void) |
Check if device is active. More... | |
void | cc2538_off (void) |
Deactivate the CC2538 radio device. More... | |
bool | cc2538_on (void) |
Activate the CC2538 radio device. More... | |
void | cc2538_setup (cc2538_rf_t *dev) |
Setup a CC2538 radio device for use with netdev. 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 | CC2538_AUTOCRC_LEN (2) |
#define | CC2538_RF_FIFO_SIZE (128) |
#define | CC2538_PACKET_LENGTH_SIZE (1) |
#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_2_ACK (1 << 5) |
enable or disable the ACK 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 | 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) } |
enum | { SET_RXENMASK_ON_TX = BIT(0), IGNORE_TX_UNDERF = BIT(1), PENDING_OR = BIT(2) } |
enum | { ENERGY_SCAN = BIT(4), AUTOACK = BIT(5), AUTOCRC = BIT(6), APPEND_DATA_MODE = BIT(7) } |
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) } |
enum | { TXACKDONE = BIT(0), TXDONE = BIT(1), RF_IDLE = BIT(2), CSP_MANINT = BIT(3), CSP_STOP = BIT(4), CSP_WAIT = BIT(5) } |
enum | { rfc_obs_sig0 = 0, rfc_obs_sig1 = 1, rfc_obs_sig2 = 2 } |
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 } |
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) */ |
#define IEEE802154_MAX_FREQ (2480) |
#define IEEE802154_MIN_FREQ (2405) |
#define RFCORE_WAIT_UNTIL | ( | expr | ) |
Definition at line 119 of file cc2538_rf.h.
anonymous enum |
Enumerator | |
---|---|
SFD | Start of frame event. |
RXPKTDONE | End of frame event. |
Definition at line 177 of file cc2538_rf.h.
anonymous enum |
Definition at line 208 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.
void cc2538_init | ( | void | ) |
Initialise the CC2538 radio hardware.
void cc2538_irq_handler | ( | void | ) |
IRQ handler for RF events.
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_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 for use with netdev.
[out] | dev | Device descriptor |