sábado, 28 de junio de 2014

F28377D, programando un doble núcleo.

Hola a todos!! Hace unos meses envié un correo electrónico a Texas Instruments preguntándoles si sería posible que me mandaran uno de sus nuevos microcontroladores de la familia C2000 de doble núcleo, de forma que los pudiera probar y escribir entradas sobre ellos, sin casi ninguna esperanza ni siquiera de recibir respuesta. Para mi sorpresa, después de un par de correos más contándoles mi experiencia con microcontroladores de la familia C2000 se pusieron en contacto conmigo para darme la genial noticia de que me iban a mandar uno de esos microcontroladores, y hace una semana lo recibí calentito desde Texas Instruments!.


Estos nuevos microcontroladores son, sin duda, lo más potente que hay ahora mismo en el mercado. Internamente cuenta con dos microcontroladores de la serie delfino, cada uno con su propia unidad en punto flotante, además de 2 coprocesadores matemáticos (Control Law Acelerators), funcionando en paralelo a los principales, con lo que en total, este integrado cuenta con 4 procesadores independientes. Los dos procesadores principales pueden funcionar hasta 200MHz, por lo que haciendo funcionar los dos en paralelo alcanzamos una velocidad de 400MHz, aunque desde Texas Instruments dicen que podemos llegar hasta 880MIPS equivalentes.
Toda esta velocidad que encontramos dentro del procesador, no valdría de mucho si no somos capaces de adquirir señales del exterior también a una ata velocidad, para eso, el F28377D cuenta con 4 conversores analógico - digital que tienen dos modos de funcionamiento. Podemos hacerlos funcionar con una resolución de 16 bits, y a una velocidad de 1MSPS, lo que se traduce en 4MSPS haciendo funcionar los 4 en paralelo, o bien si necesitamos mayor velocidad, podemos sacrificar un poco la resolución bajándola a 12 bits y tendremos 3.5MSPS en cada conversor, o 14MSPS en total.
A parte de estas características, cuenta con todas las de los microcontroladores de la serie Delfino, 24 canales PWM, conversor digital - analógico de 12 bits, 4 buses SCI, 2 buses I2C, PWM de alta resolución...


Para poder gestionar los dos núcleos internos, el f28377D tiene una configuración Maestro - Esclavo, de forma que tenemos la CPU1 que es la que tiene el control, y la CPU2 está a sus ordenes. Desde la CPU1 tenemos el control de todos sus periféricos propios, como son sus temporizadores, su FPU, además del control de todos los GPIO. La CPU2, también controla todos sus periféricos propios, pero no puede controlar ningún GPIO , ni ponerse en marcha por si misma. Lo que debemos hacer es desde la CPU1, arrancar la CPU2, y de esta forma ya tenemos los dos núcleos corriendo sus propios programas. Para poder controlar los GPIO desde la CPU2, es la CPU1 la que debe ceder el control de estos, una vez hecho esto, la CPU2 tiene acceso a los pines cedidos, como si de los suyos propios se tratara.
Para que los dos Delfino puedan comunicarse entre ellos, existen un módulo IPC de comunicación. El módulo IPC (Inter Processor Communication), consta de un sistema de mensajería entre los dos procesadores, y mediante interrupciones, y una memoria SARAM compartida, de forma que cuando queramos compartir algún dato entre las CPUs, guardamos el dato en la memoria SARAM compartida, y mediante el sistema de mensajería le decimos a la otra CPU que tiene el dato disponible. Además de estos mensajes, para evitar el acceso simultaneo a una misma dirección de memoria, el sistema cuenta con un sistema de semáforos.



En cuanto a la programación, cada proyecto para el F28377D cuenta con dos proyectos independientes, uno para cada CPU. Y a la hora de programarlo, debemos programar cada uno d elos núcleos por separado, y luego arrancarlos de forma separada, en primer lugar la CPU1, y luego la CPU2. Esta secuencia de arranque es lógica si tenemos en cuenta que hasta que la CPU1 no arranque la CPU2, esta no va a hacer nada, pero sin embargo si que podemos arrancar solo la CPU1 sin utilizar la segunda. Además de las dos CPUs, también tenemos las dos CLA, las cuales cuentan con sus propio código también, que arrancamos y ejecutamos desde su CPU correspondiente.
En resumen, existen muchísimas posibilidades con este microcontrolador. En las próximas entradas os iré explicando más sobre este microcontrolador, y me gustaría hacer un par de vídeos.

2 comentarios:

  1. Saludos, buen tema pero me queda una duda. citanto "también tenemos las dos CLA, las cuales cuentan con sus propio código también, que arrancamos y ejecutamos desde su CPU correspondiente." ¿qué son las CLA?

    ResponderEliminar
    Respuestas
    1. Hola Daniel!, pues bien, las CLA son unos procesadores de apoyo al procesador principal. Como digo en el texto, en ciertos momentos que nos interesen, podemos desde el procesador principal activar una rutina en la CLA, y esta funcionará en paralelo a nuestro procesador. UNa vez la rutina haya finalizado, la CLA nos devuelve el resultado. Se utilizan sobretodo para hacer calculos matemáticos y tratamiento de señal, ya que, tienen acceso a las lecturas de los canales analógcos y a los ePWM del procesador. En conclusión, son unos procesadores mas pequeños que las CPU1 y 2, con su propia unidad en punto flotante, y que funcionan a la misma velocidad que el procesador principal.
      Un saludo!

      Eliminar