Página 1 de 1
LPC2368 x PLL

Enviado:
09 Abr 2008 17:06
por lrfad2
Estou com problemas para configurar o PLL desse danado. Seguindo todas as recomendações do datasheet o chip trava. Se eu não configurar o PLL e rodar pelo Rc Interno ele funciona OK.
Estou utilizando o cristal de 20Mhz e gostaria que o cclk ficasse em 60Mhz.
Aparentemente estou com a versão Y do processador
Algum dos colegas poderia me ajudar?

Enviado:
10 Abr 2008 09:08
por xultz
Cola aqui a rotina que liga o PLL, já me bati com ele uma vez e o problema era bobo, numa dessas...

Enviado:
10 Abr 2008 09:37
por lrfad2
Lembrando que o meu cristal é de 20Mhz.
Eu calculei para que o Hclk seja maior que 275Mhz e menor que 290Mhz (problemas já conhecido nos PLL das primeiras versões)
Para o caso abaixo o cclk fica em 70Mhz
void InitSystem(void)
{
//Mapeamento de memória
MEMMAP = 0x01; // User Flash Mode. Interrupt vectors are not re-mapped and reside in Flash
MAMCR = 0x02; // MAM functions fully enabled
MAMTIM = 0x01; // MAM fetch cycles are 1 processor clock (CCLK) in duration
//Configuração do Fast IO
SCS = SCS | 0x00000031; //Olhar "Chapter 3: System control block"
SCS = SCS & 0xFFFFFFF5;
//Clock da CPU
CCLKCFG = 0x06; // Clock da CPU = Clock do PLL
USBCLKCFG = 0X06;
//Configuração do PLL
PLLCON = 0x00; //Desliga e desconecta o PLL
PLLFEED = 0xAA; //Essa sequencia no PLLFEED, faz com que os registradores PLLCFG e PLLCON sejam alterados
PLLFEED = 0x55;
PLLCFG = 0x06;
CLKSRCSEL = 0x01; // Olhar "Chapter 4: Clocking and power control"
PLLFEED = 0xAA; // PLLCFG só pode ser alterado com o PLL desligado
PLLFEED = 0x55;
PLLCON = 0x01; // Habilita PLL
PLLFEED = 0xAA; // PLLCFG só pode ser alterado com o PLL desligado
PLLFEED = 0x55;
while ((PLLSTAT & 0x04000000)!= 0x04000000); // Verifica o flag PLOCK => garante que o PLL está sincronizado
PLLCON = 0x03; // Habilita PLL
PLLFEED = 0xAA; // PLLCFG só pode ser alterado com o PLL desligado
PLLFEED = 0x55;
//Clock dos periféricos
PCLKSEL0 = 0x55515155; // Clock dos periféricos é o mesmo do processador => 0,5mA / 1Mhz => consumo do processador = 20mA
PCLKSEL1 = 0x11555155;
//Modo de operação
PCON = 0x00; // Não desliga o processador de maneira nenhuma
INTWAKE = 0x00000000; // Nenhum dos periféricos "acorda" o precessador -> não precisa pois ele não entra em modo econômico
PCONP = 0xFFF87FDE; // Todos os clocks de periféricos estão ligados
// Watch - dog timer
WDMOD = WDMOD & 0xFE; //Desabilita WDT
}

Enviado:
10 Abr 2008 21:07
por Viktor
Faz un 6 meses que não brinco com o LPC2378, porém se não estou enganado, para trabalhar nessa frequência você deve aumentar o valor do MAM.

Enviado:
11 Abr 2008 08:56
por lrfad2
Colocando MAMCR = 0x02 eu não deixei ela na capacidade máxima?

Enviado:
11 Abr 2008 15:50
por Viktor
Nas condições abaixo o erro relatado não acontece. É a melhor condição possível
MAMCR = 1
MAMTIM =4

Enviado:
14 Abr 2008 10:07
por lrfad2
Viktor, parabéns pela sua dica... foi na mosca
Aparentemente agora o ele conseguiu ligar o PLL... e debugar...
muito obrigado

Enviado:
14 Abr 2008 16:05
por Viktor
Esse bug é na unidade MAM e já é um velho conhecido de quem trabalha com os LPC23xx das versões iniciais.

Enviado:
15 Abr 2008 09:40
por lrfad2
Aproveitando o seu vasto conhecimento em 23xx, e sem querer abusar, mas ja abusando :) gostaria de saber aonde estou errando na fórmula do timer.
Eu fiz assim:
Tempo de estouro do timer = ( 1 / freq. do timer ) * ( T0PR ) * ( T0MR0 )
Para complementar, estou utilizando o sistema de match interno. O clock do periférico é igual a do pclk (70Mhz) e o tempo que pretendo é de 1ms.
A minha rotina de configuração segue abaixo, e o resultado está 10% acima do esperado, ou seja, ele está demorando 1,1ms para entrar.
void InitTimer (void)
{
T0PR = 0x0000000A;
T0TCR = 0x00000002;
T0MCR = 0x00000003;
T0MR0 = 7000;
T0TCR = 0x00000001;
}
Se puder ajudar seu amigo novamente eu agradeço.
Valeu!!!

Enviado:
15 Abr 2008 18:22
por Viktor
Gostaria de ajudar, porém faz tempo que não uso esse chip. Agora estou usando o LM6965 da Luminary e teria que re-estudar o assunto. Fico devendo

Enviado:
16 Abr 2008 14:46
por lrfad2
OK. Obrigado VIKtor