Página 1 de 1
EINT1 P2.11 & LCD TFT

Enviado:
22 Dez 2010 15:34
por die6o
Pessoal.
Estou com um problema meio que, "chato", contra a linha LPC24XX da NXP.
Estou com o projeto em andamento, e utilizando a interface dedicada de LCD do LPC2478, acontece que nesta configuração, eu não utilizo o sinal LCDCLKIN, que é multiplexado com o PINO da EINT1.
Com eu configurando este pino como GPIO, eu consigo ler o estado, e até mesmo escrever normalmente. Acontece que configurando como EINT1, não funciona, simplesmente não funciona.....
Se eu deixo o codigo exatamente como está, e comento as partes de LCD, funciona perfeitamente. "Detalhe, estou confirmando todos os flags e registradores pelo DEBUG via hW"...
Existe algum macete, ou realmente, EINT1 não funciona com LCD ATIVO ?
Detalhe, o 2478 possui 4 EINTS... EINT0 a EINT3.
Quando abilitado o display, EINT1,2,3, caem fora, e fica só uma EINT ? PQP!!!! Nem me fala uma coisa dissas....

Enviado:
22 Dez 2010 18:54
por tcpipchip
tentou os exemplos SWING ?

Enviado:
23 Dez 2010 08:36
por die6o
tcpipchip escreveu:tentou os exemplos SWING ?
tcpipchip, acho que você não entendeu a questão.
Meu problema não é com o display, que funciona lindamente bem.
Meu problema é com as EINT´S. No Caso a EINT1, que não funciona.

Enviado:
23 Dez 2010 09:12
por tcpipchip
Olhou a configuracao do PINSELx ?

Enviado:
23 Dez 2010 09:18
por die6o
.................

Enviado:
23 Dez 2010 09:20
por die6o
Seguinte...
A EINT1, não funciona, se o LCD estiver abilitado...
Eu entrando no Debug>hw>pins.. P2.11 = EINT1, PINDIR = input, etc etc, esta tudo ok... Sem problemas..
Este pino, mesmo com o LCD abilitado e funcionando, eu consigo utilizar ele como GPIO, tanto entrada como saida, normalmente..
O Problema esta como EINT..

