Hi Everybody,
i m new to the Freescale controllers.can you please see my code and tell me why FTM2 is not working ? FTM0 is working properly.
About code:
Just trying to generate Hardware PWM in all channels of MC9S08RN16 µc.
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
// Prototype Function
void main(void);
void delay();
void PWMInit(unsigned int i);
void main(void) {
unsigned int Period;
unsigned int Duty;
Period =0x120;
PWMInit(Period);
Duty = 0x90;
DisableInterrupts;
PORT_PTAOE = 0x03; /* Define PortA all Pin As Output ; one is Output and Zero is Input for Data Direction */
PORT_PTBOE = 0xFF; /* Define PortB all Pin As Output */
// PORT_PTAD = 0x00; /* Initialise the PORTA */
// PORT_PTBD = 0x00; /* Initialise The PORTB */
/* the following code segment demonstrates setting ICS to FEI mode generating 20MHz bus*/
// ICS_C1 = 0x04; /* internal reference clock to FLL */
// ICS_C2 = 0x00;
// ICS_C3 = 0x00; /* BDIV = 0, no prescalar */
while (1)
{
__RESET_WATCHDOG();
FTM0_SC=0x10; //Channel Zero PWM Timer is config for System clock ; Zero Prescaler and Counter Operates in Up counting mode
FTM2_SC=0x10;
FTM0_C0VH=(Duty>>8); //Ton Period or Duty Cycle
FTM0_C0VL=Duty;
FTM0_C1VH=(Duty>>8);
FTM0_C1VL=Duty;
FTM2_C0VH=(Duty>>8); //Ton Period or Duty Cycle
FTM2_C0VL=Duty;
FTM2_C1VH=(Duty>>8);
FTM2_C1VL=Duty;
FTM0_SC=0x10; //Select the PWM functionality for each channel that will be used to generate PWM by using the TPMCnSC register of each channel.
FTM2_SC=0x10;
}
}
void PWMInit(unsigned int Period)
{
unsigned int Temp=Period;
// FTM0_SC=0X10;
FTM0_CNTH=0x00;
FTM0_CNTL=0x00;
FTM0_MODH = (Temp>>8); // T total Period of PWM Cycle
FTM0_MODL = Period;
FTM0_C0VH = 0x00; // Ton Period of Total Period
FTM0_C0VL = 0x00;
FTM0_C1VH = 0x00; // Ton Period of Total Period
FTM0_C1VL = 0x00;
FTM0_C0SC = 0x14;
FTM0_C1SC = 0x14;
FTM2_MODH = (Temp>>8); // T total Period of PWM Cycle
FTM2_MODL = Period;
FTM2_C0VH = 0x00; // Ton Period of Total Period
FTM2_C0VL = 0x00;
FTM2_C1VH = 0x00; // Ton Period of Total Period
FTM2_C1VL = 0x00;
FTM2_C0SC = 0x28;
FTM2_C1SC = 0x28;
}
void delay()
{
int i;
for (i=0;i<25;i++){;}
}
Hi,
Please try this code.
FTM2_SC=0x08; // busclk/1=59.6ns per count; buzzer on=0x08, off=0x00
FTM2_C0SC=0x28; // edge-aligned PWM
FTM2_MOD=16778; // 1KHz square wave on FTM0CH1, PTA1, J5-14
FTM2_C0V=16778>>1; // half of the above to produce 50% duty cycle PWM
Michael Steffen
Senior Field Applications Engineer
Freescale Semiconductor
Cell 815-519-1567
Hi steffen,
I tried for Both the Timer (FTM0 and FTM2)...FTM0 is working as usual, but no response at FTM2 channel. :smileysad:
DANKE.
Hello Steffen,
Does FMT2 Timer has to do something with Sysem Register (SYS_SOPT2)? or am i going in wrong direction?