430 likes | 625 Views
6.3 S3C44B0X I/O 端口功能及应用开发. 6.3.1 功能概述 6.3.2 端口功能配置 6.3.3 端口功能控制描述 6.3.4 端口的特殊功能寄存器. 6.3.1 S3C444B0X I/O 功能概述. S3C44B0X 有 7 个输入输出端口 共计 71 个输入输出引脚 全部为可编程端口 两个 9 位输入输出端口( PortE 和 PortF ); 两个 8 位输入输出端口( PortD 和 PortG ); 一个 16 位输入输出端口( PortC ); 一个 10 位输出端口( PortA );
E N D
6.3 S3C44B0X I/O端口功能及应用开发 • 6.3.1 功能概述 • 6.3.2 端口功能配置 • 6.3.3 端口功能控制描述 • 6.3.4 端口的特殊功能寄存器
6.3.1 S3C444B0X I/O功能概述 • S3C44B0X有7个输入输出端口 • 共计71个输入输出引脚 • 全部为可编程端口 • 两个9位输入输出端口(PortE和PortF); • 两个8位输入输出端口(PortD和PortG); • 一个16位输入输出端口(PortC); • 一个10位输出端口(PortA); • 一个11位的输出端口(PortB)。 大多数端口(引脚)都是复用的
6.3.2 S3C444B0X 端口功能配置 • 大部分端口可以用以是: 输入、输出、控制总线、数据总线、地址总线 • 通过软件设置来决定每个端口的功能 • 通常都要在主程序开始前被定义 • 如果一个引脚的多功能没有使用(定义) 这个引脚将被设置为I/O端口 • 引脚配置以前,需要对引脚的初始化状态进行设定
6.2.3 S3C44B0X存储控制器功能描述 • 主要是通过下列各种寄存器对端口进行设置 • 端口配置寄存器(PCON) PCONa~PCONg 决定了每一个引脚的功能 • 端口数据寄存器(PDAT) 输入、输出数据就是通过PDATa~ PDATg被传送的 • 端口上拉寄存器(PUP) 当PUPc~PUPg相应的位被设为0时,引脚接上拉电阻; 当PUPc~PUPg相应的位为1时,引脚不接上拉电阻。
特殊的上拉电阻控制寄存器(SPUPCR) SPUPCR可使数据线的引脚上接拉电阻 一方面,有些工作模式需要高阻状态,有些模式需要低功耗 • 外部中断控制寄存器 决定8个外部中断的触发方法: 低电平触发、高电平触发、下降沿触发、上升沿触发、双沿触发 • 外部中断挂起寄存器(EXTINTPND) 外部中断请求(4/5/6/7)具有特殊性:它们“或”的关系 即:EINT4~EINT7共享中断控制器里同一个中断请求队列 如果外部中断请求的4位中的任何一位被激活的话, 那么EXTINPNDn将会被设置为1。 外部挂起条件清除以后,中断服务程序必须清除中断挂起状态。通过EXTINPND对应位写1来清除挂起条件。
关于中断(1) • 中断的概念 • 特点1:①对现行程序(主程序)的暂时终止,②转而执行其它程序(中断服务程序),结束后③又回到原来的程序继续执行 • 特点2:随机性、突发性(有别于函数调用一) • 特点3:中断服务程序一般不会以调用的形式出现在主程序中(有别于函数调用二)
关于中断(2) • 与中断有关的名词 • 中断管理器 • 中断源 • 中断请求、中断响应 • 中断服务程序、中断服务程序入口(地址) • 中断矢量 • 中断优先级 • 中断屏蔽字 • 中断返回、中断现场保护
关于中断(3) • 中断的执行机制 • 开放中断屏蔽位(包括屏蔽某些位) • 设置中断请求触发方式 • 设置中断服务程序入口地址 • 编写中断程序服务
6.6 S3C44B0X的中断应用(1) • S3C44B0X中断基本概况 • S3C44B0X CPU有26个中断源输入端 • 可以管理(接)30个中断源 外部8个(EINT0,EINT1,EINT2…, EINT7) 内部22个(S3C44B0X) • 问题!30=8+22,但 26≠30 外部4、5、6、7共用一个 内部UART错误0、1共用一个
6.6 S3C44B0X的中断应用(2) • S3C44B0X的中断管理层次 三级管理模式:CPU →中断管理器→端口管理 • CPU: 状态寄存器CPSR(P67页) I(IRQ)标志、F(FIQ)标志 (0:允许、1:禁止) • 中断管理器: 中断控制寄存器INTCON──4位(P342页) 保留位、V(向量)、I、F (0:允许、1:禁止)
6.6 S3C44B0X的中断应用(3) • 端口管理 ☆ 中断模式寄存器INTMOD(P343页) 26位:每位对应一个端口 (1:FIQ模式,0:IRQ模式) ☆ 中断屏蔽寄存器INTMSK(P344页) 27位:全局屏蔽Global和单个端口屏蔽 (0:开放、1:屏蔽)
6.6 S3C44B0X的中断应用(4) • 端口管理 ☆ 中断挂起寄存器INTPND─自动!! 26位:每位对应一个端口 某个端口上有中断请求时自动置“1” ☆ 中断挂起清零寄存器I_ISPC(P347页)程控!! 26位:清除对应中断挂起位 0—不变,1—清除(含未响应))
6.6 S3C44B0X的中断应用(5) • 端口管理 ☆ 外部中断控制寄存器EXTINT(P315页) 32位:XXXX格式(4位对应一个端口) 触发方式:低(高)电平、上升(下降)沿 ☆ 外部中断挂起寄存器EXTINTPND(P315页) 4位:(仅对外部中断4567有效) 1)反映外部EINT4567的具体状态 2)清除挂起状态 1—激活(INTPND同时激活)
6.6 S3C44B0X的中断应用(6) • 优先级管理 ☆ 主群优先级与从群优先级(P345页) 模块逻辑图,见P340图6-8 ☆ 当前主群优先级与从群优先级(P346页) • 其它 ☆ 中断服务挂起寄存器I_ISPR─状态寄存器 ☆ 关于端口G的配置(P314页)
6.6 S3C44B0X的中断应用(7) • 中断编程思路与步骤 • 初始化部分 ⑴ 中断允许设置 INTCON、INTMSK、CPSR、I_ISPC、EXTINTPND??? ⑵ 中断方式、触发方式设置 INTMOD、(EXTINT 仅外部中断时需要!) ⑶ 设置中断服务程序入口地址 pISR_TIME01、pISR_EINT01、pISR_EINT4567、…… ⑷ 设置端口G的功能(仅外部中断时需要!) PCONG、PUP(P314页)
6.6 S3C44B0X的中断应用(8) • 中断服务程序 ⑴ 编写具体应用程序 视具体任务而定 ⑵ 结束(返回)前必须设定的寄存器 I_ISPC(、EXTINTPND) EXTINTPND与INTPND的区别 ? EXTINTPND在自动与程控时的区别 ? 外部EINT4567同时发出请求时如何响应? 一个处理未完成时,另一个发出请求如何处理? 一个先请求,但还没有响应,另一个又请求,如何处理?
6.4 S3C44B0X DMA功能及应用开发 • 6.4.1 S3C444B0X DMA概述 • 6.4.2 S3C444B0X ZDMA/BDMA操作 6.4.3 S3C444B0X DMA特殊功能寄存器 • 6.4.4 S3C444B0X DMA应用编程
6.4.1 S3C444B0X DMA概述 • DMA的概念 • S3C44B0X有一个4通道的DMA控制器 • ZDMA(普通DMA)—— 2通道 连接于SSB上,主要用于RAM与RAM之间,RAM与I/O之间的数据传送 • BDMA(桥梁DMA)—— 2通道 连接于总线桥内,主要用于RAM与I/O之间的数据传送 • SSB总线——三星系统总线 • SPB总线——三星外围总线 桥是SSB和SPB之间的接口层
6.4.2 S3C444B0X ZDMA/BDMA操作 • 外部 DMA 请求/应答协议 • 握手模式—— 一次DMA操作不可被中止 • 单步模式—— 一次DMA操作可被高优先级的请求剥夺,因此速度低于握手模式 • 完整服务模式—— 一次DMA请求将产生连续的DMA传输 总线控制权的处理方法 • 需求模式—— 此方式下,其它设备无法再获得总线控制权
DMA传送方式 • 单元传送方式—— 每个请求对应一次读写操作 • 块传送方式—— 传输的字是16的倍数(1个块为4个字) • on-the-fiy传送方式—— 读写同时进行 • DMA请求源的选择 • 自动重装模式 • 特殊功能寄存器
6.4.3 S3C444B0X DMA特殊功能寄存器 • 1. ZDMA 控制寄存器(ZDCONn) • 2. ZDMA0/1初始源/目的地址和计数寄存器和ZDMA0/1当前源/目的地址和计数寄存器 • 3. ZDMAn 初始源/目标地址寄存器(ZDISRC, ZDCSRC) • 4. ZDMAn初始/当前目的地址寄存器(ZDIDES, ,ZDCDE)
6.5 S3C44B0X UART接口功能及应用开发 • 6.5.1 S3C444B0X UART概述 • 6.5.2 S3C444B0X UART的操作 • 6.5.3 S3C444B0X UART的特殊功能寄存器 • 6.5.4 S3C444B0X UART应用编程
6.5.1 S3C444B0X UART概述 • S3C44B0X的UART单元提供两个独立的异步串行I/O口((Asynchronous Serial I/O,SIO)),每个通信口均可工作于中断和或DMA模式。也即UART能产生内部中断请求或DMA请求,在CPU和串行I/O口之间传送数据。它支持高达115.2K bps的传输速率,每一个UART通道包含了两个16位的分别用于接收和发送信号的FIFO(先进先出)通道。 • S3C44B0X的UART单元特性包括: • 波特率可编程基于DMA或中断操作的RxD0、RxD1、TxD0、TxD1; • UART通道0支持红外发送与接收; • UART通道1支持红外发送与接收; • 支持握手方式传输与发送。
6.5.2 S3C444B0X UART的操作 • 数据传输 • 数据接收 • 三 自动流控制AFC( Auto Flow Control) • 非自动流控制(nRTS和nCTS由S/W所控制) • 中断/DMA请求的产生 • UART错误状态FIFO • 波特率的产生 • 回环(Loop-back)模式 • 红外模式
6.5.3 S3C444B0X UART的特殊功能寄存器 • 在UART操作中,主要是通过对UART特殊寄存器进行设置来对UART操作进行控制。UART的特殊功能寄存器包括UART的控制寄存器、状态寄存器、保持寄存器、波特率分频寄存器等等。
6.6 S3C44B0X中断控制器功能及应用开发 • 6.6.1 S3C444B0X 中断概述 • 6.6.2 S3C444B0X 中断控制器的操作 • 6.6.3 S3C444B0X 中断源 • 6.6.4 S3C444B0X 矢量中断模式(仅针对IRQ) • 6.6.5 S3C444B0X 矢量中断模式的程序举例 • 6.6.6 S3C444B0X 中断控制器的特殊功能寄存器 • 6.6.7 S3C444B0X 中断控制器应用编程
6.6.1 S3C444B0X 中断概述 • S3C44B0X的中断控制器可以接受接收来自30个中断源的中断请求。这些中断源来自DMA、UART、SIO等这样的芯片内部外围或接口芯片的外部引脚。在这些中断源中,有4个外部中断(EINT4/5/6/7)是逻辑或的关系,它们共用一条中断请求线。UART0和UART1的错误中断也是逻辑或的关系。 • 中断控制器的任务是在片内外围和外部中断源组成的多重中断发生时,经过优先级判断选择其中一个中断通过FIQ或IRQ向ARM7TDMI内核发出FIQ或IRQ中断请求。 • 实际上最初ARM7TDMI内核只有FIQ(快速中断请求)和IRQ(通用中断请求)两种中断,其它中断都是各个芯片厂家在设计芯片时定义的,这些中断根据中断的优先级高低来进行处理。例如,如果你定义所有的中断源为IRQ中断(通过中断模式设置),当同时有10个中断发出请求时,可以通过读中断优先级寄存器来确定哪一个中断将被优先执行。一般的中断模式在进入所需的服务程序前需要很长的中断反应时间,为了解决这个问题,S3C44B0X提供了一种新的中断模式叫做矢量中断模式,它具有CISC结构微控制器的特征,能够减少中断反应时间。换句话说S3C44B0X的中断控制器硬件本身直接提供了对矢量中断服务的支持。
6.6.2 S3C444B0X 中断控制器的操作 程序状态寄存器的F位和I位 • 如果CPSR程序状态寄存器的F位被设置为1,那么CPU将不接受接收来自中断控制器的FIQ(快速中断请求);如果CPSR程序状态寄存器的I位被设置为1,那么CPU将不接受接收来自中断控制器的IRQ(中断请求)。因此,为了使能FIQ和IRQ,必须先将CPSR程序状态寄存器的F位和I位清零,并且中断屏蔽寄存器INTMSK中相应的位也要清零。 • 中断模式(INTMOD) • ARM7TDMI提供了2种中断模式:FIQ模式和IRQ模式。所有的中断源在中断请求时都要确定使用哪一种中断模式。
中断挂起寄存器(INTPND) • 用于指示对应的中断是否被激活。当中断挂起位被设置时,只要相应的标志I或标志F被清零,相应的中断服务程序都将会被执行。中断挂起寄存器是只读寄存器,所以在中断服务程序中必须加入对I_ISPC和F_ISPC写1的操作来清除挂起条件。 • 中断屏蔽寄存器(INTMSK) • 当INTMSK寄存器的屏蔽位为1时,对应的中断被禁止;当INTMSK寄存器的屏蔽位为0时,则对应的中断正常执行。如果一个中断的屏蔽位为1,在该中断发出请求时挂起位还是会被设置为1。如果中断屏蔽寄存器的全局屏蔽位(global bit)设置为1,那么在中断发出请求时相应的中断挂起位会被设置,但所有的中断请求都不被执行。
6.6.3 S3C444B0X 中断源 • 在30个中断源中,对于中断控制器来说有26个中断源是单独的,4个外部中断(EINT4/5/6/7)是逻辑或的关系,它们共用同一个中断源,另外两个UART错误中断(UERROR0/1)也是共用同一个中断控制器。
6.6.4 S3C444B0X 矢量中断模式(仅针对IRQ) • S3C44B0X支持矢量中断模式,可以减少中断的反应时间。通常情况下ARM7TDMI内核收到来自中断控制器的IRQ中断请求,ARM7TDMI会在0x00000018地址处执行一条指令。但是在矢量中断模式下,当ARM7TDMI从0x00000018地址处取指令的时候,中断控制器会在数据总线上加载分支指令,这些分支指令使程序计数器能够对应到每一个中断源的向量地址。这些跳转到每一个中断源向量地址的分支指令可以由中断控制器产生。例如,假设EINT0是IRQ中断,如表4-15所示,EINT0的向量地址为0x20,所以中断控制器必须产生从0x18到0x20的分支指令。因此,中断控制器产生的机器码为0xea000000。在各个中断源对应的中断向量地址中,存放着跳转到相应中断服务程序的程序代码,在相应向量地址处分支指令的机器代码是这样计算的:
矢量中断模式的指令机器代码=0xea000000 + ((<目标地址> - <向量地址> - 0x8)>>2) • 例如,如果Timer 0中断采用矢量中断模式,则跳转到对应中断服务程序的分支指令应该存放在向量地址0x00000060处。中断服务程序的起始地址在0x10000,下面就是计算出来放在0x60处的机器代码: • 机器代码@0x00000060 :0xea000000+((0x10000-0x60-0x8)>>2)=0xea000000+0x3fe6=0xea003fe6 • 通常机器代码都是反汇编后自动产生的,因此不必真正象上面这样去计算。