Microcontrolador MSP430 de Texas Instruments 2274

Microcontrolador Msp430 M. en C. Enrique López Ortega IPN ESIME ZACATENCO Microcontrolador MSP430 de Texas Instrument

Views 146 Downloads 7 File size 3MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Microcontrolador MSP430 de Texas Instruments. Por M en C. Enrique López Ortega El msp430 es un microcontrolador de 16 bits muy versátil, que puede realizar operaciones para 8 y 16 bits, presenta un modelo de programación fácil de aprender y un mapa de memoria que no requiere de paginación, los modos de direccionamiento que maneja permiten que se puedan usar con cualquier instrucción y en cualquier dirección de memoria. Esta familia de microcontroladores esta diseñada específicamente para aplicaciones que requieran ser portátiles ya que se alimenta con 3V y tiene formas de operación de muy bajo consumo de energía. El modelo MSP430x20xx tiene las siguientes características:  

Voltaje de alimentación en el rango de 1.8V a 3.6V Bajo consumo de potencia En modo activo 220 uA a 1 MHz , 2.2V En modo Stand By 0.5 uA Modo apagado (retención de RAM) 0.1 uA  5 Modos de bajo consumo  Tiempo de arranque desde Stand By en menos de 1 uS  Arquitectura RISC, 62.5 ns tiempo de ciclo de instrucción (a 16 MHZ)  Varias configuraciones posibles de reloj Frecuencias internas de 16 MHZ con 4 frecuencias calibradas al +- 1% Oscilador interno de muy baja frecuencia mediante Cristal de 32 KHz Mediante Fuente de reloj externa.  temporizador de 16 bit con 2 registros de Captura/Comparación  Comparador interno para señales analógicas (MSP430x20x1)  Convertidor A/D 10 Bit 200 ksps, con referencia interna Muestreo y retención Auto scan y controlador de transferencia de datos(MSP430x20x2)  Convertidor A/D Sigma-Delta de 16 bits con entradas diferenciales (MSP430x20x3)  Interfaz de comunicación serie (USI), soporta SPI e I2C(MSP430x20x2) y (MSP430x20x3) Se puede seleccionar por software modo Asíncrono UART o modo sincrono SPI  En el (MSP430x2xxx ) se puede programar en PCB No se requiere de voltajes de programación externos  Protección de código con fusibles de seguridad  Protección Brownout reset MSP430F2012, MSP430F2013: 8KB + 256B Flash Memory y 128 B RAM Disponible en 14-terminales Literatura base hojas de especificación SLAU144-E.pdf ( MSP430x2xxx)

1

Microcontrolador Msp430

Fig. 1

Fig. 2

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Diagrama de bloques del MSP430F2012

Terminales del MSP430F2012

Se puede observar de la figura 2 que este modelo de micro tiene 2 puertos el puerto 1 es de 8 bits y el puerto 2 es de 2 bit en total 10 líneas programables como E/S. Se adelanta que el puerto 1 y el puerto 2, tienen capacidad de interrupción (IRQ) en c/u de sus líneas (10 EN TOTAL) y se puede seleccionar el flanco de interrupción de forma individual ya sea de subida o de bajada. También se explicara el microcontrolador MSP430F2274 que cuenta con más recursos, a continuación.

2

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

El modelo MSP430F2274 tiene las siguientes características:  

Voltaje de alimentación en el rango de 1.8V a 3.6V Bajo consumo de potencia En modo activo 200 uA a 1 MHz , 2.2V En modo Stand By 0.7 uA Modo apagado (retención de RAM) 0.1 uA  5 Modos de bajo consumo  Tiempo de arranque desde Stand By en menos de 6 uS  Arquitectura RISC, 125 ns tiempo de ciclo de instrucción (a 8 MHZ)  Varias configuraciones posibles de reloj Mediante Varios resistores internos Mediante resistor externo Mediante Cristal de 32 KHz Mediante Cristal de alta frecuencia Mediante Resonador Mediante Fuente de reloj externa.  2 temporizador de 16 bit con 3 registros de Captura/Comparación  Convertidor A/D 10 Bit 200 ksps, con referencia interna Muestreo y retención Autoscan y controlador de transferencia de datos  Interfaz de comunicación serie (USART0) Se puede seleccionar por software modo Asíncrono UART o modo síncrono SPI  En el (MSP430x2xxx ) se puede programar en PCB No se requiere de voltajes de programación externos  Protección de código con fusibles de seguridad  Protección Brownout reset MSP430F2274: 32KB + 256B Flash Memory y 1KB RAM Disponible en 38-terminales Literatura base hojas de datos SLAU144-E.pdf ( msp430x2xxx)

3

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Fig. 3 Diagrama a bloques del MSP430 F2274

Fig. 4 Terminales del microcontrolador MSP430F2274 Se puede observar de la figura 4 que este modelo de micro tiene 4 puertos de 8 bits en total 32 líneas programables como E/S Se adelanta que el puerto 1 y el puerto 2, tienen capacidad de interrupción (IRQ) en c/u de sus líneas (16 EN TOTAL) y se puede seleccionar el flanco de forma individual ya sea de subida o de bajada.

4

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Modelo de Programación Son los registros a los cuales tiene acceso el programador, para la familia msp430, se tienen 16 registros de 16 bits.

Fig. 5 Modelo de programación del MSP430 El CPU esta integrado por 16 Registros de 16 bits. 4 de los registros, del R0 al R3 están dedicados al Contador de programa (PC/R0), Apuntador de pila (SP/R1), registro de Status (SR/R2) y Registro Generador de constantes (CG/R3) respectivamente, los demás registros son de propósito general; es decir sirven lo mismo como acumuladores que como registros apuntadores ó solamente como variables de almacenamiento temporal. Los tiempos de operaciones de registro a registro son de 1 ciclo de reloj, los periféricos pueden ser manejados por todas las instrucciones

Conjunto de instrucciones

5

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

El CPU tiene un conjunto de 51 instrucciones con tres formatos y 7 modos de direccionamiento cada instrucción puede operar con datos de Byte o de Word (16 bits) La Tabla 1 muestra los tres tipos de formatos de instrucción; los modos de direccionamiento son listados en la tabla 2. Refiérase al capítulo 3 de SLAU144E.pdf para más detalle.

Mapa de Memoria para el modelo MSP430F201x Es la forma en que se encuentra organizada la memoria para el MSP430F201x, obsérvese la ultima columna. Tabla 3 Mapa de memoria del msp430F201x

El mapa de memoria va desde la dirección 0000h hasta la dirección 0FFFFh es decir 65,536 direcciones totales, en la tabla 3 observamos que la memoria flash (de programa) comienza en el modelo F201x en la dirección 0F800h y termina en la dirección 0FFFFh, los vectores de interrupción se encuentran en las direcciones que van desde 0FFC0h hasta 0FFFFh por eso se deberá preferentemente evitar estas ultimas direcciones para poner código. La memoria RAM comienza en la dirección 0200h y termina en la dirección 027Fh, la RAM se utiliza para guardar variables temporales y también la utiliza la PILA, el microcontrolador deberá de inicializar su apuntador de pila SP en una localidad de RAM, y se comenta que la

6

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

pila crece hacia abajo por lo que se aconseja que las variables queden por encima de la dirección cargada en el apuntador de pila. Mapa de memoria para el modelo MSP430F2274 Tabla 4 mapa de memoria de la familia MSP430x22xx

El mapa de memoria va desde la dirección 0000h hasta la dirección 0FFFFh es decir 65,536 direcciones totales, en la tabla 4 observamos que la memoria flash (de programa) comienza en el modelo F2274 en la dirección 08000h y termina en la dirección 0FFFFh, los vectores de interrupción se encuentran en las direcciones que van desde 0FFC0h hasta 0FFFFh por eso se deberá preferentemente evitar estas ultimas direcciones para poner código. La memoria RAM comienza en la dirección 0200h y termina en la dirección 05FFh, la RAM se utiliza para guardar variables temporales y también la utiliza la PILA, el microcontrolador deberá de inicializar su apuntador de pila SP en una localidad de RAM, y se comenta que la pila crece hacia abajo por lo que se aconseja que las variables queden por encima de la dirección cargada en el apuntador de pila. Ejemplo de un programa básico en ensamblador que hace que un led conectado a P1.0 encienda y se apague infinitamente. ;********************************************************************** ; MSP430F20xx Demo - Software Toggle P1.0 ; ; Descripción: Invierte el estado de un led con la operación XOR en ; P1.0 dentro de un bucle. ; ACLK = n/a, MCLK = SMCLK = default DCO ; ; MSP430F20xx ; ----------------; /|\| XIN|; || | ; --|RST XOUT|; | | ; | P1.0|-->LED ; ; M. Buccini / L. Westlund Traducido Por M. en C. Enrique López O. ; Texas Instruments Inc.

7

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

; October 2005/Agosto 2007 ; Built with IAR Embedded Workbench Version: 3.40A ;************************************************************************ ******* #include "msp430x20x3.h" ; Nota quizás se cambie para el 2274. #define time 50000 ;------------------------------------------------------------------------------ORG 0F800h ; 8000h para el 2274 ;------------------------------------------------------------------------------RESET mov.w #0240h,SP ; Inicializa ap. de pila mov.w #WDTPW+WDTHOLD,&WDTCTL ; Apaga perro Guardián bis.b #BIT0,&P1DIR ; P1.0 como salida Otro call #Cambia jmp Otro ; bucle infinito ;------------------------------------------------------------------------------------Cambia xor.b #BIT0,&P1OUT ; Invierte P1.0 call #tiempo ret ;---------------------------------------------------------------------------tiempo mov.w #time,R15 ; Retardo de R15 L1 dec.w R15 ; Decrementa R15 jnz L1 ; Fin? ret ;--------------------------------------------------------------------; Vectores de interrupción ;------------------------------------------------------------------------------ORG 0FFFEh ; MSP430 Vector de Reset DW RESET ; END A continuación el mismo programa en versión lenguaje C /********************************************************************** // MSP430F20xx Demo - Software Toggle P1.0 // // Descripción; Cambio en P1.0 por realizar la operación xor en P1.0 en un bucle //infinito. // ACLK = n/a, MCLK = SMCLK = default DCO // // MSP430F20xx // ----------------// /|\| XIN|// || | // --|RST XOUT|// | | // | P1.0|-->LED // // M.Buccini / L. Westlund Traducido por M en C. Enrique López O. Agosto 2007 // Texas Instruments, Inc // October 2005

8

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

// Built with IAR Embedded Workbench Version: 3.40A //********************************************************************* #include // Quizá se tenga que cambiar para el x227x void main(void) { WDTCTL = WDTPW + WDTHOLD; P1DIR |= 0x01; for (;;) { volatile unsigned int i; P1OUT ^= 0x01; i = 50000; do (i--); while (i != 0);

// Apaga Perro guardián // P1.0 como salida

// Cambio P1.0 usando OR exclusiva // Retardo

} } TABLA 5 VECTORES DE INTERRUPCION

9

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

2.1 Introducción a las Entradas y Salidas digitales Los dispositivos MSP430 pueden tener 6 puertos de E/S digitales implementados P1-P6. Cada puerto tiene 8 líneas de E/S.(ver hojas de datos del microcontrolador a utilizar). Cada línea de E/S se puede configurar de forma independiente como entrada ó salida, y también cada línea puede ser leída ó escrita de forma individual. Los puertos 1 y 2 tienen capacidad de interrupción. Cada interrupción para las líneas E/S de P1 y P2, pueden ser habilitadas de forma individual y configuradas para interrumpir en flanco de bajada o de subida de la señal de entrada. Todas las líneas de E/S del P1 tienen un vector de interrupción único y todas las líneas de E/S del P2 tienen un vector de interrupción único distinto al del P1. Las Características de la E/S digital incluyen: _Las líneas de E/S se pueden programar de forma independiente _ Valida cualquier combinación de entrada o salida _Registros de entrada y salida de datos independientes _ Resistores de pull- Up o pull-down individualmente configurables 2.2 Operación Digital de E/S Las E/S digitales se configuran mediante el software del usuario. La inicialización y la operación para las E/S digitales se explica en las secciones siguientes. 2.21 Registro de entradas PxIN Cada bit del registro PxIN, refleja el valor presente en la Terminal E/S correspondiente cuando la Terminal está configurada como E/S. Bit=0: La entrada esta en bajo Bit=1: La entrada está en alto Nota: Escribiendo en el registro PxIN Escribir en esos registros de lectura producen un aumento en la corriente de consumo mientras la escritura esta activa. 2.2.2 Registro de salidas PxOUT Cada bit en el registro PxOUT es el valor que saldrá en la línea E/S correspondiente cuando la línea se configura para funcionar como Salida y el resistor de pull-up/down está deshabilitado. Bit = 0: La salida esta en bajo Bit = 1: La salida esta en alto Si la resistencia de pull-up/pull-down de la Terminal está habilitada, el bit correspondiente del registro PxOUT selecciona si la resistencia será de pull-up o pull-down. Bit = 0: La resistencia interna se conecta a tierra (pull-down) Bit = 1: La resistencia interna se conecta a Vcc (pull-up) Registro de dirección PxDIR

10

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Cada bit del PxDIR selecciona la dirección de la línea correspondiente de E/S, sin importar la función de la Terminal. La dirección programada en PxDIR debe de corresponder con la función de la Terminal seleccionada. Bit = 0: La línea del puerto esta configurada como entrada. Bit = 1: La línea del puerto esta configurada como salida. 2.2.4 Registro de habilitación de resistencia de Pull−Up/Down (PxREN) Cada bit del registro PxREN habilita ó deshabilita la resistencia de pull-up/down de la correspondiente linea de E/S. El bit correspondiente del registro PxOUT selecciona si la resistencia es de pull- up ó pull – down Bit = 0: Resistencia de Pull-up/down deshabilitada Bit = 1: Resistencia de Pull-up/down habilitada Para seleccionar si la resistencia es de pull- up o pull down en el bit que corresponda en el regitro PxOUT Bit = 0: Resistencia de Pull- down Bit = 1: Resistencia de Pull-up 2.2.5 Registro de selección de función ( PxSEL) La mayoría de las veces las terminales del puerto están multiplexadas con otras funciones de módulos periféricos. Ver las hojas de especificaciones del dispositivo específico para determinar las funciones de las líneas. Cada bit de PxSEL bit es utilizado para seleccionar si la terminal trabaja como E/S digital ó como línea que pertenece a un periférico. Bit = 0: La terminal de trabaja como E/S digital Bit = 1: La terminal trabaja como línea de algún periférico, el hecho de poner PxSELx=1 no configura automáticamente la línea en la dirección que el periférico requiere, por tanto hay la necesidad de programar la dirección de la línea. Ejemplo: Poner la línea P1.0 como salida Auxiliar (ACLK ) BIS.B #01h,&P1SEL ; Selecciona la línea como periférico BIS.B #01h,&P1DIR ; Se programa como salida *Requerido* Nota: Las interrupciones de P1 y P2 , se deshabilitan cuando PxSEL = 1 Cuando cualquier bit de P1SELx o P2SELx se pone a uno, la interrupción de esa línea se deshabilita, por tanto cualquier señal en esa terminal no genera interrupción sin importar si fueron habilitadas mediante PxIE.

