课件:接口技术_3嵌入式程序设计语言.ppt

课件:接口技术_3嵌入式程序设计语言.ppt

  1. 1、本文档共115页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课件:接口技术_3嵌入式程序设计语言.ppt

基于ARM的嵌入式系统接口技术 工作过程四 关中断(包括中断和子中断) ldr r0,=INTMSK ldr r1,=0xffffffff ;禁止所有中断,即设置中断屏蔽寄存器 str r1,[r0] ldr r0,=INTSUBMSK ldr r1,=0x3ff ;禁止所有子中断,即设置子中断屏蔽寄存器 str r1,[r0] 基于ARM的嵌入式系统接口技术 工作过程五 设置系统时钟频率 有时需要设置系统CPU的速度和时钟频率(各寄存器意义参见第十章2410时钟设置)。 ;调整LOCKTIME 寄存器,首先设置锁相环的 lock time ldr r0,=LOCKTIME ldr r1,=0xffffff str r1,[r0] ;如果启用锁相环,则需要使用下面的代码配置MPLL IFDEF PLL_ON_START ldr r0,=MPLLCON ldr r1,=((M_MDIV12)+(M_PDIV4)+M_SDIV) ;Fin=12MHz,Fout=50MHz str r1,[r0] ENDIF 基于ARM的嵌入式系统接口技术 工作过程六 设置随机存储器 若系统使用了DRAM或其他存储器外设,需要设置相关寄存器,以确定其刷新频率、总线宽度等信息。 ;设置存储器控制寄存器 ldr r0,=SMRDATA ldr r1,=BWSCON ;BWSCON地址 add r2, r0, #52 ;SMRDATA的结束地址,共有13个寄存器 0 ;标号,循环指令跳转到这里 ldr r3, [r0], #4 ;每次在地址上加4 str r3, [r1], #4 cmp r2, r0 bne %B0 基于ARM的嵌入式系统接口技术 工作过程七 设置堆栈 系统堆栈初始化取决于用户使用哪些异常,以及系统需要处理哪些错误类型。一般情况下,管理模式堆栈必须设置;若使用了IRQ中断,则IRQ中断堆栈必须设置。 子函数对各种工作模式下的堆栈都进行了初始化,初始化堆栈段代码中用到的常量在程序的开始部分定义。 bl InitStacks ;跳转到初始化堆栈子函数 基于ARM的嵌入式系统接口技术 工作过程八 中断处理程序 ; Setup IRQ handler ldr r0,=HandleIRQ ;This routine is needed ldr r1,=IsrIRQ ;if there isnt subs pc,lr,#4 at 0x18, 0x1c str r1,[r0] IsrIRQ sub sp,sp,#4 ;reserved for PC stmfd sp!,{r8-r9} ldr r9,=INTOFFSET ldr r9,[r9] ;把INTOFFSET寄存器的值装载到r9 ldr r8,=HandleEINT0 ;把中断服务例程向量基地址装载到r8 add r8,r8,r9,lsl #2 ;取得中断服务例程向量r8 = r8 + r9 * 4 ldr r8,[r8] ;装载中断服务例程地址 str r8,[sp,#8] ; store to sp, new PC ldmfd sp!,{r8-r9,pc} ;跳转到新的PC处即中断处理例程处 基于ARM的嵌入式系统接口技术 工作过程九 初始化应用程序执行环境 ldr r0, =|Image$$RO$$Limit| ;得到ROM只读数据区结束地址+1 ldr r1, =|Image$$RW$$Base| ;得到RAM 读写段起始地址 ldr r3, =|Image$$ZI$$Base| ;需要清零的区域起始地址 ; Zero init base = top of initialised data cmp r0, r1 ;检查是否不同 beq %F2 ;向后跳 1 cmp r1, r3 ;拷贝初始化的数据 ldrcc r2, [r0], #4 ;-- LDRCC r2, [r0] + ADD r0, r0, #4 strcc r2, [r1], #4 ;-- STRCC r2, [r1] + ADD r1, r1, #4 bcc %B1 ;向前跳 2 ldr r1, =|Image$$ZI$$Limit| ;对需要清零的区域清零 mov r2, #0 3 cmp r3, r1 ;Zero init strcc r2, [r3], #4 bcc %B3 基于ARM的嵌入式系统接口技术 工作过程十 跳转到C程序的入口点 至此,启动代码执行完毕,启动代码完成

文档评论(0)

iuad + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档