Si no estoy equivocado, se supone que un ISR debe realizar un procesamiento mínimo cuando recibe datos en serie (a través de UART). Estoy planeando implementar un protocolo de este tipo para la comunicación entre 2 sistemas a través de uart. Esta es una situación aproximada de cómo planeo la codificación del ISR. Supongamos 2 sistema A & B donde A está enviando un mensaje a B: La palabra clave se utiliza para indicar el inicio del mensaje (los datos establecidos / longitud no pueden ser la palabra clave). ChannelOK, longitud de datos, RxLength, RxData, paquete recibido indicador en el proceso de B son por defecto 0.Length de datos = no. de (todos los datos) en bytes (por ejemplo, si todos los datos = 1, longitud de los datos = 1)
A's Process
Send Keyword
Send Length of data
Send all data
B's Process
Rx Interrupt
enter ISR
ISR: if(Received Byte == Keyword && !ChannelOK)
{
Set ChannelOK
}
if(ChannelOK && RxLength)
{
Set Length of data=received byte
ChannelOK=0
RxLength=0
}
if(Length of data != 0 && RxData)
{
Store Data
--Length of data
if(Length of data==0)
{
Set Packet received flag
RxData=0
}
}
if(ChannelOK)
{
Set RxLength
}
if(Length of data)
{
Set RxData
}
Reset to Interrupt Again
Mi duda es: B tiene tantas cosas que hacer en el ISR mientras que A envía continuamente. Asumiendo que A envía datos a 7.5Mbps (11 bits por transferencia), el ISR tiene que restablecer la interrupción cada vez (11 / 7.5M) segundos. Esto parece muy muy pequeño. Los datos se perderán si no puedo restablecer la interrupción a tiempo o si se almacenará en la FIFO de 16 bytes, de modo que se pueda activar una interrupción de inmediato, la segunda vez que se reinicie la interrupción o si debo frenar un proceso de Tx esperando un ACK para cada byte (se ralentiza mucho) ???
Soy un novato en ISR's. Por favor, ayuda Cualquier diseño o protocolo ISR para la comunicación de datos en serie sería útil
Gracias