嵌入式系统原理与应用 第3版 课件 第8章 通用IO端口和中断系统程序设计_第1页
嵌入式系统原理与应用 第3版 课件 第8章 通用IO端口和中断系统程序设计_第2页
嵌入式系统原理与应用 第3版 课件 第8章 通用IO端口和中断系统程序设计_第3页
嵌入式系统原理与应用 第3版 课件 第8章 通用IO端口和中断系统程序设计_第4页
嵌入式系统原理与应用 第3版 课件 第8章 通用IO端口和中断系统程序设计_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

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

文档简介

第8章ARM通用I/O和中断系统应用设计1第8章通用I/O端口和中断系统程序设计

●S3C2410A提供了117个可编程的通用输入输出I/O端口引脚,分为8组通用输入输出I/O端口(GeneralPurposeI/O或GeneralParallelI/O):通用端口A(GPA)、通用端口B(GPA)、…、通用端口H(GPH)、通用端口G(GPG)。

特别是每组端口中的不同I/O引脚根据需要可以通过软件配置为输入引脚、或输出引脚、或第2功能引脚、甚至或第3功能引脚,这对于实时控制系统来讲是至关重要的,说明具有较多的输入输出开关量。

●在CPU访问I/O外设的3种方法(程序查询方法、I/O中断方法和DMA方法)中,中断是实时性最好的方法,因为嵌入式系统大部分都应用于实时控制系统。

S3C2410A的CPU提供了普通中断请求IRQ(InterruptRequest)和快速中断请求FIQ(FastInterruptRequest)这2种中断的请求方法,而且可以对外设I/O的56个中断源请求进行实时响应,这对于实时控制系统来说也是非常必要的。S3C2410A中断系统的逻辑层次深、关系最为复杂,无论是硬件中断申请过程的组成,还是软件相应的具体执行流程。28组通用I/O端口分别是:●通用端口A(GPA)是1个23位只能输出的I/O端口。●通用端口B(GPB)和通用端口H(GPH)是2个11位的输入输出I/O端口。●通用端口C(GPC)、通用端口D(GPD)、通用端口E(GPE)和通用端口G(GPG)是4个16位通用输入输出I/O端口。●通用端口F(GPF)是1个8位通用输入输出I/O端口。●使用I/O端口的方法首先根据端口引脚的实际使用功能,配置端口控制寄存器的对应位,通过配置端口上拉电阻寄存器确定对应的上拉电阻是否需要,最后对端口数据寄存器的读/写就可完成其输入或输出功能。38.1S3C2410A的通用I/O端口8.1.1I/O端口的功能S3C2410A的每个I/O端口都是多功能的,以下具体介绍每个端口引脚所具有的功能。1.GPA端口引脚位功能GPA的I/O引脚共有23根,每根引脚只具有2个输出功能:

一是通用输出端口;

二是与NandFlash相关的控制信号、与存储器有关的Bank0~Bank5的片选信号以及与地址线有关的地址线。如表8-1所示。4表8-1GPA的引脚功能表5引脚名称第1功能第2功能GPA22输出nFCE(NandFlash片选信号)-GPA21输出nRSTOUT(对外器件输出复位信号)-GPA20输出nFRE(NandFlash读信号)-GPA19输出nFWE(NandFlash写信号)-GPA18输出ALE(NandFlash地址锁存信号)-GPA17输出CLE(NandFlash命令锁存信号)-GPA16~GPA12输出nGCS0~nGCS5(Bank0~5片选信号)-GPA11~GPA1输出ADDR26~ADDR16(地址线26~16)-GPA0输出ADDR0(地址线0)2.GPB端口引脚位功能

GPB引脚共有11根,每个引脚具有通用输入,或通用输出,或具有与DMA有关的信号线、与定时器有关的时钟信号及输出引脚线等第3功能,如下表所示。6引脚名称第1、2功能第3功能第4功能GPB10输入/输出nXDREQ0(DMA请求0)-GPB9输入/输出nXDACK0(DMA应答0)-GPB8输入/输出nXDREQ1(DMA请求1)-GPB7输入/输出nXDACK1(DMA应答1)-GPB6输入/输出nXBREQ(总线请求)-GPB5输入/输出nXBACK(总线应答)-GPB4输入/输出TCLK0(T0T1外输入时钟)-GPB3输入/输出TOUT3(T3时钟输出)-GPB2输入/输出TOUT2(T2时钟输出)-GPB1输入/输出TOUT1(T1时钟输出)-GPB0输入/输出TOUT0(T0时钟输出)-3.GPC端口引脚位功能

GPC引脚共有16根,每个引脚具有通用输入、或通用输出、或与LCD有关的控制信号线和数据线等第3功能,如下表所示。7引脚名称第1、2功能第3功能第4功能GPC15~GPC8输入/输出VD7~VD0(LCD数据线7~0)-GPC7输入/输出LCDVF2(LCD时钟控制线2)-GPC6输入/输出LCDVF1(LCD时钟控制线1)-GPC5输入/输出LCDVF0(LCD时钟控制线0)-GPC4输入/输出VM(LCD电源极性控制信号)-GPC3输入/输出VFRAME(LCD帧扫描信号)-GPC2输入/输出VLINE(LCD行扫描信号)-GPC1输入/输出VCLK(LCD像素时钟信号)-GPC0输入/输出LEND(LCD行截止信号)-4.

GPD端口引脚位功能

GPD引脚共有16根,每个引脚具有通用输入、或通用输出、或具有LCD数据线的第3功能,部分引脚还具有第4功能,如表下所示。8引脚名称第1、2功能第3功能第4功能GPD15输入/输出VD23(LCD数据线23)nSS0GPD14输入/输出VD22(LCD数据线22)nSS1GPD13~GPD0输入/输出VD21~VD8(LCD数据线21~8)-表中的nSS0、nSS1在SPI为从设备时作为芯片选择信号。5.

GPE端口引脚位功能

