Página 1 de 1

Duvidas sobre o processador arm LPC2138

MensagemEnviado: 04 Dez 2007 15:57
por racerxdl
Bom pessoal, jah vo falando logo de começo, to começando com os ARM mesmo, eu to vindo dos PIC (serie 16 programada em C), e agora to afim de pegar algo mais complexo.

Bom na base, eu baixei o Keil Trial mas to pensando em usar o GCC do linux mesmo. Mas a minha pergunta não é relacionada ao software, e sim ao hardware.

Eu reparei no datasheet desse arm ai, que o mesmo pino tem uns 3 ou 5 funções diferentes. Como isso funciona? É selecionada pelo software ou pelo hardware?

Obrigado

Lucas Teske

Re: Duvidas sobre o processador arm LPC2138

MensagemEnviado: 04 Dez 2007 17:18
por Rodrigo_P_A
Por soft, no seu soft.

Pinos com várias funçòes vc configura pelos Registros PINSEL0, PINSEL1, etc...
dá uma olhada no datasheet no registro PINSELx acho que vai te dar uma clareada

MensagemEnviado: 04 Dez 2007 19:42
por racerxdl
Então pelo que eu vi aqui eu posso setar os registradores para os IO serem apenas 16 Bits (ao invés dos 32) e usar os pinos restantes pra SPI dedicado, serial e tal?

Outra pergunta, estou tendo problema com o Keil, gostaria de saber como eu gero o arquivo hex no keil...

Obrigado...

MensagemEnviado: 04 Dez 2007 19:58
por racerxdl
Ah, jah vi como gera o arquivo hex...

vlwss

MensagemEnviado: 05 Dez 2007 07:20
por Rodrigo_P_A
racerxdl escreveu:Então pelo que eu vi aqui eu posso setar os registradores para os IO serem apenas 16 Bits (ao invés dos 32) e usar os pinos restantes pra SPI dedicado, serial e tal?

Outra pergunta, estou tendo problema com o Keil, gostaria de saber como eu gero o arquivo hex no keil...

Obrigado...


sim, é por aí mesmo. Dá pra "chavear a função do I/O"

seguinte cara, toma cuidado, pois:

tem portas que são Open Drain ( colocar resistor Pull Up para usar como saída )

tem portas que são só saída

tem portas que são só entrada

tem portas de uso exclusivo, por exemplo no 2148 as portas da USB só servem para a USB, etc....

faz o seguinte, qdo for desenhar um esquema, lê a parte que fala só das capacidade dos I/Os. depois que se fizer o esquema, se começa o soft.

MensagemEnviado: 18 Fev 2009 12:05
por Renato
E dá para chavear dinamicamente, exemplo:
Inicializo um pino com EINTx, logo após uma Int comuto via PINSELx para
GPIO, depois volto para EINTx, ...

Isso é possível ou tem que ser estático ?

MensagemEnviado: 18 Fev 2009 14:47
por styg
é possivel sim, c muda a hora q quiser..

MensagemEnviado: 19 Fev 2009 12:43
por MarcusPonce
Oi Renato,
como o styg postou acima, se você colocar no programa para mudar então o ARM muda naquele instante. Aparentemente não existe nenhuma trava de hardware para terminar o que estiver fazendo e depois comutar. Por exemplo, se estiver transmitindo um byte pela serial vai cortar no meio.
O tempo aqui está curto, não pude trabalhar naqueles outros posts...
E também deveria ser possível ler o estado do pino mesmo com ele sendo EINT0, por exemplo, mas ainda não fiz este teste específico.

MensagemEnviado: 27 Fev 2009 14:13
por Renato
Ponce:
O manual fala que USART e outros podem ser lidos no reg IOxPIN.
Exceto para AD.
Mas não é explícito para o pino como EINTx.
Fiz alguns testes comutando PINSELx e acho (não muito certo) que dá
para ler depois de comutado de EINTx para GPIO.
O que a princípio não parece o melhor método.

MensagemEnviado: 28 Fev 2009 11:35
por styg
olha soh, no caso dos EINTx, pra voce ler o estado do pino é obrigado a mudar no PINSELx a funçao do pino para GPIO (entrada).

da uma olhada nesse codigo aqui, que eu uso, uma rotina pra tratamento de int.

/*--------------------------------------------------------------------------------------------------
FUNCAO: PH370_KEY_1
DESCRICAO: INTERRUPÇÃO P/ EINT0 (TECLA 1)
--------------------------------------------------------------------------------------------------*/
void ph370_key_1(void) __irq
{
// limpa flag da EINT0
EXTINT = 0x01;
// da um delay para debounce
arm_delay_ms(DEBOUNCE_TIME);
// altera função da P0.16 para GPIO
PINSEL1 &= 0xFFFFFFFC;
// testa se tecla realmente esta apertada
if(!OK)
{
// da um bip (se estiver habilitado)
ph370_bip();
// atualiza flags referentes
zera(flags,(_volta|_cima|_baixo));
seta(flags,(_teclas|_ok));
}
// retorna função da P0.16 para EINT0
PINSEL1 |= 0x00000001;
VICVectAddr = 0xFFFFFFFF;
}