Configuración de timers

Buenas tardes, estoy desarrollando mi TFG que trata de un sistema de medición de glucosa en sangre (glucómetro), y este se compone de un LED NIR que emite una señal cuadrada de 1 Hz de frecuencia, activando el led 500 ms y desactivando el led otros 500 ms. Además para que la medición sea más precisa se necesita un altavoz de ultrasonidos cuya finalidad es agrupar las moléculas de glucosa, pero solo realiza esto si la onda generada es cuadrada de amplitud modulada, y esto se consigue con una onda portadora de 40 khz y una moduladora de 250 Hz, para ello es necesario utilizar un Timer, se me olvidó decir que estoy usando Arduino Nano 33 BLE.

Por tanto, les adjunto mi código para ver si le parece correcto, ando un poco desesperado porque llevo tiempo intentándolo y como emite en ultrasonido no se si será correcto el código. Muchas gracias a todos.

void configTimer2(void)
  {    
     NRF_TIMER2->TASKS_STOP = 1; // Parar temporizador
  
    // Establecer el temporizador en Timer Mode
    NRF_TIMER2->MODE = TIMER_MODE_MODE_Timer;

    // Reiniciar el contador
    NRF_TIMER2->TASKS_CLEAR = 1; 

    // Nordic nRF52840 – 16 MHz 
    // Prescaler accepts values from 0-9 only.
//La frecuencia del timer será  f=16 MHz/(2^preescaler) como queremos 
//que f sea 40kHz sustituimos en la ecuación. Nos da 8,64 el
//preescaler, sin embargo debe ser número entero así que cojo el 9.
//Pero con el 9 el valor de la frecuencia no es de 40kHz es de 30kHz y si
//cojo el 8 el valor es 62kHz por eso he cogido el otro. Entonces no va a
//emitir a los 40k exactamente.
    NRF_TIMER2->PRESCALER = 9;  

    // Set counter to 16 bit resolution. Timer is 16bit.
    NRF_TIMER2->BITMODE = TIMER_BITMODE_BITMODE_16Bit;
  
    // Set value for TIMER2 compare register 0
    // The maximum compare value for 16 bits is 0xFFFF (= 65535)
    // Once reached it will fire off the first event
//Estableces el tiempo a la que se para el timer la
//f=16mHz/(2^preescaler*periodo) y despejando el periodo sale 125 hz
    NRF_TIMER2->CC[0] = 125;
      
    // Enable interrupt on Timer 2, for a CC[0] match event
    NRF_TIMER2->INTENSET = (TIMER_INTENSET_COMPARE0_Enabled << TIMER_INTENSET_COMPARE0_Pos);
   
    // Enable the Interupt
    NVIC_EnableIRQ(TIMER2_IRQn);

    // Start TIMER2
    NRF_TIMER2->TASKS_START = 1;
  }


 void TIMER2_IRQHandler(void)
{    
    if(NRF_TIMER2->EVENTS_COMPARE[0])
    {
        nrf_gpio_pin_toggle(21);
        NRF_TIMER2->EVENTS_COMPARE[0] = 0;
        
        // Need to update the CC[0]
        NRF_TIMER2->CC[0] += TIMER2_CC_DELAY;
    }
}