Wouter van Kleunen
/
nrf52_esb
NRF52_esb
main.cpp@0:a01a54c0dc90, 2015-03-23 (annotated)
- Committer:
- joshuajnoble
- Date:
- Mon Mar 23 04:09:41 2015 +0000
- Revision:
- 0:a01a54c0dc90
- Child:
- 1:66f95e364222
trying esb
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
joshuajnoble | 0:a01a54c0dc90 | 1 | #include "mbed.h" |
joshuajnoble | 0:a01a54c0dc90 | 2 | |
joshuajnoble | 0:a01a54c0dc90 | 3 | DigitalOut myled(LED1); |
joshuajnoble | 0:a01a54c0dc90 | 4 | |
joshuajnoble | 0:a01a54c0dc90 | 5 | #include <stdbool.h> |
joshuajnoble | 0:a01a54c0dc90 | 6 | #include <stdint.h> |
joshuajnoble | 0:a01a54c0dc90 | 7 | #include <string.h> |
joshuajnoble | 0:a01a54c0dc90 | 8 | //#include "nrf.h" |
joshuajnoble | 0:a01a54c0dc90 | 9 | #include "micro_esb.h" |
joshuajnoble | 0:a01a54c0dc90 | 10 | #include "uesb_error_codes.h" |
joshuajnoble | 0:a01a54c0dc90 | 11 | #include "nrf_delay.h" |
joshuajnoble | 0:a01a54c0dc90 | 12 | //#include "nrf_gpio.h" |
joshuajnoble | 0:a01a54c0dc90 | 13 | |
joshuajnoble | 0:a01a54c0dc90 | 14 | static uesb_payload_t tx_payload, rx_payload; |
joshuajnoble | 0:a01a54c0dc90 | 15 | |
joshuajnoble | 0:a01a54c0dc90 | 16 | void uesb_event_handler() |
joshuajnoble | 0:a01a54c0dc90 | 17 | { |
joshuajnoble | 0:a01a54c0dc90 | 18 | static uint32_t rf_interrupts; |
joshuajnoble | 0:a01a54c0dc90 | 19 | static uint32_t tx_attempts; |
joshuajnoble | 0:a01a54c0dc90 | 20 | |
joshuajnoble | 0:a01a54c0dc90 | 21 | uesb_get_clear_interrupts(&rf_interrupts); |
joshuajnoble | 0:a01a54c0dc90 | 22 | |
joshuajnoble | 0:a01a54c0dc90 | 23 | if(rf_interrupts & UESB_INT_TX_SUCCESS_MSK) |
joshuajnoble | 0:a01a54c0dc90 | 24 | { |
joshuajnoble | 0:a01a54c0dc90 | 25 | } |
joshuajnoble | 0:a01a54c0dc90 | 26 | |
joshuajnoble | 0:a01a54c0dc90 | 27 | if(rf_interrupts & UESB_INT_TX_FAILED_MSK) |
joshuajnoble | 0:a01a54c0dc90 | 28 | { |
joshuajnoble | 0:a01a54c0dc90 | 29 | uesb_flush_tx(); |
joshuajnoble | 0:a01a54c0dc90 | 30 | } |
joshuajnoble | 0:a01a54c0dc90 | 31 | |
joshuajnoble | 0:a01a54c0dc90 | 32 | if(rf_interrupts & UESB_INT_RX_DR_MSK) |
joshuajnoble | 0:a01a54c0dc90 | 33 | { |
joshuajnoble | 0:a01a54c0dc90 | 34 | uesb_read_rx_payload(&rx_payload); |
joshuajnoble | 0:a01a54c0dc90 | 35 | NRF_GPIO->OUTCLR = 0xFUL << 8; |
joshuajnoble | 0:a01a54c0dc90 | 36 | NRF_GPIO->OUTSET = (uint32_t)((rx_payload.data[2] & 0x0F) << 8); |
joshuajnoble | 0:a01a54c0dc90 | 37 | } |
joshuajnoble | 0:a01a54c0dc90 | 38 | |
joshuajnoble | 0:a01a54c0dc90 | 39 | uesb_get_tx_attempts(&tx_attempts); |
joshuajnoble | 0:a01a54c0dc90 | 40 | NRF_GPIO->OUTCLR = 0xFUL << 12; |
joshuajnoble | 0:a01a54c0dc90 | 41 | NRF_GPIO->OUTSET = (tx_attempts & 0x0F) << 12; |
joshuajnoble | 0:a01a54c0dc90 | 42 | } |
joshuajnoble | 0:a01a54c0dc90 | 43 | |
joshuajnoble | 0:a01a54c0dc90 | 44 | int main(void) |
joshuajnoble | 0:a01a54c0dc90 | 45 | { |
joshuajnoble | 0:a01a54c0dc90 | 46 | uint8_t rx_addr_p0[] = {0x12, 0x34, 0x56, 0x78, 0x9A}; |
joshuajnoble | 0:a01a54c0dc90 | 47 | uint8_t rx_addr_p1[] = {0xBC, 0xDE, 0xF0, 0x12, 0x23}; |
joshuajnoble | 0:a01a54c0dc90 | 48 | uint8_t rx_addr_p2 = 0x66; |
joshuajnoble | 0:a01a54c0dc90 | 49 | |
joshuajnoble | 0:a01a54c0dc90 | 50 | //nrf_gpio_range_cfg_output(8, 15); |
joshuajnoble | 0:a01a54c0dc90 | 51 | |
joshuajnoble | 0:a01a54c0dc90 | 52 | NRF_CLOCK->EVENTS_HFCLKSTARTED = 0; |
joshuajnoble | 0:a01a54c0dc90 | 53 | NRF_CLOCK->TASKS_HFCLKSTART = 1; |
joshuajnoble | 0:a01a54c0dc90 | 54 | while(NRF_CLOCK->EVENTS_HFCLKSTARTED == 0); |
joshuajnoble | 0:a01a54c0dc90 | 55 | |
joshuajnoble | 0:a01a54c0dc90 | 56 | uesb_config_t uesb_config = UESB_DEFAULT_CONFIG; |
joshuajnoble | 0:a01a54c0dc90 | 57 | uesb_config.rf_channel = 5; |
joshuajnoble | 0:a01a54c0dc90 | 58 | uesb_config.crc = UESB_CRC_16BIT; |
joshuajnoble | 0:a01a54c0dc90 | 59 | uesb_config.retransmit_count = 6; |
joshuajnoble | 0:a01a54c0dc90 | 60 | uesb_config.retransmit_delay = 500; |
joshuajnoble | 0:a01a54c0dc90 | 61 | uesb_config.dynamic_ack_enabled = 0; |
joshuajnoble | 0:a01a54c0dc90 | 62 | uesb_config.protocol = UESB_PROTOCOL_ESB_DPL; |
joshuajnoble | 0:a01a54c0dc90 | 63 | uesb_config.bitrate = UESB_BITRATE_2MBPS; |
joshuajnoble | 0:a01a54c0dc90 | 64 | uesb_config.event_handler = uesb_event_handler; |
joshuajnoble | 0:a01a54c0dc90 | 65 | |
joshuajnoble | 0:a01a54c0dc90 | 66 | uesb_init(&uesb_config); |
joshuajnoble | 0:a01a54c0dc90 | 67 | |
joshuajnoble | 0:a01a54c0dc90 | 68 | uesb_set_address(UESB_ADDRESS_PIPE0, rx_addr_p0); |
joshuajnoble | 0:a01a54c0dc90 | 69 | uesb_set_address(UESB_ADDRESS_PIPE1, rx_addr_p1); |
joshuajnoble | 0:a01a54c0dc90 | 70 | uesb_set_address(UESB_ADDRESS_PIPE2, &rx_addr_p2); |
joshuajnoble | 0:a01a54c0dc90 | 71 | |
joshuajnoble | 0:a01a54c0dc90 | 72 | tx_payload.length = 8; |
joshuajnoble | 0:a01a54c0dc90 | 73 | tx_payload.pipe = 0; |
joshuajnoble | 0:a01a54c0dc90 | 74 | tx_payload.data[0] = 0x01; |
joshuajnoble | 0:a01a54c0dc90 | 75 | tx_payload.data[1] = 0x00; |
joshuajnoble | 0:a01a54c0dc90 | 76 | tx_payload.data[2] = 0x00; |
joshuajnoble | 0:a01a54c0dc90 | 77 | tx_payload.data[3] = 0x00; |
joshuajnoble | 0:a01a54c0dc90 | 78 | tx_payload.data[4] = 0x11; |
joshuajnoble | 0:a01a54c0dc90 | 79 | |
joshuajnoble | 0:a01a54c0dc90 | 80 | while (true) |
joshuajnoble | 0:a01a54c0dc90 | 81 | { |
joshuajnoble | 0:a01a54c0dc90 | 82 | if(uesb_write_tx_payload(&tx_payload) == UESB_SUCCESS) |
joshuajnoble | 0:a01a54c0dc90 | 83 | { |
joshuajnoble | 0:a01a54c0dc90 | 84 | tx_payload.data[1]++; |
joshuajnoble | 0:a01a54c0dc90 | 85 | } |
joshuajnoble | 0:a01a54c0dc90 | 86 | nrf_delay_us(10000); |
joshuajnoble | 0:a01a54c0dc90 | 87 | } |
joshuajnoble | 0:a01a54c0dc90 | 88 | } |
joshuajnoble | 0:a01a54c0dc90 | 89 |