刘彦文等《Linux环境嵌入式系统开发基础》第5章_第1页
刘彦文等《Linux环境嵌入式系统开发基础》第5章_第2页
刘彦文等《Linux环境嵌入式系统开发基础》第5章_第3页
刘彦文等《Linux环境嵌入式系统开发基础》第5章_第4页
刘彦文等《Linux环境嵌入式系统开发基础》第5章_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章GPIO端口和中断控制器,本章重点介绍了:S3C2410AGPIO端口概述和针脚信号。GPIO端口控制;GPIO端口特殊功能寄存器;GPIO端口程序示例。在I/O端口特殊功能寄存器中,除了与GPAGPH对应的寄存器外,还介绍其他控制寄存器、与外部中断相关的寄存器等。S3C2410A中断控制器概述;中断控制器操作、中断源和中断优先级生成模块;中断控制器特殊功能寄存器;中断程序范例。5.1GPIO端口概述,5.1.1GPIO端口概述1。GPIO端口概述S3C2410A具有117个多功能输入/输出端口针脚,分为8个端口:端口a(GPA):23个输出针脚端口;连接埠b(gpb):11个I/o接脚连接埠;连接埠c(GPC):16个I/o接脚连接埠;连接埠d(GPD):16个I/o接脚连接埠;连接埠e(gpe):16个I/o接脚连接埠;连接埠f (GPF),上述GPA至GPH的GP表示GeneralPurpose(常规)。上述8个端口也称为通用输入输出(GPIO)端口。每个端口有三至四个寄存器,称为端口寄存器组。例如,端口b、端口b针配置寄存器GPBCON、端口b数据寄存器GPBDAT、端口b牵引(电阻)控制寄存器GPBUP和一个预留寄存器。对于端口b数据寄存器GPBDAT,如果将此端口配置为输入端口,则它与输入针的状态相对应,并自动保留在此寄存器中。CPU相当于从GPBDAT寄存器中读取数据。当此端口配置为输出端口时,CPU将写入数据寄存器GPBDAT中的数据,并自动从该插针输出。数据寄存器可以配置为S3C2410A的预定义功能之一,以及输入/输出。例如,端口b的某些插针可以用作S3C2410A外部DMA请求(nXDREQ0、nXDREQ1)和响应(nXDACK0、nXDACK1)信号。在端口b针配置寄存器GPBCON中设置不同的值,并选择端口b数据寄存器作为输入、输出或某些功能。“允许/禁止向上拉(电阻)寄存器”GPBUP的值,选择允许或禁止连接到端口b插针的向上拉(电阻)功能。每个端口都可以在软件中轻松设置,以满足可能出现的各种系统配置和设计要求。在运行主程序之前,必须为使用的每个插针定义哪些功能或定义用作输入、输出。初始针脚状态配置正确,以避免出现问题。初始针脚状态在第5.3.1节的针脚配置寄存器中以下划线形式显示信号名称。其他寄存器概述部分5.3.2描述了控制特定时钟信号、外部中断请求信号方法、外部中断掩码等的特殊功能寄存器的其他寄存器。其他控制寄存器MISCCR、DCLK控制寄存器DCLKCON、外部中断控制寄存器EXTINT0EXTINT2、外部中断过滤器寄存器EINTFLT2和EINTFLT3、外部中断屏蔽寄存器EINTMASK、外部中断注册寄存器EINTPEND和公共状态寄存器GSTATUS每个寄存器的具体含义见第5.3.2节。与5.1.2 GPIO端口和其他寄存器相关的S3C2410A针信号935i/O端口相关的S3C2410A针信号端口A至端口h的数据寄存器GPADAT至GPHDAT、与S3C2410A的117针相关的、可在每个针上设置的特定功能以及相应的针信号位于5.3.1节,与其他寄存器相关的S3C2410A针信号寄存器MISCCR中规定了信号输出方法(请参阅表5-24,表3-4)。,nRSTOUT是外部设备Reset针脚信号,S3C2410A输出,nRESET/设置GPF0,GPF2是EINT0,EINT2功能rGPGCON |=26 | 222/设定GPG3,GPG11为EINT11,EINT19功能rint mod=0;/将中断模式寄存器设置为0,所有中断的IRQ类型为rext0 |=40 | 48/EINT0,EINT2上升设置为触发rEXTINT1 |=412/EINT11上升设定为触发rEXTINT2 |=412 |=412/EINT19上升设置rEINTMASK/EINT0、EINT2、EINT8_23对应于屏蔽位置0,假定服务允许/中断优先级寄存器的值已使用设置的值,/此处不再设置。当9332中断请求在这四个中断请求插针中发出一个或多个中断请求时:如果在EINT0或EINT2中存在请求,则源注册寄存器SRCPND0或SRCPND2自动放在1中。当请求EINT11或EINT19时,外部中断注册寄存器EINTPEND11或EINTPEND19自动设置1,源注册寄存器SRCPND5自动设置1。由于这些中断没有掩码,因此通过优先级仲裁器,最高优先级的中断请求将中断注册寄存器INTPND中的相应位设置为1,并在中断偏移寄存器INTOFFSET中自动设置相应的偏移。IRQ请求发送ARM920T内核。在ARM920TCPU的当前程序状态寄存器CPSR中,如果I位为零,则允许IRQ中断,当当前正在执行的指令执行终止时,CPU将响应IRQ请求。ARM920TCPU在中断响应中断响应期间自动执行以下操作:PC值,存储在IRQ方式连接寄存器LR中,返回时使用;将当前程序状态寄存器CPSR的内容存储在IRQ模式下的保留程序状态寄存器SPSR中。如何强制设置程序状态寄存器位CPSR4:0为10010,系统以IRQ方式进入。将程序状态寄存器的t状态位CPSR5强制设置为0,系统进入ARM状态。强制设置程序状态寄存器的IRQ禁止位CPSR7为1,阻止CPU再次响应IRQ请求。正常(未配置高矢量地址)IRQ异常入口地址0 x00000018发射器计数器PC。此后,程序将在0 x00000018上运行,分支到IRQ以停止服务程序。例外发生后例外入口地址和这些地址中存储的说明显示在表5-48中,该表在相应IRQ的入口地址0 x00000018中存储分支命令BHandlerIRQ,HandlerIRQ通常是IRQ中断服务程序的入口地址。但是,在表5-48(p168)中,由于分支命令b的分支范围为32MB,因此在将中断服务程序存储在内存中后,如果原始地址远离例外入口地址超过32MB,则需要添加代码片段。此代码应接近例外门户地址,并可分支到例外(中断)服务程序。例如,中断请求IRQ包括、HandlerIRQ、标签、程序入口、0 x00000018 BHandlerIRQ命令分支到子sp、sp和# 4。修改堆栈指针,在堆栈顶部保留4。字节空间,后续说明;STRR0,SP,#4在STMFDSP中填充R0内容! R0 ;存储作业寄存器R0内容LDRR0,=HandleIRQHandleIRQ异常向量的去除和存储;表地址LDRR0,R0;表地址的内容,即HandleIRQ地址,发送r0 strr 0,sp,# 4;R0的值HandleIRQ地址存储堆栈LDMFDSP!R0,PC ;作业寄存器R0内容还原堆栈之外;将HandleIRQ地址作为PC,实现分支。在上面的代码中,HandleIRQ是IRQ中断服务程序的门户地址,每个异常(中断)服务程序的门户地址已在异常度量中定义。异常尺度handle reset # 4;Reset例外服务入口地址4字节handlef # 4 handle hwi # 4 handle pabort # 4 handleed abort # 4 handle reserved # 4 handle IRQ # 4;IRQ中断服务程序门户地址(4字节HandleFIQ#4,)当中断请求指标进入IRQ中断服务程序时,必须区分哪些中断源发出请求,然后转到相应的服务程序。32个32位中断源,对应于中断注册寄存器INTPND,32段服务程序。您可以使用32段服务进程的每个段的起始地址创建一个名为中断量表的表。中断方向量表如下:中断尺度handleint 0 # 4;HandlEINT0是EINT0中断源。4字节handleint 1 # 4 handleint 2 # 4 handleint 3 # 4 handleint 4 _ 7 # 4的相应程序门户地址;Handleint 4 _ 7是与:eint 4到EINT7中断源相对应的程序门户地址,进入程序并根据外部中断注册寄存器;EINTPEND区分建议的四个中断源中的哪一个。中断请求.handloint _ ADC # 4,IRQ中断服务程序IRQ中断服务程序要从中断偏移寄存器值转到中断请求相应的服务程序,请使用部分汇编程序:IsrIRQ标签SUBSP、SP、# 4;修改堆栈指针,在堆栈顶部留下4字节空间STMFDSP! R8-R9 ;保存R8、r19 ldrr9、=int offset。中断偏移寄存器INTOFFSET地址LDRR9,R9;读中断偏移寄存器值LDRR8,=HandleEINT0中断规模地址ADDR8、R8、R9、LSL # 2;在中断偏移寄存器INTOFFSET中偏移;将数量乘以4,添加中断尺度的第一个地址,在方向尺度中对应的中断LDRR8,R8;从指标中获取与中断请求相对应的服务。在程序入口地址中,R8STRR8,SP,# 8;R8存储堆栈LDMFDSP!R8-R9,PC ;堆栈中的原始R8(与中断门户地址相对应);内容发送PC并发送到相应的中断服务程序;并发堆栈R8,R9,(参见剩馀参考文献p170-171),示例5.5以下代码是测试外部中断的EINT0,EINT2,EINT11,EINT19的过程。其他程序的代码定义了一些位,并定义了清除注册位的宏。以下是测试程序。它还位于包含封锁的初始化设置的头文件中。在测试过程中,首先定义了EINT0、EINT2、EINT11或EINT19的中断服务过程。中断服务程序调用宏以清除源注册寄存器/中断注册寄存器中的中断请求位。对于EINT11或EINT19,还清除外部中断注册寄存器中的中断请求位。清除是在这个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论