LPC2368 x PLL

Software e Hardware para linha ARM

Moderadores: 51, guest2003, Renie, gpenga

LPC2368 x PLL

Mensagempor lrfad2 » 09 Abr 2008 17:06

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?
"Quem come de tudo, está sempre mastigando"
Avatar do usuário
lrfad2
Byte
 
Mensagens: 152
Registrado em: 19 Out 2006 17:35
Localização: São Paulo

Mensagempor xultz » 10 Abr 2008 09:08

Cola aqui a rotina que liga o PLL, já me bati com ele uma vez e o problema era bobo, numa dessas...
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor lrfad2 » 10 Abr 2008 09:37

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
}
"Quem come de tudo, está sempre mastigando"
Avatar do usuário
lrfad2
Byte
 
Mensagens: 152
Registrado em: 19 Out 2006 17:35
Localização: São Paulo

Mensagempor Viktor » 10 Abr 2008 21:07

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.
Viktor
Byte
 
Mensagens: 281
Registrado em: 12 Out 2006 11:33

Mensagempor lrfad2 » 11 Abr 2008 08:56

Colocando MAMCR = 0x02 eu não deixei ela na capacidade máxima?
"Quem come de tudo, está sempre mastigando"
Avatar do usuário
lrfad2
Byte
 
Mensagens: 152
Registrado em: 19 Out 2006 17:35
Localização: São Paulo

Mensagempor Viktor » 11 Abr 2008 15:50

Nas condições abaixo o erro relatado não acontece. É a melhor condição possível

MAMCR = 1
MAMTIM =4
Viktor
Byte
 
Mensagens: 281
Registrado em: 12 Out 2006 11:33

Mensagempor lrfad2 » 14 Abr 2008 10:07

Viktor, parabéns pela sua dica... foi na mosca
Aparentemente agora o ele conseguiu ligar o PLL... e debugar...
muito obrigado
"Quem come de tudo, está sempre mastigando"
Avatar do usuário
lrfad2
Byte
 
Mensagens: 152
Registrado em: 19 Out 2006 17:35
Localização: São Paulo

Mensagempor Viktor » 14 Abr 2008 16:05

Esse bug é na unidade MAM e já é um velho conhecido de quem trabalha com os LPC23xx das versões iniciais.
Viktor
Byte
 
Mensagens: 281
Registrado em: 12 Out 2006 11:33

Mensagempor lrfad2 » 15 Abr 2008 09:40

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!!!
"Quem come de tudo, está sempre mastigando"
Avatar do usuário
lrfad2
Byte
 
Mensagens: 152
Registrado em: 19 Out 2006 17:35
Localização: São Paulo

Mensagempor Viktor » 15 Abr 2008 18:22

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
Viktor
Byte
 
Mensagens: 281
Registrado em: 12 Out 2006 11:33

Mensagempor lrfad2 » 16 Abr 2008 14:46

OK. Obrigado VIKtor
"Quem come de tudo, está sempre mastigando"
Avatar do usuário
lrfad2
Byte
 
Mensagens: 152
Registrado em: 19 Out 2006 17:35
Localização: São Paulo


Voltar para ARM

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x