Merge pull request #1778 from g-oikonomou/contrib/cc2538/rf-driver-code-style
Improve code style of the CC2538 RF driver
This commit is contained in:
commit
c05665a16b
|
@ -135,9 +135,6 @@ static uint8_t volatile poll_mode = 0;
|
||||||
static uint8_t send_on_cca = 1;
|
static uint8_t send_on_cca = 1;
|
||||||
static int8_t rssi;
|
static int8_t rssi;
|
||||||
static uint8_t crc_corr;
|
static uint8_t crc_corr;
|
||||||
|
|
||||||
void mac_timer_init(void);
|
|
||||||
uint32_t get_sfd_timestamp(void);
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
static uint8_t rf_flags;
|
static uint8_t rf_flags;
|
||||||
static uint8_t rf_channel = CC2538_RF_CHANNEL;
|
static uint8_t rf_channel = CC2538_RF_CHANNEL;
|
||||||
|
@ -185,8 +182,8 @@ get_channel()
|
||||||
{
|
{
|
||||||
uint8_t chan = REG(RFCORE_XREG_FREQCTRL) & RFCORE_XREG_FREQCTRL_FREQ;
|
uint8_t chan = REG(RFCORE_XREG_FREQCTRL) & RFCORE_XREG_FREQCTRL_FREQ;
|
||||||
|
|
||||||
return ((chan - CC2538_RF_CHANNEL_MIN) / CC2538_RF_CHANNEL_SPACING
|
return (chan - CC2538_RF_CHANNEL_MIN) / CC2538_RF_CHANNEL_SPACING
|
||||||
+ CC2538_RF_CHANNEL_MIN);
|
+ CC2538_RF_CHANNEL_MIN;
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/**
|
/**
|
||||||
|
@ -207,14 +204,15 @@ set_channel(uint8_t channel)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Changes to FREQCTRL take effect after the next recalibration */
|
/* Changes to FREQCTRL take effect after the next recalibration */
|
||||||
|
|
||||||
/* If we are off, save state, otherwise switch off and save state */
|
/* If we are off, save state, otherwise switch off and save state */
|
||||||
if((REG(RFCORE_XREG_FSMSTAT0) & RFCORE_XREG_FSMSTAT0_FSM_FFCTRL_STATE) != 0) {
|
if((REG(RFCORE_XREG_FSMSTAT0) & RFCORE_XREG_FSMSTAT0_FSM_FFCTRL_STATE) != 0) {
|
||||||
was_on = 1;
|
was_on = 1;
|
||||||
off();
|
off();
|
||||||
}
|
}
|
||||||
REG(RFCORE_XREG_FREQCTRL) = (CC2538_RF_CHANNEL_MIN
|
REG(RFCORE_XREG_FREQCTRL) = CC2538_RF_CHANNEL_MIN +
|
||||||
+ (channel - CC2538_RF_CHANNEL_MIN) * CC2538_RF_CHANNEL_SPACING);
|
(channel - CC2538_RF_CHANNEL_MIN) * CC2538_RF_CHANNEL_SPACING;
|
||||||
|
|
||||||
/* switch radio back on only if radio was on before - otherwise will turn on radio foor sleepy nodes */
|
/* switch radio back on only if radio was on before - otherwise will turn on radio foor sleepy nodes */
|
||||||
if(was_on) {
|
if(was_on) {
|
||||||
on();
|
on();
|
||||||
|
@ -222,7 +220,7 @@ set_channel(uint8_t channel)
|
||||||
|
|
||||||
rf_channel = channel;
|
rf_channel = channel;
|
||||||
|
|
||||||
return (int8_t) channel;
|
return (int8_t)channel;
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
static radio_value_t
|
static radio_value_t
|
||||||
|
@ -348,18 +346,32 @@ set_frame_filtering(uint8_t enable)
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
static void
|
static void
|
||||||
|
mac_timer_init(void)
|
||||||
|
{
|
||||||
|
CLOCK_STABLE();
|
||||||
|
REG(RFCORE_SFR_MTCTRL) |= RFCORE_SFR_MTCTRL_SYNC;
|
||||||
|
REG(RFCORE_SFR_MTCTRL) |= RFCORE_SFR_MTCTRL_RUN;
|
||||||
|
while(!(REG(RFCORE_SFR_MTCTRL) & RFCORE_SFR_MTCTRL_STATE));
|
||||||
|
REG(RFCORE_SFR_MTCTRL) &= ~RFCORE_SFR_MTCTRL_RUN;
|
||||||
|
while(REG(RFCORE_SFR_MTCTRL) & RFCORE_SFR_MTCTRL_STATE);
|
||||||
|
REG(RFCORE_SFR_MTCTRL) |= RFCORE_SFR_MTCTRL_SYNC;
|
||||||
|
REG(RFCORE_SFR_MTCTRL) |= (RFCORE_SFR_MTCTRL_RUN);
|
||||||
|
while(!(REG(RFCORE_SFR_MTCTRL) & RFCORE_SFR_MTCTRL_STATE));
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
static void
|
||||||
set_poll_mode(uint8_t enable)
|
set_poll_mode(uint8_t enable)
|
||||||
{
|
{
|
||||||
poll_mode = enable;
|
poll_mode = enable;
|
||||||
|
|
||||||
if(enable) {
|
if(enable) {
|
||||||
mac_timer_init();
|
mac_timer_init();
|
||||||
REG(RFCORE_XREG_RFIRQM0) &= ~RFCORE_XREG_RFIRQM0_FIFOP; // mask out FIFOP interrupt source
|
REG(RFCORE_XREG_RFIRQM0) &= ~RFCORE_XREG_RFIRQM0_FIFOP; /* mask out FIFOP interrupt source */
|
||||||
REG(RFCORE_SFR_RFIRQF0) &= ~RFCORE_SFR_RFIRQF0_FIFOP; // clear pending FIFOP interrupt
|
REG(RFCORE_SFR_RFIRQF0) &= ~RFCORE_SFR_RFIRQF0_FIFOP; /* clear pending FIFOP interrupt */
|
||||||
nvic_interrupt_disable(NVIC_INT_RF_RXTX); // disable RF interrupts
|
nvic_interrupt_disable(NVIC_INT_RF_RXTX); /* disable RF interrupts */
|
||||||
} else {
|
} else {
|
||||||
REG(RFCORE_XREG_RFIRQM0) |= RFCORE_XREG_RFIRQM0_FIFOP; // enable FIFOP interrupt source
|
REG(RFCORE_XREG_RFIRQM0) |= RFCORE_XREG_RFIRQM0_FIFOP; /* enable FIFOP interrupt source */
|
||||||
nvic_interrupt_enable(NVIC_INT_RF_RXTX); // enable RF interrupts
|
nvic_interrupt_enable(NVIC_INT_RF_RXTX); /* enable RF interrupts */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
@ -379,6 +391,34 @@ set_auto_ack(uint8_t enable)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
static uint32_t
|
||||||
|
get_sfd_timestamp(void)
|
||||||
|
{
|
||||||
|
uint64_t sfd, timer_val, buffer;
|
||||||
|
|
||||||
|
REG(RFCORE_SFR_MTMSEL) = (REG(RFCORE_SFR_MTMSEL) & ~RFCORE_SFR_MTMSEL_MTMSEL) | 0x00000000;
|
||||||
|
REG(RFCORE_SFR_MTCTRL) |= RFCORE_SFR_MTCTRL_LATCH_MODE;
|
||||||
|
timer_val = REG(RFCORE_SFR_MTM0) & RFCORE_SFR_MTM0_MTM0;
|
||||||
|
timer_val |= ((REG(RFCORE_SFR_MTM1) & RFCORE_SFR_MTM1_MTM1) << 8);
|
||||||
|
REG(RFCORE_SFR_MTMSEL) = (REG(RFCORE_SFR_MTMSEL) & ~RFCORE_SFR_MTMSEL_MTMOVFSEL) | 0x00000000;
|
||||||
|
timer_val |= ((REG(RFCORE_SFR_MTMOVF0) & RFCORE_SFR_MTMOVF0_MTMOVF0) << 16);
|
||||||
|
timer_val |= ((REG(RFCORE_SFR_MTMOVF1) & RFCORE_SFR_MTMOVF1_MTMOVF1) << 24);
|
||||||
|
buffer = REG(RFCORE_SFR_MTMOVF2) & RFCORE_SFR_MTMOVF2_MTMOVF2;
|
||||||
|
timer_val |= (buffer << 32);
|
||||||
|
|
||||||
|
REG(RFCORE_SFR_MTMSEL) = (REG(RFCORE_SFR_MTMSEL) & ~RFCORE_SFR_MTMSEL_MTMSEL) | 0x00000001;
|
||||||
|
REG(RFCORE_SFR_MTCTRL) |= RFCORE_SFR_MTCTRL_LATCH_MODE;
|
||||||
|
sfd = REG(RFCORE_SFR_MTM0) & RFCORE_SFR_MTM0_MTM0;
|
||||||
|
sfd |= ((REG(RFCORE_SFR_MTM1) & RFCORE_SFR_MTM1_MTM1) << 8);
|
||||||
|
REG(RFCORE_SFR_MTMSEL) = (REG(RFCORE_SFR_MTMSEL) & ~RFCORE_SFR_MTMSEL_MTMOVFSEL) | 0x00000010;
|
||||||
|
sfd |= ((REG(RFCORE_SFR_MTMOVF0) & RFCORE_SFR_MTMOVF0_MTMOVF0) << 16);
|
||||||
|
sfd |= ((REG(RFCORE_SFR_MTMOVF1) & RFCORE_SFR_MTMOVF1_MTMOVF1) << 24);
|
||||||
|
buffer = REG(RFCORE_SFR_MTMOVF2) & RFCORE_SFR_MTMOVF2_MTMOVF2;
|
||||||
|
sfd |= (buffer << 32);
|
||||||
|
|
||||||
|
return RTIMER_NOW() - RADIO_TO_RTIMER(timer_val - sfd);
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
/* Netstack API radio driver functions */
|
/* Netstack API radio driver functions */
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
static int
|
static int
|
||||||
|
@ -527,7 +567,7 @@ init(void)
|
||||||
*/
|
*/
|
||||||
udma_set_channel_src(CC2538_RF_CONF_RX_DMA_CHAN, RFCORE_SFR_RFDATA);
|
udma_set_channel_src(CC2538_RF_CONF_RX_DMA_CHAN, RFCORE_SFR_RFDATA);
|
||||||
}
|
}
|
||||||
|
|
||||||
set_poll_mode(poll_mode);
|
set_poll_mode(poll_mode);
|
||||||
|
|
||||||
process_start(&cc2538_rf_process, NULL);
|
process_start(&cc2538_rf_process, NULL);
|
||||||
|
@ -782,10 +822,10 @@ read(void *buf, unsigned short bufsize)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CC2538_RF_CSP_ISFLUSHRX();
|
CC2538_RF_CSP_ISFLUSHRX();
|
||||||
|
|
||||||
return (len);
|
return len;
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
static int
|
static int
|
||||||
|
@ -799,9 +839,9 @@ receiving_packet(void)
|
||||||
*
|
*
|
||||||
* FSMSTAT1 & (TX_ACTIVE | SFD) == SFD <=> receiving
|
* FSMSTAT1 & (TX_ACTIVE | SFD) == SFD <=> receiving
|
||||||
*/
|
*/
|
||||||
return ((REG(RFCORE_XREG_FSMSTAT1)
|
return (REG(RFCORE_XREG_FSMSTAT1)
|
||||||
& (RFCORE_XREG_FSMSTAT1_TX_ACTIVE | RFCORE_XREG_FSMSTAT1_SFD))
|
& (RFCORE_XREG_FSMSTAT1_TX_ACTIVE | RFCORE_XREG_FSMSTAT1_SFD))
|
||||||
== RFCORE_XREG_FSMSTAT1_SFD);
|
== RFCORE_XREG_FSMSTAT1_SFD;
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
static int
|
static int
|
||||||
|
@ -809,7 +849,7 @@ pending_packet(void)
|
||||||
{
|
{
|
||||||
PRINTF("RF: Pending\n");
|
PRINTF("RF: Pending\n");
|
||||||
|
|
||||||
return (REG(RFCORE_XREG_FSMSTAT1) & RFCORE_XREG_FSMSTAT1_FIFOP);
|
return REG(RFCORE_XREG_FSMSTAT1) & RFCORE_XREG_FSMSTAT1_FIFOP;
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
static radio_result_t
|
static radio_result_t
|
||||||
|
@ -963,15 +1003,15 @@ get_object(radio_param_t param, void *dest, size_t size)
|
||||||
|
|
||||||
return RADIO_RESULT_OK;
|
return RADIO_RESULT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(param == RADIO_PARAM_LAST_PACKET_TIMESTAMP) {
|
if(param == RADIO_PARAM_LAST_PACKET_TIMESTAMP) {
|
||||||
if(size != sizeof(rtimer_clock_t) || !dest) {
|
if(size != sizeof(rtimer_clock_t) || !dest) {
|
||||||
return RADIO_RESULT_INVALID_VALUE;
|
return RADIO_RESULT_INVALID_VALUE;
|
||||||
}
|
}
|
||||||
*(rtimer_clock_t*)dest = get_sfd_timestamp();
|
*(rtimer_clock_t *)dest = get_sfd_timestamp();
|
||||||
return RADIO_RESULT_OK;
|
return RADIO_RESULT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
return RADIO_RESULT_NOT_SUPPORTED;
|
return RADIO_RESULT_NOT_SUPPORTED;
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
@ -1075,7 +1115,7 @@ void
|
||||||
cc2538_rf_rx_tx_isr(void)
|
cc2538_rf_rx_tx_isr(void)
|
||||||
{
|
{
|
||||||
ENERGEST_ON(ENERGEST_TYPE_IRQ);
|
ENERGEST_ON(ENERGEST_TYPE_IRQ);
|
||||||
|
|
||||||
if(!poll_mode) {
|
if(!poll_mode) {
|
||||||
process_poll(&cc2538_rf_process);
|
process_poll(&cc2538_rf_process);
|
||||||
}
|
}
|
||||||
|
@ -1127,44 +1167,4 @@ cc2538_rf_set_promiscous_mode(char p)
|
||||||
set_frame_filtering(p);
|
set_frame_filtering(p);
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
uint32_t get_sfd_timestamp(void)
|
|
||||||
{
|
|
||||||
uint64_t sfd, timer_val, buffer;
|
|
||||||
|
|
||||||
REG(RFCORE_SFR_MTMSEL) = (REG(RFCORE_SFR_MTMSEL) & ~RFCORE_SFR_MTMSEL_MTMSEL) | 0x00000000;
|
|
||||||
REG(RFCORE_SFR_MTCTRL) |= RFCORE_SFR_MTCTRL_LATCH_MODE;
|
|
||||||
timer_val = REG(RFCORE_SFR_MTM0) & RFCORE_SFR_MTM0_MTM0;
|
|
||||||
timer_val |= ((REG(RFCORE_SFR_MTM1) & RFCORE_SFR_MTM1_MTM1) << 8);
|
|
||||||
REG(RFCORE_SFR_MTMSEL) = (REG(RFCORE_SFR_MTMSEL) & ~RFCORE_SFR_MTMSEL_MTMOVFSEL) | 0x00000000;
|
|
||||||
timer_val |= ((REG(RFCORE_SFR_MTMOVF0) & RFCORE_SFR_MTMOVF0_MTMOVF0) << 16);
|
|
||||||
timer_val |= ((REG(RFCORE_SFR_MTMOVF1) & RFCORE_SFR_MTMOVF1_MTMOVF1) << 24);
|
|
||||||
buffer = REG(RFCORE_SFR_MTMOVF2) & RFCORE_SFR_MTMOVF2_MTMOVF2;
|
|
||||||
timer_val |= (buffer << 32);
|
|
||||||
|
|
||||||
REG(RFCORE_SFR_MTMSEL) = (REG(RFCORE_SFR_MTMSEL) & ~RFCORE_SFR_MTMSEL_MTMSEL) | 0x00000001;
|
|
||||||
REG(RFCORE_SFR_MTCTRL) |= RFCORE_SFR_MTCTRL_LATCH_MODE;
|
|
||||||
sfd = REG(RFCORE_SFR_MTM0) & RFCORE_SFR_MTM0_MTM0;
|
|
||||||
sfd |= ((REG(RFCORE_SFR_MTM1) & RFCORE_SFR_MTM1_MTM1) << 8);
|
|
||||||
REG(RFCORE_SFR_MTMSEL) = (REG(RFCORE_SFR_MTMSEL) & ~RFCORE_SFR_MTMSEL_MTMOVFSEL) | 0x00000010;
|
|
||||||
sfd |= ((REG(RFCORE_SFR_MTMOVF0) & RFCORE_SFR_MTMOVF0_MTMOVF0) << 16);
|
|
||||||
sfd |= ((REG(RFCORE_SFR_MTMOVF1) & RFCORE_SFR_MTMOVF1_MTMOVF1) << 24);
|
|
||||||
buffer = REG(RFCORE_SFR_MTMOVF2) & RFCORE_SFR_MTMOVF2_MTMOVF2;
|
|
||||||
sfd |= (buffer << 32);
|
|
||||||
|
|
||||||
return (RTIMER_NOW() - RADIO_TO_RTIMER(timer_val - sfd));
|
|
||||||
}
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
void mac_timer_init(void)
|
|
||||||
{
|
|
||||||
CLOCK_STABLE();
|
|
||||||
REG(RFCORE_SFR_MTCTRL) |= RFCORE_SFR_MTCTRL_SYNC;
|
|
||||||
REG(RFCORE_SFR_MTCTRL) |= RFCORE_SFR_MTCTRL_RUN;
|
|
||||||
while(!(REG(RFCORE_SFR_MTCTRL) & RFCORE_SFR_MTCTRL_STATE));
|
|
||||||
REG(RFCORE_SFR_MTCTRL) &= ~RFCORE_SFR_MTCTRL_RUN;
|
|
||||||
while(REG(RFCORE_SFR_MTCTRL) & RFCORE_SFR_MTCTRL_STATE);
|
|
||||||
REG(RFCORE_SFR_MTCTRL) |= RFCORE_SFR_MTCTRL_SYNC;
|
|
||||||
REG(RFCORE_SFR_MTCTRL) |= (RFCORE_SFR_MTCTRL_RUN);
|
|
||||||
while(!(REG(RFCORE_SFR_MTCTRL) & RFCORE_SFR_MTCTRL_STATE));
|
|
||||||
}
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
Loading…
Reference in a new issue