Hallo zusammen,
ich Versuche gerade mit den Timern des Xiao BLE nrf52840 einen 200ns Puls zu erzeugen. Theoretisch sollte das mit den Timern und dem PPI zusammen klappen. Aktuell scheitere ich aber schon beim Starten des Timers.
Hier ist der Source Code für das initialisieren des Timers:
// Configure TIMER1 for precise 200 ns pulses
NRF_TIMER1->MODE = TIMER_MODE_MODE_Timer; // Timer mode
NRF_TIMER1->PRESCALER = 0; // Full 16 MHz clock (62.5 ns per tick)
NRF_TIMER1->BITMODE = TIMER_BITMODE_BITMODE_16Bit << TIMER_BITMODE_BITMODE_Pos;
NRF_TIMER1->CC[0] = 3; // 3 ticks = 200 ns
NRF_TIMER1->SHORTS = TIMER_SHORTS_COMPARE0_CLEAR_Msk; // Auto-clear after compare match
// Configure GPIOTE to toggle IR_LED_PIN
NRF_GPIOTE->CONFIG[0] = (GPIOTE_CONFIG_MODE_Task << GPIOTE_CONFIG_MODE_Pos) |
(IR_LED_PIN << GPIOTE_CONFIG_PSEL_Pos) |Z
(GPIOTE_CONFIG_POLARITY_Toggle << GPIOTE_CONFIG_POLARITY_Pos);
// Connect TIMER1 Compare event to GPIOTE task using PPI
NRF_PPI->CH[0].EEP = (uint32_t)&NRF_TIMER1->EVENTS_COMPARE[0];
NRF_PPI->CH[0].TEP = (uint32_t)&NRF_GPIOTE->TASKS_OUT[0];
NRF_PPI->CHENSET = PPI_CHENSET_CH0_Msk; // Enable PPI channel
// Start the timer
NRF_TIMER1->TASKS_START = 1;
Wenn ich über die serielle Schnittstelle den Status des Timers ausgebe, dann ist der TASKS_START immer 0.
Da die Dokumentation für den Timer eher dünn ist, frage ich mich wo der Fehler liegt.
Hat jemand eine Idee ?
Gruß Lars