Enviado:
23 Dez 2010 11:52
por tcpipchip
- Código: Selecionar todos
#define LPC2138
#include "LPC210x.bas"
#define GPS_Test
#define enable_gps_debug 0
#include "GPS\GPS_ser.lib"
dim e0 as integer
dim s0 as integer
dim e2 as integer
dim s2 as integer
DIM MENSAGEM_GPS(200) AS STRING
dim rx as integer
'TIMER A CADA 1000ms
INTERRUPT SUB TIMER1IRQ
*T1_IR = 1 ' Clear interrupt
*VICVectAddr = 0 ' Acknowledge Interrupt
ENDSUB
SUB ON_TIMER ( msec, dothis )
*VICVectAddr7 = dothis ' set function of VIC 7
*VICVectCntl7 = $25 ' use it for TIMER1 Interrupt:
*VICIntEnable = $20 ' Enable TIMER1 Interrupt
*T1_MR0 = msec-1 ' set up match number of ms
*T1_MCR = 3 ' Interrupt and Reset on MR0
*T1_IR = 1 ' clear interrupt
*T1_TC = 0 ' clear timer counter
*T1_TCR = 1 ' TIMER1 Enable
*VICVectAddr = 0 ' Acknowledge all Interrupts
ENDSUB
INTERRUPT SUB EINT2IRQ
*SCB_EXTINT = 4 ' Clear interrupt
*VICVectAddr = 0 ' Acknowledge Interrupt
e2 = e2 + 1
print "-"
ENDSUB
SUB ON_EINT2(rise_edge, dothis)
' Setup MUST be done before enabling the interrupt
'*PCB_PINSEL0 = *PCB_PINSEL0 or psfEINT2 ' select pin function
*PCB_PINSEL0 = *PCB_PINSEL0 or &H0000C000 ' select pin function
*SCB_EXTINT = 4 ' clear interrupt
*SCB_EXTMODE = *SCB_EXTMODE or 4 ' enable edge mode
if rise_edge
*SCB_EXTPOLAR = *SCB_EXTPOLAR or 4 ' trigger on rise edge
else
*SCB_EXTPOLAR = *SCB_EXTPOLAR & &HFFFFFFFB ' trigger on fall edge (default)
endif
*VICVectAddr6 = dothis ' set function of VIC 6
*VICVectCntl6 = &H30 ' use it for EINT2 Interrupt:
*VICIntEnable = &H10000 ' enable EINT2 Interrupt:
*VICVectAddr = 0 ' Acknowledge all Interrupts
ENDSUB
INTERRUPT SUB EINT0IRQ
*SCB_EXTINT = 1 ' Clear interrupt
*VICVectAddr = 0 ' Acknowledge Interrupt
e0 = e0 + 1
print "-"
ENDSUB
SUB ON_EINT0(rise_edge, dothis)
' Setup MUST be done before enabling the interrupt
*PCB_PINSEL1 = *PCB_PINSEL1 or psfEINT0 ' select pin function
*SCB_EXTINT = 1 ' clear interrupt
*SCB_EXTMODE = *SCB_EXTMODE or 1 ' enable edge mode
if rise_edge
*SCB_EXTPOLAR = *SCB_EXTPOLAR or 1 ' trigger on rise edge
else
*SCB_EXTPOLAR = *SCB_EXTPOLAR & &HFFFFFFFE ' trigger on fall edge (default)
endif
*VICVectAddr4 = dothis ' set function of VIC 4
*VICVectCntl4 = &H2e ' use it for EINT0 Interrupt:
*VICIntEnable = &H4000 ' enable EINT0 Interrupt:
*VICVectAddr = 0 ' Acknowledge all Interrupts
ENDSUB
'*********************************
SUB PEGA_DADOS_GPS
'PEDE PARA GPS ENVIAR DADOS
OUT(12)= 1
WAIT 500
OUT(12)= 0
'AGUARDA TIMEOUT (SERIN RETORNA -1 SE TIMEOUT...ACIMA DO TEMPO DE DADOS ENVIADOS PELO GPS)
WHILE SERIN(GPS_SER_RX_PT_NO,GPS_SER_RX_PT_BAUD,1,1,MENSAGEM_GPS)<>-1
LOOP
IF GPS_QUERY_RCVR THEN
IF GPS_PARSE_MESSAGES THEN
GPS_PRODUCTION(CLS)
PRINT_GPS_DATA
PRINT "OK"
ENDIF
IF s0 <> e0 then
s0 = e0
ENDIF
IF s2 <> e2 then
s2 = e2
ENDIF
ENDIF
'PEDE PARA ENCERRAR ENVIO DE DADOS
OUT(12)= 1
WAIT 500
OUT(12)= 0
ENDSUB
' -----------------------------------------------------------------------------------------------------------------------------
MAIN:
'**********HABILITA INTERRUPÇÃO SENSOR 1 (INT0)
ON_EINT0(0, ADDRESSOF EINT0IRQ) 'SUBIDA DE BORDA
ON_EINT2(0, ADDRESSOF EINT2IRQ) 'SUBIDA DE BORDA
'HABILITA TIMER PARA GERAR INT A CADA 50ms
ON_TIMER(50, ADDRESSOF TIMER1IRQ)
'**********ACERTA A HORA APENAS UMA VEZ...(BATERIA, RTC INTERNO)
'HOUR(11)
'MINUTE(11)
'SECOND(11)
'DAY(3)
'MONTH(8)
'YEAR(2010)
'WEEKDAY(6)
'SETA PINO 12 COMO SAIDA (REQUISICAO AO GPS PARA LEITURA DE DADOS), ESTADO INICIAL 0
DIR(12) = 1
'VERIFICA SE GPS ESTÁ LIGADO, DESLIGUE
IF SERIN(GPS_SER_RX_PT_NO,GPS_SER_RX_PT_BAUD,1,1,MENSAGEM_GPS)<>-1 THEN
OUT(12) = 0
WAIT 1
OUT(12) = 1
WAIT 1
OUT(12) = 0
ENDIF
'**********INICIALIZA GPS PARA 4800, NA PORTA P0.13
GPS_INIT_RCVR
'**********SINALIZADORES DE INTERRUPÇÕES
s0=0
e0=0
s2=0
e2=0
'**********AGUARDA QUALQUER UM DOS SENSORES ACIONAR...
WHILE 1=1
IF s0<>e0 then
PEGA_DADOS_GPS
ENDIF
IF s2<>e2 then
PEGA_DADOS_GPS
ENDIF
WAIT 1000
LOOP
END
'-----------------------------------------------------------------------------------------------------------------------------
Aqui um codigo em BASIC que uso int0 e int2, talvez lhe ajude...sao basicamente os mesmo registradores

