Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Plantilla de código para la práctica de laboratorio #6 de Microprocesadores
- ; Eduardo Corpeño, Septiembre de 2014
- ; Universidad Galileo, FISICC
- ;================================================================================
- ; Este primer bloque de código es necesario para que Keil produzca correctamente
- ; el contenido ejecutable que se descargará a la memoria del microcontrolador.
- GLOBAL __main
- AREA main, CODE, READONLY
- EXPORT __main
- EXPORT __use_two_region_memory
- __use_two_region_memory EQU 0
- EXPORT SystemInit
- ENTRY
- ; Dummy System Init routine
- SystemInit
- BX LR
- ;================================================================================
- ; Rutina Principal
- ;==================
- ; Aquí inicia el código a ejecutar.
- ; NO MODIFIQUE ESTA RUTINA
- ;================================================================================
- __main
- BL config ; Rutina para inicializar los módulos GPIO y ADC
- ; La instrucción BL guarda la dirección de la próxima
- ; instrucción en el registro LR, para retornar.
- ;PUERTO 1
- LDR r0,=0x50010000 ; Registro Base del rango GPIO1DATA
- LDR r1,=0x00000008 ; Address/Mask (bits [13:2]) 2 (azul)
- ; Esta es la máscara para el bit 7 corrido dos veces a la
- ; izquiera, o sea el bit 9: (X... XX00 0010 0000 00XX)
- LDR r2,=0x00000024 ; Address/Mask (bits [13:2]) 9 (rojo)
- ; Esta es la máscara para el bit 7 corrido dos veces a la
- ; izquiera, o sea el bit 9: (X... XX00 0010 0000 00XX)
- LDR r3,=0x00000028 ; Address/Mask (bits [13:2]) 10 (verde)
- ; Esta es la máscara para el bit 7 corrido dos veces a la
- ; izquiera, o sea el bit 9: (X... XX00 0010 0000 00XX)
- LDR r4,=0x00000000 ; Valor que cargaremos a GPIO0DATA para escribir 0
- LDR r5,=0x00000080 ; Valor que cargaremos a GPIO0DATA para escribir 1
- loop
- BL cuerpo ; Su ciclo infinito.
- B loop ; NO MODIFIQUE ESTA RUTINA
- ;================================================================================
- ; Rutina de Configuración
- ;========================
- ; Escriba esta subrutina para configurar el puerto paralelo y el ADC.
- ;================================================================================
- config
- push {lr} ; Metemos al stack la dirección de retorno.
- ;INICIO REGISTRO PDRUNCFG SE LE LIMPIA EL 5to. BIT
- ; Load the address of PDRUNCFG into R0;
- LDR r0, =(0x40048238); PDRUNCFG, address 0x4004 8238
- ; Load the value of PDRUNCFG into R1
- LDR r1, [r0];
- ; Clear SYSOSC_PD(bit 5) in PDRUNCFG
- LDR r2, =(0xFFFFFFDF);
- ANDS r1, r2;
- ; Store the R2 into PDRUNCFG
- STR r1, [r0];
- ;FINAL REGISTRO PDRUNCFG SE LE LIMPIA EL 5to. BIT
- ;INICIAMOS EL CLOCK DEL REGISTRO SYSAHBCLKCTRL
- LDR r0,=0x40048080 ; El registro SYSAHBCLKCTRL se encuentra en 0x40048080
- LDR r1,[r0] ; r1 <- El valor actual de SYSAHBCLKCTRL
- MOVS r2,#0x40 ; r2 <- La bandera que escribe un 1 al bit 6
- ORRS r2,r2,r1 ; r2 <- El nuevo valos para SYSAHBCLKCTRL con 1 en el bit 6
- STR r2,[r0] ; Actualizamos SYSAHBCLKCTRL
- ;PUERTO 0 PIN 2 COMO SALIDA
- LDR r0,=0x50018000 ; El registro GPIO0DIR se encuentra en 0x50008000
- LDR r1,[r0] ; Valor actual de GPIO0DIR
- MOVS r2,#0x4 ; Bandera para volver salida el bit 7
- ORRS r2,r2,r1 ;
- STR r2,[r0] ; Actualizamos GPIO0DIR
- ;PUERTO 0 PIN 10 COMO SALIDA
- LDR r0,=0x50018000 ; El registro GPIO0DIR se encuentra en 0x50008000
- LDR r1,[r0] ; Valor actual de GPIO0DIR
- MOVS r2,#0x400 ; Bandera para volver salida el bit 7
- ORRS r2,r2,r1 ;
- STR r2,[r0] ; Actualizamos GPIO0DIR
- ;PUERT 0 PIN 9 COMO SALIDA
- LDR r0,=0x50018000 ; El registro GPIO0DIR se encuentra en 0x50008000
- LDR r1,[r0] ; Valor actual de GPIO0DIR
- MOVS r2,#0x200 ; Bandera para volver salida el bit 7
- ORRS r2,r2,r1 ;
- STR r2,[r0] ; Actualizamos GPIO0DIR
- ;mi codigo
- ;LPC_SYSCON->PDRUNCFG &= ~(0x1<<4);
- LDR r0, =0x40048238
- LDR r1,[r0]
- MOVS r2,#0x10
- MVNS r3,r2
- ANDS r2,r3,r1
- STR r2,[r0]
- ;LPC_SYSCON->SYSAHBCLKCTRL |= (1<<13);
- LDR r0,=0x40048080 ; El registro GPIO0DIR se encuentra en 0x50008000
- LDR r1,[r0] ; Valor actual de GPIO0DIR
- MOVS r2,#0x200 ; Bandera para volver salida el bit 13
- ORRS r2,r2,r1 ;
- STR r2,[r0] ; Actualizamos GPIO0DIR
- ;LPC_IOCON->R_PIO0_11 &= ~0x8F; //Clear IO setting
- LDR r0, =0x40044074
- LDR r1,[r0]
- MOVS r2,#0x8F
- MVNS r3,r2
- ANDS r2,r3,r1
- STR r2,[r0]
- ;LPC_IOCON->R_PIO0_11 |= 0x0A; //Analog mode and pull down the pin
- LDR r0,=0x40044074 ; El registro GPIO0DIR se encuentra en 0x50008000
- LDR r1,[r0] ; Valor actual de GPIO0DIR
- MOVS r2,#0x0A ; Bandera para volver salida el bit 13
- ORRS r2,r2,r1 ;
- STR r2,[r0] ; Actualizamos GPIO0DIR
- ;LPC_ADC->CR = (0x01<<0) | (0<<8); //Select ADC0 with CLKDIV=0x0, no division of clock
- LDR r0,=0x4001C000
- LDR r1,[r0]
- MOVS r2,#0xFFFF00FF
- ANDS r2,r2,r1
- STR r2,[r0]
- ;LPC_ADC->CR &= ( ~MASK(16) ) & ( ~MASK(17) ) & ( ~MASK(24) )
- LDR r0,=0x4001C000
- LDR r1,[r0]
- MOVS r2, #0x1000
- MOVS r3, #0x2000
- MOVS r4, #0x80000
- MVNS r2,r2
- MVNS r3,r3
- MVNS r4,r4
- ANDS r2,r2,r3
- ANDS r3,r2,r4
- ANDS r2,r3,r1
- STR r2,[r0]
- pop {PC} ; Retornamos utilizando el valor de LR que metimos
- ; al stack al inicio.
- ;================================================================================
- ; Cuerpo del Ciclo Principal
- ;===========================
- ; Escriba en esta subrutina el código que su aplicación debe ejecutar para
- ; siempre.
- ;================================================================================
- cuerpo
- push {lr} ; Metemos al stack la dirección de retorno.
- ; Encender LED, o sea: LPC_GPIO0->DATA |= (1<<7);
- STR r3,[r0,r1] ; Aquí usamos el datotráfico de ARM (Masked Access)
- ; Esto es un uso "sneaky" del bus de direcciones para
- ; "traficar" una máscara.
- BL delay
- ; Apagar LED, o sea: LPC_GPIO0->DATA &= ~(1<<7);
- STR r2,[r0,r1] ; Nuevamente, usamos datotráfico.
- BL delay
- pop {PC} ; Retornamos utilizando el valor de LR que metimos
- ; al stack al inicio.
- ;================================================================================
- NOP ; por si hace falta
- END
- ;================================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement