manual para construir un robot de enjambre. · .string “microcontroladores ... microcontrolador...

12

Upload: duongliem

Post on 24-Sep-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Manual para construir un robot de enjambre. · .string “Microcontroladores ... microcontrolador usando la tecla F11 o haciendo clic en el icono y se ejecuta con paso ... .byte 0x40,
Page 2: Manual para construir un robot de enjambre. · .string “Microcontroladores ... microcontrolador usando la tecla F11 o haciendo clic en el icono y se ejecuta con paso ... .byte 0x40,

Manual para construir un robot de enjambre.

• • •

El microcontrolador TM4C123GH6PM 1

Percepción (Ensamblador)

El microcontrolador TM4C123GH6PM

El microcontrolador TM4C123GH6PM está dirigido a aplicaciones industriales, incluyendo

monitoreo remoto, máquinas de punto de venta electrónico, equipos de prueba y medición,

dispositivos y conmutadores de red, automatización, control de edificios, equipos de juegos, control

de movimiento, transporte y seguridad.

Fig. 3.11. Diagrama de componentes del Tm4c123gh6pm.

La Figura 3.12 muestra el diagrama en bloques del microcontrolador TM4C123GH6PM. Podemos

notar la CPU ARM Cotex-M4F, las memorias Flash, RAM, ROM, los GPIO, ADC, Comparadores

Analógicos, Timers, UARTs, SPI, I2C, etc.

Page 3: Manual para construir un robot de enjambre. · .string “Microcontroladores ... microcontrolador usando la tecla F11 o haciendo clic en el icono y se ejecuta con paso ... .byte 0x40,

Manual para construir un robot de enjambre.

• • •

El microcontrolador TM4C123GH6PM 2

Fig. 3.12. Diagrama a bloques del Tm4c123gh6pm.

Actividad 3.4.

Se sugiere revisar el manual del microcontrolador TM4C123GH6PM

Fich

a

3.4

Page 4: Manual para construir un robot de enjambre. · .string “Microcontroladores ... microcontrolador usando la tecla F11 o haciendo clic en el icono y se ejecuta con paso ... .byte 0x40,

Manual para construir un robot de enjambre.

• • •

Programación en Lenguaje Ensamblador 3

Programación en Lenguaje Ensamblador

El lenguaje ensamblador es la representación simbólica de las instrucciones que puede ejecutar

el procesador

Fig. 3.13. El flujo de desarrollo de software para ARM.

Las directivas son simbolos y palabras que se usan en el IDE (Ambiente de Desarrollo Integrado)

Code Composer Estudio (CCS) para el micro que estamos usando. Estas directivas ayudan al

compilador a interpretar lo que se desea poner en el código, por ejemplo:

- Una constante esta precedida por #. Si la constante es una letra, esta va en medio de comillas

simples: MOV r3, #’A’

- Para almacenar una palabra completa existen dos formas:

.string “Microcontroladores”

Page 5: Manual para construir un robot de enjambre. · .string “Microcontroladores ... microcontrolador usando la tecla F11 o haciendo clic en el icono y se ejecuta con paso ... .byte 0x40,

Manual para construir un robot de enjambre.

• • •

Programación en Lenguaje Ensamblador 4

.cstring “Microcontroladores\n”

Una sección es un bloque de código o dato que ocupa un espacio contiguo en el mapa de memoria

(ver sección 5.1 del manual ARM Assembly Language Tools). El archivo objeto usualmente contiene

tres secciones por default.

Fig. 3.14. La sección .text contiene el código ejecutable, .data los datos de inicialización y .bss es un espacio reservado para

variables no inicializadas.

Los operadores se aplican sobre los datos y no sobre las instrucciones, en la siguiente figura se

muestran los más utilizados.

Fig. 3.15. Precedencia de los operadores usados en expresiones como: MOV r0, #((1<<14)|(1<<12)).

También se pueden usar funciones (ver la sección 4.10) en CCS como:

.float $$cos(0.434)

.float $$log(0.936)

.float $$max(0.376)

Actividad 3.5.

Se sugiere revisar el manual de herramientas para el ensamblador ARM

Y revisar los registros y conjunto de instrucciones en el manual Tiva C Series TM4C123GH6PM

Fich

a

3.5

Page 6: Manual para construir un robot de enjambre. · .string “Microcontroladores ... microcontrolador usando la tecla F11 o haciendo clic en el icono y se ejecuta con paso ... .byte 0x40,

Manual para construir un robot de enjambre.

• • •

