I need three square wave signals. I found a good example here and am using this code to get two squares. But I can't get TIOA from another timer. I cannot understand how the timer channels and TIOA outputs are connected. If I change the channel, I don't get anything at the output. I tried to change channels and timers but only TIOA8 & TIOB8 works.
Can someone give an example of how to get signals from other timers or channels? I looked in the datasheet but did not find anything.
#include <Arduino.h>
volatile bool ledOn;
//TC1 ch 0
//uint32_t *TC_CV = (uint32_t *)(0x40084010);
uint32_t t_channel = 2;
void TC8_Handler()
{
//TC_GetStatus(TC2, t_channel);
//digitalWrite(13, ledOn = !ledOn);
//digitalWrite(11, ledOn);
}
void TimerStart(Tc *tc, uint32_t channel, IRQn_Type irq)
{
pmc_set_writeprotect(false);
pmc_enable_periph_clk(irq);
//PMC->PMC_PCER0 |= ID_TC2;
TC_Configure(tc, channel, TC_CMR_TCCLKS_TIMER_CLOCK1 // MCK/2, clk on rising edge
| TC_CMR_WAVE // Waveform mode
| TC_CMR_WAVSEL_UP_RC // UP mode with automatic trigger on RC Compare
| TC_CMR_BCPC_SET // Set TIOB on counter match with RC0
| TC_CMR_ACPC_SET // Set TIOA on counter match with RC0
| TC_CMR_BCPB_CLEAR // Clear TIOB on counter match with RB0
| TC_CMR_ACPA_CLEAR // Clear TIOA on counter match with RA0
| TC_CMR_EEVT_XC0 // Set event selection to XC0 to make TIOB an output
);
float freq = 1;
uint32_t rc = VARIANT_MCK / 2 / freq;
TC_SetRA(tc, channel, rc / 2); // 50% duty cycle square wave
TC_SetRB(tc, channel, rc / 4);
TC_SetRC(tc, channel, rc);
tc->TC_CHANNEL[channel].TC_IER = TC_IER_CPCS | TC_IER_CPAS;
tc->TC_CHANNEL[channel].TC_IDR = ~(TC_IER_CPCS | TC_IER_CPAS);
//NVIC_EnableIRQ(irq);
PIOD->PIO_PDR = PIO_PDR_P7
| PIO_PDR_P8;
PIOD->PIO_ABSR |= PIO_PD7B_TIOA8 | PIO_PD8B_TIOB8;
TC_Start(tc, channel);
}
void setup()
{
//pinMode(13, OUTPUT);
// pinMode(11, OUTPUT);
TimerStart(TC2, t_channel, TC8_IRQn);
Serial.begin(9600);
}
void loop()
{
//char outputString[9];
//itoa((unsigned int)TC_CV, outputString, 16);
//Serial.println((uint32_t)*TC_CV);
delay(25);
}