⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 head.s

📁 s3c2440裸机程序源码
💻 S
字号:
@******************************************************************************@ File:head.S@ 功能:初始化,设置中断模式、系统模式的栈,设置好中断处理函数@******************************************************************************          .extern     main.text .global _start _start:@******************************************************************************       @ 中断向量,本程序中,除Reset和HandleIRQ外,其它异常都没有使用@******************************************************************************           b   Reset@ 0x04: 未定义指令中止模式的向量地址HandleUndef:    b   HandleUndef  @ 0x08: 管理模式的向量地址,通过SWI指令进入此模式HandleSWI:    b   HandleSWI@ 0x0c: 指令预取终止导致的异常的向量地址HandlePrefetchAbort:    b   HandlePrefetchAbort@ 0x10: 数据访问终止导致的异常的向量地址HandleDataAbort:    b   HandleDataAbort@ 0x14: 保留HandleNotUsed:    b   HandleNotUsed@ 0x18: 中断模式的向量地址    b   HandleIRQ@ 0x1c: 快中断模式的向量地址HandleFIQ:    b   HandleFIQReset:                      ldr sp, =4096           @ 设置栈指针,以下都是C函数,调用前需要设好栈    bl  disable_watch_dog   @ 关闭WATCHDOG,否则CPU会不断重启    bl  clock_init          @ 设置MPLL,改变FCLK、HCLK、PCLK    bl  memsetup            @ 设置存储控制器以使用SDRAM    bl  copy_steppingstone_to_sdram     @ 复制代码到SDRAM中    ldr pc, =on_sdram                   @ 跳到SDRAM中继续执行on_sdram:    msr cpsr_c, #0xd2       @ 进入中断模式    ldr sp, =4096           @ 设置中断模式栈指针    msr cpsr_c, #0xdf       @ 进入系统模式    ldr sp, =0x34000000     @ 设置系统模式栈指针,    bl  init_led            @ 初始化LED的GPIO管脚    bl  timer0_init         @ 初始化定时器0       bl  init_irq            @ 调用中断初始化函数,在init.c中    msr cpsr_c, #0x5f       @ 设置I-bit=0,开IRQ中断        ldr lr, =halt_loop      @ 设置返回地址    ldr pc, =main           @ 调用main函数halt_loop:    b   halt_loopHandleIRQ:    sub lr, lr, #4                  @ 计算返回地址    stmdb   sp!,    { r0-r12,lr }   @ 保存使用到的寄存器                                    @ 注意,此时的sp是中断模式的sp                                    @ 初始值是上面设置的4096        ldr lr, =int_return             @ 设置调用ISR即EINT_Handle函数后的返回地址      ldr pc, =Timer0_Handle          @ 调用中断服务函数,在interrupt.c中int_return:    ldmia   sp!,    { r0-r12,pc }^  @ 中断返回, ^表示将spsr的值复制到cpsr    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -