desarrollo de sistemas embebidos - itq.edu.mx · launchpad development board emulación embebida...
TRANSCRIPT
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
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
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 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 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
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
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
● 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 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
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•
● 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
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;}
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
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
● 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