GPE引脚共有16根,每个引脚具有通用输入、或通用输出、或与I2C接口、SPI接口、I2S接口有关的第3功能,部分引脚还具有第4功能,如表8-5所示。9引脚名称第1、2功能第3功能第4功能GPE15输入/输出IICSDA(I数据线)-GPE14输入/输出IICSCL(I时钟线)-GPE13输入/输出SPICLK0(SPI时钟线0)-GPE12输入/输出SPIMOSI0(SPI主出从入线0)-GPE11输入/输出SPIMISO0(SPI主入从出线0)-GPE10~GPE7输入/输出SDDAT3~SDDAT0(SD卡数据线3~0)-GPE6输入/输出SDCMD(SD命令线)-GPE5输入/输出SDCLK(SD时钟线)-GPE4输入/输出I2SSDO(I2S串行数据输出线)I2SSDIGPE3输入/输出I2SSDI(I2S串行数据输入线)nSS0GPE2输入/输出CDCLK(I编码时钟)-GPE1输入/输出I2SSCLK(I2S串行时钟)-GPE0输入/输出I2SLRCK(I2S通道选择时钟)-

6.GPF端口引脚位功能

GPF引脚共有8根,每个引脚具有输入、或输出、外部中断引脚EINT7~EINT0的第3功能,如下表所示。10引脚名称第1、2功能第3功能第4功能GPF7~0输入/输出EINT7(外部中断7~0)-7.GPG端口引脚位功能

GPG引脚共有16根,每个引脚具有输入、或输出、或外部中断引脚EINT23~EINT8的第3功能,部分引脚还具有触摸屏、SPI接口等有关的第4功能,如表下所示。11引脚名称第1、2功能第3功能第4功能GPG15输入/输出EINT23(外中断23)nYPON(LCDy轴电源正极控制信号)GPG14输入/输出EINT22(外中断22)YMON(LCDy轴电源负极控制信号)GPG13输入/输出EINT21(外中断21)nXPON(LCDx轴电源正极控制信号)GPG12输入/输出EINT20(外中断20)XMON(LCDx轴电源负极控制信号)GPG11输入/输出EINT19(外中断19)TCLK1(T2T3T4外部输入时钟端)GPG10输入/输出EINT18(外中断18)-GPG9输入/输出EINT17(外中断17)-GPG8输入/输出EINT16(外中断16-GPG7输入/输出EINT15(外中断15)SPICLK1(SPI时钟信号1)GPG6输入/输出EINT14(外中断14)SPIMOSI1(SPI主出从入端1)GPG5输入/输出EINT13(外中断13)SPIMISO1(SPI主入从出端1)GPG4输入/输出EINT12(外中断12)LCD_PWREN(LCD电源使能信号)GPG3输入/输出EINT11(外中断11)nSS1(SPI为从设备时芯片的片选信号1)GPG2输入/输出EINT10(外中断10)nSS0(SPI为从设备时芯片的片选信号0)GPG1输入/输出EINT9(外中断9)-GPG0输入/输出EINT8(外中断8)-8.GPH端口引脚位功能

GPH引脚共有11根,每个引脚具有通用输入、或通用输出、或与UART、外部时钟输出有关的第3功能,部分引脚还具有与UART控制信号有关的第4功能,如下表所示。12引脚名称第1、2功能第3功能第4功能GPH10输入/输出CLKOUT0(外部使用时钟0)-GPH9输入/输出CLKOUT1(外部使用时钟1)-GPH8输入/输出UEXTCLK(串口外输入时钟)-GPH7输入/输出RXD2(串口2接收端)nCTS1(串口1允许发送)GPH6输入/输出TXD2(串口2发送端)nRTS1(串口1请求发送)GPH5输入/输出RXD1(串口1接收端)-GPH4输入/输出TXD1(串口1发送端)-GPH3输入/输出RXD0(串口0接收端)-GPH2输入/输出TXD0(串口0发送端)-GPH1输入/输出nRTS0(串口0请求发送)-GPH0输入/输出nCTS0(串口0允许发送)-8.1.2通用I/O端口功能寄存器通用I/O端口功能寄存器包括8个端口控制寄存器(GPACON~GPHCON)、8个端口数据寄存器(GPADAT~GPHDAT)和7个端口上拉寄存器(GPBUP~GPHUP)。由于在S3C2410A中,I/O端口引脚都是复用的,所以对于每一个I/O端口引脚都需要通过端口控制寄存器(GPnCON)来配置。配置完成后,就可以通过端口的数据寄存器(GPADAT~GPHDAT)来读/写。端口数据寄存器使用的数据bit位数与端口的位数相一致,并且从b0开始使用。注意:对于数据寄存器(GPADAT~GPHDAT)的写操作一定要留心。比如对于通用端口GPB共有11位,有的引脚定义为输入,有的引脚定义为输出或第3功能,写操作时最好用“位操作”指令功能,只给作为输出的写数据,其它的引脚信息保持不变。关于端口上拉电阻寄存器(GPBUP~GPHUP)的使用,每个上拉电阻寄存器bit位的使用与它的数据寄存器一一对应。一般作为输出端子时,需要使能上拉电阻,将其对应的bit位清“0”;作为输入端子时,需要禁止上拉电阻,将其对应的bit位置“1”。由于端口数据寄存器(GPADAT~GPHDAT)和端口上拉电阻寄存器(GPBUP~GPHUP)的作用和所使用的bit位已经清楚了,以下重点介绍端口控制寄存器(GPACON~GPHCON)。131.端口A功能寄存器

端口A的功能寄存器包括端口A控制寄存器GPACON(使用23位)、端口A数据寄存器GPADAT(使用23位)。它们的属性如表8-9所示,GPACON的位功能如表8-10所示。14寄存器名地址读写属性描述初值GPACON0x56000000读/写控制端口A的各引脚功能0x0GPADAT0x56000004读/写端口A数据寄存器,使用b22~b0-保留0x56000008读/写保留-表8-9GPA功能寄存器属性表表8-10GPACON位功能表15引脚符号比特位功能描述初值GPA22[22]0=输出;

1=nFCE(NandFlash片选信号)1GPA21[21]0=输出;

1=nRSTOUT(对外部芯片提供复位信号)1GPA20[20]0=输出;

1=nFRE(NandFlash读信号)1GPA19[19]0=输出;

1=nFWE(NandFlash写信号)1GPA18[18]0=输出;

1=ALE(NandFlash地址允许锁存)1GPA17[17]0=输出;

1=CLE(NandFlash命令允许锁存)1GPA16[16]0=输出;

1=nGCS5(Bank5片选信号)1GPA15[15]0=输出;

1=nGCS4(Bank4片选信号)1GPA14[14]0=输出;

1=nGCS3(Bank3片选信号)1GPA13[13]0=输出;

1=nGCS2(Bank2片选信号)1GPA12[12]0=输出;

1=nGCS1(Bank1片选信号)1GPA11~1[11:1]0=输出;

1=ADDR26~16(地址线26~16)1GPA0[0]0=输出;

1=ADDR0(地址线0)12.端口B功能寄存器

端口B的功能寄存器包括端口B控制寄存器GPBCON(使用22位)、端口B数据寄存器GPBDAT(使用11位)、端口B上拉电阻寄存器GPBUP(使用11位)。它们的属性如表8-11所示,GPBCON的位功能如表8-12所示。表8-11GPB功能寄存器属性表16寄存器名地址读写属性描述初值GPBCON0x56000010读/写控制端口B的各引脚功能0x0GPBDAT0x56000014读/写端口B数据寄存器,使用b10~b0-GPBUP0x56000018读/写使能端口B各引脚上拉电阻0x0表8-12GPBCON位功能表17引脚符号比特位功能描述初值GPB10[21:20]00=输入;01=输出;10=nXDREQ0(DMA0请求);11=保留00GPB9[19:18]00=输入;01=输出;10=nXDACK0(DMA0应答);11=保留00GPB8[17:16]00=输入;01=输出;10=nXDREQ1(DMA1请求);11=保留00GPB7[15:14]00=输入;01=输出;10=nXDACK1(DMA1应答);11=保留00GPB6[13:12]00=输入;01=输出;10=nXBREQ(总线请求);11=保留00GPB5[11:10]00=输入;01=输出;10=nXBACK(总线应答);11=保留00GPB4[9:8]00=输入;01=输出;10=TCLK0(T0T1外入时钟);11=保留00GPB3[7:6]00=输入;01=输出;10=TOUT3(T3输出信号);11=保留00GPB2[5:4]00=输入;01=输出;10=TOUT2(T2输出信号);11=保留00GPB1[3:1]00=输入;01=输出;10=TOUT1(T1输出信号);11=保留00GPB0[1:0]00=输入;01=输出;10=TOUT0(T0输出信号);11=保留003.端口C功能寄存器端口C的功能寄存器包括端口C控制寄存器GPCCON(使用32位)、端口C数据寄存器GPCDAT(使用16位)、端口C上拉电阻寄存器GPCUP(使用16位)。它们的属性如表8-13所示,GPCCON的位功能如表8-14所示。18寄存器名地址读写属性描述初值GPCCON0x56000020读/写控制端口C的各引脚功能0x0GPCDAT0x56000024读/写端口C数据寄存器,使用b15~b0-GPCUP0x56000028读/写使能端口C各引脚上拉电阻0x0表8-13GPC功能寄存器属性表表8-14GPCCON位功能表19引脚符号比特位功能描述初值GPC15[31:30]00=输入;01=输出;10=VD7(LCD数据线7);11=保留00GPC14~8[29:16]00=输入;01=输出;10=VD6~0(LCD数据线6~0);11=保留0x0GPC7[15:14]00=输入;01=输出;10=LVDVF2(LCD时控2);11=保留00GPC6[13:12]00=输入;01=输出;10=LCDVF1(LCD时控1);11=保留00GPC5[11:10]00=输入;01=输出;10=LCDVF0(LCD时控0);11=保留00GPC4[9:8]00=输入;01=输出;10=VM(LCD电压极性选择);11=保留00GPC3[7:6]00=输入;01=输出;10=VFRAME(LCD帧扫描);11=保留00GPC2[5:4]00=输入;01=输出;10=VLINE(LCD行扫描信号);11=保留00GPC1[3:2]00=输入;01=输出;10=VCLK(LCD时钟信号);

11=保留00GPC0[1:0]00=输入;01=输出;10=LEND(LCD行截止信号);11=保留004.端口D功能寄存器端口D的功能寄存器包括端口D控制寄存器GPDCON(使用32位)、端口D数据寄存器GPDDAT(使用16位)、端口D上拉电阻寄存器GPDUP(使用16位)。它们的属性如表8-15所示,GPDCON的位功能如表8-16所示。20寄存器名地址读写属性描述初值GPDCON0x56000030读/写控制端口D的各引脚功能0x0GPDDAT0x56000034读/写端口D数据寄存器,使用b15~b0-GPDUP0x56000038读/写使能端口D各引脚上拉电阻0x0表8-16GPDCON位功能表5.端口E功能寄存器端口E的功能寄存器包括端口E控制寄存器GPECON(使用32位)、端口E数据寄存器GPEDAT(使用16位)、端口E上拉电阻寄存器GPEUP(使用16位)。它们的属性如表8-17所示,GPECON的位功能如表8-18所示。表8-17GPE功能寄存器属性表21寄存器名占用地址读写控制描述初值GPECON0x56000040读/写控制端口E的各引脚功能0x0GPEDAT0x56000044读/写端口E数据寄存器,使用b15~b0-GPEUP0x56000048读/写使能端口E各引脚上拉电阻0x0表8-18GPECON位功能表22引脚符号比特位功能描述初值GPE15[31:30]00=输入;01=输出;10=IICSDA(I数据线);11=保留00GPE14[29:28]00=输入;01=输出;10=IICSCL(I时钟线);11=保留00GPE13[27:26]00=输入;01=输出;10=SPICLK(SPI时钟);11=保留00GPE12[25:24]00=输入;01=输出;10=SPIMOSI0(SPI主出从入);11=保留00GPE11[23:22]00=输入;01=输出;10=SPIMISO0(SPI主入从出);11=保留00GPE10[21:20]00=输入;01=输出;10=SDDAT3(SD卡数据线3);11=保留00GPE9[19:18]00=输入;01=输出;10=SDDAT2(SD卡数据线2);11=保留00GPE8[17:16]00=输入;01=输出;10=SDDAT1(SD卡数据线1);11=保留00GPE7[15:14]00=输入;01=输出;10=SDDAT0(SD卡数据线0);11=保留00GPE6[13:12]00=输入;01=输出;10=SDCMD(SD卡命令线);11=保留00GPE5[11:10]00=输入;01=输出;10=SDCLK(SD卡时钟);

11=保留00GPE4[9:8]00=输入;01=输出;10=I2SSDO(I2S数据输出);11=I2SSDI00GPE3[7:6]00=输入;01=输出;10=I2SSDI(I2S数据输入);

11=nSS000GPE2[5:4]00=输入;01=输出;10=CDCLK(I编码时钟);11=保留00GPE1[3:2]00=输入;01=输出;10=I2SSCLK(I2S串行时钟);

11=保留00GPE0[1:0]00=输入;01=输出;10=I2SLRCK(I2S通道选择时钟);11=保留006.端口F功能寄存器端口F的功能寄存器包括端口F控制寄存器GPFCON(使用16位)、端口F数据寄存器GPFDAT(使用8位)、端口F上拉电阻寄存器GPFUP(使用8位)。它们的属性如表8-19所示,GPFCON的位功能如表8-20所示。23寄存器名占用地址读写属性描述初值GPFCON0x56000050读/写控制端口F的各引脚功能0x0GPFDAT0x56000054读/写端口F数据寄存器,使用b7~b0-GPFUP0x56000058读/写使能端口F各引脚上拉电阻0x0表8-19GPF功能寄存器属性表引脚符号比特位功能描述初值GPF7[15:14]00=输入;01=输出;10=EINT7(外部中断7);11=保留00GPF6~0[13:0]00=输入;01=输出;10=EINT6~0(外中断6~0);11=保留00表8-20GPFCON位功能表7.端口G功能寄存器端口G的功能寄存器包括端口G控制寄存器GPGCON(使用32位)、端口G数据寄存器GPGDAT(使用16位)、端口G上拉电阻寄存器GPGUP(使用16位)。它们的属性如表8-21所示,GPGCON的位功能如表8-22所示。24寄存器名占用地址读写属性描述初值GPGCON0x56000060读/写控制端口G的各引脚功能0x0GPGDAT0x56000064读/写端口G数据寄存器,使用b15~b0-GPGUP0x56000068读/写使能端口G各引脚上拉电阻0x0表8-21GPG功能寄存器属性表表8-22GPGCON位功能表25引脚符号比特位功能描述初值GPG15[31:30]00=输入;01=输出;10=EINT23(外部中断23);11=nYPON00GPG14[29:28]00=输入;01=输出;10=EINT22(外部中断22);11=YMON00GPG13[27:26]00=输入;01=输出;10=EINT21(外部中断21);11=nXPON00GPG12[25:24]00=输入;01=输出;10=EINT20(外部中断20);11=XMON00GPG11[23:22]00=输入;01=输出;10=EINT19(外部中断19);11=TCLK100GPG10[21:20]00=输入;01=输出;10=EINT18(外部中断18);11=保留00GPG9[19:18]00=输入;01=输出;10=EINT17(外部中断17);11=保留00GPG8[17:16]00=输入;01=输出;10=EINT16(外部中断16);11=保留00GPG7[15:14]00=输入;01=输出;10=EINT15(外部中断15);11=SPICLK100GPG6[13:12]00=输入;01=输出;10=EINT14(外部中断14);11=SPIMOSI100GPG5[11:10]00=输入;01=输出;10=EINT13(外部中断13);11=SPIMISO100GPG4[9:8]00=输入;

01=输出;

10=EINT12(外部中断12);11=LCD_PWREN(LCD电源使能信号)00GPG3[7:6]00=输入;01=输出;10=EINT11(外部中断11);11=nSS100GPG2[5:4]00=输入;01=输出;10=EINT10(外部中断10);11=nSS000GPE1[3:2]00=输入;01=输出;10=EINT9(外部中断9);

11=保留00GPG0[1:0]00=输入;01=输出;10=EINT8(外部中断8);

11=保留00

8.端口H功能寄存器

端口H的功能寄存器包括端口H控制寄存器GPHCON(使用22位)、端口H数据寄存器GPHDAT(使用11位)、端口H上拉电阻寄存器GPHUP(使用11位)。它们的属性如表8-23所示,GPHCON的位功能如表8-24所示。26寄存器名占用地址读写控制描述初值GPHCON0x56000070读/写控制端口H的各引脚功能0x0GPHDAT0x56000074读/写端口H数据寄存器,使用b10~b0-GPHUP0x56000078读/写使能端口H各引脚上拉电阻0x0表8-23GPH功能寄存器属性表表8-24GPHCON位功能表27引脚符号比特位功能描述初值GPH10[21:20]00=输入;01=输出;10=CLKOUT1(外使用时钟1);11=保留00GPH9[19:18]00=输入;01=输出;10=CLKOUT0(外使用时钟0);11=保留00GPH8[17:16]00=输入;01=输出;10=UEXTCLK(串口外时钟);11=保留00GPH7[15:14]00=输入;01=输出;10=RXD2(串口2接收);11=nCTS100GPH6[13:12]00=输入;01=输出;10=TXD2(串口2发送);11=nRTS100GPH5[11:10]00=输入;01=输出;10=RXD1(串口1接收);11=保留00GPH4[9:8]00=输入;01=输出;10=TXD1(串口1发送);11=保留00GPH3[7:6]00=输入;01=输出;10=RXD0(串口0接收);11=保留00GPH2[5:4]00=输入;01=输出;10=TXD0(串口0发送);11=保留00GPH1[3:2]00=输入;01=输出;10=nRTS0(串口0请求发送);11=保留00GPH0[1:0]00=输入;01=输出;10=nCTS0(串口0允许发送);11=保留008.1.3其它端口功能寄存器

外部时钟控制寄存器DCLKCON(DCLKControlRegister);

多控制寄存器MISCCR(MiscellaneousControlRegister);

通用状态寄存器5个GSTATUS0~GSTATUS4。

这些端口寄存器属性如下表所示,28寄存器名占用地址读写属性描述初值MISCCR0x56000080读/写控制SDRAM、USB等引脚功能0x10330DCLKCON0x56000084读/写控制DCLK时钟信号的产生0x0GSTATUS00x560000AC只读读取外部的一些引脚状态-GSTATUS10x560000B0只读读取芯片ID0x32410000GSTATUS20x560000B4读/写描述一些复位状态信号0x1GSTATUS30x560000B8读/写信息通告,使用复位信号等复位0x0GSTATUS40x560000BC读/写信息通告,使用复位信号等复位0x01.多控制寄存器MISCCR

●多控制寄存器MISCCR的位功能如表8-26所示。

●控制SDRAM存储器在掉电模式时的信号选取,USB端口模式、USB主机或器件的选择等,S3C2410A输出外部时钟CLKOUT0(GPH9)、CLKOUT1(GPH10)的选择,数据线上拉电阻的使能等。29表8-26MISCCR寄存器位功能表30比特位位功能符号功能描述初值[31:20]Reserved保留0x0[19]nEN_SCKE在节电模式下SDRAM的保护:0=SCKE正常;1=SCKE低电平0[18]nEN_SCLK1在节电模式下SDRAM的保护:0=SCLK1等于SCLK;1=SCLK1为低电平0[17]nEN_SCLK0在节电模式下SDRAM的保护:0=SCLK0等于SCLK;1=SCLK0为低电平0[16]nRSTCON用于nRSTCON软件控制:0=nRSTCON信号为0;1=nRSTCON信号为11[15:14]Reserved保留00[13]USBSUBPEND1确定USB端口1模式:0=正常;1=悬挂0[12]USBSUBPEND0确定USB端口0模式:0=正常;1=悬挂0[11]Reserved保留0[10:8]CLKSEL1选择CLKOUT1的输出时钟源:000=MPLLCLK;001=UPLLCLK;010=FCLK;011=HCLK;100=PCLK;101=DCLK1;11x=保留011[7]Reserved保留[6:4]CLKSEL0选择CLKOUT1的输出时钟源:000=MPLLCLK;001=UPLLCLK;010=FCLK;011=HCLK;100=PCLK;101=DCLK0;11x=保留011[3]USBPAD确定USB的模式:0=正常;1=悬挂0[2]MEM_HZ_CON当CLKCON[0]=1时,影响存储器信号线nGCS[7:0],nWE,nOE,nBE[3:0],nSRAS,nSCAS,ADDR[26:0]

0=高阻;1=保持。0[1]SPUCR_L确定数据线低16位的上拉电阻:0=使能;1=禁止0[0]SPUCR_H确定数据线高16位的上拉电阻:0=使能;1=禁止02.外部时钟控制寄存器DCLKCON

外部时钟控制寄存器DCLKCON的位功能如表8-27所示。

●主要用于控制S3C2410A输出引脚DCLK0(引脚序号为F13)、DCLK1(引脚序号为F14)的时钟信号,包括频率和占空比。

●其输入时钟源可以是PCLK或UCLK。31表8-27DCLKCON寄存器位功能表32比特位位功能符号功能描述初值[31:28]Reserved保留0000[27:24]DCLK1CMP确定DCLK1的占空比0000[23:20]DCLK1DIV确定DCLK1的分频系数0000[19:18]Reserved保留00[17]DCLK1SelCK选择DCLK1的时钟源:0=PCLK;1=UCLK0[16]DCLK1ENDCLK1的使能位:

0=禁止;1=使能0[15:12]Reserved保留00[11:8]DCLK0CMP确定DCLK0的占空比0000[7:4]DCLK0DIV确定DCLK0的分频系数0000[3:2]Reserved保留00[1]DCLK0SelCK选择DCLK1的时钟源:0=PCLK;1=UCLK0[0]DCLK0ENDCLK1的使能位:0=禁止;1=使能0

通过设置DCLKCON寄存器可以定义DCLKn(n=0或1)时钟信号的频率和占空比。

例如,若DCLKnCMP取m,DCLKnDIV取n,则有:F(DCLKn)=时钟源频率/(n+1)DCLKn的低电平宽度为m+1,高电平宽度为(n+1)-(m+1)。DCLKn的输出波形如图8-1所示。33表8-28GSTATUS0状态寄存器位功能表343.通用状态寄存器GSTATUS0

该寄存器为只读寄存器,仅使用了最低的4bit,它们的位功能如表8-28所示。比特位位功能符号功能描述初值[31:4]Reserved保留-[3]nWAIT总线引脚nWAIT的状态。-[2]NCONNCON引脚的状态。NandFlash配置端口,当不使用NandFlash时外接上拉电阻。-[1]R/nBNandFlash的R/nB状态。-[0]nBATT_FLTnBATT_FLT引脚的状态,用于电池检测。-4.通用状态寄存器GSTATUS1

该寄存器是只读寄存器,用于存储芯片ID,数据是0x32410000。5.

通用状态寄存器GSTATUS2

该寄存器是可读/写的状态寄存器,用于反映ARM复位的原因,位功能如下表所示。35比特位位功能符号功能描述初值[31:3]Reserved保留-[2]WDTRST由看门狗复位。对该位写“1”时清“0”0[1]OFFRST从掉电模式唤醒后复位。对该位写“1”时清“0”0[0]PWRST由电源复位。对该位写“1”时清“0”18.1.4通用I/O端口程序设计示例硬件是设计一个按键开关电路和LED显示电路。软件的功能是,当按下Kn(n=1~4)时,LED1~LED4依次重复显示3次,但时间间隔为n个时间单位。1.硬件电路的设计

硬件电路的设计如图8-2所示。按键使用GPG0、GPG3、GPG5、GPG6引脚,低电平有效。R1~R4的选取一般大于1K,电阻值越大,电路的功耗越小,但必须保证在平常状态下加在输入引脚的电平大于高电平的最小值。对于按键的防抖,可以在电阻的下端与地之间连接一个10uF大小的电容,实现硬件的防抖,同时使电路具有一定的抗干扰能力;也可以使用软件防抖,当程序发现按键按下后,等待大约15ms的时间再读该引脚,如果还是低电平,则确认是按键按下,否则认为是干扰造成的。3637LED显示使用GPB5~GPB8引脚,选择低电平有效,因为集成数字电路输出低电平时的灌电流能力要远远地大于输出高电平的拉电流能力。限流电阻R5~R8的选取是保证发光二极管LED的工作电流在其允许的范围内,LED的导通电阻取300~600Ω。VDD33V是3.3V的直流电压源正极。

通用I/O端口的设计流程如下:①确定使用的I/O端口是输入或输出功能。②根据①配置相应端口的控制寄存器GPnCON,并根据需要设置端口的上拉电阻寄存器GPnUP。③设置输出端口的初始值;根据程序的功能要求编写程序。

程序设计如下:382.通用I/O端口的程序设计#include2410addr.h/*寄存器地址C语言定义文件*/voidDelaySecond(u32x_second);/*声明延时函数,在其它文件中定义*/voidInit_Port();/*声明初始化端口函数*/voidLed_Disply(u32x);//声明4个LED依次显示x秒函数voidmain(){chari;voidInit_Port();do{

if(rGPGDAT&0x01)==0)for(i=0;i<3;i++)Led_Disply(1);//各灯闪1次if(rGPGDAT&0x08==0)for(i=0;i<3;i++)Led_Disply(2);//各灯闪2次if(rGPGDAT&0x20==0)for(i=0;i<3;i++)Led_Disply(3);//各灯闪3次if(rGPGDAT&0x40==0)for(i=0;i<3;i++)Led_Disply(4);//各灯闪4次}while(1);}39voidInit_Port();/*定义初始化端口函数*/{

//设置GPG6、GPG5、GPG3、GPG0引脚功能为输入,即使对应的b2n+1b2n=00rGPGCON=rGPGCON&(~(3<<12))&(~(3<<10))&(~(3<<6))&(~(3<<0));//禁止GPG6、GPG5、GPG3、GPG0引脚上拉电阻,即使对应的bn//设置GPB8、GPB7、GPB6、GPB5引脚功能为输出,即使对应的b2n+1b2n=01rGPBCON=rGPBCON&(~(3<<16))&(~(3<<14))&(~(3<<12))&(~(3<<10));rGPBCON=rGPBCON|(1<<16)|(1<<14)|(1<<12)|(1<<10);//GPB8、GPB7、GPB6、GPB5作为输出要使能其引脚上拉电阻rGPBUP=rGPBUP&(~(1<<8))&(~(1<<7))&(~(1<<6))&(~(1<<5))=1//GPG6、GPG5、GPG3、GPG0作为输入要禁止其引脚上拉电阻rGPGUP=rGPGUP|(1<<6)|(1<<5)|(1<<3)|(1<<0);//将GPB8、GPB7、GPB6、GPB5引脚设置为高电平,即4个LED开始不亮rGPBDAT=rGPBDAT|(1<<8)|(1<<7)|(1<<6)|(1<<5);}4041voidLed_Disply(u32x)//定义4个LED依次显示x秒函数{

rGPBDAT=rGPBDAT&(~(1<<5));//GPB5输出低电平,LED1亮DelaySecond(x);//延时x秒rGPBDAT=rGPBDAT|(1<<5);//GPB5输出高电平,LED1灭rGPBDAT=rGPBDAT&(~(1<<6));//GPB6输出低电平,LED2亮DelaySecond(x);rGPBDAT=rGPBDAT|(1<<6);//GPB6输出高电平,LED2灭

rGPBDAT=rGPBDAT&(~(1<<7));//GPB7输出低电平,LED3亮DelaySecond(x);rGPBDAT=rGPBDAT|(1<<7);//GPB7输出高电平,LED3灭rGPBDAT=rGPBDAT&(~(1<<8));//GPB8输出低电平,LED4亮DelaySecond(x);rGPBDAT=rGPBDAT|(1<<8);//GPB8输出高电平,LED4灭}8.2微处理器S3C2410A中断系统程序设计微处理器S3C2410A中的普通中断IRQ和快速中断FIQ均处于7种异常之内,当S3C2410A的56个中断源进行中断请求时,如果CPU响应中断,则总中断服务程序的入口地址是普通中断IRQ异常的向量地址0x00000018或是快速中断FIQ异常的向量地址0x0000001C,然后由总中断服务程序再去查找具体的中断源,执行相应的中断服务程序。本节就是在这一线索的基础上,讲述其中断系统的相关知识与应用。42S3C2410A中断系统的中断源,将其分为3级:CPU级的中断源:IRQ和FIQ;ARM级的中断源:共32个,详细请见表8-30;子中断源和外部中断源级:共11+24=35个,具体见表8-31、表8-32。由此可见,它们的结构就像一棵树,如图8-3所示,ARM中断源没有按默认的优先次序排列,子中断源和外部中断源也没有按默认的优先次序排列。43中断服务程序的请求与执行过程:

●从图中可以看出,子中断源、外部中断源和部分ARM中断源的中断申请过程是由树的叶节点向树的根节点的求索过程,是由硬件电路完成的;

●中断服务程序的执行过程是由树的根节点向树的叶节点的回索过程,即由总中断服务程序开始寻找具体的中断服务程序去执行。8.2.2S3C2410A的中断源

●S3C2410A的中断源分为CPU级的中断源有IRQ和FIQ,ARM级的中断源共有32个,如表8-30所示。

●子中断源共11个,它是由ARM的中断源INT_ADC、INT_UART0、INT_UART1、INT_UART2派生的,如表8-31所示。

●外部中断源共24个,是由ARM中断源的EINT4_7、EINT8_23派生的,并包括EINT0~EINT3,如表8-32所示。4445中断源名简要描述仲裁器INT_ADCADC中断源,它派生出2个子中断(ADC转换结束中断INT_ADC和触摸屏中断INT_TC)。ARB5INT_RTC实时钟RTC报警中断源。ARB5INT_SPI1SPI1中断源。ARB5INT_UART0UART0中断源,它派生出3个子中断(UART0错误中断INT_ERR0、接收中断INT_RXD0和发送中断INT_TXD0)。ARB5INT_IICI接口中断源。ARB4INT_USBHUSB主机中断源。ARB4INT_USBDUSB设备中断源。ARB4Reserved保留ARB4INT_UART1UART1中断源,它派生出3个子中断(UART1错误中断INT_ERR1、接收中断INT_RXD1和发送中断INT_TXD1)。ARB4INT_SPI0SPI0中断源。ARB4INT_SDISDI中断源。ARB3INT_DMA3DMA通道3中断源。ARB3INT_DMA2DMA通道2中断源。ARB3INT_DMA1DMA通道1中断源。ARB3INT_DMA0DMA通道0中断源。ARB3INT_LCDLCD中断源(帧同步中断INT_FrSyn和FIFO中断INT_FiCnt)。ARB346INT_UART2UART2中断源,它派生出3个子中断(UART2错误中断INT_ERR2、接收中断INT_RXD2和发送中断INT_TXD2)。ARB2INT_TIMER4定时/计数器Timer4中断源。ARB2INT_TIMER3定时/计数器Timer3中断源。ARB2INT_TIMER2定时/计数器Timer2中断源。ARB2INT_TIMER1定时/计数器Timer1中断源。ARB2INT_TIMER0定时/计数器Timer0中断源。ARB2INT_WDT看门狗定时器中断源。ARB1INT_TICK实时钟RTC时间片中断源。ARB1nBATT_FLT电池故障中断源(BatteryFaultInterrupt)。ARB1Reserved保留ARB1EINT8_23外部中断源8_23,由它派生16个外部中断源。输入端口依次是GPG0~GPG15。ARB1EINT4_7外部中断源4_7,由它派生4个外部中断源。输入端口依次是GPF4~GPF7。ARB1EINT3外部中断源3,输入端口是GPF3,受外部中断相关寄存器控制。ARB0EINT2外部中断源2,输入端口是GPF2,受外部中断相关寄存器控制。ARB0EINT1外部中断源1,输入端口是GPF1,受外部中断相关寄存器控制。ARB0EINT0外部中断源0,输入端口是GPF0,受外部中断相关寄存器控制。ARB047子中断源描述子中断源描述INT_ERR1UART1溢出错误和帧错误中断源INT_ADCADC转换结束中断源INT_TXD1UART1发送寄存器空或FIFO小于设定值时产生的中断源INT_TC触摸屏触笔按下中断源INT_RXD1UART1接收寄存器满或FIFO大于设定值时产生的中断源INT_ERR2UART2溢出错误和帧错误中断源INT_ERR0UART0溢出错误和帧错误中断源INT_TXD2UART2发送寄存器空或FIFO小于设定值时产生的中断源INT_TXD0UART0发送寄存器空或FIFO小于设定值时产生的中断源INT_RXD2UART2接收寄存器满或FIFO大于设定值时产生的中断源INT_RXD0UART0接收寄存器满或FIFO大于设定值时产生的中断源表8-31S3C2410A子中断源表表8-32S3C2410A外部中断源表48外中断源名描述与输入端口EINT23~8外部中断23~8,输入端口GPG15~0EINT7~0外部中断7~0,输入端口GPF7~0

