La frecuencia depende de dos cosas..
1) El cristal que estés usando
2) La config del Timer
Ejemplo GP32 con un cristal de 10 MHz
10'000.000 / 4 = 2'500.000 // Cada instruccion se ejecuta a 4 ciclos del reloj por eso el 4
2'500.000 MHz ---> 0,4 uS
Entonces casa 0,4 uS ejecuta una instrucción
Ahora si se tiene un Preescaler de % 4 en el timer, el conteo del mismo se ejecuta cada
0.4 x 4 = 1.6 uS
Y lo ultimo que haría falta saber es el modulo del conteo para el Timer... para entener aun mas ver ejemplo
#include <hidef.h>
#include <MC68HC908GP32.h>
interrupt 4 void rsi_t1ch0 (void);
interrupt 6 void rsi_ov1 (void);
void main(void)
CONFIG1|=0x01;
DDRD=0x10;
T1SC =0b01110010; // Prescaler: Div entre 4 y se habilito
T1SC0 =0b01010110; // Config del PWM
// ****MODULOS DE CONTEO ********\\
T1MOD=0x186A; // 186A(6250)decimal x 1,6 us = 10 ms "periodo del PWM"
T1CH0 =0x09C4; // 09C4(2500)decimal x 1,6 us = 4 ms "Ancho del pulso"
T1SC&=~(0x20);
EnableInterrupts;
for(;;) { }
}
// VECTORES DE INTERRUPCION
interrupt 4 void rsi_t1ch0 (void) { T1SC0&=(~0x80); }
interrupt 6 void rsi_ov1 (void) { T1SC&=(~0x80); }
Ese codigo funciona para el Codewarrior version 3.0 que es la que uso...