buffer de entrada ATMega

0

¿Qué sucede si un controlador AVR ATMega está haciendo otra cosa cuando llega una entrada a uno de los puertos serie? ¿Tiene algún tipo de búfer de entrada?

Estaba pensando en usar ATMega328 o simalar para un multiplexor RS232 con filtro de lista de lista blanca. Los puertos RS232 operarán en 4800 Baudios, 9600 Baudios y 38400 Baudios

    
pregunta BufferOverflow

3 respuestas

1

El ATMega 328 USART tiene dos registros de búfer RX. Los datos siempre van a estos registros antes de que ocurra algo más. Esto significa que la CPU ni siquiera sabe que se están recibiendo datos hasta que el búfer RX tiene algunos datos en él.

Qué pasa después de eso ... bueno, eso depende.

Suponiendo: las interrupciones están habilitadas globalmente, y usted tiene habilitado el USART Rx Int.

Si la CPU está ejecutando el cuerpo principal del código (haciendo otra cosa), tan pronto como los datos estén disponibles en el búfer USART Rx, saltará a su controlador de interrupción USART Rx.

Si la CPU se está ejecutando en una interrupción, la interrupción USART Rx esperará para ejecutarse. Hay algunas formas de evitar esta espera, pero el comportamiento predeterminado es que las interrupciones pendientes esperan las interrupciones que se ejecutan activamente.

Si la CPU acaba de terminar una interrupción, la interrupción USART Rx podría recibir servicio a continuación o más adelante, dependiendo de qué otras interrupciones estén esperando para ser reparadas. El AVR tiene prioridades de interrupción fijas (consulte la tabla 16.1 en el manual de ATMega 328), el que tenga el número de solicitud de interrupción más bajo tiene la prioridad más alta y se ejecutará a continuación.

espero que ayude.

    
respondido por el pgvoorhees
1

El periférico USART de los Mega AVR tiene doble búfer de los datos seriales recibidos; El registro de cambio de recepción y el registro de datos de E / S USART 0 (UDR0) son los dos buffers.

EstopermitequeelprocesadorleadatosdeUDR0mientraselsiguientebytededatosyaseestádesplazandoalregistrodedesplazamientoderecepción.Cuandoserecibeunbitdeparada,losdatoscontenidosenelregistrodecambioderecepciónsetransferiránautomáticamenteaUDR0,yseestableceráelindicadorderecepcióncompletadeUSART(RXC0).

PuederecibirlosdatostanrápidocomolleganalleersiempreelbyterecibidodesdeUDR0tanprontocomoseestableceelindicadorRXC0.Estosepuedehacerconelsondeo:

setup_usart_for_asynchronous_data_at_desired_baudrate();//receive64bytesuint8_trxBuffer[64];uint8_trxBufferIndex=0;while(rxBufferIndex<64){while(!(UCSR0A&(1<<RXC0)));//waituntilanewdatabytehasbeenreceivedrxBuffer[rxBufferIndex]=UDR0;//storethebyteinthebuffer}

Sideseaprocesarcosasensegundoplanomientrasrecibedatos(enlugardeesperarquelosdatoslleguenfotogramaafotograma),puedehacerlomismoconlasinterrupciones.PuedeconfigurarunainterrupciónparaqueseactivecadavezquesetransfieraunnuevomarcodedatosaUDR0,yluegomoverlosdatosrecibidosaunbúferdentrodelcódigodelarutinadeserviciodeinterrupción.

ParaobtenermásinformaciónsobreelperiféricoUSART,consulteel hoja de datos

Si necesita recibir más de un bus serie asíncrono simultáneamente, tendrá que sondear los puertos IO y realizar un procesamiento bastante complejo para extraer los datos en el software.
Como alternativa, quizás desee considerar I2C o SPI en su lugar. Estos buses le permiten conectar varios chips al mismo tranceiver serie de hardware.

    
respondido por el jms
1

Recomendaría utilizar un microcontrolador Atmel diferente, como una pieza de la serie XMEGA. Las piezas de la serie XMEGA pueden tener hasta 8 UART de hardware, lo que hace que este tipo de aplicación sea bastante sencillo. No recomendaría el uso de UART de software si no puede confiar en que solo uno esté activo en un momento dado.

Los UART en los dispositivos XMEGA funcionan como los de los dispositivos ATMEGA. Hay un FIFO de 1 byte de profundidad tanto en el lado de recepción como en el de transmisión, y la transmisión y la recepción se pueden manejar automáticamente con interrupciones.

Aquí hay un controlador UART controlado por interrupciones para partes de la serie XMEGA (y también ATMEGA): enlace

    
respondido por el alex.forencich

Lea otras preguntas en las etiquetas