Skip to content

Commit f8d1950

Browse files
committed
Changed FSK FIFO handling by using FifoLevel IRQ instead of FifoEmpty IRQ.
Relaxes time constraints while handling the FIFO. Improves operation when MCU low-power modes are being used. WARNING: DIO1 interrupt detection has changed from rising edge to rising + falling edge detection
1 parent 836a530 commit f8d1950

File tree

20 files changed

+175
-23
lines changed

20 files changed

+175
-23
lines changed

src/boards/B-L072Z-LRWAN1/sx1276-board.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ void SX1276IoInit( void )
109109
void SX1276IoIrqInit( DioIrqHandler **irqHandlers )
110110
{
111111
GpioSetInterrupt( &SX1276.DIO0, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[0] );
112-
GpioSetInterrupt( &SX1276.DIO1, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
112+
GpioSetInterrupt( &SX1276.DIO1, IRQ_RISING_FALLING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
113113
GpioSetInterrupt( &SX1276.DIO2, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[2] );
114114
GpioSetInterrupt( &SX1276.DIO3, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[3] );
115115
GpioSetInterrupt( &SX1276.DIO4, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[4] );
@@ -323,6 +323,11 @@ bool SX1276CheckRfFrequency( uint32_t frequency )
323323
return true;
324324
}
325325

326+
uint32_t SX1276GetDio1PinState( void )
327+
{
328+
return GpioRead( &SX1276.DIO1 );
329+
}
330+
326331
#if defined( USE_RADIO_DEBUG )
327332
void SX1276DbgPinTxWrite( uint8_t state )
328333
{

src/boards/NAMote72/sx1272-board.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ void SX1272IoInit( void )
122122
void SX1272IoIrqInit( DioIrqHandler **irqHandlers )
123123
{
124124
GpioSetInterrupt( &SX1272.DIO0, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[0] );
125-
GpioSetInterrupt( &SX1272.DIO1, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
125+
GpioSetInterrupt( &SX1272.DIO1, IRQ_RISING_FALLING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
126126
GpioSetInterrupt( &SX1272.DIO2, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[2] );
127127
GpioSetInterrupt( &SX1272.DIO3, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[3] );
128128
GpioSetInterrupt( &SX1272.DIO4, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[4] );
@@ -282,6 +282,11 @@ bool SX1272CheckRfFrequency( uint32_t frequency )
282282
return true;
283283
}
284284

285+
uint32_t SX1272GetDio1PinState( void )
286+
{
287+
return GpioRead( &SX1272.DIO1 );
288+
}
289+
285290
#if defined( USE_RADIO_DEBUG )
286291
void SX1272DbgPinTxWrite( uint8_t state )
287292
{

src/boards/NucleoL073/sx1272mb2das-board.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ void SX1272IoInit( void )
104104
void SX1272IoIrqInit( DioIrqHandler **irqHandlers )
105105
{
106106
GpioSetInterrupt( &SX1272.DIO0, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[0] );
107-
GpioSetInterrupt( &SX1272.DIO1, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
107+
GpioSetInterrupt( &SX1272.DIO1, IRQ_RISING_FALLING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
108108
GpioSetInterrupt( &SX1272.DIO2, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[2] );
109109
GpioSetInterrupt( &SX1272.DIO3, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[3] );
110110
}
@@ -286,6 +286,11 @@ bool SX1272CheckRfFrequency( uint32_t frequency )
286286
return true;
287287
}
288288

289+
uint32_t SX1272GetDio1PinState( void )
290+
{
291+
return GpioRead( &SX1272.DIO1 );
292+
}
293+
289294
#if defined( USE_RADIO_DEBUG )
290295
void SX1272DbgPinTxWrite( uint8_t state )
291296
{

src/boards/NucleoL073/sx1276mb1las-board.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ void SX1276IoInit( void )
102102
void SX1276IoIrqInit( DioIrqHandler **irqHandlers )
103103
{
104104
GpioSetInterrupt( &SX1276.DIO0, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[0] );
105-
GpioSetInterrupt( &SX1276.DIO1, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
105+
GpioSetInterrupt( &SX1276.DIO1, IRQ_RISING_FALLING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
106106
GpioSetInterrupt( &SX1276.DIO2, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[2] );
107107
GpioSetInterrupt( &SX1276.DIO3, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[3] );
108108
GpioSetInterrupt( &SX1276.DIO4, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[4] );
@@ -302,6 +302,11 @@ bool SX1276CheckRfFrequency( uint32_t frequency )
302302
return true;
303303
}
304304

305+
uint32_t SX1276GetDio1PinState( void )
306+
{
307+
return GpioRead( &SX1276.DIO1 );
308+
}
309+
305310
#if defined( USE_RADIO_DEBUG )
306311
void SX1276DbgPinTxWrite( uint8_t state )
307312
{

src/boards/NucleoL073/sx1276mb1mas-board.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ void SX1276IoInit( void )
102102
void SX1276IoIrqInit( DioIrqHandler **irqHandlers )
103103
{
104104
GpioSetInterrupt( &SX1276.DIO0, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[0] );
105-
GpioSetInterrupt( &SX1276.DIO1, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
105+
GpioSetInterrupt( &SX1276.DIO1, IRQ_RISING_FALLING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
106106
GpioSetInterrupt( &SX1276.DIO2, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[2] );
107107
GpioSetInterrupt( &SX1276.DIO3, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[3] );
108108
GpioSetInterrupt( &SX1276.DIO4, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[4] );
@@ -295,6 +295,11 @@ bool SX1276CheckRfFrequency( uint32_t frequency )
295295
return true;
296296
}
297297

298+
uint32_t SX1276GetDio1PinState( void )
299+
{
300+
return GpioRead( &SX1276.DIO1 );
301+
}
302+
298303
#if defined( USE_RADIO_DEBUG )
299304
void SX1276DbgPinTxWrite( uint8_t state )
300305
{

src/boards/NucleoL152/sx1272mb2das-board.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ void SX1272IoInit( void )
104104
void SX1272IoIrqInit( DioIrqHandler **irqHandlers )
105105
{
106106
GpioSetInterrupt( &SX1272.DIO0, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[0] );
107-
GpioSetInterrupt( &SX1272.DIO1, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
107+
GpioSetInterrupt( &SX1272.DIO1, IRQ_RISING_FALLING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
108108
GpioSetInterrupt( &SX1272.DIO2, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[2] );
109109
GpioSetInterrupt( &SX1272.DIO3, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[3] );
110110
}
@@ -286,6 +286,11 @@ bool SX1272CheckRfFrequency( uint32_t frequency )
286286
return true;
287287
}
288288

289+
uint32_t SX1272GetDio1PinState( void )
290+
{
291+
return GpioRead( &SX1272.DIO1 );
292+
}
293+
289294
#if defined( USE_RADIO_DEBUG )
290295
void SX1272DbgPinTxWrite( uint8_t state )
291296
{

src/boards/NucleoL152/sx1276mb1las-board.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ void SX1276IoInit( void )
102102
void SX1276IoIrqInit( DioIrqHandler **irqHandlers )
103103
{
104104
GpioSetInterrupt( &SX1276.DIO0, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[0] );
105-
GpioSetInterrupt( &SX1276.DIO1, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
105+
GpioSetInterrupt( &SX1276.DIO1, IRQ_RISING_FALLING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
106106
GpioSetInterrupt( &SX1276.DIO2, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[2] );
107107
GpioSetInterrupt( &SX1276.DIO3, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[3] );
108108
GpioSetInterrupt( &SX1276.DIO4, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[4] );
@@ -302,6 +302,11 @@ bool SX1276CheckRfFrequency( uint32_t frequency )
302302
return true;
303303
}
304304

305+
uint32_t SX1276GetDio1PinState( void )
306+
{
307+
return GpioRead( &SX1276.DIO1 );
308+
}
309+
305310
#if defined( USE_RADIO_DEBUG )
306311
void SX1276DbgPinTxWrite( uint8_t state )
307312
{

src/boards/NucleoL152/sx1276mb1mas-board.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ void SX1276IoInit( void )
102102
void SX1276IoIrqInit( DioIrqHandler **irqHandlers )
103103
{
104104
GpioSetInterrupt( &SX1276.DIO0, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[0] );
105-
GpioSetInterrupt( &SX1276.DIO1, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
105+
GpioSetInterrupt( &SX1276.DIO1, IRQ_RISING_FALLING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
106106
GpioSetInterrupt( &SX1276.DIO2, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[2] );
107107
GpioSetInterrupt( &SX1276.DIO3, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[3] );
108108
GpioSetInterrupt( &SX1276.DIO4, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[4] );
@@ -295,6 +295,11 @@ bool SX1276CheckRfFrequency( uint32_t frequency )
295295
return true;
296296
}
297297

298+
uint32_t SX1276GetDio1PinState( void )
299+
{
300+
return GpioRead( &SX1276.DIO1 );
301+
}
302+
298303
#if defined( USE_RADIO_DEBUG )
299304
void SX1276DbgPinTxWrite( uint8_t state )
300305
{

src/boards/NucleoL476/sx1272mb2das-board.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ void SX1272IoInit( void )
104104
void SX1272IoIrqInit( DioIrqHandler **irqHandlers )
105105
{
106106
GpioSetInterrupt( &SX1272.DIO0, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[0] );
107-
GpioSetInterrupt( &SX1272.DIO1, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
107+
GpioSetInterrupt( &SX1272.DIO1, IRQ_RISING_FALLING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
108108
GpioSetInterrupt( &SX1272.DIO2, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[2] );
109109
GpioSetInterrupt( &SX1272.DIO3, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[3] );
110110
}
@@ -286,6 +286,11 @@ bool SX1272CheckRfFrequency( uint32_t frequency )
286286
return true;
287287
}
288288

289+
uint32_t SX1272GetDio1PinState( void )
290+
{
291+
return GpioRead( &SX1272.DIO1 );
292+
}
293+
289294
#if defined( USE_RADIO_DEBUG )
290295
void SX1272DbgPinTxWrite( uint8_t state )
291296
{

src/boards/NucleoL476/sx1276mb1las-board.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ void SX1276IoInit( void )
102102
void SX1276IoIrqInit( DioIrqHandler **irqHandlers )
103103
{
104104
GpioSetInterrupt( &SX1276.DIO0, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[0] );
105-
GpioSetInterrupt( &SX1276.DIO1, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
105+
GpioSetInterrupt( &SX1276.DIO1, IRQ_RISING_FALLING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[1] );
106106
GpioSetInterrupt( &SX1276.DIO2, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[2] );
107107
GpioSetInterrupt( &SX1276.DIO3, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[3] );
108108
GpioSetInterrupt( &SX1276.DIO4, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[4] );
@@ -302,6 +302,11 @@ bool SX1276CheckRfFrequency( uint32_t frequency )
302302
return true;
303303
}
304304

305+
uint32_t SX1276GetDio1PinState( void )
306+
{
307+
return GpioRead( &SX1276.DIO1 );
308+
}
309+
305310
#if defined( USE_RADIO_DEBUG )
306311
void SX1276DbgPinTxWrite( uint8_t state )
307312
{

0 commit comments

Comments
 (0)