Estou com um problema nas rotinas de delay do livro do Daniel (O poder dos 32bits) com o LPC2138. A rotina não estava funcionando com o tempo certo. Sempre ficava em torno de 16% mais lento. Coloquei na rotina do delay a multiplicação por 1.16. Depois de multiplicar o registrador o tempo do delay ficou certo. Porém quando fui testar o canal serial é logico que não funcionou. Só enviava lixo usando o hiperterminal do Windows. Troquei o cristal de 10MHz por outro também de 10MHz pensando que poderia estar com problema no cristal, mas o problema continuou. Se alguém tiver uma dica agradeço muito.
Abraços
Roberto
void PLL_init(void){
PLLCFG = 0X00000046; //Configura M = 6 e P = 2 para uma freqüência
//de 60MHz com cristal de 10MHz
PLLCON = 0X00000001; //Habilita PLL
PLLFEED = 0X000000AA;
PLLFEED = 0X00000055; //Atualiza os registradores
while(!(PLLSTAT & 0X00000400)); //Testa PLOCK
PLLCON = 0X00000003; //Conecta ao PLL
PLLFEED = 0X000000AA;
PLLFEED = 0X00000055; //Atualiza os registradores
VPBDIV = 0X00000002; //Configura Pclk = 30MHz (Cclk/2)
//60MHz / 2 = 30MHz
}
void delay_1ms_x(unsigned int x){
T0MR0 = x * 0x0000012C; //CARREGA T0MR0 VALOR DE COMPARACAO = 100(96)
T0MR0 = T0MR0 * 1.16;
T0IR |= 0x00000001; //LIMPA FLAG DO T0MR0
MA_Start_TIMER(0,1); //LIGA TIMER
while(!(T0IR & 0x00000001));//SE FLAG DO T0MR0 FOR 1, SAI DA FUNÇÃO
}