GPIO

习惯了stm32的GPIO,发现高端处理器arm在这方面反而简单了。

ARM9控制GPIO只有三种寄存器。

GPxCON:配置引脚功能,GPACON用一位控制一个GPIO,分别是0为输出引脚,1为输入引脚。GPBCON---GPH/JCON 则用两位控制一个引脚,分别是00表示输入,01表示输出,10表示特殊功能。

GPxDAT:当此引脚被设置为输入时,读此引脚可知相应引脚的电平状态是高还是低。当次引脚被设置为输出时,写此引脚可令此引脚输出高电平或者低电平。

GPxUP:某位为1时,相应引脚无内部上拉电阻,某位为0时,相应引脚使用内部上拉电阻。

相比于stm32的八种输入输出模式,7个寄存器,还不算配置复用的寄存器…..果然…..没有库函数的stm32可怎么活啊。

中断

先说一下irq和fiq的区别:

1) fiq拥有更多的bank的寄存器,irq则没有,这意味着irq要用更多的时间去保存现场。

2) fiq的优先级高于irq,所以fiq可以打断irq,但是irq不能打断fiq。

3) 只能有一个中断被设置为irq。

当发生一个中断的时候,arm9核会自动完成如下的事情(arm9工作):

1) 在异常工作模式的连接寄存器R14中保存前一个工作模式的下一条。

2) 将cpsr的值复制到异常模式的spsr。

3) 将cpsr的工作模式设为这个异常对应的工作模式。

4) 令pc等于这个异常在异常向量表的地址。

中断处理(程序员工作):

1) cpu响应了中断之后,需要保存当前的运行环境(各个寄存器),然后调用中断服务程序(ISR)。

2) 在ISR中读取中断控制器,外设的相关寄存器来判断这是哪一个中断。

3) 清除中断。

4) 最后回复中断程序的运行环境(就是上面保存的各个寄存器),

从异常工作模式退出返回之前的工作模式,需要软件完成下列事情(程序员工作):

1) 前面进入异常模式时候,连接寄存器保存了前一个工作模式的下一条指令地址,将它减去一个适当的值后赋给pc。

2) 将spsr的值赋值回cpsr。

Arm9外部中断:

Arm9的清爽向量表如下,如下,每种异常对应一种运行模式,地址零处为Reset向量:

Arm9有60个中断源,其中一级中断有23个。比如EIN4_7属于一级中断源,但是该中断源包含EIN4\EIN5\EIN6\EIN7四个子中断源。

下图是外部中断,包含了中断号,中断引脚,外部中断挂起寄存器,中断屏蔽寄存器,源挂起寄存器。

上面主要说的是外部中断的寄存器,下面确切说一下各个寄存器:

SUBSRCOND寄存器:用来标示中断,主要是处理内部中断,如INT_RXD0,INT_TXD0。

INTSUBMSK寄存器:用来屏蔽SUBSRCOND中所标示的中断。某位被标示为1时,表示该中断被屏蔽。

SRCPND寄存器:用来标示中断,包括内部中断和外部中断。

INTMASK寄存器:用来屏蔽SRCPND中的中断。

INTMOD寄存器:设置FIQ。

PRIORITY寄存器:设置7个仲裁器的仲裁规则,以达到设置中断优先级的目的。

INTPND寄存器:经过中断优先级仲裁器选出优先级最高的中断,这个中断在INTPND寄存器中相应的位被置1,随后cpu进入中断模式处理它。

INTOFFSET寄存器:这个寄存器用来查看INTPND寄存器中哪一位被置一。

补:EINTMASK寄存器:用来屏蔽外部中断。