2.2.6 Interrupciones de los puertos P1 y P2

11

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Cada línea de los puertos 1 y 2 tienen capacidad de interrupción., estas se configuran mediante los registros PxIFG, PxIE, y PxIES .Todas las terminales del P1 tienen un mismo vector de interrupción, y así como también, las líneas del puerto 2 tienen su vector propio. Para determinar que Terminal interrumpió al micro utilice los registros PxIFG 2.2.7 Registros de banderas de interrupción P1IFG, P2IFG Cada bit del registro PxIFG es una bandera que tiene correspondencia con las líneas de E/S y estas banderas, se ponen en uno cuando en la terminal de entrada llega el flanco seleccionado. Cualquiera de estas banderas solicitan una interrupción cuando el bit correspondiente PxIE y el bit GIE están en uno. Cada bit PxIFG debe ser borrado por programa, también es posible escribir estas banderas con uno, de esta forma se generara una interrupción mediante programa. Bit = 0: No hay interrupción pendiente Bit = 1: Interrupción pendiente. Únicamente son causantes de interrupción las transiciones de estado y no los niveles estáticos. Si cualquier bandera PxIFG llega a uno durante una rutina de servicio de interrupción del puerto, ó es uno después de la instrucción RETI se ejecuta la rutina de servicio de interrupción, entonces se genera otra interrupción, esto asegura que cada transición es reconocida. Nota: La Bandera PxIFG cambia a uno, cuando se cambian los registros PxOUT o PxDIR 2.2.7 Registros de selección de flanco de interrupción P1IES, P2IES Cada bit PxIES selecciona el flanco de interrupción de la Terminal correspondiente de E/S. Bit = 0: La bandera PxIFGx es uno con una transición de bajo a alto. Bit = 1: La bandera PxIFGx es uno con una transición de alto a bajo Nota: Escribiendo en PxIESx Escribir en los bits de los registros P1IES o P2IES puede resultar en activar la correspondiente interrupción. f PxIESx PxINx PxIFGx 0011-

2.2.8 Registros de habilitación de interrupciones P1IE, P2IE Cada bit PxIE habilita la bandera PxIFG asociada. Bit = 0: La interrupción está deshabilitada

12

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Bit = 1: La interrupción está habilitada

2.2.9 Configuración de las líneas no utilizadas Las terminales no utilizadas de E/S deben configurarse como líneas de E/S, como salidas y dejarlas desconectadas en el circuito impreso, para prevenir entradas flotadas y así bajar el consumo de energía. El estado de la línea de salida no importa, otra alternativa es activar la resistencia interna de pull-up/down para prevenir entradas flotadas. 2.2 Registros asociados de los puertos de E/S A continuación se muestran todos los registros asociados a los puertos de E/S, los tres últimos registros solo existen para los puertos 1 y 2. Tabla 2.3 Registros de los puertos de E/S NOMBRE

USO

PxSEL

Selecciona la línea es de E/S o asociada a un subsistema

PxDIR

Selecciona si la línea correspondiente será de entrada o salida

PxIN

Registro donde se lee el estado actual de la(s) línea(s) de entrada

PxOUT

Registro donde se escribe(n) la(s) línea(s) de salida

PxREN

Registro donde se habilitan las resistencias internas(solo para líneas configuradas como entradas) Registro donde se habilita(n) la(s) línea(s) de interrupción

PxIE PxIFG PxIES

Registro de banderas de interrupción, el bit correspondiente se pone en 1 al ocurrir el flanco programado en IES Registro donde se programa el flanco que activa la interrupción 0=subida, 1 = bajada

Recuerde que cada registro es de 8 bits y que cada bit tiene asociado una línea del puerto x. Así P1SEL .0, tiene asociado el bit 0 del puerto 1. Nota: todos los registros por reset se ponen en cero.

3.1 Introducción al temporizador/contador A3 El temporizador A3 es un Temporizador/contador de 16 bits con 3 registros de captura /comparación. Este capitulo describe el Temporizador A3 (3 registros de

13

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

captura/comparación), implementados en los MSP430x2xx, excepto para los MSP430x20xx. El temporizador A soporta operaciones de captura/comparación, salidas PWM e intervalos de tiempo. El temporizador tiene capacidades de interrupción, las cuales pueden ser generadas por el sobre flujo del contador o desde cada uno de los registros de captura y comparación. Características Temporizador /Contador asíncrono con 4 modos de operación.  Fuente de reloj seleccionable y configurable  2 ó 3 Registros de Captura/Comparación  Salidas configurables con capacidad de PWM  Entradas asíncronas y salida con retención  Registro de vector de interrupción para decodificación rápida de todas las interrupciones de temporizador A.

Figura 3.1 Diagrama a bloques del temporizador A3 3.1.1 Temporizador /Contador de 16 bits (TAR)

14

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

El registro Temporizador/contador (temporizador) de 16 bits TAR, se incrementa o decrementa (dependiendo del modo de operación) con cada flanco positivo de la señal de reloj. El TAR puede ser leído ó escrito por programa. Adicionalmente el temporizador puede generar una interrupción cuando llega a su sobre flujo (pasa de su valor máximo de cuenta, a cero). El TAR puede ser borrado al poner en uno el bit TACLR, este bit también borrara la pre escala del reloj y la dirección de cuenta en el modo ascendente/descendente. Nota: Modificando los registros del temporizador A Se recomienda detener el temporizador antes de modificar su operación (con excepción de Habilitación de interrupciones, bandera de interrupción y TACLR) para evitar condiciones de operación erróneas. Cuando el reloj del temporizador asíncrono con respecto al reloj del CPU, cualquier lectura desde el TAR debe ser mientras el temporizador no está en operación, de lo contrario el resultado se vuelve impredecible. Alternativamente el temporizador, puede ser leído muchas veces mientras está operando, y una mayoría de votos en programa determinarán la lectura correcta. Cualquier escritura el TAR tomará efecto de forma inmediata. 3.2 Selección de la fuente de reloj y división. El reloj del temporizador puede ser conectado a ACLK, SMCLK o manejado de forma externa mediante las líneas TACLK o INCLK (ver terminales del microcontrolador). La fuente de reloj se selecciona mediante los bits TASSELx localizados en el registro de control del TAR (TACTL).La fuente de reloj seleccionada puede ser pasada directamente al TAR o ser subdividida en 2,4,8 , esto utilizando los bits IDx localizados en este mismo registro. El factor de división del TAR se pierde al poner en uno el bit TACLR. 3.2.1 Iniciando el temporizador El temporizador puede ser iniciado o reiniciado en las siguientes formas: El temporizador cuenta cuando los bits MCx > 0 y la fuente del reloj está activa. Cuando el modo de cuenta del temporizador es ascendente (up) ó ascendente/descendente (up/down), el temporizador puede ser detenido escribiendo un 0 en el registro TACCR0. El temporizador puede ser restablecido por escribir un valor distinto de cero. En este escenario el temporizador comienza incrementando hacia arriba desde cero. 3.2.2 Modo de control del temporizador El temporizador tiene 4 modos de operación como se describe en la tabla 3-1: paro, ascendente, continuo y ascendente/descendente. El modo de operación se selecciona con los bits MCx presentes en el registro de control del TAR (TACTL)

Tabla 3-1 Modos del temporizador MCx Modo 00 apagado 01 Ascendente

Descripción El temporizador está detenido El temporizador cuenta repetidamente desde cero a el valor de TACCR0

15

Microcontrolador Msp430 10 11

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Continuo El temporizador repetidamente cuenta desde o a 0FFFFh Ascendente/Descendente El temporizador repetidamente cuenta de cero hasta el valor del TACCR0 y de vuelta hacia cero.

Modo Ascendente El modo ascendente se utilice cuando el periodo del temporizador debe ser distinto de 0FFFFH cuentas El temporizador cuenta repetidamente de forma ascendente hasta el valor cargado en el registro TACCR0, el cual define el periodo, como se muestra en la figura 3.2. El número de cuentas del temporizador en un periodo es de TACCR0+1. Cuando el valor del temporizador es equivalente al TACCR0 el temporizador restablece su cuenta a cero. Si se selecciona el modo ascendente cuando el temporizador tiene un valor mayor al TACCR0, el temporizador inmediatamente restablece su cuenta comenzando desde cero.

Figura 3.2 Modo ascendente La bandera de interrupción TACCR0 se pone en uno cuando la cuenta del temporizador TAR, se iguala con el valor cargado en el registro TACCR0. La bandera de interrupción TAIFG se pone en uno cuando el temporizador cuenta desde valor TACCR0 a cero. La figura 3.3 muestra el ciclo de puesta a uno de la bandera.

Figura 3.3 Puesta a uno de las banderas en modo ascendente

Cambiando el periodo del registro TACCR0 Cuando se cambia el contenido del TACCR0 mientras el temporizador está corriendo, si el nuevo periodo es mayor o igual que el viejo, el temporizador cuenta hasta el nuevo periodo. Si el nuevo periodo es menor que la cuenta actual, el temporizador vuelve a cero. Una cuanta adicional ocurre antes de empezar desde cero.

16

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Modo continúo En el modo continuo, el temporizador cuenta repetidamente desde cero hasta 0FFFFh y comienza de nuevo en cero, como se muestra en la figura 3.4. El registro de captura/comparación TACCR0 trabaja de la misma forma que los otros registros de captura/comparación.

Figura 3.4 Modo continuo

Figura 3.5 Puesta a uno se las banderas en modo continuo Uso del modo continúo El modo continuo puede utilizarse para generar intervalos de tiempo independientes y frecuencias de salida. Cada vez que es completado un intervalo de tiempo, se genera una interrupción. El siguiente intervalo de tiempo es sumado al registro TACCRx en cada rutina de servicio. La figura 3.6 muestra 2 intervalos de tiempo separados t0 y t1 los cales son sumados en los registros de captura/comparación. En esta forma de uso el intervalo de tiempo es controlado por circuitería no por programa quitando así el impacto de la latencia de la interrupción. Se pueden generar más de 3 intervalos de tiempo independientes ó frecuencias de salida utilizando para ello los 3 registros de captura/comparación.

Figura 3.6 Intervalos de tiempo en modo continuo

17

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Los intervalos de tiempo pueden ser producidos por otros modos de operación. Como por ejemplo cuando el TACCR0 es utilizado como registro de periodo. Su manejo es más complejo desde que la suma del valor anterior del registro TACCRx y el nuevo periodo pueden ser mayor que el valor en el TACCR0. Cuando esto sucede el TACCR0 debe ser restado para obtener el intervalo de tiempo correcto. Modo Ascendente/Descendente El modo ascendente/descendente se utilizará cuando el periodo deba ser distinto de 0FFFFh cuentas y además se requiera de generación de pulsos simétricos. El temporizador contara hasta el valor cargado en el registro de comparación TACCR0 y regresará a cero, esto lo hará de forma infinita. Observe en la figura 3.7 que el intervalo de tiempo es el doble de lo que esta cargado en el TACCR0.

Figura 3.7 Modo ascendente/descendente La dirección de la cuenta es guardada. Esto permite al temporizador ser detenido y restablecido en la misma dirección en la que se encontraba contando antes de ser detenido. Si esto no se desea, el bit TACLR debe ser puesto en uno para borrar la dirección. El bit TACLR también borra el valor del TAR y el valor del divisor del reloj del temporizador. En modo ascendente/descendente, la bandera de interrupción del TACCR0 CCIFG y la bandera del temporizador TAIFG son puestas a uno solamente una vez por periodo, separadas por ½ periodo de tiempo. La bandera de interrupción del TACCR0 CCIFG se pone en uno cuando el temporizador cuenta desde TACCR0-1 a TACCR0, y la bandera TAIFG se pone en uno cuando el temporizador completa la cuenta hacia abajo desde 0001hasta 0000 observe la figura 3.8 que muestra los ciclos de puesta a uno de las banderas.

Figura 3.8 puesta a uno de banderas en modo ascendente/descendente Cambiando el periodo del registro TACCR0

18

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Cuando se cambia TACCR0 mientras el temporizador está corriendo, y contando en sentido descendente, el temporizador continúa descendiendo hasta alcanzar cero. El nuevo periodo tendrá efecto después de llegar a cero. Cuando el temporizador está contando en dirección ascendente, y el nuevo periodo es mayor ó igual al valor de la cuenta actual, el temporizador continúa contando asta el nuevo periodo antes de contar de forma descendente. Por el contrario si el nuevo periodo es menor que la cuenta actual, el temporizador comienza contando hacia abajo. Una cuenta adicional puede ocurrir antes de que el temporizador comience a contar hacia abajo. Uso del modo ascendente /Descendente El modo ascendente descendente soporta aplicaciones en donde se requieren tiempos muertos entre señales de salida (ver sección de unidad de salida del temporizador A). por ejemplo para evitar condiciones de sobrecarga, 2 salidas manejan un puente H nunca deben de estar en estado alto simultáneamente. En el ejemplo se muestra en la figura xx el tiempo muerto es: tiempo muerto = ttemporizador.(TACCR1-TACCR2) Con: tiempo muerto es el tiempo durante el cual ambas salidas necesitan estar inactivas ttemporizador ciclos del reloj. TACCRx Contenido del registro de comparación. Los registros TACCRx no tienen registro secundario alguno. Ellos se renuevan inmediatamente cuando son escritos. Por lo que cualquier tiempo muerto no será mantenido.

Figura 3.9 Unidad de salida en modo ascendente/descendente Bloques de captura/comparación El temporizador A cuenta con 2 ó 3 bloques de captura/comparación, cualquiera de ellos puede utilizarse como captura de tiempos del temporizador o para generar intervalos de tiempo. Modo de Captura

19

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

El modo de captura se selecciona cuando el bit CAP se pone en uno, este bit está presente en el registro de control asociado TACCRx. El modo de captura se utiliza para medir eventos de tiempo y puede ser usado para medir velocidades. Las entradas de captura CCIxA y CCIxB estan conectadas a las terminales externas y se seleccionan con los bits CCISx . Los bits CMx seleccionan el flanco que dispara la captura bien puede ser ascendente ó descendente ó incluso ambos. La captura ocurre en el flanco seleccionado de la señal de entrada. Cuando ocurre una captura:  El valor del temporizador es copiado en el registro TACCx  La bandera de interrupción CCIFG se pone en uno. La señal de entrada puede ser leída en cualquier momento mediante el bit CCI. Los MSP430x2xx tienen distintas señales conectadas a CCIxA y CCIxB refiérase a las hojas de especificación de cada dispositivo para la conexión de esas señales. La señal de captura puede ser asíncrona con el reloj del temporizador y causa una condición de carrera. Al poner el bit SCS en uno se sincronizará la captura con el reloj del temporizador, esto se recomienda. Ver figura 3.10

Figura 3.10 Señal de captura SCS=1 Cada registro de captura /comparación tiene una lógica de sobre flujo que indica si una segunda captura fue realizada antes de que fuera leído el primer valor del registro de captura. El bit COV se pone en uno cuando esto ocurre como se muestra en la figura 3.11 COV debe ser borrado por programa.

20

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Figura 3.11 ciclo de captura Captura iniciada por programa La captura puede ser iniciada por programa. Los bits CMx pueden ser puestos a uno para capturar en ambos flancos. Después el programa pone en uno el bit CCIS1 y cambia el bit CCIS0 de la señal de captura entre VCC y GND, iniciando una captura cada vez que CCIS0 cambia de estado. MOV #CAP+SCS+CCIS1+CM_3,&TACCTLx ; Setup TACCTLx XOR #CCIS0,&TACCTLx ; TACCTLx = TAR

Modo de comparación El modo de comparación se selecciona cuando el bit CAP se pone en cero, dicho bit está localizado en el registro de control TACCRx. El modo de comparación se utiliza para generar PWM o interrupciones con intervalos de tiempo específicos. Cuando la cuenta del TAR llega a ser el valor cargado en el registro de comparación TACCRx: _ La bandera de interrupción CCIFG se pone a uno _ La señal interna l EQUx = 1 _ EQUx afecta la salida de acuerdo al modo de salida _ La señal de entrada CCI es grabada en SCCI

Unidad de salida Cada bloque de captura/comparación contiene una unidad de comparación. La unidad de comparación es utilizada para generar señales de salida como señales PWM. Cada unidad de salida tiene ocho modos de operación que generan señales basadas en las señales EQU0 y EQUx.

21

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Modos de salida Los modos de salida están definidos por los bits OUTMODx y están descritos en la tabla 3.2 La señal de salida OUTx es cambiada con el flanco positivo de la señal de reloj del temporizador para todos los modos excepto el modo 0. Los modos de salida 2,3,6 y 7 no se utilizan para la unidad de salida cero porque la señal EQUx = EQU0. Tabla 3.2 Modos de salida OUTMODX

MODO

DESCRIPCION

000

Salida

La señal de salida OUTx esta definida por el bit OUTx. La señal OUTx se actualiza cuando OUTx se actualiza.

001

Set

La salida es uno cuando el temporizador cuenta hasta el Valor del registro TACCRx. Permanece en uno hasta Que se restablece el temporizador, o hasta que otro Modo de salida se seleccione y afecte la salida

010

Toggle/Reset La salida es invertida cuando la cuenta del temporizador Cuenta hasta el valor del registro TACCRx. La salida Será cero cuando el TAR llegue al valor del registro TACCR0.

011

Set/Reset

La salida es uno cuando la cuenta del temporizador Cuenta hasta el valor del registro TACCRx. La salida Será cero cuando el TAR llegue al valor del registro TACCR0.

100

Toggle

La salida es invertida cuando la cuenta del temporizador Cuenta hasta el valor del registro TACCRx. El periodo De la salida es el doble que el periodo del temporizador

101

Reset

La salida es cero cuando la cuenta del temporizador Cuenta hasta el valor del registro TACCRx. Permanece en 0 hasta que se restablece el temporizador, o hasta que otro modo de salida se seleccione y afecte la salida

110

Toggle/Set

La salida es invertida cuando la cuenta del temporizador Cuenta hasta el valor del registro TACCRx. La salida Será uno cuando el TAR llegue al valor del registro TACCR0.

111

Reset/Set

La salida es cero cuando la cuenta del temporizador Cuenta hasta el valor del registro TACCRx. La salida Será uno cuando el TAR llegue al valor del registro TACCR0.

Ejemplo de Salida temporizador en modo ascendente

22

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

La señal OUTx es cambiada cuando el temporizador cuenta hasta el valor del registro TACCRx y regresa desde el valor cargado en el TACCR0 a cero, dependiendo del modo de salida. un ejemplo se muestra en la figura 3.12 utilizando el TACCR0 y el TACCR1.

Figura 3.12 Ejemplo de salida modo ascendente Ejemplo de Salida temporizador en modo continúo La señal OUTx es cambiada cuando el temporizador cuenta hasta el valor del registro TACCRx y regresa desde el valor cargado en el TACCR0 a cero, dependiendo del modo de salida. un ejemplo se muestra en la figura 3.13 utilizando el TACCR0 y el TACCR1.

23

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Figura 3.13 Ejemplo de salida modo continuo Ejemplo de Salida temporizador en modo ascendente descendente La señal OUTx es cambiada cuando el temporizador cuenta hasta el valor del registro TACCRx y regresa desde el valor cargado en el TACCR0 a cero, dependiendo del modo de salida. un ejemplo se muestra en la figura 3.14 utilizando el TACCR0 y el TACCR2.

Figura 3.14 Ejemplo de salida modo ascendente/ascendente Nota: Cambio entre modos de salida

24

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Cuando se cambia entre modos de salida, uno de los bits OUTMODx debe permanecer en uno durante la transición, a menos que se trate del modo 0. De otra manera puede ocurrir un brinco porque las compuertas NOR decodifican la salida a modo cero. Un método seguro para cambiar entre modos de salida es utilizar el modo 7 como estado de transición. BIS #OUTMOD_7,&TACCTLx ; Poner en modo de salida=7 BIC #OUTMODx,&TACCTLx ; Borrar bits no deseados

Interrupciones del temporizador A El temporizador A tiene asociados 2 vectores de interrupción:  El vector de interrupción del registro TACCR0 con bandera CCIFG  El vector del interrupción TAIV para sobre flujo del TAR y demás registros En el modo de captura alguna bandera CCIFG se pone a uno cuando el valor del temporizador es capturado en el registro asociado TACCRx. En el modo de comparación, alguna bandera CCIFG se pone en uno cuando el TAR llega a la cuenta del registro asociado TACCRx. Por programa se puede poner a uno o cero cualquier bandera CCIFG. Todas las banderas CCIFG hacen petición de interrupción cuando su correspondiente bit CCIE y el bit GIE están en uno. Interrupción del TACCR0 La bandera CCIFG del TACCR0 tiene la máxima prioridad del temporizador y tiene un vector de interrupción dedicado como se muestra en la figura 3.15. La bandera TACCR0 CCIFG se borra automáticamente cuando se atiende la rutina de servicio de interrupción.

Figura 3.15 Bandera de interrupción del registro de captura/comparación TACCR0 Generador de Vector de Interrupción TAIV Las banderas TACCR1 CCIFG, TACCR2 CCIFG y TAIFG están priorizadas y combinadas en un solo vector de interrupción. El registro de vector de interrupción TAIV es utilizado para determinar cual bandera hizo la petición de interrupción. La interrupción de mayor prioridad genera un número en el registro TAIV (ver descripción del registro). Este número puede ser evaluado o sumado al contador de programa para automáticamente entrar a la rutina apropiada. Al deshabilitar las interrupciones del temporizador A no se tiene efecto en el valor del TAIV. Cualquier Acceso de lectura o escritura en el registro TAIV automáticamente borra la bandera de mas alta prioridad pendiente. Si otra bandera de interrupción es uno, otra interrupción es generada después del servicio de la interrupción inicial. Por ejemplo, si las banderas TACCR1 y TACCR2 CCIFG son uno cuando la rutina de servicio accesa el registro TAIV,

25

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

La bandera TACCR1 CCIFG es borrada automáticamente. Después de la instrucción RETI la bandera TACCR2 CCIFG generará otra interrupción. Programa ejemplo de TAIV El siguiente programa de ejemplo muestra el uso recomendado del TAIV y del manejo de la sobrecarga. El valor del TAIV es sumado al PC para que automáticamente brinque a la rutina apropiada. Los números en el margen derecho muestran el número necesario de ciclos de CPU para cada instrucción. La sobrecarga del programa para las distintas fuentes de interrupción incluyen la latencia de interrupción y los retornos desde los ciclos de interrupción, pero no el manejo de las tareas en si mismo. Las latencias son: Bloque de captura/comparación TACCR0 Bloque de captura/comparación TACCR1,TACCR2 Sobreflujo del temporizador TAIFG

11 ciclos 16 ciclos 14 ciclos

Manejador de interrupción para TACCR0 CCIFG ciclos CCIFG_0_HND ; . . . ; Latencia del inicio del manejador de interrupción RETI

6 5

; Manejador de interrupción para TAIFG, TACCR1 y TACCR2 CCIFG TA_HND ... ADD &TAIV,PC RETI JMP CCIFG_1_HND JMP CCIFG_2_HND RETI RETI TAIFG_HND ... RETI CCIFG_2_HND ... RETI CCIFG_1_HND ... RETI

; Interrupt latency 6 ; Add offset to Jump table _3 ; Vector 0: No interrupt 5 ; Vector 2: TACCR1 2 ; Vector 4: TACCR2 2 ; Vector 6: Reservado 5 ; Vector 8: Reservado 5 ; Vector 10: TAIFG Flag ; Task starts here 5 ; Vector 4: TACCR2 ; Task starts here ; regreso al programa princ.5 ; Vector 2: TACCR1 ; Task starts here ; regreso al programa princ.5

Registros del temporizador A

26

5

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Figura 3.16 registros del temporizador A TACTL Registro de control del temporizador A

TASSELx

IDx

MCx

Bits 9-8 00 01 10 11 Bits 7-6

Selección de la fuente de reloj del temporizador A TACLK ACLK SMCLK INCLK Divisor de entrada. Esos bits seleccionan la entrada para el divisor del reloj.

00 /1 01 /2 10 /4 11 /8 Bits 5-4 00 01 10 11

Control de modo. Poner MCx = 00h cuando el Temporizador A no se use. Modo Stop : El temporizador está detenido Modo Up : El temporizador cuenta hasta el valor del TACCR0 Modo continuo: El temporizador cuenta hasta 0FFFFh Modo Up/down: El temporizador cuenta hasta el valor TACCR0 después cae a 0000h No utilizado Bit 3 No utilizado TACLR Bit 2 Borrado del Temporizador _A . Al poner en uno este bit, se borra el TAR, el divisor del reloj, y la dirección de cuenta. El bit TACLR se borra automáticamente y siempre se lee como cero. TAIE Bit 1 Temporizador _A habilitación de interrupción. Este bit habilita la petición de interrupción TAIFG. 0 Interrupción des habilitada 1 Interrupción habilitada

27

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

TAIFG Bit 0 Temporizador _A bandera de interrupción

0 interrupción No pendiente 1 Interrupción pendiente

TAR Registro temporizador _A

Este registro es el contador del temporizador _A

TACCTLx Registro de control de captura/comparación

CMx

Bit

15-14

Modo de captura 00 No captura 01 Captura en flanco ascendente 10 Captura en flanco descendente 11 Captura en ambos flancos ascendente y descendente

CCISx Bit

13-12 Selección de la entrada de capture/comparación. Esos bits seleccionan la señal de entrada TACCRx l. Ver hojas de especificaciones del dispositivo. 00 CCIxA 01 CCIxB 10 GND 11 VCC SCS Bit 11 Fuente de Sincronización de captura. Este bit se usa para sincronizar la entrada de captura con el reloj del temporizador 0 captura asíncrona. 1 captura síncrona.

28

Microcontrolador Msp430 SCCI

No utilizado

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Bit 10 Entrada de captura/comparación sincronizada. La señal CCI de entrada seleccionada con la señal EQUx y puede ser leído a través de este bit. Bit 9 No utilizado. Solo lectura. Siempre se lee 0.

CAP

Bit 8 Modo de captura 0 modo de comparación. 1 modo de captura.

OUTMODx

Bits7-5 Modo de salida. Los modos 2, 3, 6, y 7 no son utilizados para el TACCR0 porque EQUx= EQU0.(requieren 2 registros) 000 valor del bit OUT 001 Set 010 Toggle/reset 011 Set/reset 100 Toggle 101 Reset 110 Toggle/set 111 Reset/set

CCIE

Bit 4 Habilitación de interrupción de Captura/comparación. Este bit habilita la petición de interrupción de la bandera CCIFG correspondiente. 0 Interrupción deshabilitada. 1 Interrupción habilitada

CCI

Bit 3 Entrada de captura/comparación. La señal de la entrada seleccionada puede ser leída en este bit.

OUT

Bit 2 Output. Para el modo de salida 0, Este bit controla directamente el estado de la salida. 0 Salida en bajo 1 Salida en alto

COV

Bit 1 Sobre flujo de captura. Esta bit indica que a ocurrido un sobre flujo de captura. COV debe borrarse por programa. 0 No ha ocurrido sobre flujo de captura 1 Ha ocurrido un sobre flujo de captura

CCIFG

Bit 0 bandera de interrupción de Captura/comparación 0 No hay interrupción pendiente 1 Interrupción pendiente

TAIV registro de vector de interrupción

29

Microcontrolador Msp430

M. en C. Enrique López Ortega

Contenido TAIV Fuente de interrupción

4

IPN ESIME ZACATENCO

Bandera de interrupción Prioridad

Introducción al ADC10

El modulo ADC10 soporta conversiones analógico /digitales de 10 bits de alta velocidad. El modulo está implementado en un convertidor SAR DE 10 BITS, un sistema de control

30

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

de selección de muestreo, un generador de referencias y un controlador de transferencia de datos (DTC). El DTC permite que las muestras convertidas de 10 bits se almacenen en cualquier parte de la memoria sin la intervención de la CPU. El modulo puede ser configurado por programa para soportar gran variedad de aplicaciones. Las características del ADC10:     

Velocidad máxima de conversión mayor a 200 KSPS Convertidor monotónico de 10 bits sin códigos perdidos Muestreo y Retención con periodos programables de muestreo Inicio de conversión vía software o mediante temporizador A Generación de voltaje de referencia interno de (1.5 V o 2.5 V) seleccionable por software  Referencia interna o externa seleccionable por programa  8 canales externos de entrada (12 en el MSP430x22x4)  Canales de conversión para sensor de temperatura interno, VCC y referencias externas  Fuente seleccionable de reloj de conversión  Modos de conversión: 1 canal, un canal conversión repetida, secuencia de canales y secuencia de canales repetidos.  El ADC y la referencia de voltaje pueden ser apagados de forma separada  Controlador de transferencia de datos para almacenamiento automático El diagrama a bloques del ADCC10 se muestra en la figura 4.1.

31

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Figura 4.1 diagrama a bloques del ADC10 4.2 Operación del ADC10 El modulo ADC10 se configura mediante el software del usuario. La inicialización para su operación se muestra en las siguientes secciones.

32

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

4.2.1 El ADC 10 El ADC convierte la entrada analógica en una representación digital de 10 bits y almacena el resultado en el registro ADC10MEM. El convertidor utiliza 2 niveles de voltaje programables/seleccionables llamados (VR+ y VR-) para definir los límites bajo y alto de la conversión. La salida digital (NANDC) está a plena escala (03FFh) cuando la señal de entrada es equivalente o mayor que VR+, y cero cuando la señal de entrada es equivalente o menor que VR-. El canal de entrada y los niveles de referencia de voltaje (VR+ y VR-) están definidos en la memoria de control de conversión. Los resultados de la conversión pueden estar en formato binario o formato complemento a dos, la formula de conversión cuando se usa binario natural es:

