1
0
mirror of https://github.com/DCC-EX/CommandStation-EX.git synced 2024-12-25 05:31:24 +01:00

SAMD timer code

This commit is contained in:
pmantoine 2022-04-08 12:35:19 +08:00
parent 084ddf01e1
commit a52551babe

View File

@ -88,6 +88,18 @@ void DCCTimer::begin(INTERRUPT_CALLBACK callback) {
TCC0->WAVE.reg = TCC_WAVE_WAVEGEN_NPWM; // Select NPWM as waveform TCC0->WAVE.reg = TCC_WAVE_WAVEGEN_NPWM; // Select NPWM as waveform
while (TCC0->SYNCBUSY.bit.WAVE); // Wait for sync while (TCC0->SYNCBUSY.bit.WAVE); // Wait for sync
TCC0->INTENSET.reg = TCC_INTENSET_OVF; // Interrupt on overflow TCC0->INTENSET.reg = TCC_INTENSET_OVF; // Interrupt on overflow
// PMA - set the frequency
TCC0->CTRLA.reg |= TCC_CTRLA_PRESCALER(TCC_CTRLA_PRESCALER_DIV1_Val);
unsigned long cycles = F_CPU / 10000000 * 58; // 58uS to cycles
unsigned long pwmPeriod = cycles / 2;
TCC0->PER.reg = pwmPeriod;
while (TCC0->SYNCBUSY.bit.PER);
// PMA - start it
TCC0->CTRLA.bit.ENABLE = 1;
while (TCC0->SYNCBUSY.bit.ENABLE);
NVIC_EnableIRQ((IRQn_Type)TCC0_IRQn); // Enable the interrupt NVIC_EnableIRQ((IRQn_Type)TCC0_IRQn); // Enable the interrupt
interrupts(); interrupts();
} }