Activar MCU en datos de UART RX

0

Tengo varios MCU de los cuales no puedo usar los modos de sueño profundo, porque no pueden activarme cuando llegan datos de UART. ¿Hay algún componente en venta que pueda resolver esto? Puedo imaginar algo que retrasa la línea de RX por una fracción y alterna un GPIO en la llegada de datos, que puedo usar para activar el MCU.

    
pregunta Muis

4 respuestas

3

Cualquier MPU con interrupciones de cambio de pin debería permitir esto. Algunos (al menos MSP430) pueden activarse en un microsegundo y comenzar a cronometrar el impulso de inicio de inmediato. Pero incluso si su micro no se despierta lo suficientemente rápido, ¿puede transmitir un carácter adicional al comienzo del mensaje para despertarlo?

Si nos da una pista de qué MCU quiere decir, alguien podría tener una sugerencia más apropiada.

La hoja de datos de LPC11U1x dice

(página 2)

  

Se pueden seleccionar hasta 8 pines GPIO como sensibles al borde y al nivel   fuentes de interrupción.

(página 14)

  

USART
     RXD ... PIO0_18 ...

por lo que el pin UART RX también es un pin GPIO (PIO0_18 en algunos paquetes)

(página 18)

  

Cualquier pin GPIO que proporcione una función digital se puede programar para   generar una interrupción en un nivel, un flanco ascendente o descendente, o ambos.

(página 26)

  

El LPC11U1x puede activarse desde el modo de suspensión profunda mediante el reinicio, GPIO seleccionado   pines, una interrupción del temporizador de vigilancia, o una interrupción que genera un puerto USB   actividad.

El Manual del usuario dice (página 35)

  

3.5.33 registros de selección de interrupción de pin Cada uno de estos 8 registros selecciona un pin GPIO de todos los pines GPIO en ambos puertos como la fuente de   una interrupción de pin. Para seleccionar un pin para cualquiera de las ocho interrupciones de pin,   escriba el número de pin del 0 al 23 para los pines PIO0_0 a PIO0_23

(página 38)

  

3.5.37 Registro de habilitación de activación de interrupción 1 Este registro selecciona qué interrupciones despertarán al LPC11Uxx de la suspensión profunda y el apagado   modos Las interrupciones seleccionadas por uno en estos registros deben estar habilitadas   en el NVIC (Tabla 58) para activar correctamente el LPC11Uxx desde   modo de suspensión profunda o apagado

Por lo que parece factible. Una pregunta que queda es qué tan rápido puede salir de la suspensión profunda en el controlador de interrupciones y reiniciar el UART. Voy a tomar una conjetura salvaje y decir lo suficientemente rápido.

    
respondido por el Brian Drummond
0

Si el micro no puede despertarse del modo de suspensión en el que se encuentra en función del tráfico de UART RX, es probable que haya un pin de E / S dedicado que sea capaz de despertar al micro de la suspensión profunda. Podría atar los dos pines juntos (UART RX y E / S pin) y luego se despertaría de sueño profundo. Nunca he visto un micro que no tuviera un pin de E / S o periférico que pudiera activarlo desde cada modo de suspensión que tenía. De lo contrario, no es realmente tanto un modo de suspensión como un modo de muerte.

Si no puede recuperar ninguno de los pines, probablemente podría configurar el micro para que se active de forma periódica en función de un desbordamiento del temporizador (en función de su velocidad en baudios) y comprobar el estado del pin, pero ahora estamos entrando Soluciones feas.

    
respondido por el Joel B
0

Muchos procesadores pueden activarse cuando cambia una entrada, incluido el pin de recepción UART, pero no pueden activarse lo suficientemente rápido como para garantizar la recepción correcta del primer carácter que llegó después de la activación.

No especifica qué velocidad en baudios está utilizando, pero puede ser posible conectar un procesador pequeño (y barato) que tenga un ciclo de activación muy rápido entre el dispositivo que está transmitiendo y su otro procesador. Ese procesador se suspendería mientras espera una caída en su línea de rx. Una vez que viera tal borde, emitiría un pulso de 'despertar' y tomaría los primeros cuatro bits de datos de su línea de rx. Luego continuaría recibiendo los siguientes cuatro bits de datos mientras genera los datos que recibió, al doble de la velocidad de transmisión. El destinatario final de los datos recibiría su byte exactamente cuando el transmisor termine de enviarlo, pero podría permitirse gastar 4.5 bits a la velocidad de transmisión anterior sin perder ningún dato.

Si uno no quisiera que el dispositivo duplicara la velocidad en baudios, no tendría que hacerlo; en su lugar, podría enviar datos con cierta demora. Si tal retraso plantearía o no un problema sería específico de la aplicación. Tenga en cuenta que si el dispositivo tiene un cable de intercambio de la CPU que necesitará el despertador, el retraso podría ser menor que el tiempo de un personaje, y podría reducirse a casi nada si el remitente no transmite de forma absolutamente continua.

    
respondido por el supercat
0

Revise los MCU de Energymicro EFM32: son capaces de hacer exactamente lo que usted quiere.

    
respondido por el miceuz

Lea otras preguntas en las etiquetas