Dúvidas com a serial do LPC214x...

Software e Hardware para linha ARM

Moderadores: 51, guest2003, Renie, gpenga

Dúvidas com a serial do LPC214x...

Mensagempor jeanfernandes » 13 Dez 2006 08:23

Prezados

Um dos meus canais seriais ...é compartilhado com duas portas externa ou seja eu tenho ou um porta RS-232 ou uma RS-485, como mostra a figura a seguir....

Circuito

A linha RS-DIR me diz se eu vou trafegar pela 232 ou pela 485.

Bom o circuito na teoria e pratica funciona. O problema é o seguinte....
Quando eu transmito um frame eu preciso saber quando o ultimo caracter ja foi pra poder por exemplo chavear de uma serial pra outra......
vamos ver aqui o codigo que fiz..... pra ver onde mexer pra essa onça funcionar direito.....

no caso tem uma variavel chamada uart1_transmitindo.....mas nao ta virando nao....tem hora que eu chaveio de uma serial pra outra analisando essa variavel .....ai froide na cuca...e come byte que ainda nao foi transmitido...

Eu estava usando o principio de enable e disable IRQ pra resolver uns probleminhas mas ficou meio doido pois tem outras interrupcoes rolando na parada (Fábio termina esse livro, pô ! ehehehehe)......

Arquivo C

Arquivo H




Alguém da uma dica ae...obrigado.....
Jean P. Fernandes - Eng. Eletrônico - (83) 2102-2116 - APEL - www.apel.com.br - Campina Grande - PB
jeanfernandes
Word
 
Mensagens: 539
Registrado em: 11 Out 2006 15:36
Localização: Campina Grande - PB

Mensagempor Renato » 13 Dez 2006 09:31

Cara, não abri tuas rotinas, mas informo algum caminho:
- Antes de transmitir, dar um delay, pois se o modo é half-duplex, esse
tempo é necessário pela propagação e anti-eco.
- Testar buffer de saída vazio, após enviar bloco tx,

Sucesso aeh !
Renato
Byte
 
Mensagens: 224
Registrado em: 20 Out 2006 08:35

Mensagempor Fábio Pereira » 13 Dez 2006 10:42

Pois é ...

Eu nem estou usando a UART dos LPC, mas olhando o registrador UxLSR, há um bitzinho chamado TEMT que indica que o caractere presente no registrador de deslocamento de transmissão foi completamente transmitido.

Na minha humilde concepção, basta você verificar este bit (após o buffer de TX estar vazio) e aguardar que o mesmo vá a "1", quando então você terá certeza de que a UART está livre e aí você pode comutar a função.

Até +
Fábio Pereira
embeddedsystems.io
Avatar do usuário
Fábio Pereira
Word
 
Mensagens: 674
Registrado em: 16 Out 2006 09:07
Localização: Kitchener, ON

Mensagempor xultz » 13 Dez 2006 11:32

No caso do LPC2106, eu faço o segunte:
while(!(UART1_LSR & 0x40));

Ele fica em loop esperando o último bit sair pela porta, assim que sair, esse flag muda e pode mudar o pino do chip de RS485 com segurança.
É possível gerar uma interrupção quando isso ocorre, mas para não ganhar mais cabelos brancos, eu fiz o firmware inteiro sem interrupções, porque esse é um capítulo à parte da história da humanidade: o sistema de interrupções dos LPCs...
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 Viktor » 13 Dez 2006 12:58

Que PTC é esse que você está usando ? Qual o fabricante ?
Viktor
Byte
 
Mensagens: 281
Registrado em: 12 Out 2006 11:33

Mensagempor jeanfernandes » 15 Dez 2006 09:37

Ok XUTS/FP

Nao vou fazer com while nao, mas vou usar dessa sua ideia ae....sobre as interrupcoes onde tem enable, disable irq eh um codigo ASM que vai dentro dele....ainda vou por.....eh que tava numa correria fdp.....mas eh simples....(hoje ta ficando mais clara a coisa)

Vou testar a solucao dos dois.....

Mas tipo chefe eu faco uma rotina com uma filinha na serial (mesmo que ela tenha a FIFO dela)..... vou injetando dado na serial e miha rotinha se encarrega da mandar sozinha..... mas nao fica parada nao....vai mandando pela interrupcao da serial mermo....como ta mostrado la....

Belezinha...
Jean P. Fernandes - Eng. Eletrônico - (83) 2102-2116 - APEL - www.apel.com.br - Campina Grande - PB
jeanfernandes
Word
 
Mensagens: 539
Registrado em: 11 Out 2006 15:36
Localização: Campina Grande - PB

Mensagempor microeletronica » 16 Dez 2006 22:58

Oi Jean, tambem faco como o xultz.

Mas, vejha o treco abaixo, copiado do forum LPC2000:
Various bits in the LSR register are supposed to be cleared on read (read
the user manual or the data sheet of a 'discrete' 16x50.

You have to read the value only once, then check it. Read it again only to
clear the next source.

Check any working interrupt code for this series of UART any you will see
those precautions taken.


Tem mesmo que tomar cuidado ao ler algo que limpa quando le. :P
Mas nesse caso especifico funciona...
microeletronica
Byte
 
Mensagens: 158
Registrado em: 05 Dez 2006 18:22


Voltar para ARM

Quem está online

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

cron

x