Prototype RF driver for STM Sub-1 GHz RF expansion board based on the SPSGRF-868 module for STM32 Nucleo.
Dependents: DISCO_IOT-wifi_client
Fork of stm-spirit1-rf-driver by
Revision 17:5dd7fd4342e8, committed 2016-11-07
- Comitter:
- Wolfgang Betz
- Date:
- Mon Nov 07 08:52:02 2016 +0100
- Parent:
- 16:25dc4b811ad3
- Child:
- 18:d6f789f6f4c9
- Commit message:
- Improve 'SpiritIrqs' efficiency
Changed in this revision
--- a/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Irq.h Mon Nov 07 08:38:38 2016 +0100
+++ b/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Irq.h Mon Nov 07 08:52:02 2016 +0100
@@ -172,41 +172,41 @@
*/
typedef struct
{
- SpiritFlagStatus IRQ_RX_DATA_READY:1; /*!< IRQ: RX data ready */
- SpiritFlagStatus IRQ_RX_DATA_DISC:1; /*!< IRQ: RX data discarded (upon filtering) */
- SpiritFlagStatus IRQ_TX_DATA_SENT:1; /*!< IRQ: TX data sent */
- SpiritFlagStatus IRQ_MAX_RE_TX_REACH:1; /*!< IRQ: Max re-TX reached */
- SpiritFlagStatus IRQ_CRC_ERROR:1; /*!< IRQ: CRC error */
- SpiritFlagStatus IRQ_TX_FIFO_ERROR:1; /*!< IRQ: TX FIFO underflow/overflow error */
- SpiritFlagStatus IRQ_RX_FIFO_ERROR:1; /*!< IRQ: RX FIFO underflow/overflow error */
- SpiritFlagStatus IRQ_TX_FIFO_ALMOST_FULL:1; /*!< IRQ: TX FIFO almost full */
+ SpiritFlagStatus IRQ_SYNTH_LOCK_TIMEOUT:1; /*!< IRQ: only for debug; LOCK state timeout */
+ SpiritFlagStatus IRQ_SYNTH_LOCK_STARTUP:1; /*!< IRQ: only for debug; see CALIBR_START_COUNTER */
+ SpiritFlagStatus IRQ_SYNTH_CAL_TIMEOUT:1; /*!< IRQ: only for debug; SYNTH calibration timeout */
+ SpiritFlagStatus IRQ_TX_START_TIME:1; /*!< IRQ: only for debug; TX circuitry startup time; see TX_START_COUNTER */
+ SpiritFlagStatus IRQ_RX_START_TIME:1; /*!< IRQ: only for debug; RX circuitry startup time; see TX_START_COUNTER */
+ SpiritFlagStatus IRQ_RX_TIMEOUT:1; /*!< IRQ: RX operation timeout */
+ SpiritFlagStatus IRQ_AES_END:1; /*!< IRQ: AES End of operation */
+ SpiritFlagStatus :1; /*!< Reserved bit */
- SpiritFlagStatus IRQ_TX_FIFO_ALMOST_EMPTY:1; /*!< IRQ: TX FIFO almost empty */
- SpiritFlagStatus IRQ_RX_FIFO_ALMOST_FULL:1; /*!< IRQ: RX FIFO almost full */
- SpiritFlagStatus IRQ_RX_FIFO_ALMOST_EMPTY:1; /*!< IRQ: RX FIFO almost empty */
- SpiritFlagStatus IRQ_MAX_BO_CCA_REACH:1; /*!< IRQ: Max number of back-off during CCA */
- SpiritFlagStatus IRQ_VALID_PREAMBLE:1; /*!< IRQ: Valid preamble detected */
- SpiritFlagStatus IRQ_VALID_SYNC:1; /*!< IRQ: Sync word detected */
- SpiritFlagStatus IRQ_RSSI_ABOVE_TH:1; /*!< IRQ: RSSI above threshold */
- SpiritFlagStatus IRQ_WKUP_TOUT_LDC:1; /*!< IRQ: Wake-up timeout in LDC mode */
+ SpiritFlagStatus IRQ_READY:1; /*!< IRQ: READY state */
+ SpiritFlagStatus IRQ_STANDBY_DELAYED:1; /*!< IRQ: STANDBY state after MCU_CK_CONF_CLOCK_TAIL_X clock cycles */
+ SpiritFlagStatus IRQ_LOW_BATT_LVL:1; /*!< IRQ: Battery level below threshold*/
+ SpiritFlagStatus IRQ_POR:1; /*!< IRQ: Power On Reset */
+ SpiritFlagStatus IRQ_BOR:1; /*!< IRQ: Brown out event (both accurate and inaccurate)*/
+ SpiritFlagStatus IRQ_LOCK:1; /*!< IRQ: LOCK state */
+ SpiritFlagStatus IRQ_PM_COUNT_EXPIRED:1; /*!< IRQ: only for debug; Power Management startup timer expiration (see reg PM_START_COUNTER, 0xB5) */
+ SpiritFlagStatus IRQ_XO_COUNT_EXPIRED:1; /*!< IRQ: only for debug; Crystal oscillator settling time counter expired */
- SpiritFlagStatus IRQ_READY:1; /*!< IRQ: READY state */
- SpiritFlagStatus IRQ_STANDBY_DELAYED:1; /*!< IRQ: STANDBY state after MCU_CK_CONF_CLOCK_TAIL_X clock cycles */
- SpiritFlagStatus IRQ_LOW_BATT_LVL:1; /*!< IRQ: Battery level below threshold*/
- SpiritFlagStatus IRQ_POR:1; /*!< IRQ: Power On Reset */
- SpiritFlagStatus IRQ_BOR:1; /*!< IRQ: Brown out event (both accurate and inaccurate)*/
- SpiritFlagStatus IRQ_LOCK:1; /*!< IRQ: LOCK state */
- SpiritFlagStatus IRQ_PM_COUNT_EXPIRED:1; /*!< IRQ: only for debug; Power Management startup timer expiration (see reg PM_START_COUNTER, 0xB5) */
- SpiritFlagStatus IRQ_XO_COUNT_EXPIRED:1; /*!< IRQ: only for debug; Crystal oscillator settling time counter expired */
+ SpiritFlagStatus IRQ_TX_FIFO_ALMOST_EMPTY:1; /*!< IRQ: TX FIFO almost empty */
+ SpiritFlagStatus IRQ_RX_FIFO_ALMOST_FULL:1; /*!< IRQ: RX FIFO almost full */
+ SpiritFlagStatus IRQ_RX_FIFO_ALMOST_EMPTY:1; /*!< IRQ: RX FIFO almost empty */
+ SpiritFlagStatus IRQ_MAX_BO_CCA_REACH:1; /*!< IRQ: Max number of back-off during CCA */
+ SpiritFlagStatus IRQ_VALID_PREAMBLE:1; /*!< IRQ: Valid preamble detected */
+ SpiritFlagStatus IRQ_VALID_SYNC:1; /*!< IRQ: Sync word detected */
+ SpiritFlagStatus IRQ_RSSI_ABOVE_TH:1; /*!< IRQ: RSSI above threshold */
+ SpiritFlagStatus IRQ_WKUP_TOUT_LDC:1; /*!< IRQ: Wake-up timeout in LDC mode */
- SpiritFlagStatus IRQ_SYNTH_LOCK_TIMEOUT:1; /*!< IRQ: only for debug; LOCK state timeout */
- SpiritFlagStatus IRQ_SYNTH_LOCK_STARTUP:1; /*!< IRQ: only for debug; see CALIBR_START_COUNTER */
- SpiritFlagStatus IRQ_SYNTH_CAL_TIMEOUT:1; /*!< IRQ: only for debug; SYNTH calibration timeout */
- SpiritFlagStatus IRQ_TX_START_TIME:1; /*!< IRQ: only for debug; TX circuitry startup time; see TX_START_COUNTER */
- SpiritFlagStatus IRQ_RX_START_TIME:1; /*!< IRQ: only for debug; RX circuitry startup time; see TX_START_COUNTER */
- SpiritFlagStatus IRQ_RX_TIMEOUT:1; /*!< IRQ: RX operation timeout */
- SpiritFlagStatus IRQ_AES_END:1; /*!< IRQ: AES End of operation */
- SpiritFlagStatus :1; /*!< Reserved bit */
+ SpiritFlagStatus IRQ_RX_DATA_READY:1; /*!< IRQ: RX data ready */
+ SpiritFlagStatus IRQ_RX_DATA_DISC:1; /*!< IRQ: RX data discarded (upon filtering) */
+ SpiritFlagStatus IRQ_TX_DATA_SENT:1; /*!< IRQ: TX data sent */
+ SpiritFlagStatus IRQ_MAX_RE_TX_REACH:1; /*!< IRQ: Max re-TX reached */
+ SpiritFlagStatus IRQ_CRC_ERROR:1; /*!< IRQ: CRC error */
+ SpiritFlagStatus IRQ_TX_FIFO_ERROR:1; /*!< IRQ: TX FIFO underflow/overflow error */
+ SpiritFlagStatus IRQ_RX_FIFO_ERROR:1; /*!< IRQ: RX FIFO underflow/overflow error */
+ SpiritFlagStatus IRQ_TX_FIFO_ALMOST_FULL:1; /*!< IRQ: TX FIFO almost full */
} SpiritIrqs;
--- a/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Irq.c Mon Nov 07 08:38:38 2016 +0100
+++ b/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Irq.c Mon Nov 07 08:52:02 2016 +0100
@@ -148,18 +148,8 @@
*/
void SpiritIrqInit(SpiritIrqs* pxIrqInit)
{
- uint8_t tempRegValue[4];
- uint8_t* tmpPoint;
-
- /* Cast the bitfields structure in an array of char using */
- tmpPoint = (uint8_t*)(pxIrqInit);
- for(uint8_t i=0; i<4; i++)
- {
- tempRegValue[3-i]= tmpPoint[i];
- }
-
/* Writes the IRQ_MASK registers */
- g_xStatus = SpiritSpiWriteRegisters(IRQ_MASK3_BASE, 4, tempRegValue);
+ g_xStatus = SpiritSpiWriteRegisters(IRQ_MASK3_BASE, 4, (uint8_t*)pxIrqInit);
}
@@ -230,19 +220,8 @@
*/
void SpiritIrqGetMask(SpiritIrqs* pxIrqMask)
{
- uint8_t tempRegValue[4];
- uint8_t* pIrqPointer = (uint8_t*)pxIrqMask;
-
/* Reads IRQ_MASK registers */
- g_xStatus = SpiritSpiReadRegisters(IRQ_MASK3_BASE, 4, tempRegValue);
-
- /* Build the IRQ mask word */
- for(char i=0; i<4; i++)
- {
- *pIrqPointer = tempRegValue[3-i];
- pIrqPointer++;
- }
-
+ g_xStatus = SpiritSpiReadRegisters(IRQ_MASK3_BASE, 4, (uint8_t*)pxIrqMask);
}
@@ -264,18 +243,8 @@
*/
void SpiritIrqGetStatus(SpiritIrqs* pxIrqStatus)
{
- uint8_t tempRegValue[4];
- uint8_t* pIrqPointer = (uint8_t*)pxIrqStatus;
-
/* Reads IRQ_STATUS registers */
- g_xStatus = SpiritSpiReadRegisters(IRQ_STATUS3_BASE, 4, tempRegValue);
-
- /* Build the IRQ Status word */
- for(uint8_t i=0; i<4; i++)
- {
- *pIrqPointer = tempRegValue[3-i];
- pIrqPointer++;
- }
+ g_xStatus = SpiritSpiReadRegisters(IRQ_STATUS3_BASE, 4, (uint8_t*)pxIrqStatus);
}
