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"
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... | |
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 |