Advertisement
Guest User

jarinlima

a guest
Sep 4th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 7.01 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 para darle POWERED
  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.   ; Clear SYSOSC_PD(bit 5) in PDRUNCFG
  71.   LDR r2, =(0xFFFFFFDF);
  72.   ANDS r1, r2;
  73.   ; Store the R2 into PDRUNCFG
  74.   STR r1, [r0];
  75.  
  76.   ;FINAL REGISTRO PDRUNCFG SE LE LIMPIA EL 5to. BIT
  77.  
  78.   ;INICIAMOS EL CLOCK DEL REGISTRO SYSAHBCLKCTRL
  79.  
  80.   LDR    r0,=0x40048080  ; El registro SYSAHBCLKCTRL se encuentra en 0x40048080
  81.   LDR    r1,[r0]         ; r1 <- El valor actual de SYSAHBCLKCTRL
  82.   MOVS   r2,#0x40        ; r2 <- La bandera que escribe un 1 al bit 6
  83.   ORRS   r2,r2,r1        ; r2 <- El nuevo valos para SYSAHBCLKCTRL con 1 en el bit 6
  84.   STR    r2,[r0]         ; Actualizamos SYSAHBCLKCTRL
  85.  
  86.   ;PUERTO 0 PIN 2 COMO SALIDA
  87.   LDR    r0,=0x50008000  ; El registro GPIO0DIR se encuentra en 0x50008000
  88.   LDR    r1,[r0]         ; Valor actual de GPIO0DIR
  89.   MOVS   r2,#0x4        ; Bandera para volver salida el bit 7
  90.   ORRS   r2,r2,r1        ;
  91.   STR    r2,[r0]         ; Actualizamos GPIO0DIR
  92.  
  93.   ;PUERTO 0 PIN 10 COMO SALIDA
  94.   LDR    r0,=0x50008000  ; El registro GPIO0DIR se encuentra en 0x50008000
  95.   LDR    r1,[r0]         ; Valor actual de GPIO0DIR
  96.   MOVS   r2,#0x400        ; Bandera para volver salida el bit 7
  97.   ORRS   r2,r2,r1        ;
  98.   STR    r2,[r0]         ; Actualizamos GPIO0DIR
  99.  
  100.   ;PUERTO 0 PIN 9 COMO SALIDA
  101.   LDR    r0,=0x50008000  ; El registro GPIO0DIR se encuentra en 0x50008000
  102.   LDR    r1,[r0]         ; Valor actual de GPIO0DIR
  103.   MOVS   r2,#0x200       ; Bandera para volver salida el bit 7
  104.   ORRS   r2,r2,r1        ;
  105.   STR    r2,[r0]         ; Actualizamos GPIO0DIR
  106.  
  107.   ;mi codigo
  108.  
  109.   ;LPC_SYSCON->PDRUNCFG        &= ~(0x1<<4);
  110.   LDR    r0, =0x40048238
  111.   LDR    r1,[r0]
  112.   MOVS   r2,#0x10
  113.   MVNS   r3,r2
  114.   ANDS   r2,r3,r1
  115.   STR    r2,[r0]
  116.  
  117.   ;LPC_SYSCON->SYSAHBCLKCTRL   |= (1<<13);
  118.   LDR    r0,=0x40048080  ; El registro GPIO0DIR se encuentra en 0x50008000
  119.   LDR    r1,[r0]         ; Valor actual de GPIO0DIR
  120.   MOVS   r2,#0x200       ; Bandera para volver salida el bit 13
  121.   ORRS   r2,r2,r1        ;
  122.   STR    r2,[r0]         ; Actualizamos GPIO0DIR
  123.  
  124.   ;LPC_IOCON->R_PIO0_11 &= ~0x8F; //Clear IO setting
  125.   LDR    r0, =0x40044074
  126.   LDR    r1,[r0]
  127.   MOVS   r2,#0x8F
  128.   MVNS   r3,r2
  129.   ANDS   r2,r3,r1
  130.   STR    r2,[r0]
  131.  
  132.   ;LPC_IOCON->R_PIO0_11 |= 0x0A; //Analog mode and pull down the pin
  133.   LDR    r0,=0x40044074  ; El registro GPIO0DIR se encuentra en 0x50008000
  134.   LDR    r1,[r0]         ; Valor actual de GPIO0DIR
  135.   MOVS   r2,#0x0A        ; Bandera para volver salida el bit 13
  136.   ORRS   r2,r2,r1        ;
  137.   STR    r2,[r0]         ; Actualizamos GPIO0DIR
  138.  
  139.   ;LPC_ADC->CR = (0x01<<0) | (0<<8); //Select ADC0 with CLKDIV=0x0, no division of clock
  140.   LDR    r0,=0x4001C000
  141.   LDR    r1,[r0]        
  142.   MOVS   r2,#0xFFFF00FF
  143.   ANDS   r2,r2,r1
  144.   STR    r2,[r0]
  145.  
  146.   ;LPC_ADC->CR &= ( ~MASK(16) ) & ( ~MASK(17) ) & ( ~MASK(24) )
  147.   LDR r0,=0x4001C000
  148.   LDR r1,[r0]
  149.   MOVS r2, #0x1000
  150.   MOVS r3, #0x2000
  151.   MOVS r4, #0x80000
  152.   MVNS r2,r2
  153.   MVNS r3,r3
  154.   MVNS r4,r4
  155.   ANDS r2,r2,r3
  156.   ANDS r3,r2,r4
  157.   ANDS r2,r3,r1
  158.   STR  r2,[r0]
  159.    
  160.   pop    {PC}   ; Retornamos utilizando el valor de LR que metimos
  161.                 ; al stack al inicio.
  162.  
  163.  
  164. ;================================================================================
  165. ; Cuerpo del Ciclo Principal                                  
  166. ;===========================
  167. ; Escriba en esta subrutina el código que su aplicación debe ejecutar para
  168. ; siempre.
  169. ;================================================================================
  170.  
  171. cuerpo
  172.   push   {lr}   ; Metemos al stack la dirección de retorno.
  173.  
  174.   ;  Encender LED, o sea: LPC_GPIO0->DATA |= (1<<7);
  175.   STR    r3,[r0,r1]      ; Aquí usamos el datotráfico de ARM (Masked Access)
  176.                          ; Esto es un uso "sneaky" del bus de direcciones para
  177.                          ; "traficar" una máscara.
  178.   BL     delay  
  179.  
  180. ;  Apagar LED, o sea: LPC_GPIO0->DATA &= ~(1<<7);  
  181.   STR    r2,[r0,r1]      ; Nuevamente, usamos datotráfico.
  182.  
  183.   BL     delay
  184.  
  185.  
  186.   pop    {PC}   ; Retornamos utilizando el valor de LR que metimos
  187.                 ; al stack al inicio.
  188.  
  189.  
  190. ;================================================================================
  191.   NOP           ; por si hace falta
  192.   END
  193. ;================================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement