From 2168085ac76c280880a0c2262a7e63fd0ce7c952 Mon Sep 17 00:00:00 2001 From: andru <7698720+AndruPol@users.noreply.github.com> Date: Tue, 8 Jan 2019 11:22:01 +0300 Subject: added NRF52 pwm, icu, i2c, radio esb drivers --- testhal/NRF52/NRF52832/RADIO-ESB/main.c | 122 ++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 testhal/NRF52/NRF52832/RADIO-ESB/main.c (limited to 'testhal/NRF52/NRF52832/RADIO-ESB/main.c') diff --git a/testhal/NRF52/NRF52832/RADIO-ESB/main.c b/testhal/NRF52/NRF52832/RADIO-ESB/main.c new file mode 100644 index 0000000..8971fef --- /dev/null +++ b/testhal/NRF52/NRF52832/RADIO-ESB/main.c @@ -0,0 +1,122 @@ +#include +#include +#include + +#include "ch.h" +#include "hal.h" +#include "chprintf.h" + +#include "nrf52_radio.h" + +static SerialConfig serial_config = { + .speed = 38400, + .tx_pad = UART_TX, + .rx_pad = UART_RX, +#if NRF5_SERIAL_USE_HWFLOWCTRL == TRUE + .rts_pad = UART_RTS, + .cts_pad = UART_CTS, +#endif +}; + +static THD_WORKING_AREA(waLEDThread, 64); +static THD_FUNCTION(LEDThread, arg) { + (void)arg; + + chRegSetThreadName("blinker"); + palSetPadMode(IOPORT1, LED1, PAL_MODE_OUTPUT_PUSHPULL); + + while (1) { + palTogglePad(IOPORT1, LED1); + chThdSleepMilliseconds(500); + } +} + +static nrf52_config_t radiocfg = { + .protocol = NRF52_PROTOCOL_ESB_DPL, + .mode = NRF52_MODE_PRX, + .bitrate = NRF52_BITRATE_1MBPS, + .crc = NRF52_CRC_8BIT, + .tx_power = NRF52_TX_POWER_0DBM, + .tx_mode = NRF52_TXMODE_MANUAL_START, + .selective_auto_ack = false, + .retransmit = { 1000, 3 }, + .payload_length = 0, + .address = { + .base_addr_p0 = { 0xF3, 0xF3, 0xF3, 0x01 }, + .base_addr_p1 = { 0x3F, 0x3F, 0x3F, 0x01 }, + .pipe_prefixes = { 0xF3, 0x3F, }, + .num_pipes = 2, + .addr_length = 5, + .rx_pipes = 1 << 0, + .rf_channel = 1, + }, +}; + +static uint16_t cnt, fail_pkt, good_pkt; +static nrf52_payload_t tx_payload = { + .pipe = 1, +}; +static nrf52_payload_t rx_payload; + +static THD_WORKING_AREA(waRadioThread, 256); +static THD_FUNCTION(RadioThread, arg) { + (void)arg; + + event_listener_t el; + chEvtRegisterMask(&RFD1.eventsrc, &el, EVENT_MASK(0)); + + chRegSetThreadName("radio"); + + while (1) { + chEvtWaitAny(EVENT_MASK(0)); + eventflags_t flags = chEvtGetAndClearFlags(&el); + if (flags & NRF52_EVENT_TX_SUCCESS) { + radio_start_rx(); + good_pkt++; + } + if (flags & NRF52_EVENT_TX_FAILED) { + radio_start_rx(); + fail_pkt++; + } + if (flags & NRF52_EVENT_RX_RECEIVED) { + memset(rx_payload.data, 0, 32); + radio_read_rx_payload(&rx_payload); + } + } +} + +/**@brief Function for application main entry. + */ +int main(void) { + + halInit(); + chSysInit(); + + sdStart(&SD1, &serial_config); + + chThdCreateStatic(waLEDThread, sizeof(waLEDThread), NORMALPRIO, LEDThread, NULL); + chThdCreateStatic(waRadioThread, sizeof(waRadioThread), NORMALPRIO, RadioThread, NULL); + + radio_init(&radiocfg); + radio_flush_tx(); + radio_flush_rx(); + radio_start_rx(); + + cnt = good_pkt = fail_pkt = 0; + + while (true) { + memset(tx_payload.data, 0, 32); + sprintf((char*)tx_payload.data, "counter value=%d" , cnt++); + tx_payload.length = strlen((char *)tx_payload.data); + radio_stop_rx(); + radio_write_payload(&tx_payload); + radio_start_tx(); + chprintf((BaseSequentialStream *)&SD1, "packets: good=%d, fail=%d, sent=%s\r\n", good_pkt, fail_pkt, tx_payload.data); + chThdSleepMilliseconds(500); + if (strlen((char*) rx_payload.data)) { + chprintf((BaseSequentialStream *)&SD1, "rssi=%d, received=%s\r\n", rx_payload.rssi, rx_payload.data); + rx_payload.data[0] = 0; + } + } +} + -- cgit v1.2.3