Página 1 de 1

LPC13xx.

MensagemEnviado: 15 Jul 2015 09:41
por fabim
Alguém já mexeu com esta desinfiliz família ?
Eu escolhi ele por ser pseudo teoricamente arquitetura CM3 que eu estava acostumado e me deparo com algo muito menos flexível.

Estou com uma baita dificuldade de compreender o controle dos ports, alguma alma caridosa poderia me dar um help ?


Fabim

Re: LPC13xx.

MensagemEnviado: 15 Jul 2015 10:58
por eletroinf
Qual é o problema?

Uma vez que mexi com LPC tinha um Reg que tu seta ele pra setar o pino e outro reg que tu seta ele pra zerar o pino... mas tinha um reg de acesso direto, set/reset tambien

Re: LPC13xx.

MensagemEnviado: 15 Jul 2015 11:20
por fabim
Então touro sentado.

NOS LPC17XX, existe os reg's FIOSET e FIOCLR ou o próprio port.
Estas porqueiras de LPC13 não possuem isto, eles possuem um tal de MASK e o DATA, só que o mask são dezenas de kbytes 4096 bytes pra ser mais exato.
E o DATA são os bytes 4093,4094,4095,4096 formando uma INT.

Look at this:

GPIODATAMASK R/W 0x0000 to 0x3FF8 Port n data address masking register locations for pins PIOn_0 to PIOn_11 (see Section 9.5.1) n/a
GPIODATA R/W 0x3FFC Port n data register for pins PIOn_0 to PIOn_11 n/a


PÁGINA 133.



Abs, brigadão !!

Re: LPC13xx.

MensagemEnviado: 15 Jul 2015 12:43
por eletroinf
O Mask é só pra habilitar a interrupção do pino. Cada pino pode gerar interrupção, tendo um bit correspondente em GPIOIE.

Re: LPC13xx.

MensagemEnviado: 15 Jul 2015 14:07
por fabim
Ispia isto !!

GPIOSetValue( LED_PORT, LED_BIT, 1 );

olha a função:

void GPIOSetValue( uint32_t portNum, uint32_t bitPosi, uint32_t bitVal )
{
LPC_GPIO[portNum]->MASKED_ACCESS[(1<<bitPosi)] = (bitVal<<bitPosi);
}

olha lá na pagina 133.

Deveras estranho !!

Re: LPC13xx.

MensagemEnviado: 15 Jul 2015 16:48
por eletroinf
Então, quando eu usei e hoje nos ARMs ST também, eu olho o include que tem as defines dos regs.
Eu mexo no bit que eu quero.
Entender essas funções cheias de chamadas a subfunções que dependem de dezenas de arquivos... é perda de tempo, ao meu ver.
Ve lá o reg que tu quer mexer, seta e/ou reseta o bit, simples assim.
Depois, no debug, fica bem melhor, não fica viajando em um monte de arquivos.

Re: LPC13xx.

MensagemEnviado: 17 Jul 2015 13:01
por fabim
Curuzes, pessoal da NXP ferrou legal com esta anarquia.

Coisa mais chata do mundo, pois esta me lembrando pic !! :-(

Re: LPC13xx.

MensagemEnviado: 17 Jul 2015 13:22
por xultz
Não consegue ser pior que a maldita MLA da Microchip. Eu tava vendo a biblioteca de FileSystem, e tinha um comando que via a presença do cartão de memória. Fui tentar entender o que era aquele raio daquele comando, tinha uma estrutura que tinha uma série de ponteiros prá funções, que era chamado de uma estrutura de ponteiros para estruturas, e assim você ia até chegar na função. E o que o raio da função fazia? Lia o estado de um pino e retornava. Eu descobri isso depois de passar por uns 5 arquivos de código .c e .h, simplesmente ridículo. O fdp que escreveu aquela m**** provavelmente teve um orgasmo ao ver como ele é fodão e sabe escrever código complicado.

Re: LPC13xx.

MensagemEnviado: 20 Jul 2015 21:23
por RobL
Fabim

Por que é estranho ?
O CM3 não possui instrução especializada para leitura ou escrita de bit !!!!
A forma utilizada para escrever / ler bits é semelhante a usada nos 51 há décadas.

Observe que o LPC17xx tem uma região chamada "peripheral bit band alias addressing". Isto permite criar registros para set/clear/test ou outra forma como a Freescale fez. Estes registros levam de alguma forma acessar a bit band region (talvez com microcódigo) e fica transparente ao programador.
Devido a bit band, as funções para escrita e leitura de bits são feitas com mais eficiência, em certos casos com duas ou três instruções (LPC17xx por exemplo). Possuindo a bit band, criaram esse registro "simplificador" do LPC17xx.
Na verdade, esse registro do LPC17xx, ele é semelhante, no resultado ao "Bit Manipulation Engine" da freescale. Cada fabricante tem o seu método. Isto vai permitir criar funções diferentes do LPC para escrita e leitura de bits.
O LPC13xx não tem essa região para I/O(tem somente para a RAM). Por isso não vai ter esse registro "simplificador" do LPC17xx. A forma de escrever e ler poderá ter funções diferentes e assim por diante em cada chip ARM de cada fabricante.

Quanto a extensão do endereço (enorme) é que essa área (bit band) para cada bit tem um registro de 32 bits alinhados no qual somente o bit 0 é usado, daí tem um mask.
Se quiser saber sobre o processo de escrita e leitura com bit band, tem que ler sobre o CM3. Isto não vai melhorar o seu programa, mas deve saciar suas boas necessidades nerdescas. As funções ficarão mais claras e você dormirá em paz.

Re: LPC13xx.

MensagemEnviado: 28 Jul 2015 13:13
por fabim
Poisé, Robl.
Justo, !!

Xuxu estou me sentindo um usuário de ccs !! :(

Re: LPC13xx.

MensagemEnviado: 31 Jul 2015 09:33
por B-EAGLE
fabim escreveu:Poisé, Robl.
Justo, !!

Xuxu estou me sentindo um usuário de ccs !! :(



kkkkk