Instrucciones de carga y almacenamiento 5

Instrucciones de carga y almacenamiento

Las instrucciones de carga se utilizan cuando se asigna un valor a algún registro. Y las

instrucciones de almacenamiento son aquellas que guardan un valor en una posición de memoria.

Tabla 3.2 Instrucciones de carga y almacenamiento más usadas.

Carga Almacena Tamano y tipo

LDR STR Palabra de 32 bits

LDRB STRB Byte (8 bits)

LDRH STRH Media palabra (16 bits)

LDRSB Byte con signo

LDRSH Media palabra con signo

LDM STM Palabras multiples

Por ejemplo si deseamos mover el datos #0x1234 a la dirección 0x2000 0012, se debe ejecutar el

siguiente código:

MOVW r0, #0x1234

MOVW r1,#0x0000

MOVT r1,#0x2000

STR r0, [r1, #12]

La última instrucción se conoce como direccionamiento pre-indexado, y el registro r1 se le suma 12 y

con esto forma una dirección donde va a quedar guardado el valor que tiene r0 La dirección se

identifica por los corchetes. Observe que cada registro r tiene 32 bits y la instrucción MOVW solo

carga 16 bits en la parte baja del registro, así que para modificar los 16 superiores se usa la instrucción

MOVT.

Puertos de entrada salida

La Tiva Launchpad tiene 43 pines que se pueden configurar como entradas o salidas y están

distribuidos en los puertos A, B, C, D E, y F. Cada pin se puede configurar independientemente para

usar resistencia pull-up o pull-down, también se puede configurar para recibir interrupciones,

iniciar una conversión de analógico a digital y puede soportat entradas de 5V, aunque trabaja a 3.3V.

Es necesario hacer los siguientes registros para que los puertos funcionen como entrada o salidad:

a. Configurar el reloj del puerto con el registro RCGCGPIO.

b. Configurar los bits del registro GPIODIR para determinar la dirección como entrada o salida.

c. Habilitar los bits con el registro GPIODEN.

d. Configurar las resistencias de pul-up para los bits de entrada, en el registro GPIOPUR.

e. Leer o escribir al puerto a través del registro GPIODATA.

Page 7: Manual para construir un robot de enjambre. · .string “Microcontroladores ... microcontrolador usando la tecla F11 o haciendo clic en el icono y se ejecuta con paso ... .byte 0x40,

Manual para construir un robot de enjambre.

• • •

Puertos de entrada salida 6

La Tiva Launchpad tiene un led RGB conectados a los bits 1 (led rojo), 2 (led verde) y 3 (led azul) del

puerto F como se ve en la figura 3.15, también tiene dos botones que sirven de entrada sw1 (PF4) y

sw2 (FP0)

Fig. 3.14. Puerto F de la Tiva Launchpad.

Para el control de los diferentes módulos del microcontrolador hay que configurar el registro System

Control Register (SCR) que está ubicado en la dirección 0x400F E000 y dentro de este bloque se puede

encontrar un registro para configuración del reloj, Run-Mode Clock Configuration Register (RCC)

tiene una dirección de desplazamiento dentro del SCR de 0x60, por tanto, en la dirección 0x400F E060

hay que cambiar el valor del reloj que pueda servir como base para el uso del puerto GPIO.

Fig. 3.14. Registro RCC (ver página 254 del manual spms376e.pdf)

Es necesario cambiar el valor default por el dato 0x01C0 0540, esto indica que el valor del sistema se

divide en cuatro, que la frecuencia de oscilación tiene un cristal de 16 MHz y que esta frecuencia se

multiplica con un PLL, además que la fuente del reloj es el oscilador principal.

Page 8: Manual para construir un robot de enjambre. · .string “Microcontroladores ... microcontrolador usando la tecla F11 o haciendo clic en el icono y se ejecuta con paso ... .byte 0x40,

Manual para construir un robot de enjambre.

• • •

El Entorno de desarrollo Integrado (IDE). 7

Actividad 3.6.

Se sugiere revisar la página “Starter files for embedeed systems” y descargar el archivo

ValvanoWareTM4C123.zip de proyectos para CCS.

El Entorno de desarrollo Integrado (IDE).

Para editar y ejecutar un programa en lenguaje ensamblador se requiere una interfaz de

usuario, Code Composer Studio combina las ventajas del marco del software Eclipse con capacidades

de depuración embebidas avanzadas de Texas Instruments, lo que resulta en un entorno de desarrollo

funcional para desarrolladores.

Para ver la funcionalidad de este entorno tomaremos como ejemplo la carpeta GPIO_4C123asm del

archivo ValvanoWareTM4C123.zip que contiene un proyecto elaborado con CCS y lo importamos

como se ve en la siguiente figura.

Fig. 3.15. Importar un proyecto: File, Import,CCS Projects, Browse, Finish.

El programa en lenguaje ensamblador GPIO.asm, se ensambla presionando las teclas Ctrl+B o

haciendo clic en icono y una vez conectada y encendida la tarjeta Tiva C, se carga al

microcontrolador usando la tecla F11 o haciendo clic en el icono y se ejecuta con paso por paso

con la tecla F5 para ver su funcionamiento con ayuda de la ventana Registers y Memory Browser.

En la figura 3.16 se puede observar la sección principal (etiqueta main), que a través del nemónico BL

brinca a la rutina GPIO_Init que configura el puerto D, y después se carga la dirección de LEDS al

Registro R0. El nemónico MOV mueve el valor asignado a los registros correspondientes y después se

hace el almacenamiento (STR) del contenido de los registros hacia la dirección del puerto D, durante

un ciclo infinito etiquetado como loop.

Fich

a

3.6

Page 9: Manual para construir un robot de enjambre. · .string “Microcontroladores ... microcontrolador usando la tecla F11 o haciendo clic en el icono y se ejecuta con paso ... .byte 0x40,

Manual para construir un robot de enjambre.

• • •

El Entorno de desarrollo Integrado (IDE). 8

Fig. 3.16. Programa en Ensamblador para sacar 4 números de 4 bits al puerto D.

Con base en el ejemplo anterior se puede modificar el programa para configurar el puerto B de la

tarjeta Tiva C, como salida y conectar un display de 7 segmentos.

a) Agregar un comentario con el nombre de quien lo modifica.

b) Reemplazar …PORTD… por …PORTB…(usar Ctrol-F)

c) Modificar la dirección base 0x40007000 por 0x40005000 y dejar el offset igual.

Fig. 3.17. Sección 10.4 del manual, ejemplo de configuración del puerto B.

Page 10: Manual para construir un robot de enjambre. · .string “Microcontroladores ... microcontrolador usando la tecla F11 o haciendo clic en el icono y se ejecuta con paso ... .byte 0x40,

Manual para construir un robot de enjambre.

• • •

El Entorno de desarrollo Integrado (IDE). 9

d) Modificar el registro SYSCTL_RCGCGPIO_R para activar el puerto B.

Fig. 3.17. Página 340 del manual, ejemplo de activación del puerto F.

e) Asignar el valor 0x00000002 a la etiqueta SYSCTL_RCGC2_GPIOB para hacer una OR con el registro anterior.

f) Asignar los valores que corresponden al display de 7 segmentos definiendo la tabla Digitos

g) Dentro de la rutina GPIO_InitPTD reemplazar:

Tabla 3.3 Remplazo de registros del puerto D para asignar 8 bits de salida al puerto B.

GPIO_InitPTD GPIO_InitPTB

ORR R0, R0, #SYSCTL_RCGC2_GPIOD ; clock ORR R0, R0, #SYSCTL_RCGC2_GPIOB ; clock

BIC R0, R0, #0x0F ; disable analog functionality on PD3-0

BIC R0, R0, #0xFF ; disable analog functionality on PB7-0

ORR R0, R0, #0x0F ; make PD3-0 output ORR R0, R0, #0xFF ; make PB7-0 output

BIC R0, R0, #0x0F ; disable alt funct on PD3-0 BIC R0, R0, #0xFF ; disable alt funct on PB7-0

ORR R0, R0, #0x0F ; enable 8mA drive on PD3-0 ORR R0, R0, #0xFF ; enable 8mA drive on PB7-0

ORR R0, R0, #0x0F ; enable digital I/O on PD3-0 ORR R0, R0, #0xFF ; enable digital I/O on PB7-0

h) Reescribir la rutina main por:

main: .asmfunc

BL GPIO_InitPTB ; Inicializa el puerto B LDR R0, GPIO_PORTB_DATA_R ; Carga la dirección del puerto B al registro R0 Ini MOV R1, #0 ; R0 funciona como índice, comenzando en cero ADR R2, Digitos ; Carga la dirección relativa del la tabla al registro R2 loop LDRB R3, [R2,R1] ; Carga el registro R3 con dos bytes ; con la dirección relativa de la tabla mas el indice STR R3, [R0] ; Almacena el contenido de R3 a la dirección que apunta al puerto B ADD R1, #1 ; suma el índice mas uno CMP R1, #0xA ; Compara si el índice es igual a 10 BEQ Ini ; Si es igual brica a la etiqueta Ini B loop ; en caso contrario brinca a la etiqueta loop .endasmfunc .end ; end of file

Page 11: Manual para construir un robot de enjambre. · .string “Microcontroladores ... microcontrolador usando la tecla F11 o haciendo clic en el icono y se ejecuta con paso ... .byte 0x40,

Manual para construir un robot de enjambre.

• • •

El Entorno de desarrollo Integrado (IDE). 10

Tabla 3.4 Código completo para sacar por el puerto B los diez dígitos contenidos en una tabla. ; Modificado por: ; FES Aragón, UNAM .thumb .text .align 2 GPIO_PORTB_DATA_R .field 0x400053FC,32 ; access PB7-PB0 GPIO_PORTB_DIR_R .field 0x40005400,32 GPIO_PORTB_AFSEL_R .field 0x40005420,32 GPIO_PORTB_DR8R_R .field 0x40005508,32 GPIO_PORTB_DEN_R .field 0x4000551C,32 GPIO_PORTB_AMSEL_R .field 0x40005528,32 GPIO_PORTB_PCTL_R .field 0x4000552C,32 SYSCTL_RCGCGPIO_R .field 0x400FE608,32 SYSCTL_RCGC2_GPIOB .equ 0x00000002 ; port B Clock Gating Control Digitos .byte 0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x18 .global main GPIO_InitPTB: .asmfunc ; 1) activate clock for Port B LDR R1, SYSCTL_RCGCGPIO_R LDR R0, [R1] ORR R0, R0, #SYSCTL_RCGC2_GPIOB ; clock STR R0, [R1] NOP NOP ; allow time to finish activating ; 2) no need to unlock PB7-0 ; 3) disable analog functionality LDR R1, GPIO_PORTB_AMSEL_R LDR R0, [R1] BIC R0, R0, #0xFF ; disable analog functionality on PB7-0 STR R0, [R1] ; 4) configure as GPIO LDR R1, GPIO_PORTB_PCTL_R LDR R0, [R1] MOV R2, #0x0000FFFF BIC R0, R0, R2 ; clear port control field for PB7-0 STR R0, [R1] ; 5) set direction register LDR R1, GPIO_PORTB_DIR_R LDR R0, [R1] ORR R0, R0, #0xFF ; make PB7-0 output STR R0, [R1] ; 6) regular port function LDR R1, GPIO_PORTB_AFSEL_R LDR R0, [R1] BIC R0, R0, #0xFF ; disable alt funct on PB7-0 STR R0, [R1] ; enable 8mA drive (only necessary for bright LEDs) LDR R1, GPIO_PORTB_DR8R_R LDR R0, [R1] ORR R0, R0, #0xFF ; enable 8mA drive on PB7-0 STR R0, [R1] ; 7) enable digital port LDR R1, GPIO_PORTB_DEN_R LDR R0, [R1] ORR R0, R0, #0xFF ; enable digital I/O on PB7-0 STR R0, [R1] BX LR .endasmfunc main: .asmfunc BL GPIO_InitPTB ; Inicializa el puerto B LDR R0, GPIO_PORTB_DATA_R ; Carga la dirección del puerto B al registro R0 Ini MOV R1, #0 ; R0 funciona como índice, comenzando en cero ADR R2, Digitos ; Carga la dirección relativa del la tabla al registro R2 loop LDRB R3, [R2,R1] ; Carga el registro R3 con dos bytes ; con la dirección relativa de la tabla mas el indice STR R3, [R0] ; Almacena el contenido de R3 a la dirección que apunta al puerto B ADD R1, #1 ; suma el índice mas uno CMP R1, #0xA ; Compara si el índice es igual a 10 BEQ Ini ; Si es igual brinca a la etiqueta Ini B loop ; en caso contrario brinca a la etiqueta loop .endasmfunc .end ; end of file

Page 12: Manual para construir un robot de enjambre. · .string “Microcontroladores ... microcontrolador usando la tecla F11 o haciendo clic en el icono y se ejecuta con paso ... .byte 0x40,

Manual para construir un robot de enjambre.

• • •

El Entorno de desarrollo Integrado (IDE). 11

Actividad 3.7.

Modificar el programa anterior para que se incremente el contador cada vez que se presione el

switch 1 de la tarjeta Tiva C

Fich

a

3.7