arm9的中断的更多相关文章

  1. ARM9的中断控制器

    简要复习一下ARM9中断控制器的控制过程: 1.首先能识别触发的中断(对应中断源必须打开,然后查询当前中断状态寄存器),硬件会操控PC跳到中断向量入口(IRQ_HANDLE,硬件控制的只要是IRQ中断 ...

  2. uboot中添加FIQ中断及相关问题

    本文主要说明了在uboot中添加FIQ中断时遇到的问题以及对应的解决办法. 首先交代一下项目的软硬件环境.硬件方面,使用s3c2440作为主控芯片,外接串口.网卡等设备.软件方面,主控芯片上电后运行u ...

  3. linux中断的上半部和下半部 【转】

    转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=24690947&id=3491821 一.什么是下半部 中断是一 ...

  4. ARM中断深入分析几点

    ARM中断深入分析几点 1.程序发生中断后,是如何跳转到中断程序里面的? 2.执行完中断后,如何返回到原来被打断的地方接着执行呢? 3.ARM处理器的流水线结构对中断返回地址的计算有什么影响? 4.A ...

  5. arm9的时钟和定时器

    时钟 两种能够提供时钟的方式: 1) 晶振 2) PLL(也就是锁相环):通用PLL需啊一个晶振,和对晶体特定频率分频或倍频的锁相环电路. 学习ARM9时钟的四步: 1) 晶振:12MHZ 2) 有多 ...

  6. 【ARM-Linux开发】ARM7 ARM9 ARM Cortex M3 M4 有什么区别

    ARM7 ARM9 ARM Cortex M3 M4 区别 arm7 arm9 可以类比386和奔腾, 不同代,arm9相比arm7指令集和性能都有所增强,arm7和arm9都有带mmu和无mmu的版 ...

  7. 【Linux开发】linux设备驱动归纳总结(六):3.中断的上半部和下半部——工作队列

    linux设备驱动归纳总结(六):3.中断的上半部和下半部--工作队列 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  8. angular2系列教程(九)Jsonp、URLSearchParams、中断选择数据流

    大家好,今天我们要讲的是http模块的第二部分,主要学习ng2中Jsonp.URLSearchParams.observable中断选择数据流的用法. 例子

  9. myrocks复制中断问题排查

    背景 mysql可以支持多种不同的存储引擎,innodb由于其高效的读写性能,并且支持事务特性,使得它成为mysql存储引擎的代名词,使用非常广泛.随着SSD逐渐普及,硬件存储成本越来越高,面向写优化 ...

随机推荐

  1. Java_jdbc 基础笔记之十一数据库连接 (通用的查询方法)

    鉴于之前的查询方法,在这里我们可以写一个通用的方法 /** * 鉴于 student.和customer查询的方法有好多相同之处,在此可以写一个通用的方法 */ public <T> T ...

  2. Jenkins 设置 源码库浏览器

    玩转Jenkins - 源码库浏览器功能如何使用 - 简书https://www.jianshu.com/p/22f72effb4ef Jenkins上踩过的那些坑 - 简书https://www.j ...

  3. odoo开发笔记 -- 多个子类继承同一个父类方法的执行顺序

    场景描述: odoo模块化开发的架构理念,科学&高效, 可以让很多业务场景,尽可能松耦合:让开发人员的主要精力,关注在当前的业务逻辑: 所谓「前人栽树,后人乘凉」,模块整体好比一棵大树, 开发 ...

  4. mybatis自动生成后无法获取主键id问题

    使用mybatis的自动生成工具生成的主键id: <selectKey resultType="java.lang.Integer" keyProperty="id ...

  5. [LeetCode] 95. Unique Binary Search Trees II 唯一二叉搜索树 II

    Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...

  6. C++中print和printf的区别

    print与printf的区别 1,print 中不能使用%s ,%d 或%c: 2,print 自动换行,printf 没有自动换行.

  7. layui的select监听

    首先,select一定要放在<form class="layui-form" ></form>里面 然后,加监听<select id="id ...

  8. log sum of exponential

    The so-called “log sum of exponentials” is a functional form commonly encountered in dynamic discret ...

  9. LeetCode 43. 字符串相乘(Multiply Strings)

    43. 字符串相乘 43. Multiply Strings 题目描述 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. ...

  10. c++连接打印机(转载)

    Visual C++6.0是开发Windows应用程序的强大工具,但是要通过它实现程序的打印功能,一直是初学者的一个难点,经常有朋友询问如何在VC中实现打印功能,他们往往感到在MFC提供的框架内实现这 ...