●S3C2410A采用ARM920TCPU内核,ARM920TCPU的中断源有IRQ和FIQ。IRQ是普通中断,FIQ是快速中断,FIQ的优先级高于IRQ。FIQ中断通常在进行大批量的复制、数据传输等工作时使用,系统的快速中断源最多只能有一个。

●S3C2410A通过对程序状态寄存器PSR[7:6]的I位和F位进行设置,控制CPU能否进行中断响应。如果设置PSR[7]的I位为1,禁止IRQ中断,则CPU不会响应来自中断控制器的IRQ中断;如果设置PSR[6]的F位为1,禁止FIQ中断,则CPU不会响应来自中断控制器的FIQ中断。

●如果设置PSR的I位或F位设置为0,即允许CPU中断,同时再将中断屏蔽寄存器(INTMSK)中的对应位设置为0,CPU就可以响应来自中断控制器的IRQ或FIQ中断请求。图8-4是S3C2410A的中断请求过程示意图。498.2.3S3C2410A中断请求过程501.子中断请求过程

对于子中断能够得到请求,要完成以下的流程才能进行中断申请并得到CPU的响应。

①子中断源器件或I/O接口必须中断使能,即允许它进行中断。

②子中断屏蔽寄存器INTSUBMSK的相应位必须设置为0(即子中断允许)。

③对应共享的ARM中断源的相应中断屏蔽寄存器INTMSK位也要清“0”(即ARM中断允许),这样就有可以进行子中断申请。例如,触摸屏子中断INT_TC,过程是触摸屏开中断→允许触摸屏子中断→允许ARM的中断源INT_ADC中断。在CPU中断源IRQ或FIQ允许的情况下,就可以响应该子中断。2.外部中断请求过程

外部中断请求,要完成以下的流程才能进行中断申请并得到CPU的响应。①必须使用相应的引脚的第3功能,即将对应的b2n+1b2n=10。②设置外部中断源的触发电平,例如是低电平、高电平、上升沿等。③设置中断滤波寄存器(必要时)。④外部中断屏蔽寄存器的相应位清“0”,即允许外部中断请求。⑤ARM的中断屏蔽寄存器的相应位也必须清“0”,即允许ARM中断请求。

完成以上流程,只要CPU的IRQ或FIQ开中断,外部的中断请求就可以得到响应。3.ARM中断请求过程ARM的中断请求是过程最为简单的,只要ARM中断源的器件或I/O接口开中断,同时ARM中断屏蔽寄存器的相应位清“0”,在CPU中断源IRQ或FIQ允许中断时,ARM的中断申请就可以得到响应。注意:上述是概括性的对各种中断源申请过程的描述,细化的过程在以后的节中可以体会得到。528.2.4ARM中断控制寄存器

S3C2410A的中断请求过程,除了设置上述的主要中断寄存器外,还要设置中断模式寄存器INTMOD和中断优先权寄存器PRIORITY。与中断有关的寄存器有的是控制着中断源向CPU申请中断的硬件电路,有的是记录着哪一个中断源得到了CPU的中断响应,为总中断服务程序查找具体的中断源并执行其中断程序或函数提供了有效信息。

