Página 1 de 1

Como enviar pela serial sem PUTC() ?

MensagemEnviado: 09 Fev 2007 09:58
por andre_luis
Pessoal,

Estou usando o CCS v3.249.

E a aplicacao em questão é tão crítica, que um atrazo da ordem de 1 ms pode ser desastroso.

Por isso, estou pensando em enviar bytes pela UART sem o Putc(), mas gerenciando o envio atravéz de manipulação dos registradores de Interrupção. Alguem possui algum trecho de código onde isso já tenha sido implementado ?

Agradeço antecipadamente....

+++

MensagemEnviado: 09 Fev 2007 10:23
por KrafT
#byte TXREG = endereco_do_txreg


...

TXREG=valor;

MensagemEnviado: 09 Fev 2007 10:41
por andre_luis
Ok, Kraft...mas como eu posso saber se o byte já foi enviado? Voce usou interrupção ou verificou algum registrador ? Qual dessas solucoes voce aconselharia ?

Brigado.

+++

MensagemEnviado: 09 Fev 2007 10:46
por KrafT
Pode, pois a a int de buffer vazio #INT_TBE pode ser usado para enviar o byte e ou o proximo byte.

Para não usar #INT_TBE, use #int_global geral para ganhar velocidade, só que aí tem que salvar o contexto e ver qual a int na mão.


Código: Selecionar todos
#int_global

isr() {     // Will be located at location 4

   #asm

   bsf   isr_flag

   retfie

   #endasm

}


MensagemEnviado: 09 Fev 2007 10:50
por Rinaldo
Já usei a rotina abaixo e funcionou muito bem

TRMT = 0 FULL
TRMT = 1 Empty


TRMT bit 1 do TXSTA


void putch(unsigned char dado)
{
while(!TRMT)
continue;
TXREG = dado;
}

Rinaldo

MensagemEnviado: 09 Fev 2007 10:57
por andre_luis
Vou testar as 2 solucoes ( Interrupcao e pesquisa ).
Obrigado.

+++