Advertisement
Guest User

Untitled

a guest
Sep 4th, 2018
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 7.00 KB | None | 0 0
  1. ; Plantilla de código para la práctica de laboratorio #6 de Microprocesadores
  2. ; Eduardo Corpeño, Septiembre de 2014
  3. ; Universidad Galileo, FISICC
  4.  
  5. ;================================================================================
  6. ; Este primer bloque de código es necesario para que Keil produzca correctamente
  7. ; el contenido ejecutable que se descargará a la memoria del microcontrolador.
  8.  
  9.     GLOBAL __main
  10.     AREA main, CODE, READONLY
  11.     EXPORT __main
  12.     EXPORT __use_two_region_memory
  13. __use_two_region_memory EQU 0
  14.     EXPORT SystemInit
  15.     ENTRY
  16. ; Dummy System Init routine
  17. SystemInit
  18.     BX      LR
  19.    
  20.  
  21. ;================================================================================
  22. ; Rutina Principal
  23. ;==================
  24. ; Aquí inicia el código a ejecutar.
  25. ; NO MODIFIQUE ESTA RUTINA
  26. ;================================================================================
  27. __main
  28.   BL       config         ; Rutina para inicializar los módulos GPIO y ADC
  29.                           ; La instrucción BL guarda la dirección de la próxima
  30.                           ; instrucción en el registro LR, para retornar.
  31. ;PUERTO 1
  32.   LDR    r0,=0x50010000 ; Registro Base del rango GPIO1DATA
  33.  
  34.   LDR    r1,=0x00000008 ; Address/Mask (bits [13:2]) 2 (azul)
  35.                         ; Esta es la máscara para el bit 7 corrido dos veces a la
  36.                         ; izquiera, o sea el bit 9: (X... XX00 0010 0000 00XX)
  37.                        
  38.   LDR    r2,=0x00000024 ; Address/Mask (bits [13:2]) 9 (rojo)
  39.                         ; Esta es la máscara para el bit 7 corrido dos veces a la
  40.                         ; izquiera, o sea el bit 9: (X... XX00 0010 0000 00XX)
  41.                        
  42.   LDR    r3,=0x00000028 ; Address/Mask (bits [13:2]) 10 (verde)
  43.                         ; Esta es la máscara para el bit 7 corrido dos veces a la
  44.                         ; izquiera, o sea el bit 9: (X... XX00 0010 0000 00XX)
  45.   LDR    r4,=0x00000000 ; Valor que cargaremos a GPIO0DATA para escribir 0
  46.   LDR    r5,=0x00000080 ; Valor que cargaremos a GPIO0DATA para escribir 1
  47.  
  48. loop
  49.   BL      cuerpo          ; Su ciclo infinito.
  50.   B       loop            ; NO MODIFIQUE ESTA RUTINA
  51.  
  52. ;================================================================================
  53. ; Rutina de Configuración                                                   
  54. ;========================
  55. ; Escriba esta subrutina para configurar el puerto paralelo y el ADC.
  56. ;================================================================================
  57.  
  58. config
  59.  
  60.   push   {lr}   ; Metemos al stack la dirección de retorno.
  61.  
  62.   ;INICIO REGISTRO PDRUNCFG SE LE LIMPIA EL 5to. BIT
  63.  
  64.  
  65.   ; Load the address of PDRUNCFG into R0;
  66.   LDR r0, =(0x40048238); PDRUNCFG, address 0x4004 8238
  67.   ; Load the value of PDRUNCFG into R1
  68.   LDR r1, [r0];
  69.  
  70.  
  71.   ; Clear SYSOSC_PD(bit 5) in PDRUNCFG
  72.   LDR r2, =(0xFFFFFFDF);
  73.   ANDS r1, r2;
  74.   ; Store the R2 into PDRUNCFG
  75.   STR r1, [r0];
  76.  
  77.   ;FINAL REGISTRO PDRUNCFG SE LE LIMPIA EL 5to. BIT
  78.  
  79.   ;INICIAMOS EL CLOCK DEL REGISTRO SYSAHBCLKCTRL
  80.  
  81.   LDR    r0,=0x40048080  ; El registro SYSAHBCLKCTRL se encuentra en 0x40048080
  82.   LDR    r1,[r0]         ; r1 <- El valor actual de SYSAHBCLKCTRL
  83.   MOVS   r2,#0x40        ; r2 <- La bandera que escribe un 1 al bit 6
  84.   ORRS   r2,r2,r1        ; r2 <- El nuevo valos para SYSAHBCLKCTRL con 1 en el bit 6
  85.   STR    r2,[r0]         ; Actualizamos SYSAHBCLKCTRL
  86.  
  87.   ;PUERTO 0 PIN 2 COMO SALIDA
  88.   LDR    r0,=0x50018000  ; El registro GPIO0DIR se encuentra en 0x50008000
  89.   LDR    r1,[r0]         ; Valor actual de GPIO0DIR
  90.   MOVS   r2,#0x4        ; Bandera para volver salida el bit 7
  91.   ORRS   r2,r2,r1        ;
  92.   STR    r2,[r0]         ; Actualizamos GPIO0DIR
  93.  
  94.   ;PUERTO 0 PIN 10 COMO SALIDA
  95.   LDR    r0,=0x50018000  ; El registro GPIO0DIR se encuentra en 0x50008000
  96.   LDR    r1,[r0]         ; Valor actual de GPIO0DIR
  97.   MOVS   r2,#0x400        ; Bandera para volver salida el bit 7
  98.   ORRS   r2,r2,r1        ;
  99.   STR    r2,[r0]         ; Actualizamos GPIO0DIR
  100.  
  101.   ;PUERT 0 PIN 9 COMO SALIDA
  102.   LDR    r0,=0x50018000  ; El registro GPIO0DIR se encuentra en 0x50008000
  103.   LDR    r1,[r0]         ; Valor actual de GPIO0DIR
  104.   MOVS   r2,#0x200        ; Bandera para volver salida el bit 7
  105.   ORRS   r2,r2,r1        ;
  106.   STR    r2,[r0]         ; Actualizamos GPIO0DIR
  107.  
  108.   ;mi codigo
  109.  
  110.  
  111.   ;LPC_SYSCON->PDRUNCFG        &= ~(0x1<<4);
  112.   LDR    r0, =0x40048238
  113.   LDR    r1,[r0]
  114.   MOVS   r2,#0x10
  115.   MVNS   r3,r2
  116.   ANDS   r2,r3,r1
  117.   STR    r2,[r0]
  118.  
  119.   ;LPC_SYSCON->SYSAHBCLKCTRL   |= (1<<13);
  120.   LDR    r0,=0x40048080  ; El registro GPIO0DIR se encuentra en 0x50008000
  121.   LDR    r1,[r0]         ; Valor actual de GPIO0DIR
  122.   MOVS   r2,#0x200        ; Bandera para volver salida el bit 13
  123.   ORRS   r2,r2,r1        ;
  124.   STR    r2,[r0]         ; Actualizamos GPIO0DIR
  125.  
  126.   ;LPC_IOCON->R_PIO0_11 &= ~0x8F; //Clear IO setting
  127.   LDR    r0, =0x40044074
  128.   LDR    r1,[r0]
  129.   MOVS   r2,#0x8F
  130.   MVNS   r3,r2
  131.   ANDS   r2,r3,r1
  132.   STR    r2,[r0]
  133.  
  134.   ;LPC_IOCON->R_PIO0_11 |= 0x0A; //Analog mode and pull down the pin
  135.   LDR    r0,=0x40044074  ; El registro GPIO0DIR se encuentra en 0x50008000
  136.   LDR    r1,[r0]         ; Valor actual de GPIO0DIR
  137.   MOVS   r2,#0x0A        ; Bandera para volver salida el bit 13
  138.   ORRS   r2,r2,r1        ;
  139.   STR    r2,[r0]         ; Actualizamos GPIO0DIR
  140.  
  141.   ;LPC_ADC->CR = (0x01<<0) | (0<<8); //Select ADC0 with CLKDIV=0x0, no division of clock
  142.   LDR    r0,=0x4001C000
  143.   LDR    r1,[r0]        
  144.   MOVS   r2,#0xFFFF00FF
  145.   ANDS   r2,r2,r1
  146.   STR    r2,[r0]
  147.  
  148.   ;LPC_ADC->CR &= ( ~MASK(16) ) & ( ~MASK(17) ) & ( ~MASK(24) )
  149.   LDR r0,=0x4001C000
  150.   LDR r1,[r0]
  151.   MOVS r2, #0x1000
  152.   MOVS r3, #0x2000
  153.   MOVS r4, #0x80000
  154.   MVNS r2,r2
  155.   MVNS r3,r3
  156.   MVNS r4,r4
  157.   ANDS r2,r2,r3
  158.   ANDS r3,r2,r4
  159.   ANDS r2,r3,r1
  160.   STR  r2,[r0]
  161.    
  162.   pop    {PC}   ; Retornamos utilizando el valor de LR que metimos
  163.                 ; al stack al inicio.
  164.  
  165.  
  166. ;================================================================================
  167. ; Cuerpo del Ciclo Principal                                  
  168. ;===========================
  169. ; Escriba en esta subrutina el código que su aplicación debe ejecutar para
  170. ; siempre.
  171. ;================================================================================
  172.  
  173. cuerpo
  174.   push   {lr}   ; Metemos al stack la dirección de retorno.
  175.  
  176.   ;  Encender LED, o sea: LPC_GPIO0->DATA |= (1<<7);
  177.   STR    r3,[r0,r1]      ; Aquí usamos el datotráfico de ARM (Masked Access)
  178.                          ; Esto es un uso "sneaky" del bus de direcciones para
  179.                          ; "traficar" una máscara.
  180.   BL     delay  
  181.  
  182. ;  Apagar LED, o sea: LPC_GPIO0->DATA &= ~(1<<7);  
  183.   STR    r2,[r0,r1]      ; Nuevamente, usamos datotráfico.
  184.  
  185.   BL     delay
  186.  
  187.  
  188.   pop    {PC}   ; Retornamos utilizando el valor de LR que metimos
  189.                 ; al stack al inicio.
  190.  
  191.  
  192. ;================================================================================
  193.   NOP           ; por si hace falta
  194.   END
  195. ;================================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement