1 Seminario de MSP430: Programa MSP430 Introducción CPU de 16bits Reset, interrupciones y modos de operacion Sistema de Reloj Periféricos auxiliares Periféricos comunes Desarrollo y depuración Demostración. 2 Finalidad / Orientación de MSP430 APLICACIONES Sistemas alimentados con baterías (low power) Sistemas de procesamiento de señales Sistemas de tamaño limitado Sistemas de control en general. Sistemas de control numérico 3 Características generales (Rangos de operación) CPU RISC de 16-bit de Arquitectura Von Neuwman Solo 27 instrucciones básica a aprender. (+24 emuladas) Múltiples y flexibles tipos de Reloj. Versiones disponibles en Flash, ROM y OTP. Precios desde US$0.99 ( MSP430F1101 @10ku ) Consumo nominal de 0.1 ~ 250uA, (@ 2.2v/1MIPS) Alimentación : 1.8 ~ 3.8v (operación) Alimentación : 2.7 ~ 3.8v (programación) Frecuencia: DC ~ 8MHz Temperatura: - 40 ~ + 85C Desarrollo y depuración IN-CIRCUIT 4 MPS430 Posee arquitectura ¨ortogonal¨ Ortogonal = todas las instrucciones funcionan con todos los modos de direccionamiento. Source Set de instrucciones reducido Instrucciones fáciles de aprender. Sin instrucciones especiales Bajo consumo Código eficiente Código compacto Source Address Modes Destination Address Modes Destination Otros Micros Instructions MSP430 Instructions Set de instrucciones complejo Instrucciones especiales a aprender Poco eficiente Mayor área de silicio. 5 Mapa de memoria: Vectores de Interrupción FFFFh Vectores de interrupción de 16-bit Memoria de Programa Memoria de Datos p Memoria Flash, OTP o ROM para código. 128/256 Bytes de memoria Flash de información. 1000h Bootstrap Loader 0C00h ROM Bootstrap loader SRAM RAM 200h Registros de Periféricos SFR’s Registros de periféricos (SFRs) 6 Distribución de Memoria y Periféricos: 0FFFFh ROM, RAM, Flash y SFR’s distribuidos en memoria única no paginada. 0FE00h Segmento 1 0FC00h Memoria Flash de datos en segmentos de 128 Bytes. 0FA00h Posibilidad de escribir un bit, un byte o word (solo de 1->0) Vectores de interrupción Borrado de segmentos completos Memoria de Programa Programación vía JTAG o BSL in-circuit. Protección por contraseña o fusible físico de seguridad Segmento 0 Con vectores de interrupción Segmento 2 0F400h Segmento 6 Memoria de INFORMACION Bootstrap Loader 0F200h 1000h 0F000h RAM 01080h Registros de periféricos Segmento 7 Segmento A Segmento B 01000h 7 MSP430 v/s CPU de 8 bits ¿Por que una nueva CPU? Ciclos de CPU: 8+8 ADD 8x8 MPY 16+16 ADD 16x16 MPY Binary to BCD Total MSP430/ CPU de 8 bit 1 1 63 71 1 8 150 333 96 719 311 1132 Instrucciones MSP430/ CPU de 8 bits 1 1 7 16 1 7 12 33 9 30 30 87 *MSP430 2000 Metering Application Report (SLAA024), Microchip (AN526) 8 MSP430 v/s otras CPU’s Comparación respecto a otros microcontroladores: Tamaño del código (bytes) Frente a similares funciones matemáticas y en condiciones similares. Ciclos de instrucción 9 MSP430 v/s otras CPU’s MSP430F135 Bytes ATmega8 Ciclos Bytes PIC18F242 Ciclos Bytes 8051 Ciclos Bytes H8/300L Ciclos Bytes MC68HC11 Ciclos Bytes Ciclos Mat. 8b 172 299 116 157 386 318 141 112 354 680 285 387 Matr. 8b 118 2899 364 5300 676 20045 615 17744 356 9098 380 15412 Swt. 8b 180 50 342 131 404 109 209 84 362 388 387 214 Mat 16b 172 343 174 319 598 625 361 426 564 802 315 508 Matr. 16b 156 5784 570 24426 846 27021 825 29468 450 15280 490 23164 Swt. 16b 178 49 388 144 572 163 326 120 404 398 405 230 Mat 32b 250 792 316 782 960 1818 723 2937 876 1756 962 1446 Mat P.F. 662 1207 1042 1601 1778 1599 1420 2487 1450 2458 1429 4664 Filtro FIR 668 152193 1292 164793 2146 248655 1915 206806 1588 245588 1470 567139 Mult. Matr. 252 6633 510 16027 936 36190 345 9454 462 26750 499 26874 Total 2808 170249 5114 213680 9302 336543 6880 269638 6866 303198 6622 640038 Normal. 1.00 1.00 1.82 1.26 3.31 1.98 2.45 1.58 2.45 1.78 2.46 3.76 10 Línea de productos MSP430 1v, 50MHz USB, DMA 4Mb memory Integrated RF FLASH Características/Desempeño 1.8 - 3.6v Basic Clock Timer_A Comparator_A F43x F13x ADC12 Timer_A/B USART x32x LCD92 LCD160 ADC12 Timer_A/B (2) USART MPY ADC12 Timer_A/B (2) USART MPY LCD120 Timer_A USART MPY F5xx F44x F14x x33x x31x 1.8 - 3.6v FLL+ SVS Timer_A/B, Basic Timer Comparator_A ADC12 Timer_A/B (2) USART MPY, DAC12 2.5 - 5v FLL Basic Timer, 8-bit T/C Timer/Port Slope ADC LCD84 ADC14 FLASH+LCD F15x ROM/OTP+LCD FLASH F12x F43x USART F11x F41x $0.99 LCD96 11 MSP430x11x(1) XIN XOUT VCC VSS RST/NMI P1.x 8 ACLK 8Mhz Basic Clock FLASH RAM 1/4kB 128/256B Power-On Reset Port 1 with IRQ capability Comp_A Port2 with IRQ capability SMCLK MCLK JTAG/DeBUG RISC CPU 16-bit MAB MDB TEST ACLK Watchdog Timer_A3 15-bit 16-bit SMCLK P2 6 P1.x MSP430F1101 1kB Flash $0.99 12 MSP430x13x LFXT1 XT2 VCC VSS AVCC AVSS RST/NMI 2 2 8Mhz Basic Clock ACLK FLASH RAM 8/16kB 512/256B P1.x P2.x P3.x P4.x P5.x P6.x 8 8 8 8 8 8 Power-On Reset Port 1/2 with IRQ capability Port 3/4 Port 5/6 ADC12 200ksps Autoscan Vref Temp Comp_A USART0 UART/SPI SMCLK MCLK JTAG/DeBUG RISC CPU 16-bit MAB JTAG MDB 4 ACLK SMCLK Watchdog Timer_A3 Timer_B3 15-bit 16-bit 16-bit VRef+ VeRef+ VRef- 64 TQFP MSP430F133 8kB Flash $2.95 13 MSP430x14x LFXT1 XT2 VCC VSS AVCC AVSS RST/NMI 2 2 8Mhz Basic Clock ACLK FLASH RAM 32 - 60kB 1/2kB P1.x P2.x P3.x P4.x P5.x P6.x 8 8 8 8 8 8 Power-On Reset Port 1/2 with IRQ capability Port 3/4 Port 5/6 ADC12 200ksps Autoscan Vref Temp Comp_A USART0 UART/SPI USART1 USART/SPI SMCLK MCLK JTAG/DeBUG RISC CPU 16-bit MAB JTAG MDB 4 MPY/MAC ACLK 8/16-bit SMCLK Watchdog Timer_A3 Timer_B7 15-bit 16-bit 16-bit VRef+ VeRef+ VRef- 64 TQFP MSP430F149 60kB Flash $5.95 14 MSP430x31x XIN XOUT XBUF VCC VSS RST/NMI P0.x 8 4Mhz FLL Oscillator ACLK ROM 2-16kB or OTP 16kB MCLK RAM Power-On Reset 8b Timer/ Counter UART Timer/Port slope ADC (2) 8-bit Basic Timer 1 (2) 8-bit 128-512B Port0 with IRQ capability MCLK JTAG/TEST RISC CPU 16-bit MAB JTAG MDB 4 ACLK Watchdog 15-bit LCD Driver 23 92 Seg. Sx/0x 4 COMx MCLK 6 CIN TP.x MSP430C311S 2kB ROM $1.75 4 Rx 15 MSP430x32x XIN XOUT XBUF VCC VSS AVCC AGND RST/NMI P0.x 8 4Mhz FLL Oscillator ACLK ROM 8/16kB or OTP 16kB MCLK RAM Power-On Reset 8b Timer/ Counter UART Timer/Port slope ADC (2) 8-bit Basic Timer 1 (2) 8-bit 256/512B Port0 with IRQ capability MCLK JTAG/TEST RISC CPU 16-bit MAB JTAG MDB 4 ACLK Watchdog ADC14 15-bit 12+2 bit LCD Driver 21 Sx/0x 84 Seg. 4 COMx MCLK 6 Rext Ax SVcc 6 CIN TP.x 4 Rx 16 MSP430x33x XIN XOUT XBUF VCC VSS 3 3 4Mhz FLL Oscillator ACLK ROM 24/32kB or OTP 32kB MCLK RST/NMI RAM Power-On Reset 1kB P1.x P2.x P3.x P4.x P0.x 8 8 8 8 8 Port 1/2 with IRQ capability Port 3/4 USART UART/SPI Basic Timer 1 (2) 8-bit Port 0 with IRQ capability MCLK JTAG/TEST RISC CPU 16-bit MAB JTAG MDB 4 MPY/MAC ACLK 8/16-bit Watchdog Timer_A5 15-bit 16-bit Timer/Port Slope ADC (2) 8-bit 8b Timer/ Counter UART LCD Driver 30 120 Seg. MCLK TP.x COMx 4 6 CIN 4 Sx/0x Rx 17 Seminario de MSP430: Programa MSP430 Introducción CPU de 16bits Reset, interrupciones y modos de operacion Sistema de Reloj Periféricos auxiliares Periféricos comunes Desarrollo y depuración Demostración. 18 MPS430 Posee arquitectura ¨ortogonal¨ Ortogonal = todas las instrucciones funcionan con todos los modos de direccionamiento. Source Set de instrucciones reducido Instrucciones fáciles de aprender. Sin instrucciones especiales Bajo consumo Código eficiente Código compacto Source Address Modes Destination Address Modes Destination Otros Micros Instructions MSP430 Instructions Set de instrucciones complejo Instrucciones especiales a aprender Poco eficiente Mayor área de silicio. 19 MSP430 Tipos de intrucciones: 51 instrucciones disponibles en assembler: 27 instrucciones básicas Ö RISC 24 instrucciones emuladas Ö CISC 7 modos de direccionamiento para origen , y 4 para destino Modo de Registro (directo) Modo indexado Modo Simbólico Modo Absoluto Modo Indirecto Modo Indirecto c/Auto incremento Modo Inmediato Procesamiento por Bit, byte o word. Instrucciones y modos de direccionamiento idénticos para RAM, ROM, EPROM, Flash y Periféricos. 20 Arquitectura de MSP430 ALU de16-bit Buses de datos y direcciones de 16bit 16, registros multi propósito de 16-bit (acumuladores) R0/PC (Program Counter) R1/SP (Stack Pointer) R2/SR (Status) R3/CG (Constant Gen.) R4 - R15 (Propósito general) Acceso total a todos los registros incluyendo PC, SP, SR y CG. Operaciones en un ciclo Soporte para operaciones Memoria~Memoria Diseño optimizado para programación en C. BUS DATOS MDBDE - meory data bus BUS DE address DIRECCIONES memory bus - MAB 15 0 R0/PC - Program Counter 0 R1/SP - Stack Pointer 0 R2/SR - Status V SCG1 SCG0 OscOff CPUOff GIE N Z C R3/CG - Constant Generator R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 DST 16 SRC 16-bit ALU 16 21 MSP430 Program Counter y Stack Pointer 15 0 0 rw R0/PC – Contador de programa Contador de programas de 16bits -> 64k de código no paginado. 15 0 0 R1/SP - Stack Pointer rw push #01234h Address pop R8 Address Address 0xxxh Word1 0xxxh - 2 Word2 0xxxh - 4 Word3 0xxxh - 6 0xxxh - 8 SP, TOS 0xxxh Word1 0xxxh - 2 Word2 0xxxh Word1 0xxxh - 4 Word3 0xxxh - 2 Word2 0xxxh - 6 01234h 0xxxh - 4 Word3 0xxxh - 8 SP, TOS SP, TOS 0xxxh - 6 0xxxh - 8 TOS: top-of-stack Los registros PC y SP son completamente manipulables como cualquier registro. (ambos están mapeados en RAM) 22 MSP430 SR (registro de estado) 15 9 Reservado rw-0 8 V rw-0 Bit’s que seleccionan el reloj a usar 7 0 Osc SCG1 SCG0 Off CPU Off GIE rw-0 rw-0 rw-0 rw-0 rw-0 N Z C rw-0 rw-0 rw-0 R2/SR – Registro de estado Bit’s que definen los modos de bajo consumo. ; ;-----------------------------------------------------------------------; BIT’s del registro de estado ;-----------------------------------------------------------------------CPUOFF equ 00010h OSCOFF equ 00020h SCG0 equ 00040h SCG1 equ 00080h GIE equ 00008h LPM3 equ SCG1+SCG0+CPUOFF+GIE LPM4 equ OSCOFF+CPUOFF+GIE ; bis.w #CPUOFF,SR ; Entra en LPM0 ; bis.w #LPM3,SR ; Entra en LMP3 ; bis.w #LPM4,SR ; Entra en LPM4 23 MSP430 CG (Generador de constantes) 15 0 0 R3/CG - Constant Generator rw Registro usado para insertar constantes en el código con instrucciones de solo un parámetro. (manipulado por el linker) ; Ejemplos: 1 CLR dst es reemplazado por: MOV R3,dst R3 ha sido cargado con 00h 2 INC dst es reemplazado por: ADD 0(R3),dst R3 ha sido cargado con 01h El uso del generador de constantes queda restringido a solo constantes de uso común como 00h, 01h, FFh, etc… En general el uso de este registro esta orientado a la optimización del código, razón por la que es manipulado solo por el Linker (assembler). El compilador automáticamente usa R3 para insertar valores inmediatos o constantes en el código fuente. Estos valores inmediatos no requieren código adicional. 24 MSP430 Registros multi propósito 15 0 0 R4 ~ R15 rw Registro de propósito general de 16bits, usados como acumuladores. MSP430 dispone de 12 registros (R4 ~ R15) de propósito general para ser usados como acumuladores. 25 Ventajas de arquitectura von-Neumann add.w add.b R5,R6 R5,R6 add.w add.b #02001h,R7 #099h,R7 add.w add.b 0200h,R8 0200h,R8 add.w add.b 0C100h,R9 0C100h,R9 add.w add.b 0C100h,0200h 0C100h,0200h add.w add.b #01234h,&CCR0 #099h,&P1OUT ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; operación Word registro a registro operación Byte registro a registro operación Word inmediato 2001 a registro operación Byte inmediato 2001 a registro operación Word RAM 200h a R8 operación Byte RAM 200h a R8 operación Word Flash C100h a R9 operación Byte Flash C100h a R9 operación Word Flash a RAM operación Byte Flash a RAM operación Word inmediato a Periférico operación Byte inmediato a Periférico No existe “cuello de botella” en el acumulador. Todas las instrucciones en MSP430 son consistentes en todo el rango de memoria, no hay instrucciones especiales que aprender. 26 Modos de Direccionamiento: ; ; ; Modo de Registro (Directo), rápido, de solo un ciclo entre registros R0 ~ R15 ; add.w R7,R8 ; R7 + R8 >> R8 mov.w R7,R8 ; R7 >> R8 mov.b R5,R10 ; Byte inferior de R5 >> R10 ; ; Modo Indexado, el índice se suma como offset a cualquier registro. ; addc.w -2(R5),4(R7) ; ((R5)-2)+((R7)+4)+C >> ((R7)+4) mov.w 2(SP),R7 ; Mueve el segundo ítem del stack a R7 mov.b R5,9(R10) ; Byte inferior de R5 >> (R10+9) ; ; Modo Simbólico, el contenido de la “etiqueta” se calcula como una diferencia desde PC add.w mov.w mov.b EDE,TONI EDE,R8 TONI,EDE ; (EDE) + (TONI) >> (TONI) ; (EDE) >> R8 ; Mueve byte (TONI) a (EDE) ; ; Modo Absoluto, la “etiqueta” es una dirección absoluta. add.w mov.w mov.b &CCR1,&CCR2 &TACTL,R8 &P1IN,&P2OUT ; (CCR1) + (CCR2) >> (CCR2) ; (TACTL) >> R8 ; Mueve (P1IN) a (P2OUT) 27 Modos de Direccionamiento ; ; ; Modo Indirecto, Cualquier registro es usado como puntero ; add.w @R8,R9 ; (R8) + R9 >> R9 mov.w @R9,0(R12) ; (R9) >>(R12+0) >>> @R12 en destino mov.b @R8,&P2OUT ; (R8) >> P2 registro de periférico dec.w @R9 ; (R9) -1 >> (R9) ; ; Modo Indirecto con auto incremento, cualquier registro es usado como puntero y ; posteriormente se incrementa ; add.w @R10+,R9 ; (R10) + R9 >> R9,R10+2 >> R10 mov.w @R10+,0(R12) ; (R10) >> (R12+0),R10+2 >> R10 mov.b @R5+,&P2OUT ; (R5) >> P2OUT, R5+1 >> R5 inc.w @R5+ ; (R5) + 1 >> (R5), R5+2 >> R5 ; ; Modo Inmediato, después de la instrucción sigue una constante. ; add.w #0A00h,R8 ; 0A00h + R8 >> R8 mov.w #0010,&TACTL ; 0Ah >> Timer_A Registro de periférico bit.w #0100h,4(R9) ; Prueba si Bit 8=1 ? En la 4ta word. mov.b #01Fh,0(R12) ; 01Fh >>(R12+0) Se usa un offset de “0” y direccionamiento indexado para el destino de las operaciones. 28 MSP430 Set de Instrucciones Formato I Origen,destino add(.b) addc(.b) and(.b) bic(.b) bis(.b) bit(.b) cmp(.b) dadd(.b) mov(.b) sub(.b) subc(.b) xor(.b) Formato II Origen,argumento Br call swpb sxt push(.b) pop.(b) rra(.b) rrc(.b) inv(.b) inc(.b) incd(.b) dec(.b) decd(.b) adc(b) sbc(.b) clr(.b) dadc(.b) rla(.b) rlc(.b) tst(.b) Formato III +/- Offset 9bit jmp jc Jnc jeq jne jge jl jn auxiliares Clrc setc clrz setz clrn setn dint eint nop ret reti NOTA: No hay micro-codigo todas las instrucciones estan incrustadas por hardware en la CPU. Las instrucciones emuladas usan las instrucciones basicas mas registros dedicados como R3 (CG) 29 MSP430 Instrucciones Emuladas Se usan como cualquier instrucción incrustada, sin restricciones. Instrucciones con formato CISC – (el código es simple de entender) Son reemplazadas con instrucciones RISC incrustadas y con el uso de CG/PC/SP por el assembler. No se pierde velocidad ni se requiere código extra. ; ; ; R5 #01h,R5 ; Incremento (emulada) ; instrucción incrustada #01h,SR ; limpiar carry (emulada) ; instrucción incrustada eint bis.w #08h,SR ; habilitar interrupciones (emulada) ; instrucción incrustada ; br mov.w R5 R5,PC ; saltar a la pos. contenida en R5 (emulada) ; instrucción incrustada ; ret mov.w @SP+,PC ; Restorna desde una subrutina (emulada) ; instrucción incrustada ; ; inc.w add.w clrc bic.w 30 MSP430 Formato de instrucciones Formato I Op-Code add.w Add.b R7,R8 R7,R8 Formato II R9 R9 Op-Code jmp Label Ad B/W As Destination-Register ; 16 bits R7 + R8 >> R8 (16bits) ; 8 bits R7 + R8 >> R8 (8bits) Op-Code rlc.w rlc.b Formato III Source-Register B/W Ad D/S- Register ; 16b de R9 son desplazados a la izquierda a través del carry ; 8b de R9 son desplazados a la izquierda a través del carry Condition 10-bit PC offset ; salta a la etiqueta “Label” Ad = modo de direccionamiento usado para destino As = modo de direccionamiento usado para origen B/W = operación como byte o como word Condition = Condición para un salto condicional D-Register = registro usado como destino D/S-Register = registro usado como origen/destino Op-code = código de la instrucción usada S-Register = registro usado como origen 31 j Instrucciones para control de flujo: jmp Ö salta a una posición del código en forma incondicional Es el método incondicional mas rápido de controlar el flujo del programa con offset’s de -511/+512 bytes. 1 word. br Ö Salto largo incondicional a cualquier parte del código. Se carga una posición de16-bit en el contador de programa. No es una llamada a subrutina ya que no se respalda posición de retorno alguna. 2 words,. call Ö Llamada a subrutinas Se carga una posición de 16-bit en el contador de programa, y la dirección de retorno y el contenido del registro de estado son automáticamente puestos en el stack 2 words. 32 Ejemplos de Saltos: ; ; Mainloop ;----------------------------------------------------------------------------; Retardo por software en R5 ;----------------------------------------------------------------------------mov.w #1000, R5 ; carga cuenta de 1000 Loop1 dec.w R5 ; decrementa R5 jnz Loop1 ; R5 = 0?, no? >> Loop1 ; ;----------------------------------------------------------------------------; espera que &CCR1=5555 ;----------------------------------------------------------------------------Loop2 cmp.w #05555,&CCR1 ; #05555=CCR1 jne Loop2 : si no es igual >> Loop2 ; ;----------------------------------------------------------------------------; salta a Mainloop ;----------------------------------------------------------------------------jmp Mainloop ; salta en forma incondicional a Mainloop Un valor con signo de 10bits, permite saltos en el rango de - 511 a + 512 words relativos a la dirección actual. Los saltos requieren solo una Word de código y dos ciclos. Se utilizan para controles el flujo con saltos cortos. 33 Ejemplos de Saltos Largos: ; ; ; Ejemplo de una tabla condicional de salto usando R15 Mainloop Table Ref0 ; Ref1 ; Ref2 ; next clr.w br DW DW DW R15 Table(R15) Ref0 Ref1 Ref2 ; limpia puntero para saltos ; salta clr.b jmp &CACTL1 Next ; configura comparador A mov.b jmp #CAREF0+CAON,&CACTL1 Next ; 0.25*Vcc en P2.3, activa comparador mov.b #CAREF1+CAON,&CACTL1 ; 0.5*Vcc en P2.3, activa comparador incd.w R15 and #06h,R15 ; Incrementa puntero para saltos ; asegura salto dentro del rango? ; ; Ejemplo de salto largo directo br #Mainloop ; Los Saltos Largos son posibles hacia cualquier parte de los 64k de memoria y se pueden utilizar con cualquier modo de direccionamiento. 34 Ejemplos de Llamadas a Subrutinas ; ; Ejemplo de llamada directa: call #Setup ; llama subrutina dirección de retorno >> TOS ; ; Ejemplo de llamadas según tabla condicional Mainloop ; Table Sub1 ; Sub2 ; Setup call xor.w jmp Table(R15) #02h,R15 Mainloop DW DW Sub1 Sub2 clr.b nop ret &P1OUT mov.b nop ret #0FFh,P1OUT clr mov.b ret R15 # 0FFh,&P1DIR ; llama sub rutina dirección de retorno >> TOS ; conmuta puntero ; repite ; pone en “0” todas la salida de P1 ; retorna de subrutina (mov SP+,PC) ; pone en “1” todas las salida de P1 ; retorna de subrutina (mov SP+,PC) ; limpia el puntero de llamadas ; puerto 1 como salida ; retorna de subrutina (mov SP+,PC) Las llamadas son posibles desde y hacia cualquier parte de los 64K de memoria (y en todos los modos de direccionamiento). 35 Manipulación de Bit’s: bic(.b) Ö Pone a “0” uno o mas bit’s en el destino. Se operan lógicamente el inverso del origen y el destino. (and) El registro de estado no es afectado. bis(.b) Ö Pone a “1” uno o mas bit’s en el destino. se operan lógicamente el origen y el destino (or), El registro de estado no es afectado. bit(.b) Ö Prueba uno o mas bits en el destino. Se operan lógicamente el origen y el destino (and) El resultado afecta solo al registro de estado. cmp(.b) Ö Compara Origen con Destino. El origen es restado del destino. El resultado afecta solo al registro de estado. 36 Ciclos de instrucciones: Ciclos de instrucciones: Accion: Nº de ciclos Largo de instruccion Retorno desde interrupcion (reti) 5 1 Interrupcion 6 - Reset por WDT 4 - Reset (RST / NMI) 4 - 37 Seminario de MSP430: Programa MSP430 Introducción CPU de 16bits Interrupciones, Reset y modos de operacion Sistema de Reloj Periféricos auxiliares Periféricos comunes Desarrollo y depuración Demostración. 38 MSP430 Vectores de Interrupcion 16 vectores disponibles Los vectores se cargan en el PC PC y SR se respaldan en el stack en forma automática. Vectores de interrupción MEMORIA DE PROGRAMA Memoria de info Bootstrap Loader RAM Registros de periféricos 0FFFFh Fuente Flag Interr. Direccion Prior. Pwr.Up. Wdt WDTIFG RESET 0FFFEh 15 NMI, OF, FV. NMIIFG No masc 0FFFCh 14 Timer B TBCCR0 Masc 0FFFAh 13 Timer B TBCCR1-6 Masc 0FFF8h 12 Comparador A CAIFG Masc 0FFF6h 11 WDT (interv) WDTIFG Masc 0FFF4h 10 USART0 RX URXIFG0 Masc 0FFF2h 9 USART0 TX UTXIFG0 Masc 0FFF0h 8 ADC12 ADC12IFG Masc 0FFEEh 7 Timer A TACCR0 Masc 0FFECh 6 Timer B TACCR1-2 Masc 0FFEAh 5 I/O port P1 P1IFG0-7 Masc 0FFE8h 4 USART1 RX URXIFG1 Masc 0FFE6h 3 USART1 TX UTXIFG1 Masc 0FFE4h 2 I/O port P2 P2IFG0-7 Masc 0FFE2h 1 0FFE0h 0 39 Procesamiento de Interrupciones: Antes de una interrupción: Item1 Item2 SP, TOS Item1 Item2 PC SR SP, TOS Después de una interrupción: SR es recuperado desde el stack PC es recuperado desde el stack Item1 Item2 PC SR Durante una interrupción: PC copiado en stack SR copiado en stack GIE, CPUOFF, OscOFF y SCG1 son limpiados los flag IFG son limpiados cuando provienen de una fuente única (ej. Usart) SP, TOS El contexto del registro de estado es respaldado en el stack junto con el contador de programa. El proceso de interrupciones requiere un total de 11 ciclos adicionales. 40 MSP430 Ejemplo de interrupción: MSP430F11x1 posee capacidad de interrupción en ambos flancos en todos sus pines Cualquier interrupción habilitada saca de los modos de bajo consumo a la CPU MSP430F11x1 ; ; SetupP2_0 TEST Vcc P2.5 Vss XOUT XIN RST P2.0 P2.1 P2.2 bic.b bis.b bis.b mov.w nop #01h,&P2DIR #01h,&P2IES #01h,&P2IE #LPM3+GIE,SR P2_ISR bic.b nop reti #01h,&P2IFG ORG 0FFE6h DW Mainloop P2_ISR ; ; ; ; ; ; ; ; ; P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P2.4 P2.3 P2.0 configurada como entrada Interrupción en flanco H->L Interrupción habilitada en P2.0 Entra en LPM3 con interrupciones habilitadas ciclo inútil. limpia flag de interrupción en P2.0 ciclo inútil… retorna al estado previo a la interrupción. ; vector de Interrupcion de P2 ; 41 MSP430 Power-UP #include ; RESET StopWDT SetupP1 Mainloop "msp430x11x1.h” ORG mov.w mov.w bis.b 0F000h #300h,SP #WDTPW+WDTHOLD,&WDTCTL #01h,&P1DIR xor.b jmp #01h,&P1OUT Mainloop ORG DW END 0FFFEh RESET ; definición de registros ; ; ; ; ; ; ; ; ; ; inicio de memoria de programa inicio de stack pointer detiene WDT configura P1.0 como salida cambia P1.0 (xor) salta a repetir vector de reset de MSP430x11x1 configura inicio de programa MSP430F1121 TEST Vcc P2.5 Vss XOUT XIN RST P2.0 P2.1 P2.2 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P2.4 P2.3 1) 2) ck Sta T WD 3) T ESE R r de o t Vec 42 Modos de bajo consumo (Low Power) Modo LP SCG1 SCG0 OSCOFF CPUOFF CPU Mclk SMclk Aclk DCO Activo 0 0 0 0 ON ON ON ON ON LPM0 0 0 0 1 OFF OFF ON ON ON LPM1 0 1 0 1 OFF OFF ON ON OFF* LPM2 1 0 0 1 OFF OFF OFF ON OFF* LPM3 1 0 0 1 OFF OFF OFF ON OFF LPM4 1 1 1 1 OFF OFF OFF OFF OFF Consumo en uA @ 1MHz * DCO esta deshabilitado, pero el generador de DC sigue activo a menos que se manipule sus bits de control. Modos de Bajo Consumo 43 MSP430 Aplicación para RTC de 1 año: MSP430 6us wake-up* f 1mA Crystal 32,768 10-bit Frequency Integrator 2uA 1s 2s Otra CPU 17,500us “power-up**” 1mA /(N+1) Digitally Controller Osciallator DCO f System FLL - US Patent # 5,877,641 “ 9uA 1s **Microchip (AN606) 2s 44 MSP430 Aplicación para RTC de 1 año: MSP430x11x CR2032 UART, SPI, IIC ... Datos… Vcc Xin Vss Xout RST/NMI P2.x RX TX P1.x 32768 12 Pines disponibles CR2032 180mAH. Corriente drenada para 10 años de vida = 0.180A/ 10 años / 365 días / 24 horas < 2.2uA Ejemplo RTC : operación en LPM3 con oscilador a 32KHz (1.5uA). 1Hz ISR. Consumo normal en LPM3 Rutina de interrupción (50 ciclos/ISR) 1s x 1.50uA 1.50uA 50us x 400uA 0.02uA 1.52uA MSP430 posee un “wake-up” de solo 6uS, que permite un uso extendido del modo de bajo consumo LPM3 45 Seminario de MSP430: Programa MSP430 Introducción CPU de 16bits Interrupciones, Reset y modos de operacion Sistema de Reloj Periféricos auxiliares Periféricos comunes Desarrollo y depuración Demostración. 46 MSP430x11x/12x Sistema de Reloj Básico DIVA 2 LFXTCLK /1, /2, /4, /8 OscOff ACLK XTS Auxiliary Clock XIN SELM DIVM LFXT1 Oscillator 2 CPUOff 2 3 XOUT 0,1 /1, /2, /4, /8, off MCLK 2 DCOCLK Main System Clock Vcc Vcc Rsel SCG0 3 0 DC- Gen P2.5/Rosc 1 DCOR DCO 3 MOD 5 Digital Controlled Oscillator + Modulator SELS DIVS 2 SCG1 0 /1, /2, /4, /8, off SMCLK 1 Sub-System Clock 47 MSP430x13x/14x/15x/16x Sistema de Reloj Básico Sistema de reloj F13x ~ F16x DIVA 2 LFXTCLK /1, /2, /4, /8 OscOff ACLK XTS Auxiliary Clock XIN SELM DIVM LFXT1 Oscillator 2 CPUOff 2 3 XOUT 0,1 /1, /2, /4, /8, off MCLK 2 XT2Off Main System Clock XT2IN XT2 Oscillator DCOCLK XT1OUT Vcc Vcc Rsel SCG0 3 0 DC- Gen P2.5/Rosc 1 DCOR DCO 3 MOD 5 Digital Controlled Oscillator + Modulator SELS DIVS 2 SCG1 0 /1, /2, /4, /8, off SMCLK 1 Sub-System Clock 48 MSP430x1xx LF XTAL (Cristal Baja Frec.) Solo se requiere un cristal de reloj; No se necesitan componentes adicionales. MSP430F11x1 32768 TEST Vcc P2.5 Vss XOUT XIN RST P2.0 P2.1 P2.2 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P2.4 P2.3 ACLK= 32768 (o fracción) MCLK~1MHz DCOCLK (o fracción) SMCLK~1MHz DCOCLK (o fracción) NOTA! Es necesario verificar el estado de flag OSCFAULT antes de cambiar MCLK a LFXT1. La operación a prueba de fallas, automáticamente cambia MCLK a DCO si es puesto el flag OSCFAULT (falla de cristal). 49 MSP430x1xx DCO como reloj. Sin componentes externos; Solo el oscilador DCO interno. MSP430F11x1 TEST Vcc P2.5 Vss XOUT XIN RST P2.0 P2.1 P2.2 SetupBC Mainloop bis jmp #OSCOFF,SR Mainloop P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P2.4 P2.3 ACLK= 0 MCLK= DCOCLK (o fracción) SMCLK= DCOCLK (o fracción) ; oscilador externo desactivado ; no hace nada NOTA! La fuente por defecto de reloj al momento del Power UP es el DCO. La configuración posterior define la fuente de reloj a utilizar. 50 MSP430x11x DCO Parameters 51 MSP430 Configuración de DCO La frecuencia nominal es definida por los bits RSEL La frecuencia generada por el DCO es estable, pero varia con la temperatura y tensión de alimentación Set_1MHz ; ; Set_2MHz ; ; Set_Fast ; ; Set_Slow bis.b #05h,&BCSCTL1 ; DCO~1MHz bis.b #06h,&BCSCTL1 ; DCO~2MHz bis.b mov.b #07h,&BCSCTL1 #0E0h,&DCOCTL ; DCO~5Mhz ; bic.b mov.b #07h,&BCSCTL1 #DIVS1+DIVS0,&BCSCTL2 ; DCO~100kHz ; SMCLK=DCOCLK/8 52 MSP430x11x/12x HF XTAL (Cristal Alta Frec.) Cristal de alta frecuencia; Requiere condensadores apropiados. MSP430F11x1 TEST Vcc P2.5 Vss XOUT XIN RST P2.0 P2.1 P2.2 SetupBC Mainloop bis.b jmp #XTS,&BCSCTL1 Mainloop P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P2.4 P2.3 ACLK= LFXT1 (o fracción) MCLK= LFXT1 o DCOCLK (o fracción) SMCLK= LFXT1 o DCOCLK (o fracción) ; LFXT1/ACLK = XT XTAL ; hace nada. NOTA! Es necesario verificar el estado de flag OSCFAULT antes de cambiar MCLK a LFXT1. La operación a prueba de fallas, automáticamente cambia MCLK a DCO si es puesto el flag OSCFAULT (falla de cristal). 53 MSP430x11x/12x Buffer de Reloj Se pueden sacar por los pines las señales de reloj internas: MSP430F11x1 P1.7 TEST P1.6 Vcc P1.5 P2.5 SMCLK/P1.4 Vss XOUT P1.3 XIN P1.2 RST P1.1 P2.0/ACLK P1.0 P2.4 P2.1 P2.2 P2.3 ACLK ; ; Out_ACLK Out_SMCLK bis.b bis.b bis.b bis.b #01h,&P2DIR #01h,&P2SEL #010h,&P1DIR #010h,&P1SEL ; ; ; ; P2.0 P2.0 P1.4 P1.4 SMCLK configurado configurado configurado configurado como como como como salida “modulo” salida “modulo” 54 Sistema de Reloj SW/HW FLL (frequency Locked Loop) Una frecuencia de referencia ej. ACLK o 50/60Hz es usada para medir DCOCLK’s Manipulación de software periódica o predefinida estabiliza DCOCLK DCOCLK es programable digitalmente en el rango de: 100kHz - 8Mhz Frecuencia de referencia. ACLK or 50/60Hz SW+HW Control de DCOCLK Rsel SCG0 MOD DCO 3 DCGenerator 5 Digital Controlled Oscillator DCO DCOCLK + Modulator MOD 55 Sistema de Reloj SW/HW FLL (frequency Locked Loop) Ejemplo: DCOCLK= 1,000,000 si ACLK= 8192 ACLK (8192Hz) dispara una captura en CCI2B, DCOCLK es la fuente de reloj para el Timer_A DCOCLK es la fuente de reloj para timer_A , pensando en 1,000,000Hz. Captura debe ser = 1,000,000/8192 ~122 Destino 1,000,000Hz CCI2B-ISR DCOCLK para timer CCI2B_ISR Captura 122us 15 0 CCI2B 3 Intervalo CCI2B_ISR DecDCO IncDCO DoneDCO Test_DCO mov sub mov cmp jlo jeq dec.b jmp inc.b jmp clr reti 1 2 &CCR2,R14 R15,R14 &CCR2,R15 #122,R14 IncDCO DoneDCO &DCOCTL Test_DCO &DCOCTL Test_DCO &CCTL2 ; ; ; ; ; ; ; ; ; ; ; ; R14 = R14 = R15 = Delta 0 Timer_A Capture 15 0 CCR2 captura SMCLK captura diferencia captura SMCLK = SMCLK/(3278/4) si es igual termina decrementa si es mayor incrementa si es menor detiene CCR2 retorna de subrutina 56 Seminario de MSP430: Programa MSP430 Introducción CPU de 16bits Interrupciones, Reset y modos de operacion Sistema de Reloj Periféricos auxiliares Periféricos comunes Desarrollo y depuración Demostración. 57 MSP430F Registros de periféricos MSP430 usa arquitectura Von Newan Todos los periféricos están mapeados en memoria. Se puede utilizar cualquier instrucción con estos registros Vectores de interrupción 0FFFFH Memoria de Programa Info. Memory Bootstrap Loader RAM 0200h Registros de Periféricos 000h 58 MSP430 Controlador de Memoria FLASH MEMORIA FLASH Generador interno de voltaje de programación. Programación de Byte o word. Operación Ultra low-power. Borrado de memoria por segmentos o masivo. Programación desde 2.7v Generador de temporización interno (independiente) No se puede ejecutar código desde la Flash (ROM) mientras se está escribiendo. 59 MSP430 Controlador de Memoria FLASH La memoria Flash está segmentada en bloques de 128byte para datos, y en bloques de 512bytes para programa. Cualquier acceso a los registros de control de memoria Flash, esta protegido por una contraseña. El borrado o escritura se puede efectuar desde la memoria de programa o desde RAM. Si la escritura o borrado se inicia desde la memoria de programa, la CPU es detenida mientras dura el proceso. Al borrar la memoria, el estado lógico de cada bit es ”1”, la escritura pone los bit’s en estado lógico “0”. 60 MSP430 Supervisor de Alimentación SUPERVISOR DE ALIMENTACION Monitoreo de AVcc. Generación de POR configurable. Salida del comparador SVS accesible por software. Condición de Bajo voltaje Accesible por software. 14 niveles de límite configurable por software. Canal Externo para monitorear voltaje. Presente en Micros MSP430F15x / F16x 61 MSP430 Supervisor de Alimentación 62 MSP430 Multiplicador por Hardware MULTIPLICADOR POR HARDWARE Multiplicación sin signo Multiplicación con signo Multiplicación y acumulación sin signo Multiplicación y acumulación con signo Operación en 16x16, 16x8, 8x16 y 8x8 bits Operación en un solo ciclo. Presente en Micros MSP430F14x ~ F16x 63 MSP430 Multiplicador por Hardware 0 15 MPY, MPYS, MAC, MACS 16 u 8-bit MPY 130h MAC No hay instrucciones especiales. 0 15 0 OP2 138h OP1 134h MACS 136h 16x16 Multiplier La operación comienza moviendo el primer operando y termina moviendo el segundo operando. 32-Bit Adder Multiplexer 32-Bit SUMEXT 13Eh La multiplicación esta lista en el siguiente ciclo. mov.w mov.w 15 MPYS 132h #01234h,&MACS #04567h,&OP2 C S 31 RESHI 13Ch Multiplexer RESLO 013Ah 0 ; Carga primer operando ; Carga segundo operando ; Operación lista. 64 Controlador de Acceso Directo a memoria CONTROLADOR DE DMA Transfiere datos sin intervención de la CPU. 3 Canales de transferencia independientes. Prioridad de transferencia configurable. Requiere solo 2 Ciclos de MCLK. Capacidad de transferencia de byte, word, o combinaciones. Transferencia de bloques de hasta 64k (byte o word) Disparador de transferencia configurable. Flanco de disparo configurable. 4 modos de direccionamiento. Modos de transferencia: Single Block Burst-Block Presente en Micros MSP430F15x / F16x 65 Controlador de Acceso Directo a memoria 66 Seminario de MSP430: Programa MSP430 Introducción CPU de 16bits Interrupciones, Reset y modos de operacion Sistema de Reloj Periféricos auxiliares Periféricos comunes Desarrollo y depuración Demostración. 67 MSP430F Registros de periféricos MSP430 usa arquitectura Von Newan Todos los periféricos están mapeados en memoria. Se puede utilizar cualquier instrucción con estos registros Vectores de interrupción 0FFFFH Memoria de Programa Info. Memory Bootstrap Loader RAM 0200h Registros de Periféricos 000h 68 MSP430 Puertos I/O Puertos de Entrada / Salida Dirección de cada pin es configurable independientemente. Es posible cualquier combinación de entrada / salida. Registros de datos independientes de entrada y salida. Interrupciones en todos los pines de los puertos P1 y P2. Habilitación y selección de flanco independiente para cada pin Flags de interrupción independientes para cada pin. Registros para habilitación de módulos periféricos independientes para cada puerto, y concentrados en un solo registro. I/O 69 MSP430 Puertos I/O Puertos Configurados por múltiples registros de 8 bits: P1 y P2 con capacidad de interrupción. P3 en adelante sin capacidad de interrupción. Cada pin posee protección ESD (Diodos para 2mA) Puertos P1 y P2: PxIN PxIN PxOUT PxOUT PxDIR PxDIR PxSEL PxSEL PxIFG PxIFG PxIES PxIES PxIE PxIE Puertos P3 en adelante. PxIN PxIN PxOUT PxOUT PxDIR PxDIR PxSEL PxSEL 70 MSP430 Watchdog Timer WATCHDOG TIMER Puede operar como Watchdog Timer o temporizador. Cualquier acceso al registro WDTCTL esta protegido por contraseña. 8 Opciones de post-scaller configurables por software. Fuente de reloj seleccionable por software (dependiente). Registro de control mapeado en ram. Completamente configurable por software. Puede ser detenido para ahorrar energía. 71 MSP430 Watchdog Timer Clk/32.768 Clk/8.192 WDTCTL Clk/512 4 Clk/64 Cualquier acceso al registro WDTCTL debe incluir 05Axxh a modo de contraseña Registro de control mapeado en ram, completamente configurable por software. Interrupt Y 3 2 1 Q6 MSB Q9 0 Q13 1 Q15 0 1 16 bit Counter A 1 B MDB Password Comparator 0 16 1 PUC Clear 0 CLK EQU Write Enable Low Byte R/ W EQU SMCLK 1 HOLD ACLK 1 NMIES NMI A EN TMSEL CNTCL SSEL IS1 IS0 LSB 72 MSP430 Ejemplo Watchdog Timer MDB, Byte Superior 0120h MDB, Byte Inferior R/W 7 Comparación de contraseña Lectura: Escritura: EQU HOLD 0 NMIES NMI TMSEL CNTCL SSEL IS1 ISO Byte Superior se lee como 069h Byte Superior se debe escribir como 05Ah, de otra forma se produce una violación de contraseña y se efectúa un PUC WDT_key ; WDT_Stop ; WDT_250 equ 05A00h ; Contraseña de acceso a WDT mov.w #(WDT_Key+80h),&WDTCTL ; detiene WDT mov.w #(WDT_Key+1Dh),&WDTCTL ; Configura como timer. 73 MSP430 Comparador A COMPARADOR ANALOGO A Todos los terminales disponibles Referencia interna Filtro pasa bajos para salida. Salida asignable a captura de TA Control de energía por software Intercambio de entradas para compensación de offset (CAEX) Generador de voltaje interno para referencia Referencia interna configurable por software. 74 MSP430 Comparador A 75 MSP430 Timers A y B TIMERS Toda CPU MSP430 cuenta con Timer A3, algunas CPU’s incluyen Timer B3 y otras Timer B7 Contadores de 16bits Interrupción por rebalse del contador Fuentes de reloj seleccionadas y configuradas por software. Cuatro modos de operación. 3 (o 7) registros de captura/comparación. Salidas configurables con capacidad PWM (por hardware) Vector de interrupción para decodificación rápida de interrupción. El Timer B puede contar en 8,10,12 o 16 bits. 76 MSP430 Timer’s Modos de cuenta Modo UP/DOWN Modo Stop/Halt Timer detenido permanentemente El timer cuenta entre 0 , CCR0 y 0 0FFFFh UP/DOWN Mode CCR0 0h Modo UP Modo Continuous El timer cuenta hasta rebalsar. El timer cuenta desde 0 hasta CCR0 0FFFFh Continuous Mode 0FFFFh CCR0 0h 0h 77 MSP430 Timer’s Modos de salida Los Registro CCR poseen salidas independientes Multiples modos de operación. Salidas controladas por hardware. 78 MSP430 Timer A3 15 P1.0 ACLK SMCLK P2.1 Divider 1/2/4/8 0 16-bit Timer CLK RC Mode Continous, UP, UP/Down Capture P1.1 P2.2 GND VCC Set_TAIFG 0 15 Capture/ Compare Register CCR0 Capture Mode OUT_0 Output Unit Comparator 0 0 15 Capture CAOUT P1.2 Capture/ Compare Register CCR1 Capture Mode OUT_1 Output Unit Comparator 1 15 Capture P2.3 0 Capture/ Compare Register CCR2 Capture Mode OUT_2 Output Unit Comparator 2 CCI2 P1.2 P1.6 Equ1 CCI1 P1.3 ACLK GND VCC P1.5 Equ0 CCI0 GND VCC P1.1 Equ2 P1.3 P1.7 P2.4 79 MSP430 Timer A3 Unidades CCRx Overflowx Logic CCISx1 CCISx0 Data Bus Timer Bus CAPx 0 1 2 3 CCIxA CCIxB GND VCC COVx 15 Capture Capture Mode 0 Capture/Compare Register CCRx CCMx1 CCMx0 0 0 1 1 0 1 0 1 Disabled Pos. Edge Neg. Edge Both Edges Comparator x to Port0 EQUx 0 CAPx Set_CCIFGx Y SCCIx 1 EN A CCIx CCRx 0172h to 017Eh 15 2 0 15 2 rw(0) 15 CCTLx 162h to 16Eh CAPTURE MODE rw(0) rw(0) INPUT SELECT rw(0) rw(0) SCS SCCI unCAP used rw(0) rw(0) rw(0) rw(0) 0 0 OUTMODx rw(0) rw(0) rw(0) CCIE CCI OUT COV CCIFG rw(0) rw(0) r rw(0) rw(0) 80 MSP430 Timer B3/7 ( F13x en adelante ) 15 P4.7 ACLK SMCLK P4.7 Divider 1/2/4/8 0 8, 10, 12 or 16-bit Timer CLK RC Mode Continous, UP, UP/Down 15 0 Set_TBIFG Capture / Compare CCR0 Capture P4.0 P4.0 GND VCC Compare Latch TBCL0 OUT_0 Capture Mode Output Unit Comparator 0 P4.0 ADC12I2 Equ0 CCI0 P4.1 P4.2 P4.3 P4.4 P4.5 P4.1 P4.2 P4.3 P4.4 P4.5 CCR1 - CCR6 15 0 Capture/ Compare CCR7 Capture P4.6 ACLK GND VCC Capture Mode Compare Latch TBCL7 OUT_7 Output Unit Comparator 7 P4.6 Equ7 CCI7 81 MSP430 Timer B3/7 Unidades CCRx Overflow x COVx Logic CAPx CCISx1 CCISx0 15 0 1 2 CCIxA CCIxB GND VCC Capture Capture Mode 3 0 Capture/Compare Register CCRx Reset POR CCMx1 CCMx0 CCMx1 CCMx0 0 0 1 1 Timer Bus 0 1 0 1 Disabled Pos. Edge Neg. Edge Both Edges Reset to Port0 Load Capture Latch TBCLx CAP CCDL0 CCLD1 Comparator to Port0 x High Zero CAPx EQUx 0 EQU0 Up/Down 1 CCIx Set_CCIFGx 15 CCTLx 182h to 19Ah 0 CAPTURE MODE rw(0) rw(0) INPUT SELECT rw(0) rw(0) CLLD SCS rw(0) rw(0) rw(0) OUTMODx CAP rw(0) rw(0) rw(0) rw(0) CCIE CCI OUT COV CCIFG rw(0) rw(0) r rw(0) rw(0) 82 Timer A Ejemplo de PWM Up-Mode Ejemplo de generación de PWM Sin intervención de la CPU MSP430F11x1 TEST Vcc P2.5 Vss XOUT XIN RST P2.0 P2.1 P2.2 SetupP1 P1.7 P1.6 P1.5 P1.4 P1.3 TA1/P1.2 P1.1 P1.0 P2.4 P2.3 0 - CCR0 CCR1 0 - CCR0 CCR1 0 - CCR0 CCR1 bis.b bis.b mov.w mov.w mov.w #004h,&P1DIR #004h,&P1SEL #512-1,&CCR0 #OUTMOD2+OUTMOD1+OUTMOD0,&CCTL1 #128,&CCR1 ; ; ; ; ; SetupTA mov.w #TASSEL1+MC0,&TACTL Mainloop jmp #Mainloop ; SMCLK, modo: up ; ; loop infinito SetupC0 SetupC1 P1.2 salida P1.2 TA1 configura modulo define periodo PWM CCR1 modo reset/set CCR1 ciclo útil PWM 83 MSP430 Puertos Serie Pueden operar como: Modo USART Modo SPI Modo I2C (solo procesadores F15x y F16x) CPU’s con 1 y 2 puertos serie idénticos. 84 MSP430 Puerto Serie (Modo USART) PUERTO SERIE: USART Datos de 7 u 8 bits. Generador / Detector de paridad por hardware: (odd, even, none) Registros de desplazamiento y buffers independientes para transmisión y recepción Transmisión y recepción de datos partiendo por bit LSB. Soporte por hardware para protocolos “idle line” y “address-bit” para sistemas multi-procesadores. Detección de bit de partida para salir de modos de bajo consumo. Generador de Baudios con modulación. Flags de estado para detección de errores y detección de dirección. Interrupciones independientes para transmisión y recepción. 85 MSP430 Puerto Serie (Modo USART) 86 MSP430 Puerto Serie (Modo SPI) PUERTO SERIE: SPI Datos de 7 u 8 bits. Operación como SPI de 3 o 4 pines. Modo Maestro o Esclavo Registros de desplazamiento y buffers independientes para transmisión y recepción Polaridad y fase de reloj configurable. Frecuencia de reloj programable en modo Master Interrupciones independientes para transmisión y recepción. 87 MSP430 Puerto Serie (Modo SPI) 88 MSP430 Puerto Serie (Modo I2C) PUERTO SERIE: I2C Solo esta presente en CPU’s F15x y F16x en USART0 Cumple con especificaciones de Philips (I2C v2.1) Formato Byte/Word para transferencia. Direccionamiento de 7 o 10 bits Llamada general Start / restart / Stop Modo Multi Master transmitter / Slave Receiver Modo Multi Master Receive / Slave Transmitter Modo Combinado Master TX / RX y RX / TX Modo Standard (100kbps) y Modo Fast (400kbps) FIFO incorporada para lectura/escritura. Generación de reloj programable. Datos de 16 bits de ancho para aumentar ancho de banda Cuenta automática de bytes de datos 89 MSP430 Puerto Serie (Modo I2C) 90 MSP430 ADC10 / ADC12 CONVERSORES ANALOGO / DIGITAL Capacidad de muestreo de 200ksps+ 8 Canales externos / 4 Canales internos. Conversión iniciada por software, TA o TB* Auto-scan con 16 registros de conversión. Sample&hold programable. Medición de referencias y tensión interna. Diodo de temperatura interno. 4 Modos de conversión: Conversión única en un canal Conversión única en secuencia de canales Conversiones sucesivas en un canal Conversiones sucesivas en secuencias de canales ADC12 / ADC10 91 MSP430 ADC10 (F11x2 ~ F12x2) Ve REF+ V REF+ A0 A1 A2 A3 A5 A5 A6 A7 Ve REF- AVSS AVCC Oscillator Multiplexer VREF-/ 1.5V or 2.5V Reference Sample & Hold VR- VR- Conversion Clock CLKSRCx 10bit SAR 12-bit SAR Sampling Timer ADC12Ix AVCC 16 x 12-bit 16 x 10bits Sample sample buffer Buffer 16 x 8-bit Buffer Control ADC12Intx 92 MSP430F14x ~ 16x ADC12 2_5V REFON VeREF+ V REF+ 1.5V or 2.5V V REF+ V REF- / Ve REFADC12CTLx.0..3 AVSS INCH= 0Ah on on AVCC Reference AVCC Ref_X AVSS a0 a1 a2 a3 ADC12ON ADC12CTLx.4..6 Analog a4 a5 V R- ADC12DIV ADC12CLK V R+ & Internal Oscillator ADC12OSC CLKSRC1 Divide by 1,2,3,4,5,6,7,8 Sample Multiplexer a6 a7 ADC12SSEL CLKSRC2 CLKSRC3 SHT0 12-bit A/D converter core SHT1 Hold SHP 12 : 1 S/H a8 SAMPCON a9 a10 Sampling Timer SHI a11 12-bit S A R ISSH MSC Conversion CTL AVCC Ref_X T AVSS 0140h 0142h 0144h 0146h ADC12MEM0 ADC12MEM1 ADC12MEM2 ADC12MEM3 0148h ADC12MEM4 ADC12MEM5 ADC12MEM6 ADC12MEM7 ADC12MEM8 014Ah 014Ch 014Eh 0150h 0152h 0154h 0156h 0158h 015Ah 015Ch 015Eh ADC12MEM9 ADC12MEM10 ADC12MEM11 ADC12MEM12 ADC12MEM13 ADC12MEM14 ADC12MEM15 16 x 12-bit ADC Memory ADC12SC ADC12I1 ADC12I2 ADC12I3 ADC12CTL0 ADC12CTL1 ADC12CTL2 ADC12CTL3 ADC12CTL4 ADC12CTL5 ADC12CTL6 ADC12CTL7 ADC12CTL8 ADC12CTL9 ADC12CTL10 080h 081h 082h SHS ENC 083h 084h 085h 086h 087h ADC12CTL11 088h 089h 08Ah 08Bh ADC12CTL12 ADC12CTL13 08Ch 08Dh ADC12CTL14 ADC12CTL15 16 x 8-bit ADC Memory Control 08Eh 08Fh 93 MSP430 DAC12 CONVERSORES DIGITAL / ANALOGO 2 Conversores Monolíticos de 12bit’s con salida de voltaje. Resolución configurable de 8 o 12 bit’s Settling time configurable (para ahorro de energía) Selección de referencia interna o externa. Formato de datos Binario o complemento de 2. Auto calibración para corrección de offset. Capacidad de sincronización para múltiples dac’s Presente en MicrosMSP430F15x/F16x DAC12 94 MSP430 DAC12 Comparte referencias con el conversor Analogo / Digital 95 Seminario de MSP430: Programa MSP430 Introducción CPU de 16bits Interrupciones, Reset y modos de operación Sistema de Reloj Periféricos auxiliares Periféricos comunes Desarrollo y depuración Demostración. 96 Desarrollo con MSP430 CONCEPTO DE DESARROLLO Y DEPURACION Programación y depuración IN-CIRCUIT vía JTAG JTAG permite emulación y control en tiempo real. JTAG permite acceso completo a registros, emulación paso a paso, etc… JTAG protegido por fusible FISICO Programador JTAG de bajo costo Programación IN-CIRCUIT vía BSL (producción) BSL solo para propósitos de programación 97 Desarrollo con MSP430x11x/12x MSP430F11x1 TEST Vcc P2.5 Vss XOUT XIN RST P2.0 P2.1 P2.2 TDO/P1.7 TDI/P1.6 TMS/P1.5 TCK/P1.4 P1.3 P1.2 P1.1 P1.0 P2.4 P2.3 TEST en alto, habilita JTAG Los terminales usados por JTAG están compartidos con los terminales P1.7-P1.4 en los micros de 20 y 28 pines. Puerto Paralelo 7 Adaptador de niveles MSP-FETxxxxxx 98 Desarrollo con MSP430 x13x ~ 4xx MSP430F14x VCC RST VSS Vss TDO TDI TMS TCK Puerto Paralelo 7 Los terminales para JTAG son dedicados Adaptador de niveles MSP-FETxxxxxx 99 Aplicación REAL con MSP430F135 Conector JTAG MSP430F135 100 Familia de Herramientas para MSP430 MCU: Variante: MSP-FET430X110 MSP430x11x(1) MSP-FET430P120 MSP430x12x MSP-FET430P140 MSP430x13x/14x MSP-FET430P410 MSP430x41x MSP-FET430P430 MSP430x42x/43x MSP-EVK430S320 MSP430x31x/32x MSP-EVK430S330 MSP430x33x 101 Herramientas de Desarrollo y Depuración. IAR Embedded Workbench Terminales disponibles. LED en P1.0 Interfaz única para todas las variantes de MSP430. • Kickstart IDE • Emulación In-Circuit / Software • Ejecución de código en tiempo real. • HW breakpoints/single step • Visualización/modificación de registros y memoria. 102 Herramientas de Desarrollo y Depuración. IAR Embedded Workbench Terminales disponibles. LED en P1.0 Interfaz única para todas las variantes de MSP430. • Kickstart IDE • Emulación In-Circuit / Software • Ejecución de código en tiempo real. • HW breakpoints/single step • Visualización/modificación de registros y memoria. 103 Bootstrap Loader en MSP430: Los terminales P1.1 (RXD) y P2.2 (TXD) se usan como un puerto serie a 9600bps (automático sin necesidad de cristal), Se efectúa la secuencia requerida en los terminales TEST y RST/NMI para iniciar la transferencia de datos. MSP430F1121 Vectores de Interrupción TEST Vcc P2.5 Vss XOUT XIN RST P2.0 P2.1 P2.2 Memoria de programa Falsh de datos RXD Bootstrap Loader 0C00h RAM Registros de Periféricos SFR’s P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P2.4 P2.3 Puerto Serie TXD RS232 Driver RST/NMI Test Test (internal) Bootloader starts 104 Programación y depuración en tiempo real aislada con MSP430 EMULACION AISALADA Se utiliza una interfaz opto-aislada en lugar del Level Shiffter tradicional. La interfaz es de fácil construcción. Permite programar y depurar sistemas alimentados directamente desde las líneas de poder de AC 105 Seminario de MSP430: Programa MSP430 Introducción CPU de 16bits Interrupciones, Reset y modos de operación Sistema de Reloj Periféricos auxiliares Periféricos comunes Desarrollo y depuración Demostración. 106 107