I have been trying for days now to configure the timers of AT32UC3C0512C to
generate a simple square wave. I am sure that the clock is reaching the timer
module, but there is no output. I am posting my code here. Can someone please
help me on this? Its been a long while since I am doing this and continuously
being unsuccessful. I am trying to generate a left aligned pulse with a
considerable duty cycle in this code. Ra compare is set to 0 so the pulse
should
be high from the start and should remain high until the counter is lower than
Rc
compare. Since Rc compare value is a large one almost equal to the max value
achieved by a 16 bit register, so the duty cycle is supposed to be high. Here
is
my code:
void timer_initialize (void)
{
AVR32_TC0.channel[0].ccr = 0x00000001;
AVR32_TC0.channel[0].cmr =0x00018004; //ra compare effect only
AVR32_TC0.channel[0].ra = 0x00000000;
AVR32_TC0.channel[0].rc = 0x00007FFF;
AVR32_TC0.bcr = 0x00000000;
AVR32_TC0.bmr = 0x00000015;
}
int main (void)
{
//********************************************************************//configur\
e Power manager and SCIF for 64MHz CPU frequency
//********************************************************************
//Enable OSC0
AVR32_SCIF.unlock = 0xAA000000 | AVR32_SCIF_OSCCTRL; //unlock oscctrl
register
AVR32_SCIF.oscctrl[0] = 0x00010001; //enable osc0
while ( !(AVR32_SCIF.pclksr & 0x1) ); //wait for oscctr0 to lock again until
we
proceed
// Enable PLL0 = 66Mhz, wait for it to lock
AVR32_SCIF.unlock = 0xAA00001C;
AVR32_SCIF.pll[0] = 0x3F0F0119;
while ( !(AVR32_SCIF.pclksr & 0x10) );
// Enable PLL1 = 132Mhz, wait for it to lock
AVR32_SCIF.unlock = 0xAA000020;
AVR32_SCIF.pll[1] = 0x3F0A0109;
while ( !(AVR32_SCIF.pclksr & 0x20) );
// Set a wait state since Fcpu > 33MHz
AVR32_FLASHC.FCR.fws = 1;
// Enable PLL0 as the system clock source
AVR32_PM.unlock = 0xAA000000;
AVR32_PM.mcctrl = 3;
//Select the PBC frequency
while(!(AVR32_PM.SR.ckrdy));
AVR32_PM.unlock = 0xAA000014;
AVR32_PM.pbcsel = 0x00000087;
//********************************************************************
//peripheral functions enabled for GPIO pin TC0_A0 corresponding to PB19
AVR32_GPIO.port[1].gper = 0xFFF7FFFF;
AVR32_GPIO.port[1].oder = 0xFFFFFFFF;
AVR32_GPIO.port[1].pmr0 &= 0xFFF7FFFF;
AVR32_GPIO.port[1].pmr1 &= 0xFFF7FFFF;
AVR32_GPIO.port[1].pmr2 &= 0xFFF7FFFF;
timer_initialize();
while(1)
{
}
return 0;
}