8051 MCU con entrada rápida a la implementación de ISR

0

Estoy desarrollando un dispositivo de procesamiento de protocolo personalizado basado en MCU. Mi protocolo es algo similar a I2C y utiliza bit bitging en lugar de la implementación de hardware. He hecho un prototipo basado en Atmega328P, principalmente debido a un montón de ayuda en línea y tableros de desarrollo baratos. Cuando todo comenzó a funcionar, descubrí que no estoy satisfecho con la velocidad máxima de la lógica de procesamiento del protocolo. Aunque la mayoría de las instrucciones se procesan en 1T en Atmega328P, y tiene una latencia ISR razonablemente rápida (solo 4T), el principal problema es que se agregan muchas instrucciones push / pop para conservar / restaurar registros.

Ahora, estoy considerando alguna otra arquitectura de MCU, que me permitirá ejecutar mi código más rápido. Espero que la MCU moderna basada en el núcleo 8051 sea una opción.

EMF8 , por ejemplo, puede ejecutarse a 50-75MHz, igual que ARM, puede ejecutar el 70% de las instrucciones en 1T. A pesar de que tomará 9T + 9T entrar y salir de ISR, espero que no sea necesario empujar / abrir tantos registros, ya que puede trabajar directamente con RAM, sin el uso obligatorio de registros (como en Cortex). Por alguna razón, AT89 ni siquiera aparecen en la lista del sitio web de Microchip después de que Atmel se haya hecho cargo. Hay otros disponibles, pero no sé cómo se pueden comparar.

Cortex-M0(+) es otra opción, pero hay personas en Internet que se quejan de la gran latencia de los ISR, aunque según ARM debería ser eficiente y eficiente. Aunque me permitirá ejecutar el código 3 veces más rápido en 48MHz, lo más probable es que sufra el mismo problema que Atmega328P, ya que tuvo que presionar / abrir muchos registros. Tampoco creo que me vaya a beneficiar la arquitectura de 32 bits, ya que mi código no utiliza ningún tipo de cálculo y se basa principalmente en tipos uint_8t .

Espero que las personas tengan experiencia con los nuevos 8051 y puedan dar su opinión.

=== EDITAR para proporcionar más detalles ===

  • El protocolo es síncrono, usa 2 pines: uno para el reloj, uno para los datos.
  • ISR está en cambio de pin, sin embargo, con AVR no puedo tener ISR separados para reloj y datos, ya que ambos pines están en el mismo puerto. Tengo más lógica en ISR para identificar qué pin ha cambiado.
  • En 16MHz cronometrado atmega estoy teniendo 10kbps (kilobit) con lógica completa en ISR y 50kbps con el mínimo. Establecí que 25us después de que el pin toggle en master sea suficiente para que el esclavo procese el cambio con el mínimo de lógica. 10us no es suficiente, empieza a faltar el reloj.
  • El código se implementa en C puro sin ASM. Todos los push / pops se insertan por avr-gcc . Puedo ver en la descompilación que todos los registros r18-r31 se conservan / restauran.
pregunta zmechanic

1 respuesta

2

Por lo tanto, en realidad recomiendo Cortex-M0 por las razones que citan contra Atmega:

La microarquitectura Cortex-M0 es bastante inteligente cuando se trata de ayudar a los desarrolladores a implementar sistemas operativos en tiempo real. Por ejemplo, empujar registros se realiza por usted (por supuesto, limitado a los registros relevantes, y supongo que de ahí viene la latencia), y el hardware maneja dos punteros de pila diferentes , dependiendo de si estás en modo "aplicación" o "controlador".
Quiero referirme a la presentación que el Sr. Moritz Fischer realizó en FOSDEM 2018 sobre Multitarea en Cortex-M .

Bonus (pero mi suposición sería que el STM8 también tiene algo así): Cortex-M0s generalmente vienen con motores DMA capaces conectados a sus periféricos. Si, por ejemplo, necesita golpear un pin con una secuencia de 128 estados hi / lo, puede dejar que el periférico haga eso. No hay necesidad de interferir, simplemente escriba los datos en la posición correcta e informe al dispositivo o al controlador dma qué hacer. Por supuesto, las capacidades dependen de los periféricos reales que el fabricante de silicio (ST, NXP, Atmel, Cypress ...) conectaron al núcleo ARM.

Hay varios RTOS gratuitos listos para usar para Cortex-M. Entonces, esa podría ser una razón para usar eso, especialmente si prefieres C sobre el ensamblador.

No he intentado esto, pero: El La serie Cypress PSoC 4200 viene con lo que ellos llaman "bloques digitales universales programables". Estas cosas están destinadas a ser máquinas de estado de hardware "independientes". Casi exactamente lo que necesita para implementar protocolos de conexión.

    
respondido por el Marcus Müller

Lea otras preguntas en las etiquetas