30 #define KW41ZRF_PM_BLOCKER KINETIS_PM_VLPS
33 #ifndef KW41ZRF_ENABLE_LEDS
34 #define KW41ZRF_ENABLE_LEDS (0)
37 #if KW41ZRF_ENABLE_LEDS
40 #if !defined(KW41ZRF_LED_RX_ON)
42 #define KW41ZRF_LED_RX_ON LED0_ON
43 #define KW41ZRF_LED_RX_OFF LED0_OFF
45 #define KW41ZRF_LED_RX_ON
46 #define KW41ZRF_LED_RX_OFF
49 #if !defined(KW41ZRF_LED_TX_ON)
52 #define KW41ZRF_LED_TX_ON LED1_ON
53 #define KW41ZRF_LED_TX_OFF LED1_OFF
54 #elif defined(LED0_ON)
56 #define KW41ZRF_LED_TX_ON LED0_ON
57 #define KW41ZRF_LED_TX_OFF LED0_OFF
59 #define KW41ZRF_LED_TX_ON
60 #define KW41ZRF_LED_TX_OFF
63 #if !defined(KW41ZRF_LED_NDSM_ON)
65 #define KW41ZRF_LED_NDSM_ON LED2_ON
66 #define KW41ZRF_LED_NDSM_OFF LED2_OFF
68 #define KW41ZRF_LED_NDSM_ON
69 #define KW41ZRF_LED_NDSM_OFF
72 #if !defined(KW41ZRF_LED_IRQ_ON)
74 #define KW41ZRF_LED_IRQ_ON LED3_ON
75 #define KW41ZRF_LED_IRQ_OFF LED3_OFF
77 #define KW41ZRF_LED_IRQ_ON
78 #define KW41ZRF_LED_IRQ_OFF
82 #define KW41ZRF_LED_NDSM_ON
83 #define KW41ZRF_LED_NDSM_OFF
84 #define KW41ZRF_LED_TX_ON
85 #define KW41ZRF_LED_TX_OFF
86 #define KW41ZRF_LED_RX_ON
87 #define KW41ZRF_LED_RX_OFF
88 #define KW41ZRF_LED_IRQ_ON
89 #define KW41ZRF_LED_IRQ_OFF
108 KW41ZRF_TIMEBASE_500000HZ = 0b010,
109 KW41ZRF_TIMEBASE_250000HZ = 0b011,
110 KW41ZRF_TIMEBASE_125000HZ = 0b100,
111 KW41ZRF_TIMEBASE_62500HZ = 0b101,
112 KW41ZRF_TIMEBASE_31250HZ = 0b110,
113 KW41ZRF_TIMEBASE_15625HZ = 0b111,
121 NVIC_DisableIRQ(Radio_1_IRQn);
122 NVIC_ClearPendingIRQ(Radio_1_IRQn);
131 NVIC_EnableIRQ(Radio_1_IRQn);
179 ZLL->PHY_CTRL = (ZLL->PHY_CTRL &
180 ~(ZLL_PHY_CTRL_XCVSEQ_MASK |
181 ZLL_PHY_CTRL_TC3TMOUT_MASK | ZLL_PHY_CTRL_TMRTRIGEN_MASK)) |
182 ZLL_PHY_CTRL_XCVSEQ(XCVSEQ_IDLE) | ZLL_PHY_CTRL_SEQMSK_MASK;
185 while (!(ZLL->SEQ_CTRL_STS & ZLL_SEQ_CTRL_STS_SEQ_IDLE_MASK)) {}
188 uint32_t irqsts = ZLL->IRQSTS;
189 ZLL->IRQSTS = irqsts;
200 return (RSIM->DSM_CONTROL & RSIM_DSM_CONTROL_ZIG_DEEP_SLEEP_STATUS_MASK);
212 ZLL->EVENT_TMR = ZLL_EVENT_TMR_EVENT_TMR(value) | ZLL_EVENT_TMR_EVENT_TMR_LD_MASK;
225 return (ZLL->EVENT_TMR & ZLL_EVENT_TMR_EVENT_TMR_MASK) >> ZLL_EVENT_TMR_EVENT_TMR_SHIFT;
239 *cmp_reg =
now + timeout;
255 ZLL->TMR_PRESCALE = (ZLL->TMR_PRESCALE & ~ZLL_TMR_PRESCALE_TMR_PRESCALE_MASK) |
256 ZLL_TMR_PRESCALE_TMR_PRESCALE(tb);
274 return ZLL->TIMESTAMP;
Interface definition for the kw41zrf driver.
get/set interfaces for kw41zrf driver
void kw41zrf_set_power_mode(kw41zrf_t *dev, kw41zrf_powermode_t pm)
Set power mode for device.
static uint32_t kw41zrf_get_timestamp(kw41zrf_t *dev)
Returns timestamp of the beginning of the most recently received packet.
static uint32_t kw41zrf_timer_get(kw41zrf_t *dev)
Get current event timer counter value.
kw41zrf_timer_timebase
Timebase settings.
static void kw41zrf_unmask_irqs(void)
Unmask all transceiver interrupts.
static uint32_t kw41zrf_is_dsm(void)
Check if the radio is in deep sleep mode.
static void kw41zrf_mask_irqs(void)
Mask all transceiver interrupts.
int kw41zrf_can_switch_to_idle(kw41zrf_t *dev)
Determine if the transceiver is busy doing TX or RX.
static void kw41zrf_timer_load(kw41zrf_t *dev, uint32_t value)
Set event timer counter value.
static void kw41zrf_timer_set(kw41zrf_t *dev, volatile uint32_t *cmp_reg, uint32_t timeout)
Set a timeout value for the given compare register of the Event Timer.
kw41zrf_powermode_t
KW41Z transceiver power modes.
@ KW41ZRF_POWER_IDLE
All parts powered.
@ KW41ZRF_POWER_DSM
Deep sleep mode.
void kw41zrf_set_irq_callback(void(*cb)(void *arg), void *arg)
Set the callback function for the radio ISR.
static void kw41zrf_timer_init(kw41zrf_t *dev, kw41zrf_timer_timebase_t tb)
Initialize the Event Timer Block (up counter)
static void kw41zrf_abort_sequence(kw41zrf_t *dev)
Abort the current autosequence.
void kw41zrf_set_sequence(kw41zrf_t *dev, uint32_t seq)
Set sequence state of device.
enum kw41zrf_timer_timebase kw41zrf_timer_timebase_t
Timebase settings.
time_point now()
Returns the current time saved in a time point.
Device descriptor for KW41ZRF radio devices.