Bienvenido: Ingresar
location: attachment:head.s de WebHome/TrabajosPracticos/PracticoASM5

Adjunto 'head.s'

Descargar

   1 @ Startup para aplicaciones en C
   2 @ -----------------------------------------------------------------------------
   3 
   4 	.global main
   5 	.global _start 
   6 	/* Symbols defined by the linker script */
   7 	.global _etext
   8 	.global _data
   9 	.global _edata
  10 	.global _bss
  11 	.global _ebss
  12 
  13 	.text
  14 	.arm
  15 _start:
  16 	/* Vectors (8 total)  */
  17 	b reset   /* reset */
  18 	b loop   /* undefined instruction  */
  19 	b loop   /* software interrupt */
  20 	b loop   /* prefetch abort */
  21 	b loop   /* data abort */
  22 	nop      /* reserved for the bootloader checksum */
  23 	ldr pc, [pc, #-0x0FF0] /* VicVectAddr */
  24 	b loop   /* FIQ */
  25 
  26 /* Tareas a realizar para C 
  27  - Establecer el PLL 
  28  - Copiar la seccion .data ( variables inicializadas ) a la SRAM
  29  - Borrar .bss (variables no inicializadas)
  30  - Establecer el stack pointer
  31  - Saltar al main del C
  32 */
  33 reset:
  34 /* 
  35 * Establecer PLL 
  36 * -----------------------------------------------------------------------------
  37 */
  38         @ Use r0 for indirect addressing 
  39         ldr r0, PLLBASE
  40 
  41         @ PLLCFG = PLLCFG_VALUE 
  42         mov r3, #PLLCFG_VALUE
  43         str r3, [r0, #PLLCFG_OFFSET]
  44 
  45         @ PLLCON = PLLCON_PLLE 
  46         mov r3, #PLLCON_PLLE
  47         str r3, [r0, #PLLCON_OFFSET]
  48 
  49         @ PLLFEED = PLLFEED1, PLLFEED2 
  50         mov r1, #PLLFEED1
  51         mov r2, #PLLFEED2
  52         str r1, [r0, #PLLFEED_OFFSET]
  53         str r2, [r0, #PLLFEED_OFFSET]
  54 
  55         @ repetir mientras ((PLLSTAT & PLLSTAT_PLOCK) == 0)
  56 
  57 pll_loop:
  58         ldr r3, [r0, #PLLSTAT_OFFSET]
  59         tst r3, #PLLSTAT_PLOCK
  60 /* Comentar en casode debug */
  61   @@      beq pll_loop
  62 
  63         @ PLLCON = PLLCON_PLLC|PLLCON_PLLE 
  64         mov r3, #PLLCON_PLLC|PLLCON_PLLE
  65         str r3, [r0, #PLLCON_OFFSET]
  66 
  67         @ PLLFEED = PLLFEED1, PLLFEED2 ( 
  68         str r1, [r0, #PLLFEED_OFFSET]
  69         str r2, [r0, #PLLFEED_OFFSET]	
  70 	
  71 stacks_init:
  72 	ldr r0, STACK_START
  73 	/* FIQ mode stack */
  74 	msr CPSR_c, #FIQ_MODE|IRQ_DISABLE|FIQ_DISABLE
  75 	mov sp,r0
  76 	sub r0, r0, #FIQ_STACK_SIZE
  77 	/* IRQ mode stack */
  78 	msr CPSR_c, #IRQ_MODE|IRQ_DISABLE|FIQ_DISABLE
  79 	mov sp, r0
  80 	sub r0, r0, #IRQ_STACK_SIZE
  81 	msr CPSR_c, #SYS_MODE
  82 	mov sp,r0
  83 
  84 /*
  85 * Copiar .data 
  86 * -----------------------------------------------------------------------------
  87 */
  88 	ldr r0, data_source @ indica la posicion donde estan guardados los valores de inicializacion 
  89 	ldr r1, data_start  @ indica la pos.de la RAM donde comienza la zona de variables inicializadas
  90 	ldr r2, data_end    @ indica la pos.de la RAM donde finaliza la zona de variables inicializadas
  91 
  92 copy_data:
  93 	cmp   r1, r2
  94 	ldrne r3, [r0], #4
  95 	strne r3, [r1], #4
  96 	bne   copy_data
  97 	
  98 	/* Borrar el sector de variables no inicializadas .bss */
  99 	ldr r0, =0
 100 	ldr r1, bss_start  @ indica la pos.de la RAM donde comienza la zona de variables no inicializadas  
 101 	ldr r2, bss_end    @ indica la pos.de la RAM donde finaliza la zona de variables no inicializadas
 102 clear_bss:
 103 	cmp   r1, r2
 104 	strne r0, [r1], #4
 105 	bne   clear_bss
 106 seguir:	
 107 
 108         ldr   r10,=main
 109         mov   lr,pc
 110         bx    r10  
 111 
 112 /*	bl  main*/
 113 
 114 /* si retorna del main entonces entrar en un bucle infinito*/
 115 loop:   b   loop
 116 
 117 /* Constantes (calculo de stack, si la SRAM del LPC comienza en 0x40000000, y mide 16Kb = 4000h) */
 118 stack_addr:	.word   0x40004000
 119 
 120 PLLBASE:        .word   0xE01FC080
 121 MAMBASE:        .word   0xE01FC000
 122 STACK_START:	.word	0x40004000
 123 
 124 
 125 /* Simbolos del linker script */
 126 
 127 data_source:    .word   _etext
 128 data_start:     .word   _data
 129 data_end:       .word   _edata
 130 bss_start:      .word   _bss
 131 bss_end:        .word   _ebss
 132 
 133 /*
 134 * ----------------------------------------------------------------
 135 * Constantes de 8 bits
 136 * ----------------------------------------------------------------
 137 *
 138 * las constantes de 8 bits son usadas como valores inmediatos y offset
 139 */
 140 
 141 @ PLL configuration 
 142         .equ PLLCON_OFFSET,   0x0
 143         .equ PLLCFG_OFFSET,   0x4
 144         .equ PLLSTAT_OFFSET,  0x8
 145         .equ PLLFEED_OFFSET,  0xC
 146 
 147         .equ PLLCON_PLLE,    (1 << 0)
 148         .equ PLLCON_PLLC,    (1 << 1)
 149         .equ PLLSTAT_PLOCK,  (1 << 10)
 150         .equ PLLFEED1,        0xAA
 151         .equ PLLFEED2,        0x55
 152 
 153         .equ PLLCFG_VALUE,    0x23
 154 @ configuracíon del PLL para cristal de 14,7456 Mhz
 155 
 156 
 157 
 158 @ MAM configuration 
 159         .equ MAMCR_OFFSET,   0x0
 160         .equ MAMTIM_OFFSET,  0x4
 161 
 162         .equ MAMCR_VALUE,    0x2  /* fully enabled */
 163         .equ MAMTIM_VALUE,   0x4  /* fetch cycles  */
 164 	
 165 @ stack configuration 
 166         .equ FIQ_MODE,	0x11
 167 	.equ FIQ_STACK_SIZE, 0x8
 168 	.equ FIQ_DISABLE, (1 << 6)
 169 	.equ IRQ_DISABLE, (1 << 7)
 170 	.equ IRQ_STACK_SIZE, 0x100
 171 	.equ IRQ_MODE, 0x12
 172 	.equ SYS_MODE, 0x1F
 173 
 174 	.end

Archivos adjuntos

Para referirse a los adjuntos de una página, usa attachment:nombredelarchivo, como se muestra abajo en la lista de archivos. NO uses la URL del enlace [get], ya que puede cambiar fácilmente y dejar de funcionar.
  • [obtener | ver] (2019-09-02 11:56:17, 1.2 KB) [[attachment:Makefile]]
  • [obtener | ver] (2019-09-02 11:56:17, 0.4 KB) [[attachment:burbuja_main.c]]
  • [obtener | ver] (2019-09-02 11:56:17, 0.7 KB) [[attachment:factorial_ex1.s]]
  • [obtener | ver] (2019-09-02 11:56:17, 4.6 KB) [[attachment:head.s]]
  • [obtener | ver] (2019-09-02 11:56:17, 2.5 KB) [[attachment:lpc2114_flash.ld]]
  • [obtener | ver] (2019-09-02 11:56:17, 1.1 KB) [[attachment:main.c]]
  • [obtener | ver] (2019-09-02 11:56:17, 0.0 KB) [[attachment:main.h]]
 All files | Selected Files: delete move to page copy to page

No tienes permisos para adjuntar un archivo a esta página.