El ADC10 se configura a través de 2 registros de control ADC10CTL0 Y ADC10CTL1. El convertidor es habilitado con el bit ADC10ON. Con algunas excepciones los bits de control del ADC10 pueden ser modificados únicamente cuando el bit ENC=0, este bit ENC debe ser puesto a 1 antes de cada conversión. Selección del reloj de conversión El reloj ADC10CLK se utiliza como reloj de conversión y como periodo para el muestreo. La fuente de reloj del ADC10 se selecciona con los bits ADC10SSELx y puede ser dividido desde 1 hasta 8 con los bits ADC10DIVx. Las fuentes posibles de reloj son SMCLK, MCLK, ACLK y el oscilador interno ADC10OSC. El ADC10OSC, generada internamente esta en el rango de los 5 MHZ, pero esto varía de dispositivo a dispositivo, con el voltaje de entrada y la temperatura, vea hojas de datos del dispositivo. El usuario debe asegurarse que el reloj escogido para el ADC10CLK permanezca activo hasta el fin de la conversión. Si se quita el reloj durante una conversión, la operación no se completará y el resultado será invalido. Entradas del ADC10 y multiplexor La entrada del multiplexor analógico puede seleccionar las 8 señales externas y las 4 internas como canal de conversión. La entrada del multiplexor es del tipo romper antes de hacer para reducir el ruido de entrada a entrada que resulta por el cambio de canal como se muestra en la figura 4.2. La entrada del multiplexor es un interruptor tipo T para minimizar el acoplamiento entre canales. Los canales no seleccionados están aislados del convertidor A/D y un nodo intermedio se conecta a tierra analógica (VSS) así que la capacitancia es aterrizada y esto ayuda a eliminar el Cross Talk. EL ADC10 utiliza el método de redistribución de carga capacitiva. Cuando las entradas son conmutadas internamente esta acción causa transitorios los cuales decaen ates de cuasar una conversión errada.

33

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Selección de puerto analógico Las terminales externas del ADC10 Ax, VeREF+, y VREF- Comparten terminales con las líneas de E/S de propósito general, las cuales son CMOS. Cuando señales de tipo analógico son aplicadas a las compuertas CMOS pueden fluir corrientes parásitas desde VCC a GND. Estas corrientes ocurren cuando el voltaje de entrada están cerca del nivel de transición de la compuerta. El eliminar el buffer de la Terminal elimina estas corrientes y por tanto el consumo de corriente. Los bits ADC10AEx deshabilitan las terminales asociadas a los puertos de E/S. ; P2.3 en el MSP430x22x4 configurado como entrada analógica BIS.B #08h,&ADC10AE0

; P2.3 ADC10 funcionando y habilitada

Generador de voltaje de referencia El modulo ADC10 contiene una referencia de voltaje ínter construida con 2 niveles de voltaje seleccionables. Poniendo el bit REFON=1, se habilita la referencia interna. Cuando el bit REF2_5V=1, la referencia interna es de 2.5V. Cuando el bit REF2_5V=0, la referencia interna es de 1.5V. La referencia interna de voltaje puede ser utilizada internamente y cuando el bit REFOUT=0, de forma externa vía la terminal VREF+. Se pueden tener referencias externas para VR+ y VR- a través de las líneas A3 y A4 respectivamente. Cuando se utilizan las referencias externas ó cuando VCC se utiliza como referencia, la referencia interna puede ser apagada para ahorrar energía. La referencia externa positiva VeREF+, puede ser reforzada al poner los bits SREF0 = 1 Y SREF1 = 1. Esto permite utilizar la referencia externa con una resistencia interna grande a costa del manejador de corriente. Cuando REFBURST=1 el incremento en el consumo de corriente se limita al periodo de muestreo y conversión No se requiere capacitancia de almacenamiento externa para la fuente de referencia lo mismo en el ADC12. Características de bajo consumo de la referencia interna El generador de referencia interna de voltaje esta diseñado para aplicaciones de bajo consumo. Este incluye una fuente de voltaje band-gap y un manejador separado. La corriente de consumo de cada uno se especifica separadamente en las hojas de especificaciones del dispositivo. Cuando el bit REFON=1, ambos son habilitados y cuando REFON=0 ambos son deshabilitados. El tiempo total de establecimiento cuando REFON=1 es de 30 us. Cuando REFON=1, pero no hay conversión activa, el manejador se deshabilita automáticamente y se habilita cuando es necesario. Cuando el manejador está deshabilitado, no consume corriente, en este caso la fuente de voltaje Band –gap permanece habilitada. Cuando REFOUT=1, el bit REFBURST controla la operación de la referencia interna de voltaje. Cuando REFBURST=0 el manejador estará encendido continuamente permitiendo que la referencia de voltaje este presente fuera de l dispositivo. Cuando REFBURST=1 el manejador se deshabilita automáticamente cuando el ADC10 no este convirtiendo, y automáticamente se rehabilita cuando se requiere. La referencia de voltaje interna puede seleccionarse para trabajar con parámetros de velocidad vs. Consumo. Cuando la velocidad de conversión está por debajo de los 50 k muestras por segundo, poner el bit ADC10SR =1, esto reduce el consumo de corriente aproximadamente en un 50 %.

34

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Auto apagado El ADC10 está diseñado para aplicaciones de bajo consumo. Cuando el ADC10 esta realizando una conversión, es automáticamente deshabilitado y automáticamente re habilitado. El oscilador ADC10OSC tiene el mismo funcionamiento se habilita de forma automática cuando se requiere y se deshabilita cuando no se requiere. Temporización de muestreo y conversión La conversión analógica a digital se inicia con el flanco de subida de la señal de muestreo SHI. La fuente para SHI se selecciona con los bits SHSx e incluye lo siguiente: El bit ADC10SC La unidad de salida 1 del temporizador A La unidad de salida 0 del temporizador A La unidad de salida 2 del temporizador A La polaridad de la fuente de señal SHI se puede invertir con el bit ISSH. Los bits SHTx seleccionan el periodo de muestreo tmuestreo para que sea 4,8,16 ó 64 relojes del ADC10 ADC10CLK. El temporizador de muestreo pone SAMPCON en alto para el periodo de muestreo después de la sincronización con ADC10CLK. El tiempo total es el tiempo de muestreo tmuestreo + sincronización. La transición de alto a bajo del bit SAMPCON comienza la conversión de analógico a digital, la cual requiere de 13 ciclos ADC10CLK como se muestra en la figura 4.2

Figura 4.2 tiempo de muestreo Consideraciones de temporización Cuando el bit SAMPCON =0 todas las entradas están en alta impedancia. Cuando SAMPCON =1, la entrada seleccionada Ax puede ser modelada como un filtro pasa bajo RC durante el tiempo de muestreo tmuestreo, como se muestra en la figura 4.3. La resistencia de entrada del multiplexor interno RI(2K ohms max)en serie con un capacitor de 27 pf, es observado por la fuente. El voltaje del capacitor CI se debe cargar dentro del valor LSB de la fuente de voltaje VS para una conversión correcta de 10 bits.

35

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Usada para calcular el tiempo de muestreo mínimo para una conversión de 10 bits.

Sustituyendo los valores para RI y CI, La ecuación queda como: tsample >(RS+2k) x 7.625 x 27pF Por ejemplo, si RS es 10K, tmuestreo debe ser mayor que 2.47 us Cuando el buffer de referencia se usa en modo burst, el tiempo de muestreo debe ser mayor que el tiempo calculado y puesto en el buffer tREFBURST.

Por ejemplo, si VRef es 1.5V y RS es 10 K, tmuestreo debe ser mayor que 2.47 us cuando ADCR10=0 , o 2.5 us cuando ADCR10=1. Ver Hojas de datos de especificaciones del dispositivo para consultar los parámetros Para calcular el tiempo de establecimiento del buffer cuando se utiliza una referencia externa, la formula es:

Donde: SR Buffer slew rate (~1 us/V cuando ADC10SR = 0 y ~2 us/V cuando ADC10SR = 1) Vref: Referencia externa de voltaje

Modos de conversión

36

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

El ADC10 tiene 4 modos de operación seleccionables mediante los bits CONSEQx como se muestra en la tabla

Modo de conversión de un solo canal una conversión Un solo canal seleccionado por INCHx es muestreado y convertido una vez. El resultado del ADC es escrito en ADC10MEM. La figura x muestra el diagrama de flujo del modo de un solo canal una conversión. Cuando el ADC10SC dispara una conversión, conversiones sucesivas pueden ser disparadas por el bit ADC10SC. Cuando se utiliza alguna otra fuente de disparo, ENC debe invertirse entre cada conversión.

37

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Modo de secuencia de canales Una secuencia de canales es muestreada y convertida una sola vez. La secuencia comienza con el canal seleccionado por INCHx y se decrementa a el canal A0. Cada resultado ADC es escrito en ADC10MEM. La secuencia para después de la conversión del canal A0. La figura x muestra el modo de secuencia de canales. Cuando el ADC10SC dispara la secuencia, otras secuencias sucesivas pueden ser disparadas con el bit ADC10SC. Cuando se utiliza alguna otra fuente de disparo, ENC debe invertirse entre cada secuencia.

38

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Modo de un canal conversiones infinitas Un canal es seleccionado por INCHx muestreado y convertido de forma continua. Cada resultado del ADC es escrito en el ADC10MEM la figura x muestra el modo de un solo canal conversiones infinitas.

39

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Modo de repetición de secuencia de canales. Una secuencia de de canales es muestreada y convertida repetidamente. La secuencia comienza con el canal seleccionado por INCHx y se decrementa hasta el canal A0. Cada resultado del ADC es escrito en ADC10MEM. La secuencia termina después de la conversión de A0, y en la siguiente señal de disparo reinicia la secuencia. La figura x muestra el modo de repetición de secuencia de canales.

40

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Utilizando el bit MSC Para configurar el convertidor para realizar conversiones sucesivas automáticamente y lo más rápido posible, una función de múltiple muestreo y conversión está disponible cuando MSC=1 y CONSEQx > 0 el primer flanco de subida de la señal SHI dispara la primera conversión. Conversiones sucesivas son disparadas automáticamente tan pronto como la conversión anterior termina. Los flancos de subida adicionales en SHI son ignorados hasta que la secuencia es completada en el modo de secuencia simple o hasta que el bit ENC es invertido en el modo de repetición de un canal o modo de repetición de secuencias. La función del bit ENC es incambiable cuando de usa el bit MSC.

Deteniendo conversiones

41

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Para detener la actividad del ADC10 se depende del modo de operación. Las formas recomendadas de detener una conversión activa o secuencia de conversiones son: Poner en cero el bit ENC en modo de un canal una conversión detiene la conversión inmediatamente y el resultado se vuelve impredecible. Para un resultado correcto interrogue al bit ADC10BUSY hasta que se borre antes de borrar ENC. Poniendo a cero ENC durante una operación de un solo canal con conversiones repetidas detiene el convertidor y termina la conversión actual.

Poniendo a cero ENC durante una secuencia o secuencia repetida detiene el convertidor y termina la secuencia. Cualquier modo de conversión puede ser detenido inmediatamente por poner CONSEQX=0 Y poniendo a cero el bit ENC. Los datos son inválidos. Controlador de transferencia de datos del ADC10 El ADC10 incluye un controlador de transferencia de datos (DTC) que automáticamente transfiere los resultados de la conversión desde el ADC10MEM a otras localidades de memoria. El DTC se habilita al poner el registro ADC10DTC1 con un valor distinto de cero. Cuando el DTC se habilita, cada vez que el ADC10 completa una conversión y carga el resultado en el ADC10MEM se inicia la transferencia del dato. No se requiere de programación para manejar el ADC10 hasta que el total de las conversiones se hayan transferido. Cada transferencia DTC requiere de un ciclo de reloj MCLK. Para evitar competencia por el bus el CPU se detiene por un ciclo MCLK para poder realizar la transferencia. La transferencia no puede ser iniciada mientras el ADC10 este ocupado. El programa debe asegurar que no exista actividad de conversión o secuencia cuando se configura el DTC. ; Testeo de actividad del ADC10 BIC.W #ENC,&ADC10CTL0 ; busy_test BIT.W #BUSY,&ADC10CTL1 ; JNZ busy_test ; MOV.W #xxxx,&ADC10SA ; dirección inicial de memoria MOV.B #xx,&ADC10DTC1 ; Numero de datos a transferir ; continue setup

Modo de transferencia de un bloque Para seleccionar el modo de transferencia de un bloque ponga a cero ADC10TB. El valor n en ADC10TC1 define el número de transferencias totales por bloque. El bloque comienza en la dirección cargada en el registro ADC10SA, y termina en la dirección definida como ADC10SA+2n-2. EL modo de transferencia de un bloque se muestra en la figura 17.9

42

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Figura 17.9 modo de transferencia de un bloque. El apuntador de dirección interno es ADC10SA y el contador de transferencia interno es equivalente a n. El apuntador y el contador internos no son visibles por programa. El DTC transfiere valores de palabra del ADC10MEM a la dirección apuntada por el ADC10SA. Después de cada transferencia DTC, el apuntador de direcciones interno es incrementado en 2 y el contador decrementado en uno. La transferencia DTC continúa con cada carga del ADC10MEM, hasta que el contador de transferencias interno llega a cero. No habrá más transferencias DTC hasta que se vuelva a escribir en el registro ADC10SA. Cuando se utilice el DTC en el modo de un bloque, La bandera ADC10IFG se pondrá en uno únicamente cuando el bloque completo haya sido transferido. La figura 17-10 muestra un diagrama de estados del modo de un bloque.

43

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Figura 17.10 transferencia de un bloque

Modo de transferencia de 2 bloques Para seleccionar el modo de transferencia de 2 bloques el bit ADC10TB debe estar en uno. El valor n en ADC10TC1 define el numero de transferencias para un bloque, La dirección del primer bloque esta definida por el valor guardado en ADC10SA, el primer bloque termina en ADC10SA+2n-2. El segundo bloque está definido de SA+2n a SA+4n-2. El modo de transferencia de 2 bloques se muestra en 17-11.

44

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Figura 17.11 Modo de transferencia de 2 bloques El apuntador interno inicialmente tiene la dirección cargada en ADC10SA y el contador interno de transferencias es inicialmente equivalente a ‘n’. El apuntador interno y el contador no son visibles al programador. El DTC transfiere la el valor de palabra almacenado en el ADC10MEM a la dirección apuntada por ADC10SA. Después de cada transferencia DTC el apuntador interno es incrementado por 2 y en contador interno de transferencias es decrementado en uno. Las transferencias DTC continúan con cada carga del ADC10MEM, hasta que el contador interno de transferencias llega a cero. En este punto el bloque uno está lleno y las banderas ADC10IFG y ADC10B1 están en uno. El usuario puede probar la bandera ADC10B1 para determinar si el bloque uno está lleno. El DTC continúa con el bloque 2. El contador interno de transferencias automáticamente se recarga con el valor ‘n’. En la siguiente carga del ADC10MEM, el DTC comienza transfiriendo los resultados al bloque 2. Después de que las transferencias han completado el bloque 2 la bandera ADC10B1 se borra y ADC10IFG se pone en uno. El usuario puede checar que ADC10B1 está borrado y así determinar que el bloque 2 está lleno. La figura 17-12 muestra el diagrama de estados del modo de 2 bloques.

45

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Figura 17-2 Estados del modo de transferencia de 2 bloques Transferencia continua EL modo de transferencia continua se selecciona si el bit ADC10CT está en uno. El DTC no se detendrá después del bloque uno (modo un bloque) o después del segundo bloque (modo de 2 bloques).El apuntador interno de direcciones y el contador de transferencias se ponen con los valores ADC10SA y n respectivamente. .Las transferencias continúan comenzando en el bloque 1si el bit ADC10CT está en cero, las transferencias DTC cesan después de completar las transferencias en el bloque uno (modo un bloque) o en el bloque 2 (modo de 2 bloques)

46

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Tiempo de transferencia de ciclo Para cada transferencia ADC10MEM, el DTC requiere 1 o 2 ciclos de reloj MCLK para sincronizar, uno para la transferencia actual (mientras la CPU está detenida) y un ciclo de espera de tiempo. Por el hecho de que el DTC utilice MCLK, su ciclo depende del modo de operación , el DTC utiliza el MCLK para cada transferencia sin habilitar el CPU. Si la fuente esta apagada, el DTC temporalmente restablece MCLK con el DCOCLK únicamente durante la transferencia. El CPU permanece apagado y después de la transferencia DTC, MCLK es nuevamente apagado. El ciclo máximo DTC para todos los modos de operación se muestra en la tabla 17-2 Tabla 17−2.Ciclo Máximo de tiempo DTC

17.2.10 Interrupciones ADC10 Una interrupción y un vector de interrupción son asociados con el ADC10 como muestra la figura 17-17. Cuando el DTC no es utilizado (ADC10DTC1=0) ADC10IFG es uno cuando la conversión se carga en el ADC10MEM. Cuando se usa el DTC (ADC10DTC1>0) los bits ADC10IE y GIE se ponen en 1 , entonces la bandera ADC10IFG genera una petición de interrupción . La bandera ADC10IFG automáticamente vuelve a cero cuando se atiende la petición de servicio de interrupción ó puede ser borrada por programa.

Figura 17.2.10 Sistema de interrupciones del ADC10

47

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

17.3 Registros del ADC10 A continuación se muestran los registros del ADC10

ADC10CTL0, ADC10 Registro de Control 0

SREFx

Bits Selecciona la referencia 15-13 000 VR+ = VCC and VR− = VSS 001 VR+ = VREF+ and VR− = VSS 010 VR+ = VeREF+ and VR− = VSS 011 VR+ = Buffered VeREF+ and VR− = VSS 100 VR+ = VCC and VR− = VREF−/ VeREF− 101 VR+ = VREF+ and VR− = VREF−/ VeREF− 110 VR+ = VeREF+ and VR− = VREF−/ VeREF− 111 VR+ = Buffered VeREF+ and VR− = VREF−/ VeREF−

ADC10 SHTx

Bits 12-11 00 01 10 11

ADC10 tiempo de muestreo y retención 4 x ADC10CLKs 8 x ADC10CLKs 16 x ADC10CLKs 64 x ADC10CLKs

48

Microcontrolador Msp430 ADC10SR

REFBURST

IPN ESIME ZACATENCO

Bit 10 ADC10 Periodo de muestreo Este bit selecciona la referencia del buffer maneja la capacidad para el máximo periodo de muestreo. Poner en uno el bit ADC10SR reduce el consumo de corriente del buffer de referencia 0 1

REFOUT

M. en C. Enrique López Ortega

El buffer de referencia soporta mas de 200 ksps El buffer de referencia soporta arriba de 50 ksps

Bit 9 Salida de referencia 0 Salida de referencia apagada 1 Salida de referencia encendida Bit 8 Burst de referencia. 0 Buffer de referencia encendido continuamente 1 Buffer de referencia apagado continuamente

MSC

Bit 7 Muestreo y conversión múltiple Valido únicamente para los modos de secuencia o repetición. 0 El muestreo requiere de flanco ascendente de la señal SHI para disparar cada muestreo y conversión. 1 EL primer flanco ascendente dispara el temporizador de muestreo pero los siguientes muestreos y conversiones se desarrollan automáticamente tan pronto como la conversión anterior se complete.

REF2_5V

Bit 6 Voltaje del generador de referencia. EL BIT REFON debe de estar en uno. 0 1.5 V 1 2.5 V Bit 5 Encendido del generador de referencia 0 Referencia apagada 1 Referencia encendida

REFON

ADC10ON

ADC10IE

Bit 4 Encendido del ADC10 0 ADC10 apagado 1 ADC10 encendido Bit 3 ADC10 habilitación de interrupción 0 Interrupción deshabilitada 1 Interrupción Habilitada

ADC10IFG Bit 2 ADC10 Bandera de Interrupción. Este bit se pone en uno si ADC10MEM se carga con una conversión. Automáticamente se borra cuando es aceptada la petición de servicio de interrupción, o puede ser borrada por programa. Cuando se utilice el DTC esta bandera se pone en uno cuando el bloque se transfiere completamente. 0 No hay interrupción pendiente 1 Interrupción pendiente ENC

ADC10SC

Bit 1 Habilitar la conversión 0 ADC10 deshabilitado 1 ADC10 habilitado Bit 0 Inicio de conversión Inicio de muestreo y retención controlados por programa. Los bits ADC10SC y ENC deben de ponerse en uno juntos en una sola instrucción. El bit ADC10SC se borra automáticamente. 0 1

No inicio de muestreo y conversión Inicio de muestreo y conversión

49

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

ADC10CTL1, Registro de control 1 ADC10

INCHx Bits15-12 Selección del canal de entrada. Esos bits selecciona el canal a convertir para una conversión simple o el canal más alto de la secuencia de conversiones. 0000 A0 0001 A1 0010 A2 0011 A3 0100 A4 0101 A5 0110 A6 0111 A7 1000 VeREF+ 1001 VREF−/VeREF− 1010 Temperature sensor 1011 (VCC – VSS) / 2 1100 (VCC – VSS) / 2, A12 on MSP430x22x4 devices 1101 (VCC – VSS) / 2, A13 on MSP430x22x4 devices 1110 (VCC – VSS) / 2, A14 on MSP430x22x4 devices 1111 (VCC – VSS) / 2, A15 on MSP430x22x4 devices SHSx Bits11-10 Selección de fuente de muestreo y retención 00 ADC10SC bit 01 Timer_A.OUT1 10 Timer_A.OUT0 11 Timer_A.OUT2 (Timer_A.OUT1 en dispositivos MSP43020x2 ) ADC10DF Bit 9 ADC10 formato de datos 0 Binario natural 1 Complemento a 2’s ISSH

Bit 8 Señal invertida de muestreo y retención 0 The La señal muestreada no está invertida 1 The La señal de entrada está invertida . ADC10DIVx Bits 7-5 Divisor del reloj del ADC10

50

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

000 /1 001 /2 010 /3 011 /4 100 /5 101 /6 110 /7 111 /8

ADC10SSELx

Bits4-3 ADC10 Selección de fuente de reloj 00 ADC10OSC 01 ACLK 10 MCLK 11 SMCLK CONSEQx Bits2-1 Selección de modo de secuencia de conversión. 00 Conversión simple un solo canal 01 Secuencia de canales 10 Un solo canal con repetición 11 Secuencia de canales con repetición ADC1m0 BUSY Bit 0 ADC10 ocupado. Este bit indica que esta activo una de muestreo y retención 0 No hay operación activa 1 Secuencia de muestreo o retención activa. ADC10AE0, Entrada (analógica) Registro de control de habilitación 0

ADC10AE0x Bits7-0ADC10 Habilitación analógica. Esos bits habilitan la correspondiente terminal para entrada analógica. BIT0 corresponde a A0, BIT1 corresponde a A1, etc. 0 Entrada analógica deshabilitada 1 Entrada analógica habilitada ADC10AE1, Analog (Input) Enable Control Register 1 (MSP430x22x4 only)

ADC10AE1x Bits 7-4 ADC10 Habilitación analógica. Esos bits habilitan la terminal correspondiente para entrada analógica. BIT4 corresponde a A12,BIT5 corresponde a A13, BIT6 corresponde a A14 y BIT7 corresponde a A15. 0 Entrada analógica deshabilitada 1 Entrada analogical habilitada

51

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

ADC10MEM, Conversion-Memory Register, Binary Format

Resultado de conversión Bits15-0 La conversión de 10 bits está justificada a la derecha, en formato binario natural Le bit 9 es el MSB, Los bits 15-10 siempre son cero. ADC10MEM, Registro de conversion –Memoria formato complement a , 2’s

Resultado de conversión Bits 15-0 La conversión de 10 bits está justificada a la izquierda en formato complemento a 2’s. EL Bit 15 es el MSB, los bits 5-0 siempre son cero.

ADC10DTC0, Registro de control de transferencia de datos 0

52

Microcontrolador Msp430

M. en C. Enrique López Ortega

Reservados

Bits7-4 Reservados. Siempre se lee 0.

ADC10TB .

Bit 3 ADC10 modo de 2 bloques

IPN ESIME ZACATENCO

0 Modo de transferencia de un bloque 1 Modo de transferencia de 2 bloques ADC10CT

Bit 2 ADC10 Transferencia continua. 0 La transferencia de datos se detiene cuando el bloque(Modo de un bloque) o dos bloques(modo de 2 bloques)han sido completados. 1 Transferencia continúa de datos. La operación del DTC se detiene únicamente si ADC10CT se borra, ó si ADC10SA es escrito.

ADC10B1 Bit 1 ADC10 block one. This bit indicates for two-block mode which block is filled with ADC10 conversion results. ADC10B1 is valid only after ADC10IFG has been set the first time during DTC operation. ADC10TB must also be set 0 Block 2 is filled 1 Block 1 is filled ADC10FETCH Bit 0 Este bit normalmente debe estar en cero. ADC10DTC1, Data Transfer Control Register 1

Transferencias DTC

Bits 7-0 Transferencias DTC. Esos bits definen el número de transferencias en cada bloque. 0 DTC está deshabilitado 01h-0FFh Número de transferencias por bloque.

ADC10SA, Dirección inicial para el registro de transferencias

53

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

;********************************************************************* ;MSP430F20x2 Demo - ADC10, DTC muestrea 32x, AVcc, un canal con ;repetición, DCO ; Descripción: Utiliza DTC muestrea A1, 32 veces con referencia de AVcc. ;Software: Escribe el ADC10SC para disparar al grupo de muestreo en ;el prog. Principal el MSP430 espera en LPM0 para bajar el consumo; hasta que se completa la conversión del grupo, ADC10_ISR(DTC) forzará ;a salir de. El tiempo de muestreo del oscilador interno será de(16x) ;y de conversión de (13x). DTC ;t transferencia de conversión code RAM 200h 240h. P1.0 uno al inicio de la conversión, cero al finalizar. ; ; MSP430F20x2 ; ----------------; /|\ | |- XIN ; | | | ; ---|RST |- XOUT ; | | ; --> |P1.1/A1 P1.0|-->LED ;*********************************************************************#inc lude "msp430x20x2.h" ;--------------------------------------------------------------------RSEG CSTACK ; Define Segmento de Pila ;--------------------------------------------------------------------RSEG CODE ; Ensambla en memoria Flash ;--------------------------------------------------------------------RESET mov.w #SFE(CSTACK),SP ; Inicializa Apuntador de Pila StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT SetupADC10 mov.w #CONSEQ_2+INCH_1,&ADC10CTL1 ; Repetición un ch, A1 mov.w #ADC10SHT_2+MSC+ADC10ON+ADC10IE,&ADC10CTL0 bis.b #BIT1,&ADC10AE0 ; P1.1 ADC option select mov.b #32,&ADC10DTC1 ; 32 conversiones SetupP1 bis.b #BIT0,&P1DIR ; P1.0 output ; Mainloop bic.w #ENC,&ADC10CTL0 ; busy_ test bit #BUSY,&ADC10CTL1 ; ADC10 inactivo? jnz busy_test ; mov.w #0200h,&ADC10SA ; Data buffer start bis.b #BIT0,&P1OUT ; P1.0 = 1

54

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

bis.w bis.w bic.b jmp

#ENC+ADC10SC,&ADC10CTL0 ; Inicio de conversión #CPUOFF+GIE,SR ; LPM0, ADC10_ISR will force exit #001h,&P1OUT ; P1.0 = 0 Mainloop ; Again ; ;--------------------------------------------------------------------ADC10_ISR; Salir de LPM0 en reti ;--------------------------------------------------------------------bic.w #CPUOFF,0(SP) ; Salir LPM0 en reti reti ; ; ;--------------------------------------------------------------------; Interrupt Vectors ;--------------------------------------------------------------------ORG ADC10_VECTOR ; ADC10 Vector DW ADC10_ISR ORG RESET_VECTOR ; POR, ext. Reset DW RESET END Memoria flash

5.1 Introducción a la memoria Flash La memoria flash del MSP430 es programable y direccionable en bits bytes y words. El módulo de memoria flash tiene un controlador integrado que controla las operaciones de programación y el borrado. El controlador tiene 3 registros, un generador de tiempo y un generador de voltaje que provee de los voltajes de programación y borrado. Las características de la memoria del MSP430 Incluye: Generación interno de voltaje de programación. Programable en bytes y words Operación de ultra-bajo consumo Borrado por segmentos y borrado masivo El diagrama de bloques de la memoria flash y el controlador se muestra en la figura 5-1

55

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Figura 5-1 diagrama de bloques de la memoria flash y su controlador. Nota: Voltaje mínimo VCC durante escritura a la Flash o borrado El voltaje VCC mínimo durante escritura a la flash o borrado a la misma es 2.2V SI VCC cae por debajo durante escritura o borrado, el resultado de la escritura o borrado es impredecible.

5.2 Segmentación de la memoria flash

La memoria flash del MSP430 esta particionada en segmentos. Se pueden escribir bits, bytes o words en la flash, pero el segmento es la unidad más pequeña que puede ser borrada. La memoria flash esta particionada en sección principal y sección de información no existe diferencia alguna en su operación, la diferencia son el tamaño del segmento y las direcciones físicas. La memoria de información tiene 4 segmentos de 64 bytes. La memoria principal tiene 2 o mas segmentos de 512 bytes, refiérase a las hojas de especificaciones para ver el tamaño exacto del dispositivo así como sus direcciones. Los segmentos a su vez están divididos en bloques de tamaño de 64 bytes comenzando en la dirección 0xx00h, 0xx40h, 0xx80h o 0xxc0h y terminan en 0xx3Fh, 0xx7F, 0xxBFh o 0xxFFh

56

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

La figura 5-2 muestra la segmentación de la flash utilizando como ejemplo una flash de 4KB que tiene 8 segmentos en memoria principal y 4 segmentos de información.

Figura 5-2 ejemplo de una memoria flash de 4KB. Los segmentos de la memoria de información y los bloques de los segmentos de la memoria principal son de 64 bytes.

5.2.1 Segmento A El segmento A de la memoria de información esta asegurada separadamente de los otros segmentos con el bit LOCKA, cuando LOCKA =1, el segmento A no puede ser escrito o borrado y toda la información esta protegida durante el borrado masivo. Los segmentos B, C y D siempre serán borrados con un borrado de segmento independientemente del estado del bit LOCKA. El estado del bit LOCKA es invertido cuando se escribe un uno en el, escribir un cero en LOCKA no tiene efecto alguno. Esto permite que las rutinas de programación existentes en la flash utilizarse sin cambio alguno. ; Desproteje Segmento A BIT #LOCKA,&FCTL3 ; Test LOCKA JZ SEGA_UNLOCKED ; Continua desprotegido? MOV #FWKEY+LOCKA,&FCTL3 ; No, desprotege Segmento A

57

Microcontrolador Msp430

M. en C. Enrique López Ortega

SEGA_UNLOCKED ; Segmento A esta desprotegido

IPN ESIME ZACATENCO

; Si, continua

; Proteje Segmento A BIT #LOCKA,&FCTL3 ; Test LOCKA JNZ SEGALOCKED ; Continua protegido? MOV #FWKEY+LOCKA,&FCTL3 ; No, proteje el Segmento A SEGA_LOCKED ; Segmento A esta protegido

; Si , continua

5.3 Operación de la memoria Flash La memoria flash inicialmente se encuentra en modo de lectura, en este modo la memoria no será borrada o escrita, el generador de tiempo y el generador de voltaje están apagados y la memoria opera de forma idéntica a una ROM. La memoria flash del MSP430 es programable en sistema es decir no requiere de voltajes externos de programación. La CPU puede programar su propia memoria flash. Los modos de escritura/borrado de la flash se seleccionan a través de los bits BLKWRT, WRT , MERAS y ERASE y son: Escritura byte/Word Escritura de bloque Borrado de segmento Borrado masivo (todos los segmentos de la memoria principal) Borrado total (todos los segmentos) Leer o escribir la memoria flash mientras está siendo programada o borrada esta prohibido. Si lse requiere ejecución de la CPU durante la escritura o el borrado, el código a ser ejecutado debe de estar en RAM . Cualquier actualización puede ser iniciada desde flash o RAM. 5.3.1 Generador de tiempo de la memoria Flash Las operaciones de escritura y borrado están controladas por el generador de tiempo de la flash que se muestra en la figura 5-3. La frecuencia de operación del generador de tiempo, fFTG, debe de estar en el rango de 257 khz a 476 khz (vea especificaciones del dispositivo)

Figura 5−3. Diagrama a bloques de Generador de tiempo de la memoria Flash

58

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Selección de la fuente de reloj del generador de tiempo de la Flash El generador de tiempo de la flahs puede alimentarse desde ACLK, SMCLK, ó MCLK. A su vez la fuente seleccionada debe ser divida usando los bits FNx para obtener los requerimientos de frecuencia para fFTG. Si la frecuencia fFTG se desvía de las especificaciones durante la operación de escritura o borrado , el resultado de los mismos se vuelve impredecible, y quizás se este dañando la memoria flash. Si se detecta una falla de reloj durante la operación de escritura o borrado la operación es abortada, la bandera de falla FAIL es puesta a uno y el resultado de la operación es impredecible. Mientras la operación de escritura o borrado esta activa la fuente de reloj no debe de ser deshabilitada por poner al MSP430 en modo de bajo consumo. La fuente de reloj seleccionada deberá permanecer activa hasta que la operación sea completada antes de deshabilitar el reloj fuente. 5.3.2 Borrado de la memoria Flash El nivel lógico de borrado de la memoria flash es uno. Cada bit puede ser programado de uno a cero, pero para programar de cero a uno se requiere de un ciclo de borrado. La menor cantidad de flash que puede ser borrada es el segmento. Existen 3 modos de borrado que se pueden seleccionar mediante los bits MERAS Y ERASE observe la tabla 5-1.

Tabla 5−1.Modos de borrado MERAS ERASE Modo de borrado

Un borrado es iniciado por un intento de escritura en una dirección que este dentro del rango a ser borrado. El intento de escritura inicia el generador de tiempo de la flash y la operación de borrado. La figura 5-4 muestra un ciclo de borrado. El bit de ocupado se pone en uno inmediatamente después del intento de escritura y permanece así durante todo el ciclo de borrado. BUSY, MERAS, y ERASE son automáticamente limpiados cuando el ciclo se completa. El tiempo de ciclo de borrado no es dependiente de la cantidad de memoria presente en el dispositivo. Los tiempos de ciclo de borrado es equivalente para todos los MSP430F2XX..

59

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Figura 5-4 tiempos de ciclo de borrado

Un intento de escritura en una dirección que no esta en el rango de la memoria a ser borrada no iniciara el ciclo de borrado, no afecta a la memoria flash y no es señalizada por bandera. Esta escritura errante es ignorada. Iniciando un borrado desde la memoria flash Un ciclo de borrado puede ser iniciado desde la memoria flash o desde la RAM. Cuando una operación de borrado de segmento de flash es iniciado desde la propia flash, toda la temporización es controlada por el controlador de flash, y el CPU es detenido mientras el ciclo de borrado se completa. Después de completarse el ciclo de borrado, la CPU continúa con la ejecución con la instrucción siguiente al intento de escritura de la flash. Cuando se inicia un ciclo de borrado dentro de la flash, es posible haber borrado el código necesario para la ejecución después del comando de borrado. Si esto ocurre, la ejecución de la CPU se vuelve impredecible después del ciclo de borrado. The flow to initiate an erase from flash is shown in Figure 5−5.

Figura 5-5 ciclo de borrado desde la propia flash

60

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

; Borrado de segmento desde flash. 514 kHz < SMCLK < 952 kHz ; Asume ACCVIE = NMIIE = OFIE = 0. MOV #WDTPW+WDTHOLD,&WDTCTL ; Deshabilita Perro Guardian MOV #FWKEY+FSSEL1+FN0,&FCTL2 ; SMCLK/2 MOV #FWKE Y,&FCTL3 ; Clear LOCK MOV #FWKEY+ERASE,&FCTL1 ; Habilita el borrado de segmento CLR &0FC10h ; Intento de escritura, borra S1 MOV #FWKEY+LOCK,&FCTL3 ; Hecho, set LOCK ... ; habilitar WDT?

Iniciando borrado desde la RAM Un ciclo de borrado puede ser iniciado desde RAM. En este caso, la CPU no es detenida y puede continuar ejecutando código desde la RAM. El bit BUSY debe ser interrogado para determinar el fin del ciclo de borrado antes que la CPU pueda acceder a cualquier dirección de flash de nuevo. Si ocurre un acceso a la flash mientras el bit de BUSY = 1, esto es una violación de acceso la bandera ACCVIFG se pondrá en uno y el resultado del borrado será impredecible. El flujo de inicialización de borrado desde RAM se observa en la figura 5−6.

; Borrado de segmento desde RAM. 514 kHz < SMCLK < 952 kHz

61

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

; Asume ACCVIE = NMIIE = OFIE = 0. MOV #WDTPW+WDTHOLD,&WDTCTL L1 BIT #BUSY,&FCTL3 JNZ L1 ; Loop while busy MOV #FWKEY+FSSEL1+FN0,&FCTL2 MOV #FWKEY,&FCTL3 ; Clear LOCK MOV #FWKEY+ERASE,&FCTL1 CLR &0FC10h L2 BIT #BUSY,&FCTL3 JNZ L2 MOV #FWKEY+LOCK,&FCTL3 ...

; Deshabilita WDT ; Prueba de bandera BUSY ; SMCLK/2 ; Habilita borrado erase ; Escritura falsa, borra S1 ; Prueba bandera BUSY ; espera mientras busy ; Hecho, set LOCK ; Re-habilita WDT?

5.3.3 Escritura en la memoria Flash Los modos de escritura se seleccionan mediante los bits WRT y BLKWRT bits, se muestra el listado en la tabla 5.1 Tabla 5−1.

Ambos modos de escritura utilizan una secuencia de instrucciones de escritura individual, pero usando la escritura de block es aproximadamente el doble de rápido que el modo byte/Word, porque el generador de voltajes permanece prendido para la escritura completa del bloque. Cualquier instrucción que modifique el destino puede ser usada para modificar una localidad de flash en cualquier modo byte/Word o escritura de bloque. Una palabra de flash (byte bajo + alto) no debe ser escrita mas de dos veces entre borrados. De otra forma, puede ocurrir daño. El bit de BUSY es uno mientras una operación de escritura está activa y borrado cuando la operación se completa. Si la operación de escritura comienza desde la RAM , la CPU no debe tener acceso a la flash mientras BUSY=1. De otra forma ocurre una violación de acceso la bandera ACCVIFG=1 y la escritura de la flash se vuelva impredecible.

Byte/Word Escritura Una operación de escritura de byte/word puede ser iniciada desde la memoria flash o desde la RAM. Cuando es iniciada desde la memoria flash, toda la temporización es controlada por el controlador de flash, y la CPU es detenida mientras se completa la escritura. Después de completarse la escritura, la CPU reasume la ejecución de código con la siguiente instrucción a la escritura. El tiempo de escritura de byte/Word se muestra en la figura 5-7. Figura 5−7. Tiempo de escritura de Byte/Word

62

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Cuando la escritura de byte/word se ejecuta desde la RAM, la CPU continúa ejecutando el código desde RAM. El bit BUSY debe ser cero antes que la CPU accese la flash , de lo contrario ocurre una violación a la RAM, La bandera ACCVIFG se pone en uno y el resultado de la operación de escritura es impredecible. En el modo byte/Word, el voltaje de programación generado internamente es aplicado completamente al bloque de 64 bytes cada vez que un byte o una palabra es escrita, por 27 de 30 fFTG ciclos. Con cada escritura de byte o de Word, el monto de tiempo del bloque está sujeto a los voltajes de programación acumulados. El tiempo de programación acumulativo, tCPT, no debe ser excedido para cualquier bloque. Si el tiempo de programación acumulativo se alcanza, el bloque debe ser borrado antes de programar cualquier otro byte en cualquier dirección dentro del bloque. Ver hojas de especificaciones del dispositivo específico. Iniciando escritura de Byte/Word desde la memoria Flash El diagrama de flujo para iniciar una escritura de byte/Word se muestra en la figura 5-8.

Figura 5−8. Iniciando la escritura Byte/Word Write desde la memoria Flash ; Escritura Byte/word desde flash. 514 kHz < SMCLK < 952 kHz

63

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

; Asume 0FF1Eh esta borrado ; Asume ACCVIE = NMIIE = OFIE = 0. MOV #WDTPW+WDTHOLD,&WDTCTL ; Deshabilita WDT MOV #FWKEY+FSSEL1+FN0,&FCTL2 ; SMCLK/2 MOV #FWKEY,&FCTL3 ; Quitar protección MOV #FWKEY+WRT,&FCTL1 ; Habilitar escritura MOV #0123h,&0FF1Eh ; 0123h −> 0FF1Eh MOV #FWKEY,&FCTL1 ; Hecho. Clear WRT MOV #FWKEY+LOCK,&FCTL3 ; Poner Protección Set LOCK ... ; Re-enable WDT? Iniciando la escritura de Byte/Word desde RAM Figura 5−9. Iniciando la escritura Byte/Word desde RAM

; Escritura de Byte/word desde la RAM. 514 kHz < SMCLK < 952 kHz ; Asume 0FF1Eh está borrado ; Asume ACCVIE = NMIIE = OFIE = 0.

L1

MOV #WDTPW+WDTHOLD,&WDTCTL ; Deshabilita WDT BIT #BUSY,&FCTL3 ; Checar Bandera BUSY JNZ L1 ; Espera mientras este ocupado MOV #FWKEY+FSSEL1+FN0,&FCTL2 ; SMCLK/2

64

Microcontrolador Msp430

L2

M. en C. Enrique López Ortega

MOV #FWKEY,&FCTL3 MOV #FWKEY+WRT,&FCTL1 MOV #0123h,&0FF1Eh BIT #BUSY,&FCTL3 JNZ L2 MOV #FWKEY,&FCTL1 MOV #FWKEY+LOCK,&FCTL3 ...

IPN ESIME ZACATENCO

; Quita aseguramiento ; Habilita escritura ; 0123h −> 0FF1Eh ; Checa se esta ocupado BUSY ; Espera mientras esta ocupado ; Borrar escritura WRT ; Asegura LOCK ; Re-habilitar WDT?

Escritura de Bloque La escritura de bloque puede ser utilizada para acelerar el proceso de escritura de la flash, cuando se requieren programar bytes o words secuenciales. El voltaje de programación de la flash permanece durante el ciclo de escritura del bloque de 64 bytes. El tiempo de programación acumulativa tCPT no debe ser excedido para ningún bloque durante su escritura. La escritura de bloque no puede ser iniciada dentro de la memoria flash. La escritura de bloque debe ser iniciada únicamente desde la memoria RAM. El bit BUSY permanece en uno durante la programación del bloque. El bit WAIT debe ser checado entre escrituras de byte o Word en el bloque. Cuando WAIT es uno, el próximo byte o Word dentro del bloque puede ser escrito. Cuando se escriben bloques sucesivos, el bit BLKWRT debe ser borrado después de que el bloque actual es completado. El bit BLKWRT puede ser uno iniciando la escritura del siguiente bloque después de que el tiempo de recuperación requerido por la flash dado por tend. BUSY es borrado después de que la escritura del bloque es completada indicando que puede ser escrito el siguiente bloque Figura 5-10

Operación de la memoria Flash Figura 5-10 Controlador de Memoria Flash

Diagrama de flujo de escritura de bloque

65

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

El diagrama de flujo de la escritura de bloque se muestra en la figura 5-8 Figura 5−11. Diagrama de flujo de la escritura de bloque

; Escritura de un bloque que comienza en la dirección 0F000h.

66

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

; Debe se ejecutado desde RAM, Asume que la flash ya esta borrada. ; 514 kHz < SMCLK < 952 kHz ; Asume que ACCVIE = NMIIE = OFIE = 0.

L1

L3

L4

...

MOV #32,R5 ; Usa contador de escritura MOV #0F000h,R6 ; Apuntador de escritura MOV #WDTPW+WDTHOLD,&WDTCTL ; Deshabilita WDT BIT #BUSY,&FCTL3 ; Checa BUSY JNZ L1 ; Loop while busy MOV #FWKEY+FSSEL1+FN0,&FCTL2 ; SMCLK/2 MOV #FWKEY,&FCTL3 ; Borra LOCK MOV #FWKEY+BLKWRT+WRT,&FCTL1 ; Habilita escritura de bloque L2 MOV Write_Value,0(R6) ; Escribe en localidad BIT #WAIT,&FCTL3 ; Checa bit WAIT JZ L3 ; Espera mientras WAIT=0 INCD R6 ; Apunta a la siguiente palabra DEC R5 ; Decrementa el contador de Escritura JNZ L2 ; Fin de bloque? MOV #FWKEY,&FCTL1 ; Borra WRT,BLKWRT BIT #BUSY,&FCTL3 ; Checa BUSY JNZ L4 ; Espera mientras busy=1 MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK ; Re-habilita WDT si se requiere

5.3.4 Acceso a la Memoria Flash durante escritura o borrado Cuando se inicia una escritura o borrado desde RAM y mientras BUSY =1, la CPU no debe leer o escribir en ninguna localidad de flash. De Otra forma ocurre una violación de acceso, CCVIFG se pone en uno y el resultado se vuelve impredecible. SI se intenta una escritura a la flash con WRT=0, la bandera de interrupción ACCVIFG se pone en uno y la memoria flash queda inafectada. Cuando una escritura de byte/Word es iniciada desde la flash, el controlador de flash regresa el código de operación 03fffH a la CPU en la siguiente instrucción. El código de operación 03FFFFh es la instrucción de salto JMP PC. Esto causa un LOOP en la CPU hasta que la operación en la flash termine. Cuando la operación termina y BUSY=0, el controlador de flash permite a la CPU buscar el código de operación correcto y continua la ejecución del programa. Las condiciones de acceso a la flash mientras BUSY=1 son listadas en la tabla 5−3.

Tabla 5−3. Acceso a la Flash mientras BUSY = 1

67

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Las interrupciones son automáticamente deshabilitadas durante la operación en la flash cuando EEI=0 y EEIEX=0 y en los MSP430X20xx donde EEI y EEIEX no están presentes. Después de completar la operación en la flash. Re-habilitadas. Cualquier interrupción que ocurra durante la operación tendrá su bandera asociada en uno, y se generará una petición de interrupción cuando se re-habiliten. Cuando EEIEX=1 y GIE=1, la interrupción abortará inmediatamente cualquier operación en la flash y la bandera FAIL se pondrá en uno. Cuando EEI=1,y GIE=1, y EEIEX=0 el borrado de segmento será interrumpido por una interrupción pendiente cada 32 fFTG ciclos o hasta que se complete. Durante el servicio de la interrupción el bit BUSY permanece en uno pero la memoria flash puede ser acezada por la CPU sin causar una violación de acceso. No se soportan las interrupciones anidadas. El perro guardián (en modo perro guardián) debe ser deshabilitado antes de un ciclo de borrado. Un reset abortará el borrado y el resultado se vuelve impredecible. Después de que el ciclo de borrado se ha completado, el perro puede ser re-habilitado.

5.3.5 Deteniendo un ciclo de lectura y escritura Cualquier operación de escritura o de lectura puede ser detenida antes de terminar normalmente por poner en uno el bit de salida de emergencia EMEX. Al hacer esto se detiene inmediatamente la operación activa e inmediatamente se detiene la operación del controlador de flash. Todas las operaciones de la flash cesan y la flash retorna al modo de lectura, y todos los bits en el registro FCTL1 son reseteados. El resultado de la operación intentada es impredecible. 5.3.6 Configurando y acensando el controlador de la memoria Flash El registro FCTLx es un registro de lectura/escritura protegido por contraseña de 16 bits. Cualquier acceso de lectura o escritura debe utilizar instrucciones de palabra y la escritura debe incluir la contraseña 0A5h el el byte superior. Cualquier escritura en FCTLx con un valor distinto que 0A5h en el byte superior es una violación de seguridad, se pone en uno la bandera KEYV y se dispara la CPU a un reset. Cualquier lectura de los registros FCTLx dará 096h en el byte alto. Cualquier escritura en FCTL1 durante una operación de borrado o escritura de byte o Word es una violación de acceso y pondrá ACCVIFG en uno. Se permite escribir en FCTL1 en modo de escritura de bloque cuando WAIT=1, pero hacerlo cuando WAIT=0 es una violación de acceso y se pondrá en uno ACCVIFG. Una escritura

68

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

en FCTL2 cuando BUSY=1 es una violación de acceso. Cualquier registro FCTL puede ser leído cuando BUSY=1 una lectura no causa violación de acceso. 5.3.7 Interrupciones del controlador de memoria Flash El controlador de flash tiene 2 fuentes de interrupción, KEYV y ACCIVFG. ACCVIFG se pone en uno cuando ocurre una violación de acceso. Cuando el bit ACCVIE es re habilitado después de una escritura o borrado de flash, la puesta en uno de ACCVIFG generara una petición de interrupción. ACCIVFG trabaja con el vector NMI así que no es necesario que GIE se ponga en uno para atender a ACCVIFG. ACCVIFG puede ser checada por programa para determinar si ocurrió una violación de acceso esta bandera debe borrarse por programa. La bandera de violación de llave KEYV, se pone en uno, cuando algún registro de control de la flash es escrito con el password incorrecto. Cuando esto ocurre se genera un PUC mandando a reset al microcontrolador. 5.3.8 Programación de la memoria flash Existen3 opciones de programación para los MSP430, todas las opciones soportan programación en sistema via JTAG via the Bootstrap Loader via solución personalizada 5.4 Registros de la memoria Flash Los registros de la memoria flash se listan en la tabla 5.4

Tabla 5.4 Registros de la memoria flash

69

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Figura 5.1 Registro de Control de la memoria Flash

FRKEY/FWKEY Bits15-8 FCTLx password. Siempre se lee como 096h. Se debe escribir 0A5h o se generará un reset PUC BLKWRT Bit 7 Modo de escritura de bloque. WRT debe de estar en uno para la escritura de bloque. BLKWRT se resetea automáticamente cuando EMEX es uno. 0 Escritura de bloque está apagado 1 Escritura de bloque encendido WRT Bit 6. Este bit es utilizado Para seleccionar algún modo de escritura.WRY es automáticamente puesto a cero. Cuando EMEX es uno. 0 Modo de escritura está apagado 1 Modo de escritura esta encendido Reservado Bit 5 Reservado. Siempre se lee como 0. EEIEX Bit 4 Habilitación de interrupción de emergencia. Poner este bit en uno habilita la interrupción que causa una salida de emergencia desde la operación de la flash cuando GIE =1. EEIEX se pone a cero automáticamente cuando EMEX es uno. 0 Interrupción de salida deshabilitada 1 Interrupción de salida habilitada EEI bits 3 Habilitación de interrupción de borrado. Poner este bit en uno permite que el borrado de segmento sea interrumpido por una petición de interrupción. Después de que la interrupción es servida el ciclo de borrado continúa. EEI es automáticamente borrado cuando EMEX es uno. 0 Interrupción durante borrado de segmento es deshabilitado 1 Interrupción durante borrado de segmento es habilitado MERASERASE Bit 2Bit 1 Mass erase and erase. Esos bits son usados juntos para seleccionar el modo de borrado. MERAS y ERASE son automáticamente borrados cuando EMEX es uno. MERAS ERASE Ciclo de borrado 0 0 No borrado 0 1 Borrado únicamente de un segmento individual 1 0 Borrado de todos los segmentos de la memoria principal 1 1 Borrado de toda la memoria principal y de información si LOCKA=0

70

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Solo segmentos maestros si LOCKA =1

Figura 5.2 Registro de Control 2 de la memoria Flash

FWKEYx Bits15-8 FCTLx password. Siempre se lee como 096h. Debe ser escrita como =0A5 o un PUC será generado FSSELx Bits7−6 Selección de fuente de reloj del controlador de flash 00 ACLK 01 MCLK 10 SMCLK 11 SMCLK FNx Bits5-0 Divisor del reloj del controlador de Flash. Esos 6 bits seleccionan la división para el controlador de reloj de la flash. El valor del divisor es FNx+1. Por ejemplo, Cuando FNx=00h, el divisor es uno. Cuando FNx=03Fh el divisor es 64.

Figura 5.3 Registro de Control 3 de la memoria Flash

FWKEYx Bits 15-8 FCTLx Password . Siempre se lee como 96h. Debe ser escrito =A5h o se generará un PUC. FAIL Bit 7 Falla de operación. Este bit es uno si la fuente de reloj fFTG falla, o si la operación de la flash es abortada desde una interrupción cuando EEIEX =1. La falla debe se borrada vía programa. 0 No failure 1 Failure

71

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

LOCKA Bit 6 Segmento A y candado de información. Escribir 1 en este bit. Escribir 0 no tiene efecto. 0 Segmento A sin candado y todas la memoria de información es borrado durante un borrado masivo. 1 Segmento A con candado y toda la memoria de información está protegida de borrado durante un borrado masivo. EMEX Bit 5 Salida de emergencia 0 No hay salida de emergencia 1 Salida de emergencia LOCK Bit 4 Protección. Este bit desprotege la memoria flash para escritura o lectura. El bit de LOCK se puede poner en uno en cualquier momento durante operaciones de lectura o escritura de byte/Word y la operación se completará normalmente. En el modo de escritura de bloque si el bit LOCK está en uno mientras BLKWRT=WAIT=1, entonces WAIT se borra y el modo termina normalmente. 0 No protegido 1 Protegido WAIT Bit 3 Espera. Indica que la memoria flash está siendo escrita 0 La memoria flash no está lista para la siguiente escritura byte/word 1 La memoria flash está lista para la siguiente escritura Word/byte ACCVIFG Bit 2 Bandera de interrupción de violación de acceso. ACCVIFG debe de estar en cero vía software. 0 No hay interrupción pendiente 1 Interrupción pendiente

KEYV Bit 1 Violación de llave de seguridad Este bit indica que fue escrita una clave FCTLx incorrecta en algún registro de control de la flahs y genera un PUC cuando está en uno. KEYV se debe borrar por software. 0 FCTLx password fue escrito correctamente 1 FCTLx password fue escrito incorrectamente BUSY Bit 0 Ocupado. Este bit indica el estado del generador de tiempo de la s flash 0 No ocupado 1 Ocupado

Figura 5.4 Registro de Habilitación de Interrupción la memoria Flash

Bits 7-6,4-0 Esos bits pueden ser usados por otros módulos. Ver hoja de datos del dispositivo específico. ACCVIE Bit 5 Habilitación de interrupción por violación de acceso a la memoria flash Este bit habilita la interrupción ACCVIFG. Porque otros bits en IE1 pueden ser usados por otros módulos se recomienda poner a cero o a uno este bit utilizando BIS.B o BIC.B 0 Interrupción no habilitada 1 Interrupción habilitada

72

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Interfaz serie universal La interfaz serie universal (USI) provee de comunicaciones SPI e I2C con un modulo de circuitería. Este capitulo describe ambos módulos implementados en los dispositivos MSP430x20xx. Introducción al USI El módulo USI provee de la funcionalidad básica ara soportar comunicaciones serie sincronías. En su forma más simple, se trata de un registro de corrimiento de 8 0 16 bits que puede ser usado para enviar datos, o cuando es combinado con un pequeño programa, puede implementarse comunicaciones serie, en adición, el USI incluye de forma ínter construida facilidades para implementar comunicaciones tipo SPI o I2C. El módulo USI incluye interrupciones para reducir el programa requerido para comunicaciones serie y mantener su capacidad de muy bajo consumo de energía. Las características del USI incluyen: Soporte SPI 3 alambres Soporte de I2C Longitud de datos variable Operación esclavo en LPM4 – No se requiere reloj externo Orden de datos de salida seleccionables MSB o LSB Detección de inicio y paro para I2C con control automático SCL Generación de reloj programable Control de polaridad y fase La figura x1 muestra el USI en nodo SPI y la fig. x2 muestra el USI en modo I2C

73

Microcontrolador Msp430

M. en C. Enrique López Ortega

Figura 6.1 USI en modo SPI

74

IPN ESIME ZACATENCO

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Figura 6-2 USI en modo I2C.

6.2 Operación del USI El modulo USI es un registro de corrimiento y un contador de bits que incluye lógica para soportar comunicaciones SPI e I2C. El registro de corrimiento USI, USISR es accesible directamente por programa y contiene los datos a ser transmitidos o los datos que han sido recibidos. El contador de bits contiene el número de bits muestreados y pone en uno la bandera de interrupción del USI USIIFG cuando el valor de contador USICNTx llega a cero por decremento o por escribirle cero directamente al registro USICNTx. Al escribirle USICNTX con un valor > 0 automáticamente se borra la bandera USIIFG cuando USIIFGCC=0, de otra forma USIIFG no se afecta. El USICNTx detiene su decremento cuando llega a cero. El contador no comienza de Nuevo en 0FFh al llegar a cero. El contador y el registro de corrimiento utilizan el mismo reloj en el flanco ascendente,

75

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

USICNTx se decrementa y el USISR muestrea el siguiente bit en la entrada. El registro conectado al registro de corrimiento retarda el cambio de la salida al flanco de bajada del reloj. Esto se puede hacer transparente al poner en uno el bit USIGE esto hará que salga inmediatamente el LSB o el MSB del USISR a la terminal SDO dependiendo del bit USILSB. 6.2.1 Inicialización del USI Mientras el programa del USI ponga a cero el bit USISWRST, es uno, las banderas USIIFG, USISTTIFG, USISTP y USIAL se mantendrán en su estado de reset. El registro USISR y USICNTx no trabajan y sus contenidos no son afectados. En el modo I2C, la línea SCL también es dejada en su estado ocioso por la circuitería del USI. Para activar la funcionalidad del puerto USI, los bits correspondientes USIPEx en el registro de control del USI deben ser puestos en uno. Esto seleccionara la función del USI para las terminales y mantendrá las funciones de los registros PxIN y PxIFG con esta característica las entradas del puerto pueden ser leídas, mediante al registro PxIN mediante programa y el flujo de datos entrantes pueden generar interrupciones en transiciones de datos. Esto se utiliza para generar interrupción en flanco de inicio. 6.2.2 Generación de reloj del USI El generador de reloj USI contiene un multiplexor de selección de reloj, un divisor y la habilidad de seleccionar la polaridad del reloj mostrado en los diagramas de bloques figuras 15-1 y figura 14-2 La fuente del reloj puede ser seleccionada a los relojes internos ACLK o SMCLK,de un reloj externo SCLK, así como las salidas de captura/comparación del temporizador A. Además es posible darle reloj al modulo mediante el bit USISWCLK cuando USISSELx=100. Los bits USIDIVx pueden ser utilizados para dividir la fuente de reloj seleccionada de potencias de 2 hasta 128. El reloj generado, USICLK,es detenido cuando USIIFG=1 o cuando el módulo opera en modo esclavo. Los bits USICKPL son utilizados para seleccionar la polaridad del reloj de USICLK. Cuando USICLKP=0, el nivel inactivo del USICLK es bajo. Cuando USICKPL=1 el nivel inactivo del USICLK es alto. 6.2.3. Modo SPI El modulo USI se configura en modo SPI cuando el bit USII2C=0. El bit de control USICKPL selecciona el nivel inactivo del reloj SPI mientras que USICKPH selecciona el flanco del reloj en el cual SDO se actualiza y SDI es muestreado. La figura 14.3 muestra la relación entre el reloj y los datos para una transferencia de 8 bits con el MSB primero en enviar. USIPE5, USIPE6, y USIPE7 debe ser uno para habilitar las funciones del puerto SCLK, SDO y SDI.

76

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Figura 6.3 temporización del SPI

SPI Modo Maestro EL Modulo USI es configurado como maestro poniendo en uno el bit USIMST y borrando el bit I2C USII2C. El maestro provee la señal de reloj al esclavo(s) por tanto se requiere seleccionar una fuente de reloj apropiada y la terminal SCLK debe de ser configurada como salida. Cuando USIPE5 =1, SCLK automáticamente se configura como salida. Cuando USIIFG=0 y USICNTx>0, se habilita el generador de reloj y el maestro comenzara con la transferencia de datos utilizando el USISR. Los datos recibidos deben ser leídos desde el registro de corrimiento antes que un nuevo dato sea escrito en el para su transmisión. En una aplicación típica, el programa del USI leerá el dato recibido desde el USISR, escribirá un nuevo dato a ser transmitido al USISR y habilitara el modulo para la siguiente transferencia al escribir el numero de bits a ser transferidos al USICNTx.

SPI Modo esclavo El modulo USI se configura como esclavo SPI al borrar el bit USIMST y los bits USII2C. En este modo cuando USIPE5=1 SCLK se configura automáticamente como entrada y el USI recibe un reloj extraño desde el maestro. SI el USI esta transmitiendo datos, el registro de corrimiento debe ser cargado con el dato antes de que el maestro de el primer flanco de reloj. La salida debe ser habilitada al poner en uno el bit USIOE. Cuando USICKPH=1, el MSB será visible en el SDO inmediatamente después de haber cargado el registro de corrimiento. La terminal SDO puede ser deshabilitada borrando el bit USIOE. Esto sirve si el esclavo no está direccionado en un en el bus con múltiples esclavos. Una vez que todos los bits han sido recibidos, el dato debe ser leído desde el registro USISR y el nuevo dato debe ser cargado en el USISR antes del próximo flanco del reloj maestro. En una aplicación típica después de recibir el dato el el programa del USI leerá el registro USISR y escribirá el dato a transmitirse en el USISR y habilitará el modulo USI para la siguiente transferencia escribiendo el numero de bits a ser transferidos en el USICNTx.

Operación USISR

77

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

El registro USISR está hecho a base de 2 registros de 8 bits, USISRL y USISRH el bit de control USI16B selecciona el número de bits del USISR que son utilizados en la transmisión y recepción de datos. Cuando USI16=0; Únicamente los 8 bits menos significativos son utilizados como datos, los presentes en USISRL. Para transferir < 8 bits, el dato debe ser alineado con el MSB o el LSB dependiendo del USILSB la figura 14-4 muestra un ejemplo de manejo de 7 bits.

Figura 14-4 Ajuste para 7 bits Cuando USI16B=1 los 16 bits son utilizados para manejo de datos. Cuando se está usando el USISR para acesar al los registros USIRL y USISRH, el dato necesita estar ajustado cuando se utilizan menos de 16 bit de la misma forma que la mostrada en la figura 14-4.

Interrupciones SPI Hay un vector asociado con el módulo USI, y una bandera de interrupción USIIFG. Cuando los bits USIIE y GIE están en uno, la bandera de interrupción generará una petición de interrupción. La bandera USIIFG se pone a uno cuando el registro USICNTx llega a cero, ya sea por conteo o por escribir cero directamente en este registro. La bandera USIIFG se borra cuando en el registro USICNT se le escribe un numero distinto de cero cuando USIIFGCC=0 o directamente por programa.

14.2.4. Modo I2C El modulo USI se configura para modo I2C cuando el bit USII2C =1,y el bit USICKPH=0. Para compatibilidad de datos I2c, USILSB y USI16B deben estar en cero. USIPE6 y USIPE7 deben de ser 1 para habilitar las funciones del puerto SCL y SDA.

I2C Modo Maestro

78

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Para configurar el modulo USI como Maestro I2C el bit USIMST debe de estar en uno. En modo maestro los relojes se generan por el modulo USI y se manda afuera por la línea SCL mientras el bit USIIFG =0. Cuando USIIFG=1, La línea SCL se detendrá en nivel ocioso o alto. Se soporta la operación multimaestro esto se describe en la sección de arbitraje. El maestro soporta esclavos que estén sosteniendo a la línea SCL bajo únicamente cuando USIDIV>0. Cuando USIDIVx es puesto la división de reloj /1 (USIIDIVx=0) Los esclavos conectados no deben sostener la línea SCL en bajo durante la transmisión de datos de otra forma la comunicación puede fallar. I2C Slave Mode

Para configurar el modulo USI como I2CTo configure the USI module as an I2C slave the USIMST bit must be cleared. In slave mode, SCL is held low if USIIFG = 1, USISTTIFG = 1 or if USICNTx = 0. USISTTIFG must be cleared by software after the slave is setup and ready to receive the slave address from a master. I2C Transmisor En el modo transmisor, el dato se carga primero en el registro USISRL. La salida es habilitada por poner en uno USIOE y la transmisión comienza al escribir 8 en el registro USICNTx. Esto borra USIIFG y se genera SCL en modo maestro o se libera de estar en bajo en el modo esclavo. Para recibir el bit de reconocimiento I2C, el bit USIOE es borrado por programa y el USICNTx es cargado con uno. Esto borra la bandera USIIFG y un bit es recibido en el USISRL. Cuando USIIFG llega a ser uno de nuevo, el LSB del USISRL es recibido el bit de reconocimiento y puede ser probado por programa. ; Receive ACK/NACK BIC.B #USIOE,&USICTL0 ; SDA input MOV.B #01h,&USICNT ; USICNTx = 1 TEST_USIIFG BIT.B #USIIFG,&USICTL1 ; Test USIIFG JZ TEST_USIIFG BIT.B #01h,&USISRL ; Test received ACK bit JNZ HANDLE_NACK ; Handle if NACK ...Else, handle ACK Receptor I2C

En modo I2C la salida debe ser deshabilitado por borrar el bit USIOE y el modulo USI se prepara para recepción escribiendo 8 en el USICNTx. Esto borra la bandera USIIFG y SCL se genera en modo maestro o es dejado para mantenerse en bajo en modo esclavo. El bit bit USIIFG se pondrá en uno después de 8 relojes. Esto detiene la señal de reloj en SCL en modo maestro o mantiene SCL en bajo en la siguiente fase baja en modo esclavo. Para transmitir un bit de reconocimiento o un no reconocimiento el MSB del registro de corrimiento es cargado con un cero o un uno, el bit USIOE se pone en uno por programa para habilitar la salida y un uno es escrito en el USICNTx. Tan pronto como el bit MSB es

79

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

mandado fuera , el bit USIIFG se pondrá en uno y el módulo puede ser preparado para la recepción del próximo I2C byte. ; Genera un reconocimiento ACK BIS.B #USIOE,&USICTL0 MOV.B #00h,&USISRL MOV.B #01h,&USICNT TEST BIT.B #USIIFG,&USICTL1 JZ TEST ...continua... Condición de inicio

; SDA output ; MSB = 0 ; USICNTx = 1 ; Probando USIIFG

Una condición de inicio es una transición de alto a bajo en SDA mientras SCL es alto. La condición de inicio puede ser generada por poner en uno MSB del registro de corrimiento en cero. Poniendo en uno USIGE y USIOE hace la salida transparente y el MSB del registro de corrimiento se presenta inmediatamente en SDA y manda la línea en bajo. Borrando USIGE vuelve la función latch y sostiene 0 en SDA hasta que el dato es mandado fuera con el SCL. ; Generando inicio MOV.B #000h,&USISRL ; MSB = 0 BIS.B #USIGE+USIOE,&USICTL0 ; Latch/SDA salida habilitada BIC.B #USIGE,&USICTL0 ; Latch deshabilitado ...continua... Condición de Paro

Una condición de paro es una transición de alto a bajo en la línea SDA mientras SCL es alto. Para finalizar el bit de reconocimiento y poner SDA en bajo para preparar la condición de paro Requiere de borrar el MSB en el registro de corrimiento y cargar 1 en el USICNTx. Esto generara un pulso bajo en SCL durante la fase baja en SDA es mandada a bajo.SCL se detiene en el estado ocioso o alto, desde que el modulo es en modo maestro. Para generar una transición de bajo a alto, el MSB es uno en el registro de corrimiento y USICCNTx es cargado con uno. Poniendo el USIGE y USIOE hace la salida de latch transparente y el MSB de USIRL deja SDA en estado ocioso. Borrando USIGE deposita el MSB en la salida con latch y la salida es deshabilitada por borrar USIOE. SDA permanece en alto hasta que la condición de inicio es generada por la resistencia externa de pull up. ; Generando paro BIS.B #USIOE,&USICTL0 MOV.B #000H,&USISRL MOV.B #001H,&USICNT

; SDA= salida ; MSB = 0 ; USICNT = 1 por un reloj

BIT.B #USIIFG,&USICTL1 JZ TEST MOV.B #0FFH,&USISRL BIS.B #USIGE,&USICTL0

; Prueba la Bandera USIIFG ; ; USISRL = 1 a manejar SDA Alto ; Latch Transparente Habilitado

TEST

80

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

BIC.B #USIGE+USIOE,&USICTL ; Latch/SDA salida deshabilitada ...continua... Liberando al SCL Al poner en 1 el bit USISCLREL soltará SCL, si este está siendo retenido en bajo por el modulo USI, sin requerir que la bandera USIIFG sea borrada. El bit USISCLREL será borrado automáticamente si se recibe una condición de START y la línea SCL, se mantiene en bajo en el siguiente reloj. En operación como esclavo este bit debería ser usado para prevenir que SCL sea retenido en bajo, cuando el esclavo ha detectado que no ha sido direccionado por el maestro. En la siguiente condición de START USISCLREL deberá ser borrado y el bit USISTTIFG deberá ponerse en 1 lógico. Arbitraje El modulo USI puede detectar la condición de pérdida de arbitraje en condiciones de sistemas multi maestro I2C. El procedimiento de arbitraje utiliza los datos presentados en SDA por los transmisores que compiten. El primer transmisor maestro que genera el un uno lógico pierde el arbitraje contra el maestro que genera un cero lógico. La pérdida del arbitraje es detectada en el modulo USI al comparar el valor presentado en el bus y el valor leído desde el bus. Si los valores no son equivalentes el arbitraje se pierde y se pone en uno la bandera de pérdida de arbitraje USIAL. Esto también borra el bit de habilitación de salida USIOE y el modulo USI no manejara mas el bus. En este caso el usuario debe checar por software la bandera USIAL junto con USIIFG y configurar el USI como esclavo receptor cuando se pierde el arbitraje. La Bandera USIAL debe se borrada por programa. Para prevenir que otros maestros rápidos generen relojes durante el procedimiento de arbitraje SCL se mantiene en bajo, si otro maestro en el bus maneja SCL en bajo y USIIFG o USISTTIFG es uno o si USICNTx=0. Interrupciones I2C Hay un vector asociado con el modulo USI con 2 banderas de interrupción importantes para la operación I2C,USIIFG y USISTTIFG. Cada bandera de interrupción tiene su propio bit de habilitación, USIIE y USISTTIE. Cuando la interrupción es habilitada, y GIE =1, cualquier bandera de interrupción generara una petición de interrupción. USIIFG es uno cuando USICNTx llega a cero, ya sea por cuenta o por escribir directamente cero en los bits USICNTx. USIIFG se borra al escribir un valor > 0 en los bit USICNTx cuando USIIFGCC=0, o directamente por software cuando USISTTIFG es uno cuando se detecta una condición de Start. La bandera USISTTIFG debe ser borrada por software. La recepción de la condición de STOP se indica con la bandera USISTP pero no existe vector de interrupción asociado con esta bandera. USISTP se borra al escribir un valor >0 en los bits USICNTx cuando USIIFGCC=0 o directamente por programa. AMBIENTE DE DESARROLLO Y PROGRAMACION (IAR) Terceras partes han desarrollado ambientes para la programación y depuración de programas de los microcontroladores de Texas Instruments; existe un software llamado

81

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

IAR creado por IAR SYSTEMS, que se puede bajar gratuitamente de la pagina de Texas Instruments y que una vez instado permite la creación, depuración y programación de la familia MSP430 en conjunto con un programador de Texas como el MSP-FET430UIF. Cabe señalar que estos microcontroladores tienen ínter construida circuitería para poder observar el estado del microcontrolador ver y modificar registros, memoria etc. y que además se puede correr a pasos un programa de servicio de interrupción activo, cosa que hasta hace poco no era posible con los microcontroladores de otros fabricantes. En la figura 4 se tiene la ventana que aparece al abrir el IAR, la ventana emergente nos da 4 opciones; la primera dice crear un proyecto nuevo en el espacio de trabajo actual, la segunda opción dice agregar un proyecto existente a espacio actual, el tercero abrir espacio existente y el cuarto son ejemplos de aplicaciones. La primera vez que creamos un proyecto seleccionaremos la primera opción

Figura 4 primera pantalla al iniciar el IAR

El microcontrolador y el ambiente puede configurarse para trabajar en ensamblador, en C y en C++ en este ejemplo se hará en ensamblador. Al seleccionar la primera opción sale la segunda ventana emergente de la cual seleccionamos la opción de asm de la opción asm y damos OK ver figura 5

82

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Figura 5 ventana de IAR para escoger el tipo de proyecto a desarrollar. Una vez que elegimos asm y damos OK se crea un proyecto para ensamblador y aparece una ventana de edición con un esqueleto de programa en ensamblador ver figura 6.

Figura 6 esqueleto de un proyecto en ensamblador por default. Configuración del IAR

83

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

A partir de este punto, se tiene que configurar el ambiente, para que ensamble o compile el programa escrito en lenguaje ensamblador al código de maquina que corresponde al modelo especifico del microcontrolador a programar, recuerde que algunos modelos tienen mas recursos internos que otros. Para hacer eso en el menú Project, options aparece una ventana emergente de opciones para un espacio de trabajo. En esta ventana emergente aparece una columna menú llamada categoría en ella la primera opcion a configurar es General Options y del lado derecho una serie de carpetas, la primera, permite configurar el modelo especifico de microcontrolador a programar ó simular. Para este ejemplo se escogerá el MSP430F1232 Ver figura 7

Figura 7 Selección del modelo específico de microcontrolador a utilizar. A partir de este punto podemos insertar el código para el microcontrolador, en caso de que resulte mas difícil poner código que traer un ejemplo previamente tecleado tendremos que remover el archivo en ensamblador (extensión S.43) que aparece por default; esto se consigue con el botón derecho del ratón sobre el nombre del archivo remover. Una vez removido hay que cerrarlo. De forma inversa habrá que abrir el archivo de interés (S.43), y una vez abierto, anexarlo al proyecto. Para hacer esto, dar clic derecho con el ratón en el nombre del proyecto y seleccionar ADD, escoger el archivo ya abierto. Esto se observa en la figura 7 y 8

84

Microcontrolador Msp430

M. en C. Enrique López Ortega

IPN ESIME ZACATENCO

Figura 7 Opción abrir archivo con clic derecho para cargar un archivo

Figura 8 Opción agregar archivo (X.S43) a proyecto activo Una vez agregado un archivo a un proyecto, este se debe compilar ya sea para bajarlo al microcontrolador o para correrlo en el simulador. Para compilar un archivo, elijase en la pestaña proyecto (Proyect) la opción Build All, hecho esto, se crea el archivo en código de maquina y en este momento se marcan los posibles errores existentes o aparece No errors No Warnings. Para bajar el programa al microcontrolador dar en (proyect) la opción Debug.

85