IT博客 联系 聚合 管理  

Blog Stats

News

龙人嵌入式产品事业部专业提供ARM开发板(ARM9和ARM7)、ARM教学系统、ARM工控模块、DSP开发工具和仿真器等产品,另外龙人还提供ODM研发和嵌入式开发。想做嵌入式,找龙人! 网址:http://www.armodm.com 联 系 电 话:+86-0755-83346939 83662100 余小姐 销 售 Email:beijingshenzhen@126.com 联 系 地 址: 深圳市福田区福虹路世界贸易广场B座13F 邮 编:518033

随笔分类

随笔档案

相册

嵌入式开发和ARM解决方案


龙人嵌入式系统-嵌入式开发-ARM开发板-ARM开发工具

嵌入式系统开发商和ARM开发工具提供商龙人计算机提供嵌入式系统全套解决方案包括ARM解决方案、ARM开发板(ARM9开发板和ARM7开发板)、ARM工控模块、ARM教学系统、ARM教学平台、ARM实验室建设、ARM仿真器等

 

S3C 2410开发板上的中断编程 -ARM9开发板学习心得

文章整理: 深圳龙人嵌入式研发中心 (arm9arm7)

一、 在S3C 2410 开发板上 实现中断编程的 目的

   中断服务程序在 嵌入式 操作系统中无疑占有非常重要的地位,编写中断程序不仅要会运用底层的汇编语言,还要了解AR M 的体系架构。那这一节我们就通过 中断编程 来响应  S3C 2410开发板 上的16个按键,实现依次按下16个键时,D9~D12 四个 Led 从 0~15 进行计数,并通过上个实验实现的 uart_printf 向串口发送数据 Kn is pressed!。

二、 S3C 2410 开发板上的中断编程 代码

   我们直接分析代码,代码中只有简略的注释,必要时我会在整个代码文件的后面对相应的细节进行解释。先来分析 head.s:

   @文件 head.s

   .text

   .global _start

   _start:

        @ Set vector table for interrupt

.............(这里部分代码省略,要看代码请进龙人计算机关于 嵌入式系统和嵌入式开发 的网站)

我们来看一下它的执行流程:  

(1) 设置中断向量表。你也许在这里有疑问,为什么一开始就有 8 个分支跳转指令?我们

    先来研究一下 ARM 如何响应异常/中断,看下表:

      -------------------------------------------------------------

          Exception               Mode              Address

      -------------------------------------------------------------

          Reset                      Supervisor       0x00000000    

          Undefined               Undefined        0x00000004    

          Software Interupt    Supervistor      0x00000008    

          Prefetch Abort        Abort              0x0000000C    

          Data Abort             Abort              0x00000010    

          IRQ (interupt)         IRQ                0x00000018    

          FIQ (fast interupt)   FIQ                0x0000001C    

      -------------------------------------------------------------

ARM9  ARM9开发板  S3C 241 0 开发板   嵌入式开发   中断编程

    可以看出 ARM 支持 7 种异常/中断,每种异常/中断都有固定的地址,这个地址叫中断向量,一般我们会在这个地址放一条分支跳转指令,当异常/中断发生时,ARM 就到这个地址执行这个跳转指令,从而调用相应的中断服务程序。

(2) 关闭看门狗

(3) 暂时屏蔽所有中断。

    1.地址 0x4A000008 是中断屏寄存器 INTMSK 的端口地址,复位 INTMSK 会导致所有的中断源被屏掉。

    2.地址 0x4A00001C 是子中断屏寄存器 INTSUBMSK 的端口地址,它的低 11 位对应外部11个中断源,高 21 位保留不用。复位它的低 11 位会导致相应的外部中断被屏。

(4) 初始化内存 SDRAM 设置

(5) Self-copying: 从 Nand Flash 将自身复制到 SDRAM

(6) 进入 IRQ 模式,设置 IRQ 模式下的堆栈寄存器

(7) 进入系统模式,并设置系统模式下的堆栈寄存器

(8) 系统模式下调用 init_irq,这个函数用于初始化一些用于响应按键的中断寄存器

(9) 再次进入系统模式,并打开当前程序状态寄存器 cpsr 的 IRQ 中断位,这样 ARM 就能 响应 IRQ 中断了

(10)执行主函数 main 后返回,然后进入死循环,等待中断发生

(11)中断发生时,ARM 响应中断并于 0x00000018 处执行 b HandleIRQ 跳转指令调用中断服务程序,处理完毕后返回循环处再等待下次中断的发生,如此往复...

这就是中断处理的基本流程了 :-), 以下文件的代码在前面随笔均有详细说明,这里就仅附

简略注释了

注意:程序代码省略,详细代码请进龙人计算机网站下载

深圳龙人嵌入式产品事业部是国内最强最精最专业的开发板集散地包括ARM开发板、ARM9开发板、 Xscale开发板 、2410开发板 (ARM9) 2440开发板 (ARM9) 、44B0X开发板 (ARM7) 、DSP开发板、单片机开发板、FPGA开发板、CPLD开发板等各类精品开发板! 网址: http://www.armodm.com

三、编译、烧写、测试

   Make 一下就会生成我们要的文件 main, 将其通过 JTAG 烧入 Nand Flash。用超级终

连接到开发板,注意波特率设为 57600,数据位 8,无奇偶校正,停止位1,无数据流控制。现

在 Reset 一下的 开发板 ,然后静静的等待吧,生成的二进制文件 main 有 39K 大呢,要等它

完全复制到 SDRAM 至少要两三分钟...哈哈,你会发现 D9~D12 四个led 灯被点亮了,并且

当你按下某个按键时,这四个灯会指示你按下的是第几个键,你还会发超级终端上有文字显示,

例如当你按下按键 2 时:

     K2 is pressed!

posted on 2008-05-10 16:43 龙人嵌入式开发 阅读(268) 评论(0)  编辑 收藏 引用 所属分类: ARM9开发板和ARM7开发板
只有注册用户登录后才能发表评论。