Moderadores: 51, guest2003, Renie, gpenga
// Espera ela abaixar.
while( flag == 1 )
;
// Espera ela levantar
while( flag == 0 )
;
#define UART_LSR_THRE 0x20 // Transmiter Holding Register Empty
#define UART_LSR_TSRE 0x40 // Transmiter Shift Register Empty
/* comuta transceiver 485 para modo TX */
GPIO_IOSET = TX_EN;
delay_us(1); /* Aguarda 1 µs para estabilização do barramento. Na verdade este tempo é maior que o necessário, mas no projeto as bases de tempo mínimas são expressas em micro-segundos. O que ocorre é que quando ponho o transceiver em tx e já imediatamente solto um byte na FIFO de transmissão, as vezes o transceiver não consegue enviar o primeiro baud. No datasheet dos transceivers costuma ter um "transmit settle time" ou algo, assumindo que a parte elétrica do barramento esteja dentro dos padrões, é este intervalo mínimo que é preciso respeitar, descontado o tempo mínimo que o µC leva pra fazer o write no registrador da UART e o tempo que esta leva pra começar a pulsar os bauds, no caso dos LPC com ARM7 devem ser pelo menos 2 pulsos de clock. */
while (!(UART0_LSR & UART_LSR_TSRE));
GPIO_IOCLR = TX_EN;
Renato escreveu:E se a comunicação for half-duplex, ainda temos o tempo necessário
para o cancelamento de eco, ou seja, após uma Tx, o Rx fica fechado,
aguardando um tempo para não receber o eco do que ele próprio havia
transmitido.
O Tx remoto também deve aguardar após ativar o transmissor.
(Nos modems isso era feito pelo tempo RTS-CTS).
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante