desarrollo de sistemas embebidos - itq.edu.mx · launchpad development board emulación embebida...

121
MSP430 Microcontroller

Upload: lyminh

Post on 26-Sep-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

MSP430 Microcontroller

Microcontroladores de TI

Familia MSP430 de TI

Familia MSP430 de TI

Ultra Low Power

Security + Comm

Low Power + Performance

Familia MSP430 de TI

Ultra Low Power

Security + Comm

Low Power + Performance

Familia MSP430G2xx Value Line

LaunchPad Development Board

Emulación embebida

Conector eZ430 6-pin

MCU y su Base

Terminales XTAL

Conector de

alimentación

Botón de ResetLED's JumpersP1.0 & P1.6

Botón del P1.3

Terminales del MCU

Conector del

Emulador USB

LaunchPad Development Board

Características de la tarjeta de desarrollo:– LED1 (red) = P1.0– LED2 (green) = P1.6– Switch1 = P1.3– Switch2 = Reset– Timer UART Transmit = P1.1– Timer UART Receive = P1.2

Para conmutar los LED's Rojo y Verde es necesario configurar las terminales de los puertos 1.0 y 1.6 como salidas y luego intercambiar sus estados lógicos.

Índice

• Características clave• Arquitectura del CPU • Sistema de relojes : Clock's• Interrupciones• I/O• Timers• ADC's• USCI

•0.1 μA RAM retention

•0.4 μA Standby mode (VLO)

•0.7 μA real-time clock mode

•220 μA / MIPS active

•Ultra-Fast Wake-Up From Standby Mode in <1 μs

Power consumption @ 2.2V:

Arquitectura de Ultra bajo consumo, extiende la vida útil de la batería– 0.1 μA RAM retention– 0.8 μA real-time clock mode– 250 μA/MIPS active

16-bit RISC CPU .– Deep single-cycle register file, previene cuellos de botella en transferencias de datos.– Core compacto, reduce el consumo de energía y el costo– Optimizado para lenguajes de programación de alto nivel – Sólo 27 instrucciones básicas y 7 modos de direccionamiento

– Vector de interrupciones expandible In-system 16KB de Flash programable, lo que permite una

programación flexible, así como actualizaciones de los datos.

Características clave

MSP430G2553 pin-out

Características clave

Analog

20191817161514131211

GND

GND

+3.3

P2.6P2.7

P1.7P1.6P2.5P2.4P2.3

GNDXin

XoutTest

Reset

Green

123456789

10

+3.3Red LED

Push

A0A1A2A3A4A5

P1.0P1.1P1.2P1.3P1.4P1.5P2.0P2.1P2.2

TA1.0TA1.1TA1.1

ACLKRX_A0TX_A0

STE*CLK*

TA1.0

TA0.1TA1.2TA1.2TA1.0

CA7*CA6

SIMO*SOMI*

A7A6

CA0CA1CA2CA3*CA4CA5

TA0CLK

TA0.0TA0.1VREF-VREF+TA0.0

CLKSTE

SDASCL

SOMISIMO

GPIO

Timer

Analog

Comparator * CAOUT

Hardware

PIN OUT

UART USCI_A0

SPI USCI_A0

I2C USCI_B0

* USCI_B0

Emulator / Programmer / Serial Comm

MSP430G2553 pin-out – VCC , VSS : alimentación de voltaje y tierra (ground)– P1.0 a P1.7, P2.6 y P2.7 son terminales para entradas y

salidas digitales así como otras funciones.– A0, A1, ... A7, son las entradas del convertidor análogo-

digital– VREF+ y VREF- son las referencias de voltaje del

convertidos– ACLK y SMCLK son salidas del reloj del microcontrolador– SCLK, SDO, y SCL se usan en la interface universal serial – XIN y XOUT son entradas para la señal del cristal– RST es activa en bajo y maneja la señal de reset– NMI es la entrada de interrupción no-mascarable– TA0.0, TA1.0, TA1.1 y TA1.2 son salidas del temporizador.

Características clave

Arquitectura del MSP430

Arquitectura del MSP430

Periféricos MSP430G Value Line :

• Entradas Salidas de propósito general (GPIO)• Terminales programables de manera independiente• Es posible cualquier combinación de entrada, salida e interrupción (incluyendo selección de borde de disparo).• Cada GPIO cuenta con resistencias pull-up / pull-down individualmente programables.• Algunas terminales incluyen características touch-sense (PinOsc).

• Temporizador de 16-bits (Timer_A2 o Timer_A3)• Registros de captura o comparación de registros• Amplias capacidades de interrupción

• Temporizador WDT+ Watchdog • También disponible como un temporizador de intervalos

• Reset Brownout• Proporciona señal de Reset durante el encendido o apagado• Bajo consumo de corriente.

Arquitectura del MSP430

Periféricos MSP430G Value Line (cont.):

• Comunicación serial• USI con soporte para I²C y SPI • USCI con soporte para I²C, SPI y UART

• Comparador_A +• Entradas inversoras y no inversora• Filtro de salida RC seleccionable• Entrada de captura con salida al Timer_A2• Capacidad de generar interrupciones

• Convertidores ADC (SAR o de doble pendiente) de 10-bits @ 200ksps• Hasta 8 canales externos (disponibles según el dispositivo)• Canales internos extra para monitoreo de temperatura y voltaje• Referencias Vref+ / Vref- programables• Transferencia directa de los resultados a memoria (DMA) sin intervención del CPU y extensa capacidad de interrupciones

Arquitectura del MSP430

CPU :

• Arquitectura RISC con 27 instrucciones y 7 modos de direccionamiento.

• Modos de direccionamiento extendido•- Alcance de 20 bits y densidad de código mejorada

• Mapa de memoria unificada de 1MB sin paginación

• Acceso completo a registros incluyendo al PC: contador de programa, registros de estados, y SP: Stack Pointer.

• Operaciones de registro en un solo ciclo.• Registros de 16 bits, reduce lecturas a

memoria.• Código 100% compatible con versiones

anteriores.

Arquitectura del MSP430

CPU (cont.) :

• Bus de direcciones de 16 bits. Acceso y instrucciones de salto en toda la memoria.

• Bus de datos de 16 bits permite la manipulación directa de los argumentos de toda la palabra.

• Incluye Generadores de constantes (CG1, CG2); genera seis valores inmediatos lo que reduce el tamaño del código.

• Transferencias directas de memoria-memoria (DMA) sin necesidad de un registro intermedio o intermediación del CPU.

• Formatos de direccionamiento y de instrucción tanto en Words como en Bytes.

Arquitectura del MSP430

Registros del MSP430 CPU : • Dieciséis registros de 16 bits cada uno

- Los registros R0, R1, R2, y R3 tienen funciones específicas- Los registros R4 a R15 son los registros de propósito general

(configurables por el usuario o compilador)

Arquitectura del MSP430

Registros del MSP430 CPU :

• El CPU usa los registros internos junto con variables dedicadas para realizar operaciones y cálculos aritméticos

• Usa el mismo tamaño de código para operaciones a nivel byte o word

• Se recomienda en lo posible usar operaciones de 16 bits (word)

Arquitectura del MSP430

16-bit addition Code/Cycles5405 add.w R4,R5 ; 1/1529202000202 add.w &0200,&0202 ; 3/6

8-bit addition5445 add.b R4,R5 ; 1/152D202000202 add.b &0200,&0202 ; 3/6

16-bit addition Code/Cycles5405 add.w R4,R5 ; 1/1529202000202 add.w &0200,&0202 ; 3/6

8-bit addition5445 add.b R4,R5 ; 1/152D202000202 add.b &0200,&0202 ; 3/6

Arquitectura del MSP430

Ordenamiento en modo Little-endian: El byte de menor orden es guardado en la dirección más baja mientras el byte alto en la dirección más alta.

Alineación en words: La dirección de un Word corresponde a la dirección del byte con la menor dirección, misma que debe ser par.

Organización de la Memoria

Direcciones de 16-bit apuntando a bytes

Arquitectura del MSP430 Interrupt Vector

Table

Code Memory

InformationMemory

RAM

16-bitPeripherals

8-bitPeripherals

8-bit Special FunctionRegisters

000FFh00010h

001FFh00100h

003FFh00200h

0FFDFh0C000h

0FFFFh0FFE0h

010FFh01000h

Flash/ROM(16kB)

RAM(512 bytes)

Flash/ROM(256 bytes)

Interrupt Vector & Code memory: Aquí tenemos un bloque de 16 kBytes de memoria tipo flash, para guardar ahí nuestro código. En la parte más alta de esa memoria se colocan las direcciones de las rutinas de servicio a interrupciones (ISR).

Memory Map

Mapa del MSP430G2553 0000Fh00000h

Registros del MCU

(512 bytes)

Arquitectura del MSP430 Interrupt Vector

Table

Code Memory

InformationMemory

RAM

16-bitPeripherals

8-bitPeripherals

8-bit Special FunctionRegisters

000FFh00010h

001FFh00100h

003FFh00200h

0FFDFh0C000h

0FFFFh0FFE0h

010FFh01000h

Flash/ROM(16kB)

RAM(512 bytes)

Flash/ROM(256 bytes)

Information memory: El bloque de 256 Bytes de memoria flash fue incorporada para guardar ahí información no-volátil, como los números serie del circuito y para identificar el tipo de microcontrolador.

Memory Map

Mapa del MSP430G2553 0000Fh00000h

Registros del MCU

(512 bytes)

Arquitectura del MSP430 Interrupt Vector

Table

Code Memory

InformationMemory

RAM

16-bitPeripherals

8-bitPeripherals

8-bit Special FunctionRegisters

000FFh00010h

001FFh00100h

003FFh00200h

0FFDFh0C000h

0FFFFh0FFE0h

010FFh01000h

Flash/ROM(16kB)

RAM(512 bytes)

Flash/ROM(256 bytes)

RAM memory: Bloque de 512 Bytes de memoria volátil para guardar variables y datos que serán modificados durante la ejecución de nuestro código.

Memory Map

Mapa del MSP430G2553 0000Fh00000h

Registros del MCU

(512 bytes)

Arquitectura del MSP430 Interrupt Vector

Table

Code Memory

InformationMemory

RAM

16-bitPeripherals

8-bitPeripherals

8-bit Special FunctionRegisters

000FFh00010h

001FFh00100h

003FFh00200h

0FFDFh0C000h

0FFFFh0FFE0h

010FFh01000h

Flash/ROM(16kB)

RAM(512 bytes)

Flash/ROM(256 bytes)

Registros del MCU: Bloque de 512 Bytes de direcciones que apunta a los distintos registros que configuran al los componentes básicos del microcontrolador y a sus periféricos.

Memory Map

Mapa del MSP430G2553 0000Fh00000h

Registros del MCU

(512 bytes)

Arquitectura del MSP430

27 Core RISC Instructions

Arquitectura del MSP430

Formatos de Instrucción

Arquitectura del MSP430 Siete (7) modos de direccionamiento

Modo Ejemplo Descripción

Registro mov.w R10,R11 Ciclo sencillo

Indexado mov.w 2(R5),6(R6) Procesamiento de Tablas

Symbólico mov.w EDE,TONI Fácil lectura, relativo al PC

Absoluto mov.w &EDE,&TONI Acceso directo a memoria

Indirecto a Registro mov.w @R10,0(R11) Acceso a memoria con apuntadores

Indirecto con Auto-incremento

mov.w @R10+,0(R11) Procesamiento de Tablas

Inmediato mov.w #45h,&TONI Valores constantes ir-restrictos

Atomic

Arquitectura del MSP430

Set completo de Instrucciones

Format I Src, Dest

Format II Single

Operand

Format III +/- 9bit

OffsetSupport

add(.b) br jmp clrcaddc(.b) call jc setcand(.b) swpb jnc clrzbic(.b) sxt jeq setzbis(.b) push(.b) jne clrnbit(.b) pop(.b) jge setncmp(.b) rra(.b) jl dintdadd(.b) rrc(.b) jn eintmov(.b) inv(.b) nopsub(.b) inc(.b) retsubc(.b) incd(.b) retixor(.b) dec(.b) decd(.b) adc(.b) sbc(.b) clr(.b) dadc(.b) rla(.b) rlc(.b) tst(.b)

Bold type denotes emulated instructions

Arquitectura del MSP430

Direccionamiento AtómicoAtómico

MemoryB

; MSP430 add A,B

; MSP430 add A,B

; Pure RISC push R5 ld R5,A add R5,B st B,R5 pop R5

; Pure RISC push R5 ld R5,A add R5,B st B,R5 pop R5

A

B=B+A

Operaciones memoria-a-memoria No-interrumpibles Aplicable para el conjunto completo de instrucciones

Arquitectura del MSP430

Generador de Constantes

4314 mov.w #0002h,R4 ; With CG

40341234 mov.w #1234h,R4 ; Without CG

4314 mov.w #0002h,R4 ; With CG

40341234 mov.w #1234h,R4 ; Without CG

Valores inmediatos generados en Hardware : -1,0,1,2,4,8

Reduce el tamaño de código y el número de ciclos de CPU

Completamente automático

Arquitectura del MSP430

MSP430 C Data Types (ELF format)

Type Bits Representation

char 8 (aligned to 8-bit boundary)

short 16 Binary, 2's complement

int 16 Binary, 2's complement

long 32 Binary, 2's complement

long long 64 Binary, 2's complement

float 32 IEEE 32-bit

double 64 IEEE 64-bit

long double 64 IEEE 64-bit

Arquitectura del MSP430

Proyectos y Workspaces

ProjectSource files

Header Files

Library files

Build and tool settings

ProjectSource files

Header Files

Library files

Build and tool settings

WorkspaceProject 1

Project 2

Project 3

Settings and preferences

ProjectSource files

Header files

Library files

Build and tool settings

Source filesCode and Data

Header filesDeclarations/Defines

Library filesCode and Data

LinkLink

Link

Link

• Un Workspace o espacio de trabajo contiene configuraciones y preferencias, junto con los enlaces a cada proyecto.

• La eliminación de un archivo o proyecto dentro del espacio de trabajo sólo elimina las ligas, no elimina los archivos.

Arquitectura del MSP430

Proyectos y Workspaces

ProjectSource files

Header Files

Library files

Build and tool settings

ProjectSource files

Header Files

Library files

Build and tool settings

WorkspaceProject 1

Project 2

Project 3

Settings and preferences

ProjectSource files

Header files

Library files

Build and tool settings

Source filesCode and Data

Header filesDeclarations/Defines

Library filesCode and Data

LinkLink

Link

Link

• Los Proyectos contienen las configuraciones de todo el programa así como de las herramientas empleadas. Además mantiene los enlaces a los archivos del proyecto.

• Los proyectos engloban a los archivos de cabecera «.h», a los de código «.c» así como a las librerías «.lib» y a sus dependencias.

Arquitectura del MSP430 Cadena de compilación-depuración

● El Compilador traduce el código c en ensamblador (.asm) y el Linker toma ese código e integra las llamadas a librerías (.lib) junto con el mapa de memoria, lo que produce el archivo .out .

Compiler

Asm

.c

.asm .obj

.asm

Edit Debug

Standard Runtime Libraries

.out

.lib

.mapUser.cmd

TI-RTOSLibraries

TI-RTOSConfig(.cfg) Bios.cmd

Launch Pad

EVM

Stand Alone Emulator

(MSP430 FET)

TargetCfg File

.ccxml

Link

Arquitectura del MSP430

Ejemplo: Device Specific «Header» Files

1. Device header file ( msp430g2553.h )Register bit-field symbols are found in ‘header’ file

WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

2. Device linker command file ( msp430g2553.cmd )Symbols that represent register locations – which are effectively addresses – are found in the ‘linker’ command file

Arquitectura del MSP430

Consejos para la Codificación en lenguaje C

• Utilizar variables locales tanto como sea posible. Las variables locales usan los registros del CPU para alojarse mientras que las variables globales utilizan localidades en la memoria RAM

• Utilice tipos de datos sin signo siempre que sea posible• Utilizar punteros para acceder a estructuras y uniones• Utilice la clase "static const" para evitar que se copie durante el

tiempo de ejecución o «run-time» el contenido de estructuras, uniones y arreglos.

• Evite en lo posible la operación módulo (lenta y costosa)• En los Bucles tipo «for», cuente hacia atrás el número de ciclos

deseados hasta alcanzar el valor de «0» • Conozca su código C y su versión en ensamblador!

Puertos Digitales de Entrada / Salida (GPIO) del MSP430

Puertos de E/S del MSP430

Características• El MSP430G2553 dispone de 2 puertos (P1 y P2) GPIO, cada

puerto tiene hasta ocho terminales de E/S (P1.0-P1.7, P2.0-P2.5). • Cada pin de E/S se puede configurar individualmente para la

entrada o salida de la dirección, y cada línea de E/S puede ser leída o escrita de forma individual a.

• Cada terminal GPIO :• Se puede configurar de manera independiente. • Permite cualquier combinación de entrada o de salida• Sus Interrupciones son individualmente configurables tanto para P1 y P2 • Cuenta con registros de datos de entrada y salida independientes• Cuenta con resistencias de pull-up/pull-down configurables

Puertos de E/S del MSP430

• GPIO = Entrada / salida de bits de propósito general

• Puertos de E / S de 8 bits• 1 a 12 puertos, dependiendo

de la familia y el número de terminales del dispositivo

• Cada pin es configurable y controlable individualmente

• Los pines de entrada pueden generar interrupciones

• Controlado por los registros:− IN− OUT− DIR− REN− SEL− ...

P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0

I/O Port 1 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Puertos de E/S del MSP430

Principales registrosRegister

P1IN Input from port 1

The 8 bits of data from port P1

P1OUT Output to port 1

Outputs 8 bits of data to port P1

P1DIR Direction of port 1 data transfer

Bits written as 1 (0) configure corresponding pin for output (input)

P1SEL Select function for port 1

Bits written as 1 configure the corresponding pin for use by the specialized peripheral; 0 configure general-purpose I/O

Puertos de E/S del MSP430

7 6 5 4 3 2 1 0

P1IN

P1OUT

P1DIR 1 1

P1IN.7

P1OUT.7

P1DIR.7

PxDIR.y: 0 = input Ejemplo: 1 = output P1DIR |= 0x81;

“1”

PxDIR (Dirección del Pin): Entrada o Salida

Puertos de E/S del MSP430

7 6 5 4 3 2 1 0

P1IN X

P1OUT 1

P1DIR 1

P1IN.7

P1OUT.7

P1DIR.7

PxOUT.y: 0 = low Ejemplo: 1 = high P1OUT |= 0x80;

“1”

PxOUT (Valor de salida del Pin)

“1”

Puertos de E/S del MSP430

GPIO input: PxREN (Resistencias)

Enable resistor

7 6 5 4 3 2 1 0

P1IN x

P1OUT 1

P1DIR 0

P1REN 1

P1IN.7

P1OUT.7

P1DIR.7

P1REN.7

Los pines de entrada se mantienen en estado de alta impedancia (Hi-Z), por lo que pueden reaccionar a 0 ó 1

Las entradas en Hi-Z pueden flotar hacia arriba / abajo esto se evita con resistencias pullup / pulldown

PxREN habilita resistencias PxOUT selecciona pull-up (1) o -down (0) Los MCU de menor coste pueden no contar con

resistencias pullup / pulldown para todos los puertos

Los pines de entrada se mantienen en estado de alta impedancia (Hi-Z), por lo que pueden reaccionar a 0 ó 1

Las entradas en Hi-Z pueden flotar hacia arriba / abajo esto se evita con resistencias pullup / pulldown

PxREN habilita resistencias PxOUT selecciona pull-up (1) o -down (0) Los MCU de menor coste pueden no contar con

resistencias pullup / pulldown para todos los puertos

up/down

Puertos de E/S del MSP430

Programa Demo.c

#include <msp430g2553.h>void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1DIR |= 0x41; // set P1.0 & 6 to outputs //(red & green LEDs) for(;;) { volatile unsigned int i; P1OUT ^= 0x41; // Toggle P1.0 & 6 using XOR i = 50000; // Delay do (i--); while (i != 0); }}

Puertos de E/S del MSP430

Programa Demo.c

Configuración de los LED's conectados al puerto 1 – Los LED's Verde y Rojo se encuentran en las terminales

Port 1 Bit 0 y Bit 6 Configurar estos pines como salidas P1DIR toma el valor 0x41 = 01000001

Para encender/apagar los LED's, se cambia el bit del registro de salidas de 1 a 0 o viceversa (uso de XOR).

P1OUT ^= 0x41; // toggle P1.0 & 6 on/off

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1DIR |= 0x41; // P1.0 & 6 outputs0100

0001

Puertos de E/S del MSP430

P1SEL0 & P2SEL1

La Guía del usuario y la Hoja de datos nos dicen cómo configurar cada terminal de acuerdo a las funciones disponibles

Analog

20191817161514131211

GND

GND

+3.3

P2.6P2.7

P1.7P1.6P2.5P2.4P2.3

GNDXin

XoutTest

Reset

Green

123456789

10

+3.3Red LED

Push

A0A1A2A3A4A5

P1.0P1.1P1.2P1.3P1.4P1.5P2.0P2.1P2.2

TA1.0TA1.1TA1.1

ACLKRX_A0TX_A0

STE*CLK*

TA1.0

TA0.1TA1.2TA1.2TA1.0

CA7*CA6

SIMO*SOMI*

A7A6

CA0CA1CA2CA3*CA4CA5

TA0CLK

TA0.0TA0.1VREF-VREF+TA0.0

CLKSTE

SDASCL

SOMISIMO

GPIO

Timer

Analog

Comparator * CAOUT

Hardware

PIN OUT

UART USCI_A0

SPI USCI_A0

I2C USCI_B0

* USCI_B0

Emulator / Programmer / Serial Comm

Modos de Operación del MSP430

Modos de Operación del MSP430

Durante el encendido, el circuito Brownout «BOR» mantiene el dispositivo en reset hasta que Vcc esté por encima del umbral de

operación

Arranque del BOR: Se configura el pin RST/NMI como reset Las terminales de E/S GPIO se configuran como entradas Se configuran los relojes Los periféricos y los registros de la CPU se inicializan (consultar la

guía del usuario) El registro de estados (SR) se inicializa El Temporizador Watchdog se activa en modo watchdogEl contador de programa (PC) se carga con la dirección del vector de reset (0xFFFE) Si el vector de reset está en blanco (0FFFFh), el dispositivo entra

en el estado de hibernación LPM4

Modos de Operación del MSP430

● Tres niveles de Reset

● BOR es el más completo, seguido por:

● POR = Power-On Reset● PUC = Power-Up Clear● Diferentes eventos desencadenan

diferentes restablecimientos; p.ej.▪ SVS (supervisor de energía)

activa el POR▪ WDT (watchdog) desencadena

el PUC

BOR → POR → PUC → Active (AM)

Modos de Operación del MSP430

● Tres niveles de Reset

● Cada nivel toca diferentes bits en la CPU y los registros periféricos → Descripción en la Guía del usuario:

BOR → POR → PUC → Active (AM)

Modos de Operación del MSP430

PUC

PUC

POR

BOR

Modos de Operación del MSP430

Buscar el diagrama en cada Guía del Usuario

Nota: Los modos de baja energía « Low-Power Modes (LPMx) » fueron removidos de este diagrama por simplicidad

Buscar el diagrama en cada Guía del Usuario

Nota: Los modos de baja energía « Low-Power Modes (LPMx) » fueron removidos de este diagrama por simplicidad

Diagrama de estados durante el Arranque del MCU

Sistema de Relojes del MSP430

Sistema de Relojes del MSP430

● Diversas fuentes de oscilación: on-chip (barata, confiable) y off-chip (precisa)● Muchos divisores de reloj aumentan las frecuencias de reloj disponibles● Todos los dispositivos MSP430 proporcionan al menos 3 relojes internos -

proporciona flexibilidad en el ajuste de la potencia del sistema frente al rendimiento

Sistema de Relojes del MSP430

• Very Low Power/Low Frequency Oscillator (VLO)*

• 4 - 20kHz (tipicamente 12kHz)• 500nA de corriente de standby• Corriemiento : 0.5%/°C y 4%/Volt • No disponible en G21x1

• Crystal oscillator (LFXT1)• Capacitores programables• Modo Failsafe @ OSC_Fault• Minimum pulse filter

• Digitally Controlled Oscillator (DCO)

• De 0 a 16MHz• Tolerancia de + 3% • Tabla de calibración de fábrica en la memoria Flash

Al encenderse el MCLK y el SMCLK son alimentados por el DCOCLK @ ~1.1MHz.

El ACLK se alimenta del LFXT1CLK en baja freciencia con una carga capacitiva de 6pF. si el LFXT1 falla el ACLK se conecta al VLO.

Sistema de Relojes del MSP430

G2xxx – No Requiere de Crystal / DCO

// Setting the DCO to 1MHz if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)

while(1); // Erased calibration data? Trap!

BCSCTL1 = CALBC1_1MHZ; // Set range

DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation

Sistema de Relojes del MSP430

G2xxx – No Requiere de Crystal / DCO

• Dispositivos G2xx1 tienen sólo la calibración para el DCO a 1MHz. Para otras frecuencias debe realizarse la calibración a mano.

• Dispositivos G2xx2 & G2xx3 (como el G2553) incluyen las 4 constantes mas los valores de calibración para el ADC y el sensor de temperatura

Sistema de Relojes del MSP430

G2xxx – No Requiere de Crystal / DCO

f DC

O M

Hz

DCO Range Select (DCORSEL)

UCSCTL1 DCORSEL

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Pick a Frequency

e.g. 1MHz

Sistema de Relojes del MSP430

Very Low Power / Frequency Oscillator

TAR