Enviado:
23 Dez 2010 15:01
por die6o
Novamente.
O EINT seja "0,1,2,3", funciona lindamente bem, até que o LCD controler é habilitado...
É sabido que o EINT2 e 3, são utilizados no hW do LCD, e o EINT1, não!! Mesmo não sendo utilizado, este EINT1, não interrompe!
Não é configuração do EINT1, pois se fosse, o mesmo não funcionaria com o LCD desabilitado!
A função que habilita a EINT1, é chamada APÓS o LCD ser habilitado !!

Enviado:
24 Dez 2010 10:19
por polesapart
Na pag. 175 da rev. 04 do manual, tem a seguinte nota de rodapé:
[18] Either one of the external interrupts EINT1 to EINT3 or the LCD function is selectable.
Que dá a entender que a função LCD, quando ativa, inutiliza as funções EINT 1 a 3.
Na tabela 135, na pag. 184, na descrição do registrador PINSEL4, que cobre o pino p2.11 , lê-se que a função alternativa 01 compartilha as funções EINT1 e LCDCLKIN.
Até ai, tudo bem (ou não), poderia se especular que haveria uma alternativa.
Mas quando você olha as tabelas nas pgs. 325 a 328, vc vê que a maioria das configurações de LCD usa sim a função LCDCLKIN, em especial, a tabela na pg 328 que se refere aos displays TFT, que são a maioria deles. Neste caso em todas as configurações possíveis, lá está a função habilitada, o que certamente desabilita a EINT1 (leia a nota de rodapé #2), mesmo que houvesse na configuração do periférico LCD, alguma forma de não chavear os pinos sem uso efetivo.

Enviado:
27 Dez 2010 07:41
por die6o
polesaparte, obrigado pelo seu tempo desprendido!!!
Cara, eu ja tinha visto tudo isso, mais tipo, sabe quando você não quer acreditar numa m**** desse tamanho por uma empresa igual a NXP...? Você busca uma alternativa, de forma a não desanimar da empresa que você utiliza os uC ?
Tenho 3 displays, de diferentes barramentos, e todos TFT. Em nenhum dos casos o hW do 2478 utiliza este pino LCDCLKIN como sinc clock... para alimentar o barramento interno do AHB.. Para falar a verdade, ainda não ví nenhum display, ou nenhuma aplicação, onde um uC com hw dedicado para displays utiliza o clock do lcd ....
Cara olha, acho que por isso o fabim esta desanimando de nxp, e partindo para freescale "imx233", e vai começar a mexer agora com sansung...
Bom, fazer o que!!!!
Muito obrigado novamente.
Die6o.

Enviado:
28 Dez 2010 17:51
por tcpipchip
voce so recorreu ao forum ?