Hello,
I am currently implementing an OOK modulation with the nRF52 -DK and therefore I need to start the radio with a carrier on defined frequency. Obviously there is a way in the nRF via register access and I also make use of the fast ramp-up to increase speed.
For testing purposes I'd like to create a rectangular signal with the lowest period possible and I get this: https://pasteboard.co/HigVOoR.png
According to the spec the carrier is on once the radio reaches the TXIDLE, once in TXIDLE (Ready event) I immediately disable the radio. This should take 4us with 2MBit BLE in which the carrier should stay on, however I measure a carrier of 12-15us instead of 4us. Why is this and is there a way to shorten this time?
My code:
NRF_RADIO->MODECNF0 = (RADIO_MODECNF0_DTX_Center << RADIO_MODECNF0_DTX_Pos) | (RADIO_MODECNF0_RU_Fast << RADIO_MODECNF0_RU_Pos); NRF_RADIO->TXPOWER = (RADIO_TXPOWER_TXPOWER_Neg20dBm << RADIO_TXPOWER_TXPOWER_Pos); NRF_RADIO->MODE = (RADIO_MODE_MODE_Ble_2Mbit << RADIO_MODE_MODE_Pos); NRF_RADIO->FREQUENCY = 75; NRF_RADIO->PCNF0 = 0; NRF_RADIO->SHORTS = 0; NRF_RNG->TASKS_START = 1; while(true) { NRF_RADIO->TASKS_TXEN = 1; for (NRF_RADIO->EVENTS_READY = 0; !NRF_RADIO->EVENTS_READY; ); NRF_RADIO->EVENTS_READY = 0; NRF_RADIO->EVENTS_DISABLED = 0; for(NRF_RADIO->TASKS_DISABLE = 1; !NRF_RADIO->EVENTS_DISABLED; ); NRF_RADIO->EVENTS_DISABLED = 0; }
Best
Paul