now it works
This commit is contained in:
@@ -71,6 +71,9 @@
|
|||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN Includes */
|
||||||
|
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
|
extern uint32_t led_tx_countdown;
|
||||||
|
extern uint32_t led_rx_countdown;
|
||||||
|
#define DATA_FLASH_TIME 5000
|
||||||
|
|
||||||
/* Private define ------------------------------------------------------------*/
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
|
||||||
@@ -87,6 +90,8 @@
|
|||||||
#define NRF_NSS_GPIO_Port GPIOA
|
#define NRF_NSS_GPIO_Port GPIOA
|
||||||
#define RENUM_Pin LL_GPIO_PIN_0
|
#define RENUM_Pin LL_GPIO_PIN_0
|
||||||
#define RENUM_GPIO_Port GPIOA
|
#define RENUM_GPIO_Port GPIOA
|
||||||
|
#define NRF_RESET_Pin LL_GPIO_PIN_9
|
||||||
|
#define NRF_RESET_GPIO_Port GPIOB
|
||||||
|
|
||||||
/* ########################## Assert Selection ############################## */
|
/* ########################## Assert Selection ############################## */
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
#define GEX_NRF_NRF_H
|
#define GEX_NRF_NRF_H
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* nordic.h
|
* nordic.h - adapted from http://barefootelectronics.com/NRF24L01.aspx
|
||||||
*
|
*
|
||||||
* Created:12/16/2013 3:36:04 PM
|
* Created:12/16/2013 3:36:04 PM
|
||||||
* Author: Tom
|
* Author: Tom
|
||||||
@@ -21,8 +21,11 @@
|
|||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
|
#define NRF_CHANNEL 76
|
||||||
|
|
||||||
|
|
||||||
#define dbg_nrf(...) do{}while(0)
|
#define dbg_nrf(...) do{}while(0)
|
||||||
//#define dbg_nrf(...) dbg(##__VA_ARGS__)
|
//#define dbg_nrf dbg
|
||||||
|
|
||||||
// Initialize SPI and the Nordic
|
// Initialize SPI and the Nordic
|
||||||
|
|
||||||
|
|||||||
+7
-5
@@ -135,7 +135,6 @@ void handle_txframe_chunk(const uint8_t *buffer, uint16_t size)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LL_GPIO_ResetOutputPin(LED_GPIO_Port, LEDTX_Pin);
|
|
||||||
cmd_state = CMD_STATE_IDLE;
|
cmd_state = CMD_STATE_IDLE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -173,6 +172,7 @@ void gw_handle_usb_out(uint8_t *buffer)
|
|||||||
}
|
}
|
||||||
|
|
||||||
LL_GPIO_SetOutputPin(LED_GPIO_Port, LEDTX_Pin);
|
LL_GPIO_SetOutputPin(LED_GPIO_Port, LEDTX_Pin);
|
||||||
|
led_tx_countdown = DATA_FLASH_TIME;
|
||||||
start_slave_cmd(slave_addr, frame_len, cksum);
|
start_slave_cmd(slave_addr, frame_len, cksum);
|
||||||
dbg_nrf("Collecting frame for slave %02x: %d bytes", (int)slave_addr, (int)frame_len);
|
dbg_nrf("Collecting frame for slave %02x: %d bytes", (int)slave_addr, (int)frame_len);
|
||||||
cmd_state = CMD_STATE_TXMSG;
|
cmd_state = CMD_STATE_TXMSG;
|
||||||
@@ -188,7 +188,7 @@ void gw_handle_usb_out(uint8_t *buffer)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (cmd_state == CMD_STATE_TXMSG) {
|
else if (cmd_state == CMD_STATE_TXMSG) {
|
||||||
LL_GPIO_SetOutputPin(LED_GPIO_Port, LEDTX_Pin);
|
led_tx_countdown = DATA_FLASH_TIME;
|
||||||
handle_txframe_chunk(buffer, 64);
|
handle_txframe_chunk(buffer, 64);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -276,10 +276,9 @@ void gw_setup_radio(void)
|
|||||||
NRF_ModeRX(); // base state is RX
|
NRF_ModeRX(); // base state is RX
|
||||||
}
|
}
|
||||||
|
|
||||||
void EXTI2_IRQHandler(void)
|
void EXTI1_IRQHandler(void)
|
||||||
{
|
{
|
||||||
LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_2);
|
LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_1);
|
||||||
LL_GPIO_SetOutputPin(LED_GPIO_Port, LEDRX_Pin);
|
|
||||||
|
|
||||||
struct msg_data m;
|
struct msg_data m;
|
||||||
m.msg_type = MSG_TYPE_DATA;
|
m.msg_type = MSG_TYPE_DATA;
|
||||||
@@ -290,6 +289,9 @@ void EXTI2_IRQHandler(void)
|
|||||||
dbg("IRQ but no msg!");
|
dbg("IRQ but no msg!");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
LL_GPIO_SetOutputPin(LED_GPIO_Port, LEDRX_Pin);
|
||||||
|
led_rx_countdown = DATA_FLASH_TIME;
|
||||||
|
|
||||||
dbg_nrf("Msg RXd from nordic!");
|
dbg_nrf("Msg RXd from nordic!");
|
||||||
|
|
||||||
m.dev_addr = NRF_PipeNum2Addr(pipenum);
|
m.dev_addr = NRF_PipeNum2Addr(pipenum);
|
||||||
|
|||||||
+43
-35
@@ -70,54 +70,62 @@
|
|||||||
void MX_GPIO_Init(void)
|
void MX_GPIO_Init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
LL_EXTI_InitTypeDef EXTI_InitStruct;
|
LL_EXTI_InitTypeDef EXTI_InitStruct;
|
||||||
LL_GPIO_InitTypeDef GPIO_InitStruct;
|
LL_GPIO_InitTypeDef GPIO_InitStruct;
|
||||||
|
|
||||||
/* GPIO Ports Clock Enable */
|
/* GPIO Ports Clock Enable */
|
||||||
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOC);
|
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOC);
|
||||||
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOD);
|
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOD);
|
||||||
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA);
|
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA);
|
||||||
|
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOB);
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
LL_GPIO_ResetOutputPin(LED_GPIO_Port, LED1_Pin);
|
|
||||||
LL_GPIO_ResetOutputPin(LED_GPIO_Port, LEDRX_Pin);
|
|
||||||
LL_GPIO_ResetOutputPin(LED_GPIO_Port, LEDTX_Pin);
|
|
||||||
LL_GPIO_SetOutputPin(RENUM_GPIO_Port, RENUM_Pin);
|
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
// LL_GPIO_ResetOutputPin(GPIOA, NRF_CE_Pin|NRF_NSS_Pin);
|
// LL_GPIO_ResetOutputPin(GPIOA, NRF_CE_Pin|NRF_NSS_Pin);
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
GPIO_InitStruct.Pin = LED1_Pin|LEDRX_Pin|LEDTX_Pin;
|
GPIO_InitStruct.Pin = LED1_Pin | LEDRX_Pin | LEDTX_Pin;
|
||||||
GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
|
GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
|
||||||
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
|
||||||
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
||||||
LL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);
|
LL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
GPIO_InitStruct.Pin = NRF_CE_Pin|NRF_NSS_Pin|RENUM_Pin;
|
GPIO_InitStruct.Pin = NRF_CE_Pin | NRF_NSS_Pin | RENUM_Pin;
|
||||||
GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
|
GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
|
||||||
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
|
||||||
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
||||||
LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
GPIO_InitStruct.Pin = NRF_RESET_Pin;
|
||||||
|
GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
|
||||||
|
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
|
||||||
|
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
|
||||||
|
LL_GPIO_Init(NRF_RESET_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
/**/
|
/**/
|
||||||
LL_GPIO_AF_SetEXTISource(LL_GPIO_AF_EXTI_PORTA, LL_GPIO_AF_EXTI_LINE1); // IRQ on PA1
|
LL_GPIO_AF_SetEXTISource(LL_GPIO_AF_EXTI_PORTA, LL_GPIO_AF_EXTI_LINE1); // IRQ on PA1
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_1;
|
EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_1;
|
||||||
EXTI_InitStruct.LineCommand = ENABLE;
|
EXTI_InitStruct.LineCommand = ENABLE;
|
||||||
EXTI_InitStruct.Mode = LL_EXTI_MODE_IT;
|
EXTI_InitStruct.Mode = LL_EXTI_MODE_IT;
|
||||||
EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_FALLING;
|
EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_FALLING;
|
||||||
LL_EXTI_Init(&EXTI_InitStruct);
|
LL_EXTI_Init(&EXTI_InitStruct);
|
||||||
|
|
||||||
NVIC_EnableIRQ(EXTI2_IRQn);
|
NVIC_EnableIRQ(EXTI1_IRQn);
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
LL_GPIO_SetPinMode(NRF_IRQ_GPIO_Port, NRF_IRQ_Pin, LL_GPIO_MODE_FLOATING);
|
LL_GPIO_SetPinMode(NRF_IRQ_GPIO_Port, NRF_IRQ_Pin, LL_GPIO_MODE_FLOATING);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
LL_GPIO_ResetOutputPin(LED_GPIO_Port, LED1_Pin);
|
||||||
|
LL_GPIO_ResetOutputPin(LED_GPIO_Port, LEDRX_Pin);
|
||||||
|
LL_GPIO_ResetOutputPin(LED_GPIO_Port, LEDTX_Pin);
|
||||||
|
LL_GPIO_SetOutputPin(RENUM_GPIO_Port, RENUM_Pin);
|
||||||
|
LL_GPIO_SetOutputPin(NRF_RESET_GPIO_Port, NRF_RESET_Pin);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 2 */
|
/* USER CODE BEGIN 2 */
|
||||||
|
|||||||
+20
-5
@@ -61,6 +61,9 @@
|
|||||||
|
|
||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN Includes */
|
||||||
|
|
||||||
|
uint32_t led_tx_countdown = 0;
|
||||||
|
uint32_t led_rx_countdown = 0;
|
||||||
|
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
/* Private variables ---------------------------------------------------------*/
|
||||||
@@ -82,7 +85,7 @@ void SystemClock_Config(void);
|
|||||||
|
|
||||||
/* USER CODE END 0 */
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
extern void EXTI2_IRQHandler(void);
|
extern void EXTI1_IRQHandler(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The application entry point.
|
* @brief The application entry point.
|
||||||
@@ -113,6 +116,7 @@ int main(void)
|
|||||||
|
|
||||||
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOC);
|
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOC);
|
||||||
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOD);
|
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOD);
|
||||||
|
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOB);
|
||||||
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA);
|
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA);
|
||||||
|
|
||||||
/* Initialize all configured peripherals */
|
/* Initialize all configured peripherals */
|
||||||
@@ -123,6 +127,8 @@ int main(void)
|
|||||||
MX_USART1_UART_Init();
|
MX_USART1_UART_Init();
|
||||||
/* USER CODE BEGIN 2 */
|
/* USER CODE BEGIN 2 */
|
||||||
|
|
||||||
|
// give juice to the nrf module
|
||||||
|
LL_GPIO_ResetOutputPin(NRF_RESET_GPIO_Port, NRF_RESET_Pin);
|
||||||
/* USER CODE END 2 */
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
gw_setup_radio();
|
gw_setup_radio();
|
||||||
@@ -136,7 +142,7 @@ int main(void)
|
|||||||
dbg("Main loop starts.");
|
dbg("Main loop starts.");
|
||||||
/* Infinite loop */
|
/* Infinite loop */
|
||||||
/* USER CODE BEGIN WHILE */
|
/* USER CODE BEGIN WHILE */
|
||||||
int cnt = 0;
|
uint32_t cnt = 0;
|
||||||
uint8_t buff[MQ_SLOT_LEN];
|
uint8_t buff[MQ_SLOT_LEN];
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
@@ -149,13 +155,22 @@ int main(void)
|
|||||||
cnt = 0;
|
cnt = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (led_tx_countdown > 0) {
|
||||||
|
if (--led_tx_countdown == 0) {
|
||||||
|
LL_GPIO_ResetOutputPin(LED_GPIO_Port, LEDTX_Pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (led_rx_countdown > 0) {
|
||||||
|
if (--led_rx_countdown == 0) {
|
||||||
|
LL_GPIO_ResetOutputPin(LED_GPIO_Port, LEDRX_Pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (mq_can_read(&usb_inq)) {
|
if (mq_can_read(&usb_inq)) {
|
||||||
if (!usb_tx_busy) {
|
if (!usb_tx_busy) {
|
||||||
mq_read(&usb_inq, buff);
|
mq_read(&usb_inq, buff);
|
||||||
CDC_Transmit_FS(buff, MQ_SLOT_LEN);
|
CDC_Transmit_FS(buff, MQ_SLOT_LEN);
|
||||||
|
|
||||||
// blinking - maybe this will work .. not sure
|
|
||||||
LL_GPIO_ResetOutputPin(LED_GPIO_Port, LEDRX_Pin);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -492,6 +492,7 @@ void NRF_Init(uint8_t pSpeed)
|
|||||||
NSS(1);
|
NSS(1);
|
||||||
CE(0);
|
CE(0);
|
||||||
|
|
||||||
|
dbg_nrf("Waiting for module start...");
|
||||||
LL_mDelay(200);
|
LL_mDelay(200);
|
||||||
|
|
||||||
for (int i = 0; i < 6; i++) {
|
for (int i = 0; i < 6; i++) {
|
||||||
@@ -499,11 +500,12 @@ void NRF_Init(uint8_t pSpeed)
|
|||||||
nrf_pipe_enabled[i] = 0;
|
nrf_pipe_enabled[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dbg_nrf("init regs");
|
||||||
// clear flags etc
|
// clear flags etc
|
||||||
NRF_PowerDown();
|
NRF_PowerDown();
|
||||||
NRF_FlushRx();
|
NRF_FlushRx();
|
||||||
NRF_FlushTx();
|
NRF_FlushTx();
|
||||||
NRF_WriteRegister(RG_STATUS, 0x70);
|
NRF_WriteRegister(RG_STATUS, 0x70); // this will fail to verify, that's OK
|
||||||
|
|
||||||
NRF_WriteRegister(RG_CONFIG, ModeBits);
|
NRF_WriteRegister(RG_CONFIG, ModeBits);
|
||||||
NRF_WriteRegister(RG_SETUP_AW, 0b11); // 5 byte addresses
|
NRF_WriteRegister(RG_SETUP_AW, 0b11); // 5 byte addresses
|
||||||
@@ -511,7 +513,7 @@ void NRF_Init(uint8_t pSpeed)
|
|||||||
NRF_WriteRegister(RG_EN_RXADDR, 0x01); // disable all except 1 which we'll assign later
|
NRF_WriteRegister(RG_EN_RXADDR, 0x01); // disable all except 1 which we'll assign later
|
||||||
|
|
||||||
NRF_WriteRegister(RG_SETUP_RETR, 0x18); // 8 retries, 500 ms
|
NRF_WriteRegister(RG_SETUP_RETR, 0x18); // 8 retries, 500 ms
|
||||||
NRF_WriteRegister(RG_RF_CH, 76); // channel
|
NRF_WriteRegister(RG_RF_CH, NRF_CHANNEL); // channel
|
||||||
|
|
||||||
NRF_WriteRegister(RG_RF_SETUP, pSpeed);
|
NRF_WriteRegister(RG_RF_SETUP, pSpeed);
|
||||||
|
|
||||||
@@ -521,4 +523,5 @@ void NRF_Init(uint8_t pSpeed)
|
|||||||
// for (int i = 0; i < 6; i++) {
|
// for (int i = 0; i < 6; i++) {
|
||||||
// NRF_WriteRegister(RG_RX_PW_P0+i, 32); // Receive 32 byte packets - XXX this is probably not needed with dynamic length
|
// NRF_WriteRegister(RG_RX_PW_P0+i, 32); // Receive 32 byte packets - XXX this is probably not needed with dynamic length
|
||||||
// }
|
// }
|
||||||
|
dbg_nrf("nrf init finished");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user