Calibrated 1 MHz DCO

CCRx

ACLK/8 from VLO

fVLO = 8MHz/Counts

• Calibración durante operación (runtime)• Timer_A corre bajo la señal calibrada del DCO• Captura del flanco de subida de la señal ACLK/8 del VLO• FVLO = 8MHz/cuenta• Referencia / Librería : SLAA340

Sistema de Relojes del MSP430

Operación del Watchdog

• Si el ACLK o el SMCLK fallan, la fuente de señal de reloj = MCLK(WDT+ fail safe feature)

• Si MCLK es generado por un cristal y el cristal falla, MCLK = DCO(XTAL fail safe feature)

Sistema de Relojes del MSP430

Operación del Watchdog

Los Watchdog proporcionan un sistema de seguridad contra fallas del sistema a partir del set/reset de un temporizador

WDT+ : cuenta con 4 intervalos de tiempo (G2xx)

CPU

Reset

WDT

Restart countdown

up-counter

ACLKSMCLK

VLO*

El código programado debe borrar periódicamente el contador del WDT.

WDT_A_resetTimer();

Si se completa el recuento del WDT el CPU se restablece (POR)

WDT is always on at PUC

Sistema de Relojes del MSP430

Operation del Watchdog

• La señal de reloj activa no puede ser deshabilitada (WDT mode)• Puede afectar el comportamiento de los modos LPMx así como el

consumo de corriente• WDT(+) siempre arranca activo

Interrupciones del MSP430

Interrupciones y Eventos

Viaje de Vacaciones : Espera de un evento

PollingWake me up when we get there...

InterruptsAn engineering example...

Interrupciones y Stack del MSP430

Interrupciones

• Son eventos que afectan a la rutina principal al forzar un cambio en el flujo normal del programa

• Por cada interrupción el CPU llamará a una sub-rutina (ISR);• Cuando rutina de servicio de interrupción (ISR) termina su

ejecución, el programa vuelve al punto y estado anterior.• Hay tres clases de interrupciones:

•- De Reinicio o RESET•- De interrupción no enmascarable (NMI). Alta prioridad. No tiene efecto el bit de habilitación global de interrupciones «GIE», pero se habilita mediante bits individuales (NIE, ACCVIE, OFIE).•- De interrupción enmascarable. controlada por el registro GIE. Principalmente usada en periféricos con capacidad de interrupción (habilitables o deshabilitables por software)

Interrupciones y Stack del MSP430

Esperando por un Evento

● Activación de un Botón (GPIO)

100% CPU Load

while(1) {

// Polling GPIO button

while (GPIO_getInputPinValue()==1)

GPIO_toggleOutputOnPin();

}

while(1) {

// Polling GPIO button

while (GPIO_getInputPinValue()==1)

GPIO_toggleOutputOnPin();

}

// GPIO button interrupt

#pragma vector=PORT1_VECTOR

__interrupt void rx (void){

GPIO_toggleOutputOnPin();

}

// GPIO button interrupt

#pragma vector=PORT1_VECTOR

__interrupt void rx (void){

GPIO_toggleOutputOnPin();

}

> 0.1% CPU Load

Polling Interrupts

Interrupciones y Stack del MSP430

Servicio a Interrupciones

Una vez que el sistema reconoce la existencia de la bandera de interrupción, se ejecutan los siguientes 8 pasos:

1) Se completa cualquier instrucción que se esté ejecutando durante la aparición del evento de interrupción.

2) El controlador toma el registro PC « program counter », que apunta a la siguiente instrucción, y lo guarda en la pila (stack).

3) El registro de estados «SR» se guarda en la pila o stack.4) El microcontrolador selecciona la interrupción de mayor

prioridad para ser atendida.5) La bandera de interrupción es restablecida (reset) de manera

automática cuando la interrupción provino de una sóla fuente, en caso de múltiples fuentes, la bandera permanecerá en alto en espera a que las demás fuentes sean atendidas por el software.

Interrupciones y Stack del MSP430

Servicio a Interrupciones

6) El controlador borra el contenido del SR; Esto termina cualquier modo de bajo consumo; Debido a que el bit GIE se borra, interrupciones adicionales quedan deshabilitadas.

7) El contenido del vector de interrupción se carga en el contador del programa «PC»; y el CPU inicia con la lectura de la primera instrucción de la rutina de servicio de la interrupción.

Pila (stack)

Interrupciones y Stack del MSP430

Servicio a Interrupciones

8) Al finalizar la ISR, se restablecen los valores previos del PC y SR y se continua con la siguiente instrucción del programa principal

Rutinas de Int.(Alta prioridad)

ISR1 ISR2 ISR1

Programa principal main() main()

(Baja prioridad)

MSP430G2553 Vector TableInterrupt Source Interrupt Flag System

InterruptWord Address Section Priority

Power-upExternal ResetWatchdog Timer+Flash key violationPC out-of-range

PORIFGRSTIFGWDTIFGKEYV

Reset 0FFFEh .reset 31(highest)

NMIOscillator FaultFlash memory access violation

NMIIFGOFIFGACCVIFG

Non-maskableNon-maskableNon-maskable

0FFFCh .int14 30

Timer1_A3 TA1CCR0 CCIFG maskable 0FFFAh .int13 29

Timer1_A3 TA1CCR2 TA1CCR1 CCIFG, TAIFG

maskable 0FFF8h .int12 28

Comparator_A+ CAIFG maskable 0FFF6h .int11 27

Watchdog Timer+ WDTIFG maskable 0FFF4h .int10 26

Timer0_A3 TA0CCR0 CCIFG maskable 0FFF2h .int09 25

Timer0_A3 TA0CCR1 TA0CCR1 CCIFG TAIFG

maskable 0FFF0h .int08 24

USCI_A0/USCI_B0 receiveUSCI_B0 I2C status

UCA0RXIFG, UCB0RXIFG maskable 0FFEEh .int07 23

USCI_A0/USCI_B0 transmitUSCI_B0 I2C receive/transmit

UCA0TXIFG, UCB0TXIFG maskable 0FFECh .int06 22

ADC10 ADC10IFG maskable 0FFEAh .int05 21

0FFE8h .int04 20

I/O Port P2 (up to 8) P2IFG.0 to P2IFG.7 maskable 0FFE6h .int03 19

I/O Port P1 (up to 8) P1IFG.0 to P1IFG.7 maskable 0FFE4h .int02 18

0FFE2h .int01 17

0FFE0h .int00 16

Boot Strap Loader Security Key 0FFDEh 15

Unused 0FFDEh to 0FFCDh 14 - 0

Interrupciones y Stack del MSP430 Programación de una rutina de servicio a interrupción : ISR

#pragma vector=WDT_VECTOR

__interrupt void WDT_ISR(void)

{

IE1 &= ~WDTIE; // Deshabilita la interrupción

IFG1 &= ~WDTIFG; // Limpia la bandera de interrupción

WDTCTL = WDTPW + WDTHOLD; // Regresa al WDT en hold state

BUTTON_IE |= BUTTON; // Termina la condición del ISR

}

#pragma vector - La siguiente función es la ISR para el vector seleccionado

_interrupt void - Identifica el nombre de la rutina ISR

No se requiere de un retorno especial de la ISR (e.g. : ensamblador RTI)

Interrupciones y Stack del MSP430 Programación de una rutina de servicio a interrupción : ISR

#pragma vector = TIMER0_A0_VECTOR

__interrupt void TA0_ISR(void)

{

__bic_SR_register_on_exit(CPUOFF); // Exit LPM0

}

#pragma vector = USCIAB0TX_VECTOR

__interrupt void USCIAB0TX_ISR(void)

{

UCB0TXBUF = (UCB0RXBUF << 4) | 0x0f; // Move RX data to TX

__bic_SR_register_on_exit(CPUOFF); // Exit LPM0

}

Interrupciones y Stack del MSP430

Foreground vs. Background Scheduling

main() {

}

while(1){ background or LPMx}

//InitinitPMM();initClocks();...

ISR1 get data process

ISR2 set a flag

Initialization del Sistema La parte inicial del main() generalmente se

utiliza para la configuración del sistema (módulos y periféricos).

Background La mayoría de los programas embebidos

incluyen algún tipo de lazo infinito, el cual se ejecuta todo el tiempo.

A estas instrucciones se les considera de baja prioridad y por lo tanto se dicen que corren en el transfondo o «Background».

Con el MSP430, el código de background muchas veces contiene instrucciones de Low Power Mode (LPMx) – con lo que se manda al CPU/System a invernación hasta que una interrupción lo despierta.

Interrupciones y Stack del MSP430

Foreground vs. Background Scheduling Foreground La rutina de servicio de interrupciones o

Interrupt Service Routine (ISR) se ejecuta en respuesta a algún evento de HW de alta prioridad, el cuál fue habilitado para desviar el flujo normal del programa del microcontrolador.

Estos eventos suelen diseñarse para cambiar el modo en que opera el código principal o Background – como por ejemplo sacar al CPU de un estado de hibernación.

Las rutinas de interrupción ISR’s, por default, son NO interrumpibles.

Aunque la mayor parte del procesamiento se podría realizar en la ISR, se recomienda mantener un mínimo de instrucciones ahí y realizar la mayor parte del procesamiento en el ciclo infinito del programa principal main().

main() {

}

while(1){ background or LPMx}

//InitinitPMM();initClocks();...

ISR1 get data process

ISR2 set a flag

Interrupciones y Stack del MSP430

La latencia de interrupción

• Es el tiempo entre el evento de inicio y la ejecución ISR.• Normalmente necesita 6 ciclos del CPU.

Modos de baja Energía del MSP430

Modos de baja Energía del MSP430

Low Power Operating modes

Modos de baja Energía del MSP430

Low Power Operating modes : Relojes del sistema

• ACLK: Auxiliary clock. ACLK se divide entre 1, 2, 4, u 8 gracias a un pre-escalador configurable por software.

• MCLK: Master clock. MCLK se divide entre 1, 2, 4, u 8 y es usado por el CPU y el sistema.

• SMCLK: Sub-main clock. SMCLK se divide entre 1, 2, 4, u 8 y es seleccionable por software por cada periférico individual

Modos de baja Energía del MSP430

Low Power Operating modes

Mode CPU and Clocks

Active CPU active. Todos los relojes habilitados están activos

LPM0 CPU, MCLK deshabilitados. SMCLK, ACLK activos

LPM1 CPU, MCLK deshabilitados. DCO deshabilitados si no es usado para el SMCLK. SMCLK, ACLK activo

LPM2 CPU, MCLK, SMCLK, DCO deshabilitados. ACLK activo

LPM3 CPU, MCLK, SMCLK, DCO y DC Gen deshabilitados. ACLK activo

LPM4 CPU y todos los relojes deshabilitados

Modos de baja Energía del MSP430

Estrategias de ahorro :

“Instant on” clock

• Hay que reducir al mínimo el consumo de corriente instantánea• Mandar la mayoría del tiempo al microcontrolador al modo de bajo

consumo• El MSP430 está diseñado para operar a muy baja energía, pero el

diseño y uso del desarrollador tienen un mayor impacto en la eficiencia energética neta del sistema.

Modos de baja Energía del MSP430

Estrategias de ahorro :

• El consumo de energía aumenta con :• Nivel de Vcc• Velocidad de reloj del CPU (MCLK)• Temperatura

• La des-aceleración del MCLK reduce la potencia instantánea, pero por lo general aumenta el tiempo de procesamiento (active duty cycle)

• Los ahorros de energía pueden cancelarse por este motivo• La operación @ 8 MHz MCLK maximiza el rendimiento para el consumo de corriente mínima por MIPS.

• Intervalo de operación completa (hasta 2,2 V)• Escoja el voltaje del CPU de acuerdo a la velocidad de MCLK elejida

Modos de baja Energía del MSP430

Estrategias de ahorro :

• Concordancia entre voltaje de alimentación y la velocidad de reloj• La operación puede resultar intermitente o fallar si el voltaje seleccionado para Vcc es menor que el mínimo estipulado.•

Modos de baja Energía del MSP430

Terminales no conectadas :• Las entradas digitales están expuestas a

corrientes «shoot-through» si se presentan voltajes en la entrada entre VIL y VIH

• Los puertos GPIO no deben "flotar" (dejan sin conectar) :

• Deben ser configurados como salidas• Deben ser conectados a Vcc o Ground a través de un dispositivo externo• Deben estar conectados a una resistencia de pull-up / down•

Temporizador (Timer_A)

● El WDT es un timer de 16-bit que puede ser usado como watchdog o como un temporizador común. El módulo del WDT puede reiniciar el sistema si después de un intervalo de tiempo asignado no hubo respuesta por parte del CPU.

● El registro de control del WDT está protegido por un password y está activo al encender el microcontrolador

WDTCTL = WDTPW + WDTHOLD;

Temporizador

Temporizador: Timer_A

● El Timer_A es un temporizador/contador de 16 bits con tres registros de comparación o captura y cuenta con:

● 4 modos de funcionamiento● Fuente de reloj seleccionable y configurable● Salidas configurables con capacidad de PWM

Temporizador: Timer_A

Registro TACTL del Timer_A

Convertidor Analógico Digital (ADC10)

Convertidor ADC10

DirectTransferController

DataTransferController

ADC (SAR) de 10-bit 8 entradas externas más Vcc y temperatura interna

200 ksps+ Reloj de conversión seleccionable Modos de Operación:

Single Sequence Repeat-single Repeat-sequence

Vref Interna o Externa Disparo por Timer-A Capacidad de Interrumpir el CPU Data Transfer Controller (DTC) Auto power-down

Convertidor ADC10

● Características del convertidor ADC de 10 bits: ● 200 kbps de tasa máxima de conversión. Con periodos de

sampling & hold programables.● La conversión puede ser iniciada por SW o por el Timer_A● Fuente del voltaje de referencia seleccionable por software ya

sea éste externo o interno (1,5 V o 2,5 V). El ADC core y el voltaje de referencia pueden ser alimentados por separado.

● Hasta 8 canales externos de conversión (A0 a A7)● Fuente de reloj seleccionable● Modos de conversión: Single-channel, repeated single-

channel, sequence, y repeated sequence ● Incluye controlador de transferencia de datos para el

almacenamiento automático de resultados.

Convertidor ADC10

Vref debe establecerse <30us

Tiempo de S&H configurable

La conversión tarda 13 ciclos de reloj

- ADC10OSC (~5MHz)

- ACLK

- MCLK

- SMCLK

● Tiempo de Conversión:

Convertidor ADC10

● Pasos para inicial al ADC10:1) Definir los puertos que serán utilizados como canales de entrada

analógica. (INCHx)2) Seleccionar la fuente de reloj para la operación (ADC10SSELx)3) Seleccionar un modo de conversión (por ejemplo, continuo, de una

sóla vez, etc). (CONSEQx)4) Seleccione la tensión de referencia VREF. (SREFx)5) Seleccione el tiempo de muestreo y retención para la conversión.

(ADC10SHTx)6) Habilitar el pin correspondiente elegido para la entrada analógica.7) Encender al propio ADC. (ADC10ON)8) Permitir al ADC hacer la lectura.9) Lea el valor después de la conversión; establecer una variable

para guardar la lectura.

Convertidor ADC10

● Ejemplo:

ADC10CTL1 = INCH_3 + CONSEQ_1; // A3/A2/A1, single sequence

ADC10CTL0 = ADC10ON + ADC10IE; // ADC10ON, interrupt enabled

ADC10AE0 |= 0x0E; // P1.1,2,3 ADC option select

ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start

Convertidor ADC10

● Mejora del desempeño: Autoscan + DTC

70 Cycles / Sample

Fully Automatic

Data2Data1Data0Data2

ADC

DTC

AU

TO

// Autoscan + DTC _BIS_SR(CPUOFF);// Autoscan + DTC _BIS_SR(CPUOFF);

// Software Res[pRes++] = ADC10MEM;ADC10CTL0 &= ~ENC; if (pRes < NR_CONV) { CurrINCH++; if (CurrINCH == 3) CurrINCH = 0; ADC10CTL1 &= ~INCH_3; ADC10CTL1 |= CurrINCH; ADC10CTL0 |= ENC+ADC10SC;}

// Software Res[pRes++] = ADC10MEM;ADC10CTL0 &= ~ENC; if (pRes < NR_CONV) { CurrINCH++; if (CurrINCH == 3) CurrINCH = 0; ADC10CTL1 &= ~INCH_3; ADC10CTL1 |= CurrINCH; ADC10CTL0 |= ENC+ADC10SC;}

Universal Serial Communication Interface

SPI• Serial Peripheral Interface• Single Master/Single Slave

SPIMaster

SPISlave

SCLKMOSIMISO

CS

I2C• Inter-Integrated Circuit Interface

• Single Master/Multiple Slaves CMaster

DACSlave

ADCSlave

CSlave

RR

SCLSDA

Vdd

UART• Universal Asynchronous

Receiver/Transmitter• Full duplex

R/T R/TTx

Rx

Rx

Tx

Interface de comunicación : USCI

I²C Bus Connection Diagram

Los 2 resistores de pull up son necesarios para la correcta operación de enlace I²C

Interface de comunicación : I²C

I2C

Master

Transmitter

Slave

Receiver

Receiver

Transmitter

Interface de comunicación : I²C

Posibles modos de operación

I²C data transfer: El primer byte después del bit de inicio contiene la dirección del esclavo (7 bits) más el bit R/W. Cuando R/W = 0, el maestro transmite datos al esclavo, con R/W = 1, el maestro recibe y el esclavo manda los datos. El bit ACK se envía desde el receptor después de cada byte en el 9no. ciclo de reloj SCL.

Interface de comunicación : I²C

void Init_i2c(uint8_t devAddr){ UCB0CTL1 |= UCSWRST; // Enable SW reset

• // I2C Master in synchronous mode UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, // keep SW reset UCB0BR0 = 10; // fSCL = 1Mhz/10 = ~100kHz UCB0BR1 = 0; P1SEL = BIT6 + BIT7; // Assign I2C pins to USCI_B0 P1SEL2 = BIT6 + BIT7; // Assign I2C pins to USCI_B0 UCB0I2CSA = devAddr; // Slave Address is 069h UCB0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** IE2 |= UCB0RXIE + UCB0TXIE; // Enable RX and TX interrupt}

Interface de comunicación : I²CCódigo de ejemplo

● En el modo asíncrono, los módulos USCI_Ax conectan el MSP430 a cualquier sistema externo a través de dos terminales, UCAxRXD y UCAxTXD. El modo UART se selecciona al poner el bit UCSYNC en cero.

● En el modo UART, el USCI transmite y recibe caracteres de otro dispositivo a un bit rate (velocidad de bits) pre-configurada de manera asíncrono (sin señal de reloj externa). La sincronización para cada byte de información se basa en la velocidad de transmisión seleccionada en la USCI. Tanto la transmisión como la recepción utilizan la misma frecuencia de transmisión (baudrate).

Interface de comunicación : UART

Interface de comunicación : UART

● Las características más importantes de la comunicación serial son:

– la velocidad de transmisión – El número de bits de datos – El número de bits de paro– Y si cuenta con bit de paridad.

Interface de comunicación : UART

void initUart(void){ UCA0CTL1 |= UCSSEL_2; // Use SMCLK UCA0BR0 = 104; // 9600 @ 1MHz UCA0BR1 = 0; // 9600 @ 1MHz UCA0MCTL = UCBRS0 // Modulation UCBRSx = 1 P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD P1SEL2 = BIT1 + BIT2; // P1.1 = RXD, P1.2=TXD UCA0CTL1 &= ~UCSWRST; // Initialize USCI state machine IE2 |= UCA0TXIE;}

● Configuración del periférico USCI como UART:

Interface de comunicación : SPI

● Características del modo SPI incluyen:– 7 bits u 8 bits de longitud de datos– 3 pines o 4 pines de operación de SPI– Modos Maestro o Esclavo – Registros de corrimiento de Transmisión y Recepción

independientes – Registros Buffer de Transmisión y Recepción

independientes– Control de fase y polaridad para la señal de reloj UCLK– Frecuencia de reloj UCLK programable en modo maestro– Capacidad de interrupción independiente para

Transmisión y Recepción.

Interface de comunicación : SPI

Interface de comunicación : SPI

void initSPI(void){

P1SEL = BIT1 + BIT2 + BIT4;P1SEL2 = BIT1 + BIT2 + BIT4;UCA0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC; UCA0CTL1 |= UCSSEL_2; UCA0BR0 |= 0x02; UCA0BR1 = 0; UCA0CTL1 &= ~UCSWRST; IE2 |= UCA0RXIE;

}

● Configuración del periférico USCI como SPI:

Notas de Programación C embebido

Notas de Programación C embebido

● Sin printf(), no hay operaciones GUI (gráficas)● No hay necesidad de un «end» para el programa● Controla E / S principalmente● Enfocado al control de periféricos a través de sus

registros especiales. ● Operaciones se realizan configurando registros en

grupos de bits, bytes y words.● Control completo del CPU● Sin un sistema operativo «OS»

Notas de Programación C embebido

variables volátiles: unsigned int i volatile;● La variable puede parecer cambiar de manera "espontánea",

sin la acción directa por el programa del usuario● Lo anterior puede ser debido a la manera en que los

dispositivos de E/S están mapeados en memoria● El Compilador debe tener cuidado en su optimización

● Ej .: Por eficiencia NO se guarda una copia de la variable en un registro; NO se debe asumir que la variable permanece constante cuando el compilador optimiza la estructura del programa, por ejemplo, al organizar lazos condicionales.

● Los registros periféricos asociados con los puertos de entrada deben ser declarados como «volatile»

Notas de Programación C embebido

variables volátiles: unsigned int i volatil;

La etapa de optimización del compilador pensará que foo nunca cambia dentro del código y tratará de optimizarlo.

static int foo;void bar(void) { foo = 0; while (foo != 255) ;}

static int foo;void bar(void) { foo = 0; while (true) ;}

La instrucción volatile en la declaración de la función foo previene esta optimización

Notas de Programación C embebido

Manipulación de Bits– Característico en micros y procesadores embebidos– Máscara de Bit's:

set a bit P1OUT = P1OUT | BIT3clear a bit P1OUT &= ~BIT3toggle a bit P1OUT ˆ= BIT3

– Campo de Bit's:struct { unsigned short TAIFG:1; unsigned short TAIE:2; unsigned short TACLR:5; } TACTL_bit;

Uso: TACTL_bit.TAIFG = 1

Notas de Programación C embebido

Aspectos adicionales● Los Programas para sistemas embebidos tienden a ser

simples, sin gran cantidad de manipulaciones complejas de datos.

● Gran parte de código está generalmente enfocada al control de periféricos a través de la configuración de sus registros especiales

● Las Operaciones en bits, bytes o words son importantes.● Operaciones básicas:

● El cambio y la rotación de los bits● Operaciones lógicas (Booleanas) a nivel de bit (A && B) y

operaciones entre bits (A y B)● Uso de máscaras de bits para probar y modificar bits

individuales.

Notas de Programación C embebido

● Uso de la estructura en C «Union» para la manipulación de bits individuales a la par de escritura de bytes/words completos

union {unsigned short TACTL; // Timer_A Controlstruct {unsigned short TAIFG : 1; // Timer_A counter interrupt flagunsigned short TAIE : 1; // Timer_A counter interrupt enableunsigned short TACLR : 1; // Timer_A counter clearunsigned short : 1;unsigned short TAMC : 2; // Timer_A mode controlunsigned short TAID : 2; // Timer_A clock input dividerunsigned short TASSEL : 2; // Timer_A clock source selectunsigned short : 6;} TACTL_bit;

} TimerA;

bit 0

Código ensamblador

ORG 0F800h ; Program «Toggle»Toggle mov.w #0280h,SP ; Initialize SPStopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDTSetupP1 bis.b #001h,&P1DIR ; P1.0 outputMainloop xor.b #001h,&P1OUT ; Toggle P1.0Wait mov.w #050000,R15 ; Delay to R15L1 dec.w R15 ; Decrement R15 jnz L1 ; Delay over? jmp Mainloop ; Again ; Interrupt Vectors ORG 0FFFEh ; MSP430 RESET Vector DW Toggle END

Código ensamblador

ORG 0F800h ; Program «Toggle»Toggle mov.w #0280h,SP ; Initialize SPStopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDTSetupP1 bis.b #001h,&P1DIR ; P1.0 outputMainloop xor.b #001h,&P1OUT ; Toggle P1.0Wait mov.w #050000,R15 ; Delay to R15L1 dec.w R15 ; Decrement R15 jnz L1 ; Delay over? jmp Mainloop ; Again ; Interrupt Vectors ORG 0FFFEh ; MSP430 RESET Vector DW Toggle END

Código ensamblador

● El estilo de programa anterior se conoce como «absolute assembly», ya que las direcciones de memoria se dan explícitamente en la fuente mediante directivas ORG.

● La otra alternativa es que confiarle al «linker / loader» la determinación de la dirección de inicio o salto de cada rutina; a esto se le conoce como «relocatable assembly»

● El programa no debe contener direcciones absolutas, por ejemplo, saltar a una dirección de 16 bits, sólo debe tener direcciones relativas, por ejemplo, con relación al valor actual del contador de programa «PC».

123

Material para el curso

• MSP430 Lauchpad $9.90 USD

https://estore.ti.com/MSP-EXP430G2-MSP430-LaunchPad-Value-Line-Development-kit-P2031.aspx

• Capacitive Touch BoosterPack $10USD

https://estore.ti.com/430BOOST-SENSE1-MSP430-Capacitive-Touch-BoosterPack-P2361.aspx

MSP430 Capacitive Touch Bundle $15USD

https://estore.ti.com/MSP430-Capacitive-Touch-Bundle-P3176.aspx