Merge pull request #1911 from martinbudden/bf_nrf_tidy
Better split between RX SPI and RX NRF24L01 code
This commit is contained in:
commit
0077290170
|
@ -28,13 +28,15 @@
|
||||||
|
|
||||||
#include "build/build_config.h"
|
#include "build/build_config.h"
|
||||||
|
|
||||||
#include "system.h"
|
#include "bus_spi.h"
|
||||||
#include "io.h"
|
#include "io.h"
|
||||||
|
#include "io_impl.h"
|
||||||
#include "rx_spi.h"
|
#include "rx_spi.h"
|
||||||
#include "rx_nrf24l01.h"
|
#include "rx_nrf24l01.h"
|
||||||
|
#include "system.h"
|
||||||
|
|
||||||
#define NRF24_CE_HI() {IOHi(IOGetByTag(IO_TAG(RX_CE_PIN)));}
|
#define NRF24_CE_HI() {IOHi(DEFIO_IO(RX_CE_PIN));}
|
||||||
#define NRF24_CE_LO() {IOLo(IOGetByTag(IO_TAG(RX_CE_PIN)));}
|
#define NRF24_CE_LO() {IOLo(DEFIO_IO(RX_CE_PIN));}
|
||||||
|
|
||||||
// Instruction Mnemonics
|
// Instruction Mnemonics
|
||||||
// nRF24L01: Table 16. Command set for the nRF24L01 SPI. Product Specification, p46
|
// nRF24L01: Table 16. Command set for the nRF24L01 SPI. Product Specification, p46
|
||||||
|
@ -52,6 +54,15 @@
|
||||||
#define REUSE_TX_PL 0xE3
|
#define REUSE_TX_PL 0xE3
|
||||||
#define NOP 0xFF
|
#define NOP 0xFF
|
||||||
|
|
||||||
|
static void NRF24L01_InitGpio(void)
|
||||||
|
{
|
||||||
|
// CE as OUTPUT
|
||||||
|
const SPIDevice rxSPIDevice = spiDeviceByInstance(RX_SPI_INSTANCE);
|
||||||
|
IOInit(DEFIO_IO(RX_CE_PIN), OWNER_RX_SPI_CS, rxSPIDevice + 1);
|
||||||
|
IOConfigGPIO(DEFIO_IO(RX_CE_PIN), SPI_IO_CS_CFG);
|
||||||
|
NRF24_CE_LO();
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t NRF24L01_WriteReg(uint8_t reg, uint8_t data)
|
uint8_t NRF24L01_WriteReg(uint8_t reg, uint8_t data)
|
||||||
{
|
{
|
||||||
return rxSpiWriteCommand(W_REGISTER | (REGISTER_MASK & reg), data);
|
return rxSpiWriteCommand(W_REGISTER | (REGISTER_MASK & reg), data);
|
||||||
|
@ -122,7 +133,7 @@ static uint8_t standbyConfig;
|
||||||
void NRF24L01_Initialize(uint8_t baseConfig)
|
void NRF24L01_Initialize(uint8_t baseConfig)
|
||||||
{
|
{
|
||||||
standbyConfig = BV(NRF24L01_00_CONFIG_PWR_UP) | baseConfig;
|
standbyConfig = BV(NRF24L01_00_CONFIG_PWR_UP) | baseConfig;
|
||||||
NRF24_CE_LO();
|
NRF24L01_InitGpio();
|
||||||
// nRF24L01+ needs 100 milliseconds settling time from PowerOnReset to PowerDown mode
|
// nRF24L01+ needs 100 milliseconds settling time from PowerOnReset to PowerDown mode
|
||||||
static const uint32_t settlingTimeUs = 100000;
|
static const uint32_t settlingTimeUs = 100000;
|
||||||
const uint32_t currentTimeUs = micros();
|
const uint32_t currentTimeUs = micros();
|
||||||
|
@ -208,8 +219,8 @@ bool NRF24L01_ReadPayloadIfAvailable(uint8_t *data, uint8_t length)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef UNIT_TEST
|
#ifndef UNIT_TEST
|
||||||
#define DISABLE_RX() {IOHi(IOGetByTag(IO_TAG(RX_NSS_PIN)));}
|
#define DISABLE_RX() {IOHi(DEFIO_IO(RX_NSS_PIN));}
|
||||||
#define ENABLE_RX() {IOLo(IOGetByTag(IO_TAG(RX_NSS_PIN)));}
|
#define ENABLE_RX() {IOLo(DEFIO_IO(RX_NSS_PIN));}
|
||||||
/*
|
/*
|
||||||
* Fast read of payload, for use in interrupt service routine
|
* Fast read of payload, for use in interrupt service routine
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -28,22 +28,17 @@
|
||||||
|
|
||||||
#include "build/build_config.h"
|
#include "build/build_config.h"
|
||||||
|
|
||||||
#include "system.h"
|
#include "bus_spi.h"
|
||||||
|
#include "bus_spi_soft.h"
|
||||||
#include "gpio.h"
|
#include "gpio.h"
|
||||||
#include "io.h"
|
#include "io.h"
|
||||||
#include "io_impl.h"
|
#include "io_impl.h"
|
||||||
#include "rcc.h"
|
#include "rcc.h"
|
||||||
#include "rx_spi.h"
|
#include "rx_spi.h"
|
||||||
|
#include "system.h"
|
||||||
|
|
||||||
#include "bus_spi.h"
|
#define DISABLE_RX() {IOHi(DEFIO_IO(RX_NSS_PIN));}
|
||||||
#include "bus_spi_soft.h"
|
#define ENABLE_RX() {IOLo(DEFIO_IO(RX_NSS_PIN));}
|
||||||
|
|
||||||
#define DISABLE_RX() {IOHi(IOGetByTag(IO_TAG(RX_NSS_PIN)));}
|
|
||||||
#define ENABLE_RX() {IOLo(IOGetByTag(IO_TAG(RX_NSS_PIN)));}
|
|
||||||
#ifdef RX_CE_PIN
|
|
||||||
#define RX_CE_HI() {IOHi(IOGetByTag(IO_TAG(RX_CE_PIN)));}
|
|
||||||
#define RX_CE_LO() {IOLo(IOGetByTag(IO_TAG(RX_CE_PIN)));}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef USE_RX_SOFTSPI
|
#ifdef USE_RX_SOFTSPI
|
||||||
static const softSPIDevice_t softSPIDevice = {
|
static const softSPIDevice_t softSPIDevice = {
|
||||||
|
@ -73,24 +68,9 @@ void rxSpiDeviceInit(rx_spi_type_e spiType)
|
||||||
#else
|
#else
|
||||||
UNUSED(spiType);
|
UNUSED(spiType);
|
||||||
const SPIDevice rxSPIDevice = spiDeviceByInstance(RX_SPI_INSTANCE);
|
const SPIDevice rxSPIDevice = spiDeviceByInstance(RX_SPI_INSTANCE);
|
||||||
IOInit(IOGetByTag(IO_TAG(RX_NSS_PIN)), OWNER_SPI_CS, rxSPIDevice + 1);
|
IOInit(DEFIO_IO(RX_NSS_PIN), OWNER_SPI_CS, rxSPIDevice + 1);
|
||||||
#endif // USE_RX_SOFTSPI
|
#endif // USE_RX_SOFTSPI
|
||||||
|
|
||||||
#if defined(STM32F10X)
|
|
||||||
RCC_AHBPeriphClockCmd(RX_NSS_GPIO_CLK_PERIPHERAL, ENABLE);
|
|
||||||
RCC_AHBPeriphClockCmd(RX_CE_GPIO_CLK_PERIPHERAL, ENABLE);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef RX_CE_PIN
|
|
||||||
// CE as OUTPUT
|
|
||||||
IOInit(IOGetByTag(IO_TAG(RX_CE_PIN)), OWNER_RX_SPI_CS, rxSPIDevice + 1);
|
|
||||||
#if defined(STM32F10X)
|
|
||||||
IOConfigGPIO(IOGetByTag(IO_TAG(RX_CE_PIN)), SPI_IO_CS_CFG);
|
|
||||||
#elif defined(STM32F3) || defined(STM32F4)
|
|
||||||
IOConfigGPIOAF(IOGetByTag(IO_TAG(RX_CE_PIN)), SPI_IO_CS_CFG, 0);
|
|
||||||
#endif
|
|
||||||
RX_CE_LO();
|
|
||||||
#endif // RX_CE_PIN
|
|
||||||
DISABLE_RX();
|
DISABLE_RX();
|
||||||
|
|
||||||
#ifdef RX_SPI_INSTANCE
|
#ifdef RX_SPI_INSTANCE
|
||||||
|
|
|
@ -43,13 +43,13 @@ uint16_t rxSpiRcData[MAX_SUPPORTED_RC_CHANNEL_COUNT];
|
||||||
STATIC_UNIT_TESTED uint8_t rxSpiPayload[RX_SPI_MAX_PAYLOAD_SIZE];
|
STATIC_UNIT_TESTED uint8_t rxSpiPayload[RX_SPI_MAX_PAYLOAD_SIZE];
|
||||||
STATIC_UNIT_TESTED uint8_t rxSpiNewPacketAvailable; // set true when a new packet is received
|
STATIC_UNIT_TESTED uint8_t rxSpiNewPacketAvailable; // set true when a new packet is received
|
||||||
|
|
||||||
typedef void (*protocolInitPtr)(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig);
|
typedef void (*protocolInitFnPtr)(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig);
|
||||||
typedef rx_spi_received_e (*protocolDataReceivedPtr)(uint8_t *payload);
|
typedef rx_spi_received_e (*protocolDataReceivedFnPtr)(uint8_t *payload);
|
||||||
typedef void (*protocolSetRcDataFromPayloadPtr)(uint16_t *rcData, const uint8_t *payload);
|
typedef void (*protocolSetRcDataFromPayloadFnPtr)(uint16_t *rcData, const uint8_t *payload);
|
||||||
|
|
||||||
static protocolInitPtr protocolInit;
|
static protocolInitFnPtr protocolInit;
|
||||||
static protocolDataReceivedPtr protocolDataReceived;
|
static protocolDataReceivedFnPtr protocolDataReceived;
|
||||||
static protocolSetRcDataFromPayloadPtr protocolSetRcDataFromPayload;
|
static protocolSetRcDataFromPayloadFnPtr protocolSetRcDataFromPayload;
|
||||||
|
|
||||||
STATIC_UNIT_TESTED uint16_t rxSpiReadRawRC(const rxRuntimeConfig_t *rxRuntimeConfig, uint8_t channel)
|
STATIC_UNIT_TESTED uint16_t rxSpiReadRawRC(const rxRuntimeConfig_t *rxRuntimeConfig, uint8_t channel)
|
||||||
{
|
{
|
||||||
|
|
|
@ -60,9 +60,6 @@
|
||||||
#define RX_SPI_INSTANCE SPI1
|
#define RX_SPI_INSTANCE SPI1
|
||||||
|
|
||||||
// Nordic Semiconductor uses 'CSN', STM uses 'NSS'
|
// Nordic Semiconductor uses 'CSN', STM uses 'NSS'
|
||||||
#define RX_CE_GPIO_CLK_PERIPHERAL RCC_APB2Periph_GPIOA
|
|
||||||
#define RX_NSS_GPIO_CLK_PERIPHERAL RCC_APB2Periph_GPIOA
|
|
||||||
#define RX_IRQ_GPIO_CLK_PERIPHERAL RCC_APB2Periph_GPIOA
|
|
||||||
#define RX_CE_PIN PA4
|
#define RX_CE_PIN PA4
|
||||||
#define RX_NSS_PIN PA11
|
#define RX_NSS_PIN PA11
|
||||||
#define RX_SCK_PIN PA5
|
#define RX_SCK_PIN PA5
|
||||||
|
|
Loading…
Reference in New Issue