ARM中断控制寄存器共有6个,它们的属性如表8-33所示。53寄存器名地址读写控制描述初值SRCPND0x4A000000读/写中断源悬挂寄存器0x00000000INTMOD0x4A000004读/写中断模式寄存器0x00000000INTMSK0x4A000008读/写中断屏蔽寄存器0xFFFFFFFFPRIORITY0x4A00000C读/写中断优先权寄存器0x4A00000CINTPND0x4A000010读/写中断悬挂寄存器0x00000000INTOFFSET0x4A000014读/写中断偏移量寄存器0x000000001.中断源悬挂寄存器SRCPND

中断源悬挂寄存器SRCPND(SourcePendingRegister)反映的是,相应的比特位所对应的ARM中断源是否有中断申请信号,只要有中断申请信号,相应的寄存器位置“1”,否则为“0”。它的复位工作在中断服务程序中进行,通过对相应的位写“1”来完成。SRCPND使用的地址为0x4A000000,复位初值为0x00000000。SRCPND寄存器的各比特位功能如表8-34所示。5455比特位功能描述初值[31]INT_ADC中断请求:0=无中断请求;1=有中断请求0[30]INT_RTC中断请求:0=无中断请求;1=有中断请求0[29]INT_SPI1中断请求:0=无中断请求;1=有中断请求0[28]INT_UART0中断请求:0=无中断请求;1=有中断请求0[27]INT_IIC中断请求:0=无中断请求;1=有中断请求0[26]INT_USBH中断请求:0=无中断请求;1=有中断请求0[25]INT_USBD中断请求:0=无中断请求;1=有中断请求0[24]保留0[23]INT_UART1中断请求:0=无中断请求;1=有中断请求0[22]INT_SPI0中断请求:0=无中断请求;1=有中断请求0[21]INT_SDI中断请求:0=无中断请求;1=有中断请求0[20]INT_DMA3中断请求:0=无中断请求;1=有中断请求0[19]INT_DMA2中断请求:0=无中断请求;1=有中断请求0[18]INT_DMA1中断请求:0=无中断请求;1=有中断请求0[17]INT_DMA0中断请求:0=无中断请求;1=有中断请求0[16]INT_LCD中断请求:0=无中断请求;1=有中断请求0中断源悬挂寄存器位功能表中断源悬挂寄存器位功能表(续)56[15]INT_UART2中断请求:0=无中断请求;1=有中断请求0[14]INT_TIM4中断请求:0=无中断请求;1=有中断请求0[13]INT_TIM3中断请求:0=无中断请求;1=有中断请求0[12]INT_TIM2中断请求:0=无中断请求;1=有中断请求0[11]INT_TIM1中断请求:0=无中断请求;1=有中断请求0[10]INT_TIM0中断请求:0=无中断请求;1=有中断请求0[9]INT_WDT中断请求:0=无中断请求;1=有中断请求0[8]INT_TICK中断请求:0=无中断请求;1=有中断请求0[7]nBATT_FLT中断请求:0=无中断请求;1=有中断请求0[6]保留0[5]EINT8_23中断请求:0=无中断请求;1=有中断请求0[4]EINT4_7中断请求:0=无中断请求;1=有中断请求0[3]EINT3中断请求:0=无中断请求;1=有中断请求0[2]EINT2中断请求:0=无中断请求;1=有中断请求0[1]EINT1中断请求:0=无中断请求;1=有中断请求0[0]EINT0中断请求:0=无中断请求;1=有中断请求02.中断模式寄存器INTMOD

S3C2410A的中断模式寄存器INTMOD(InterruptModeRegister)控制选择ARM32个中断源是普通中断IRQ还是快速中断FIQ模式。

注意:FIQ最多只能选择其中的1个中断源。57比特位功能描述初值[31]INT_ADC中断模式:0=普通中断IRQ;1=快速中断FIQ0[30]INT_RTC中断模式:0=普通中断IRQ;1=快速中断FIQ0…[29:2]中断源与SRCPND对应位相同,设置功能与上下行雷同0x0[1]EINT1中断模式:

0=普通中断IRQ;1=快速中断FIQ0[0]EINT0中断模式:

0=普通中断IRQ;1=快速中断FIQ0图8-35INTMOD寄存器比特位功能表INTMOD使用的地址为0x4A000004,复位初值为0x00000000。3.中断屏蔽寄存器INTMSK

中断屏蔽寄存器INTMSK(InterruptMaskRegister)用于控制ARM的32个中断源的中断允许或禁止中断。

如果设置中断屏蔽寄存器INTMSK中的相对应屏蔽位为“1”,表示相对应的中断源禁止中断;

如果设置为“0”,表示相对应的中断源允许中断。

INTMSK使用的地址为0x4A000008,复位初值为0xFFFFFFFF。58比特位功能描述初值[31]INT_ADC中断屏蔽位:0=中断允许;1=禁止中断1[30]INT_RTC中断屏蔽位:0=中断允许;1=禁止中断1…[29:2]中断源与SRCPND对应位相同,设置功能与行雷同均为1[1]EINT1中断屏蔽位:

0=中断允许;1=禁止中断1[0]EINT0中断屏蔽位:

0=中断允许;1=禁止中断14.中断优先权寄存器PRIORITY中断优先级寄存器PRIORITY是IRQ模式下的中断优先级控制寄存器。以下首先介绍中断优先权仲裁器电路结构框图,然后介绍PRIORITY寄存器的位功能。⑴中断优先权仲裁器S3C2410A中断优先权仲裁器ARB(Arbiter)由6个分仲裁器和1个总仲裁器组成。每一个仲裁器可以处理6路中断,仲裁ARM的32个中断源申请优先级,中断优先权仲裁器的电路结构框图如图8-5所示。S3C2410A的56个中断源通过这32个中断请求提供优先级逻辑控制,仲裁器ARBITER0~ARBITER5连接的中断源按优先级排序,它们的输出输入到仲裁器ARBITER6,实现最终的优先级排序。5960⑵中断优先权寄存器PRIORITY

中断优先级寄存器PRIORITY使用的地址为0x4A00000C,复位后的

温馨提示

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

评论

0/150

提交评论