Como comenté en una entrada anterior, por diversos motivos he de empezar a programar microcontroladores de la serie TMS320 de Texas Instruments. Después de varios días de lecturas e intentos tengo preparado y funcionando un pequeño programa que controla entradas y salidas digitales.
Algo que me ha llamado la atención es la controlabilidad que tiene el micro, es decir, casi todo puedes elegirlo, desde a que periféricos llega la señal de reloj, modos de bajo consumo, establecer áreas de reloj… pero todo esto no es gratis, sino que incrementa la dificultad de la programación, ya que el número de registros es enorme. En este ejemplo, a pesar de solo utilizar entradas y salidas digitales (GPIOs General Pourpose Input Output), debemos seleccionar de una forma correcta el WDOG, el oscilador utilizado, el PLL, incluso la multiplexación de los puertos, ya que, en estos micros debemos seleccionar donde está conectado cada pin entre un máximo de 3 periféricos, es decir, si utilizamos un pin para la salida de PWM debemos decírselo, al contrario que pasaba con PIC que es el micro el que lo conecta. En concreto, cada puerto de 32 bits tiene los siguientes registros:
- GPxMUX1 y GPxMUX2: Controlan la multiplexación del pin.
- GPxDIR: En caso de elegir GPIO, selecciona si el puerto es de entrada o salida, como el registro TRIS de los PIC.
- GPxPUD: Seleccionamos si queremos resistencias de pull-up o no.
- GPxDAT: Registro de estado del puerto, podemos tanto escribir como leer, aunque no es recomendable escribir desde este registro, ya os explicaré porque.
- GPxSET, GPxCLEAR, GPxTOGGLE: Registros para poner un pin a 1 (SET), ponerlo a 0 (CLEAR) o voltearlo (TOGGLE).
Con estos registros podemos controlar el puerto por completo. Cada registro de los que he nombrado, al igual que pasaba con los PIC, está formado por estructuras, por lo que podemos controlar cada pin por separado.
Cada registro, forma parte de un gran grupo de registros como son GpioCtrlRegs, donde están los registros de control, y el GpioDataRegs, donde se encuentran los registros de datos.
El programa que he hecho, espera a que se pulse un pulsador situado en el GPIO12, y cuando este se pulsa y se suelta, se voltea el bit GPIO0.
/******************************************************
* HOLAMUNDO EN C2K LAUNCHPAD
* P.TRUJILLO
* OCTUBRE 2012
*******************************************************/
//includes
#include "F2802x_Device.h"
//main
void main()
{
// CONFIGURACIÓN INICIAL.
asm(" eallow");
SysCtrlRegs.WDCR = 0x68; //WDOG deshabilitado
SysCtrlRegs.CLKCTL.bit.INTOSC1OFF = 0; //activamos el oscilador interno 1
SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL = 0;
SysCtrlRegs.PLLSTS.bit.OSCOFF = 0; //activamos el PLL
SysCtrlRegs.PLLSTS.bit.PLLOFF = 0;
SysCtrlRegs.PLLCR.bit.DIV = 10;
SysCtrlRegs.PLLSTS.bit.DIVSEL = 2; //FOSC = 10 * 10/2 = 50MHz.
//LED
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;
GpioDataRegs.GPASET.bit.GPIO0 = 1;
//PULSADOR
GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO12 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO12 = 1;
asm(" edis");
//loop
while(1) { if(GpioDataRegs.GPADAT.bit.GPIO12 == 1) {
while(GpioDataRegs.GPADAT.bit.GPIO12 == 1);
GpioDataRegs.GPATOGGLE.bit.GPIO0 = 1;
} //if
}//while
}//main
En las demás entradas os intentaré ir explicando cada parte del código, pero con esto espero que se os despierte la curiosidad sobre estos potentes micros de 32 bits.
Hola amigo, excelente aporte!, anduve buscando ejemplos para los Texas Instruments, pero casi no hay, yo estoy aprendiendo a programar los MPS320F28069, con una tarjeta de evaluación Piccolo, la verdad es que lo que tienen de potentes estos micros, lo tienen de dificil. Una pregunta: tendrás más ejemplos que puedieras postear?, gracias.
ResponderEliminarHola! la verdad es que en foros y blogs no se suele hablar de estos micros, quizas porque no son muy utilizados por aficionados, y muco por expertos. Respecto a ejemplos, donde más puedes encontrar es en la propia página de texas instruments. O donde hay ejemplos muy sencillos es en el datasheet, hay un ejemplo de codigo al final de la explicación de cada módulo. Un saludo!!
ResponderEliminar