《处理器接口电路、中断系统的设计.ppt》由会员分享,可在线阅读,更多相关《处理器接口电路、中断系统的设计.ppt(174页珍藏版)》请在三一办公上搜索。
1、1,4.4 处理器接口电路、中断系统的设计,4.4.1 通用输入/输出接口GPIO设计4.4.2 中断系统设计4.4.3 串行接口设计4.4.4 USB接口设计4.4.5 JTAG接口设计4.4.6 A/D转换接口设计,2,4.4.1 通用输入/输出接口GPIO,嵌入式系统的GPIO接口引脚数量较多,例如,S3C44BO有71个,S3C2410有117个,PXA255有84个GPIO管脚,PXA270有120个GPIO管脚。它们与处理器之间的连接一般不使用系统总线,而是直接连接在处理器的引脚上。每个I/O引脚可被编程设置成为普通的输入或输出状态。如被作为输入端时,该GPIO管脚可被设置工作在中
2、断方式或查询方式。但当系统被复位后,所有的GPIO管脚的默认值为输入状态。有些GPIO管脚还通过设置具有第二功能。每个处理器内的GPIO又分成若干个组(端口),每组称为一个I/O接口。每个接口含有10-20多个引脚不等。,1、I/O系统工作过程,I/O系统的初始化,设备打开,设备关闭,设备读,设备写,设备控制,设备管理初始化,驱动逻辑初始化,硬件抽象初始化,完成设备管理相关信息的初始化,如创建驱动程序地址表、设备名表、文件记录表等,实现系统中各驱动程序的注册,即把系统中各驱动程序注册到设备管理中,主要完成设备注册,4,I/O系统工作过程,关闭设备 系统调用close()关闭一个不再使用的设备,
3、关闭一个设备时,I/O系统的内部运作过程和写一个设备大致相同,不同的是I/O系统根据设备名表中的主设备号在驱动程序地址表中定位并调用驱动程序的xxx_close()函数,然后释放文件表中的记录,返回。在此之后对该文件描述符的任何引用都将返回错误。但是随后的open()系统调用将仍然返回该文件描述符。,5,1)GPIO的配置,GPIO接口的控制器通常集成在处理器芯片内部。在系统启动时应对它们进行正确设置,GPIO的设置需要用到三组特殊功能寄存器来定义I/O引脚的具体功能。第一组时端口配置寄存器组(PCONA-PCONG),第二组是端口数据寄存器组(PDATA-PDATG),第三组是端口上拉电阻设
4、置寄存器(PUPA-PUOG),其中A-G为端口序号。如:GPDR(方向寄存器):负责设置GPIO的输入、输出功能。GPSR(输出置位寄存器):在输出模式下,可以通过GPSR设置GPIO管脚上的高电平值。GPCR(输出清零寄存器):在输出模式下,可以通过GPCR设置GPIO管脚为低电平值。,6,GPLR(引脚状态寄存器):当某管脚设置为输入模式时,读GPLR(引脚状态寄存器)的内容可以反映当前GPIO管脚的状态。GPER是探测上升沿使能的专用寄存器;GFER是探测下降沿使能的专用寄存器;GEDR是探测上升下降沿使能的专用寄存器;GAFR是设置第二功能寄存器。,7,2)GPIO的设计要求,在并行
5、信号传输线中,一般有数据线、控制线和电源线。由于每条数据导线传输一个数据位,这时要求数据总线长度必须较短,否则长的导线会导致有较高的寄生电容值,影响数据的传输速度。此外,并行总线中各导线长度上的小差异,也可能导致所接受的数据字各位的抵达时间不同,影响数据的准确性。基于ARM的处理器内核和处理器核一般都没有I/O总线部件,需要通过先进微控制总线架构AMBA来扩展宏单元和总线I/O部件,为微处理器提供32位地址信号、32位数据信号和读/写、时钟、外围复位、选通等控制信号。,8,3)编址形式,ARM采用存储器与I/O统一编址的方式,即把I/O端口当作为特殊的存储器地址来对待处理。比如S3C44B0X
6、微处理器芯片,芯片内部具有71个通用多功能输入输出引脚,分别包含在如下7组端口中:1个10位输出端口(端口A);1个11位输出端口(端口B);1个16位输入输出端口(端口C);2个8位输入输出端口(端口D和G);2个9位输入输出端口(端口E和F)。,9,举例,PXA27X处理器提供了120个的GPIO,其分组如下:端口A通用目地的I/O;端口B可选输入功能;端口C可选输入功能;端口D可选输入功能;端口E可选输出功能;端口F可选输出功能;端口G可选输出功能。,2、S3C2410处理器GPIO设计与应用S3C2410X有8个端口,117个输入/输出引脚。这些端口是:A口(GPA):23个输出口B口
7、(GPB):11个输入/输出口C口(GPC):16个输入/输出口D口(GPD):16个输入/输出口E口(GPE):16个输入/输出口F口(GPF):8个输入/输出口G口(GPG):16个输入/输出口H口(GPH):11个输入/输出口这些端口都具有多功能,通过引脚配置寄存器,可以将其设置为所需要的功能,如:I/O功能、中断功能等等。,1)端口寄存器及引脚配置每一个端口都有4个寄存器,它们是:引脚配置寄存器、数据寄存器、引脚上拉寄存器等。,GPADAT寄存器为准备输出的数据其值为23位22:0注意:(1)当A口引脚配置为非输出功能时,其输出无意义;(2)从引脚输入没有意义。,(1)端口A寄存器及引
8、脚配置,端口A寄存器及引脚配置,GPBDAT-为准备输出或输入的数据其值为11位10:0GPBUP-端口B上拉寄存器,位10:0有意义。0:对应引脚设置为上拉1:无上拉功能注意:当B口引脚配置为非输入/输出功能时,其寄存器中的值没有意义。,(2)端口B寄存器及引脚配置,端口B引脚配置寄存器,GPCDAT-为准备输出或输入的数据其值为16位15:0GPCUP-端口C上拉寄存器,位15:0有意义。0:对应引脚设置为上拉1:无上拉功能注意:当C口引脚配置为非输入/输出功能时,其寄存器中的值没有意义。,(3)端口C寄存器及引脚配置,端口C引脚配置寄存器,GPDDAT-为准备输出或输入的数据其值为16位
9、15:0GPDUP-端口D上拉寄存器,位15:0有意义。0:对应引脚设置为上拉1:无上拉功能初始化时,15:12无上拉功能,而11:0有上拉注意:当D口引脚配置为非输入/输出功能时,其寄存器中的值没有意义。,(4)端口D寄存器及引脚配置,端口D引脚配置寄存器,GPEDAT-为准备输出或输入的数据其值为16位15:0GPEUP-端口E上拉寄存器,位15:0有意义。0:对应引脚设置为上拉1:无上拉功能初始化时,各个引脚都有上拉功能。注意:当E口引脚配置为非输入/输出功能时,其寄存器中的值没有意义。,(5)端口E寄存器及引脚配置,端口E引脚配置寄存器,GPFDAT-为准备输出或输入的数据其值为8位7
10、:0GPFUP-端口F上拉寄存器,位7:0有意义。0:对应引脚设置为上拉1:无上拉功能初始化时,各个引脚都有上拉功能。注意:当F口引脚配置为非输入/输出功能时,其寄存器中的值没有意义。,(6)端口F寄存器及引脚配置,端口F引脚配置寄存器,GPGDAT-为准备输出或输入的数据其值为16位15:0GPGUP-端口G上拉寄存器,位15:0有意义。0:对应引脚设置为上拉1:无上拉功能初始化时,15:11引脚无上拉功能,其它引脚有。注意:当G口引脚配置为非输入/输出功能时,其寄存器中的值没有意义。,(7)端口G寄存器及引脚配置,端口G引脚配置寄存器,LCD-PEN:POWER_ENABLE,nSS0:S
11、PI0_SELECT,GPHDAT-为准备输出或输入的数据其值为11位10:0GPHUP-端口H上拉寄存器,位10:0有意义。0:对应引脚设置为上拉1:无上拉功能注意:当H口引脚配置为非输入/输出功能时,其寄存器中的值没有意义。,(8)端口H寄存器及引脚配置,端口H引脚配置寄存器,UCLK为USB的,(9)端口其它控制寄存器,nEN_SCKE-SCLK使能位。在电源关闭模式下对SDRAM做保护0:正常状态 1:低电平nEN_SCLKx-SCLKx使能位。在电源关闭模式下对SDRAM做保护0:SCLKx=SCLK 1:低电平nRSTCON-对nRSTOUT软件复位控制位0:使nRSTOUT为低,
12、0;1:使nRSTOUT为高,1,MISCCR-混合控制寄存器,USBSUSPND1-USB端口1模式0:正常1:浮空USBSUSPND0-USB端口0模式0:正常1:浮空CLKSEL1-CLKOUT1引脚输出信号源选择000:MPLL CLK001:UPLL CLK 010:FCLK011:HCLK100:PCLK 101:DCLK111x:保留CLKSEL0-CLKOUT0引脚输出信号源选择000:MPLL CLK001:UPLL CLK 010:FCLK011:HCLK100:PCLK 101:DCLK011x:保留,USBPAD-与USB连接选择0:与USB设备连接1:与USB主机连接
13、MEM_HZ_CON-MEM高阻控制位0:Hi-Z 1:前一状态SPUCR_L-数据口低16位15:0上拉控制位0:上拉1:无上拉SPUCR_H-数据口高16位31:16上拉控制位0:上拉1:无上拉,DCLKCON-D时钟控制寄存器,DCLK1(0)CMP-DCLK1(0)低电平时间所占的比例数。设该位值为m,m DCLK1(0)DIV。则低、高电平持续时间的源周期数分别为:m+1、DCLK1(0)DIV-m DCLK1(0)DIV-DCLK1(0)分频值 DCLK1(0)frequency=source clock/(DCLK1(0)DIV+1),DCLKCON-D时钟控制寄存器(续),DC
14、LK1(0)SelCK-DCLK1(0)source clock 选择0:源时钟选择PCLK1:源时钟选择UCLK(USB)DCLK1(0)EN-DCLK1(0)Enable0:禁止1:允许,主要设置各个外中断源的触发方式、滤波,(10)外中断控制寄存器,EINT07-中断请求信号触发方式选择000:低电平触发001:高电平触发01x:下降沿触发10 x:上升沿触发11x:双边沿触发第3、7、11、15、19、23、27、31位-保留,EXTINT0-外中断触发方式控制寄存器0,EINT815-中断请求信号触发方式选择000:低电平触发001:高电平触发01x:下降沿触发10 x:上升沿触发1
15、1x:双边沿触发第3、7、11、15、19、23、27、31位-保留,EXTINT1-外中断触发方式控制寄存器1,EINT1623-外中断请求信号触发方式选择000:低电平触发001:高电平触发01x:下降沿触发10 x:上升沿触发11x:双边沿触发第3、7、11、15、19、23、27、31位-为FILTEN各引脚滤波控制位0:禁止滤波1:使能滤波,EXTINT2-外中断控制寄存器2,主要设置各个外中断源的滤波器设置,(11)外中断滤波控制寄存器,FLTCLK1619-外中断1619滤波器时钟选择0:PCLK1:外部/振荡时钟(由OM引脚选择)EINTFLT1619-外中断1619滤波器宽度
16、(频带宽度),EINTFLT2-外中断滤波控制寄存器2,FLTCLK2023-外中断2023滤波器时钟选择0:PCLK1:外部/振荡时钟(由OM引脚选择)EINTFLT2023-外中断2023滤波器宽度(频带宽度),EINTFLT3-外中断滤波控制寄存器3,(12)外中断屏蔽、标志寄存器,外中断屏蔽寄存器,各位:0:允许中断1:禁止中断注意:EINT0-EINT3不能在此被屏蔽,在SRCPND中屏蔽。,外中断标志寄存器,各位:0:无中断请求1:有中断请求注意:对某位写1,则清除相应标志,即清为0.,GSTATUS3、4:复位时被清0,其它情况下其数据不变。用户可以用于保存数据。,(13)外中断
17、状态寄存器,nWEIT-引脚nWEIT状态nCON-引脚nCON状态RnB-引脚R/nB状态nBATT_FLT-引脚nBATT_FLT状态注意:各位的数值0、1,随着对应引脚变化。,GSTATUS0-外部引脚状态寄存器,WDTRST-上电复位控制状态1:出现了上电复位对该位写,则将该位清0OFFRST-掉电模式复位状态。1:系统出现了从掉电模式唤醒复位对该位写,则将该位清0PWRST-看门狗复位状态1:系统出现了看门狗定时器复位对该位写,则将该位清0,GSTATUS2-复位状态寄存器,第13讲到此,外中断举例static void _irq Eint0Int(void)ClearPending
18、(BIT_EINT0);Uart_Printf(EINT0 interrupt is occurred.n);static void _irq Eint1Int(void)ClearPending(BIT_EINT1);Uart_Printf(EINT1 interrupt is occurred.n);#define ClearPending(bit)rSRCPND=bit;rINTPND=bit;rINTPND;,void Test_Eint(void)int i;int extintMode;/选择外中断触发方式变量 Uart_Printf(External Interrupt Test
19、n);Uart_Printf(1.L-LEVEL 2.H-LEVEL 3.F-EDGE 4.R-EDGE 5.B-EDGEn);Uart_Printf(Select the external interrupt type.n);extintMode=Uart_Getch();/extintMode=3;rGPFCON=(rGPFCON/设置引脚配置,F0、F1配置为EINT0/1,switch(extintMode)case 1:rEXTINT0=(rEXTINT0,case 4:rEXTINT0=(rEXTINT0,Uart_Printf(“Press the EINT0/1 buttons
20、 or Press any key to exit.n”);/设置中断向量 pISR_EINT0=(U32)Eint0Int;/将中断处理程序的开始 pISR_EINT1=(U32)Eint1Int;/地址送到中断向量表 rEINTPEND=0 xffffff;/清除EINTPND需要向其中写入数 据。因此这句代码的含义是清除EINTPND。rSRCPND=BIT_EINT0|BIT_EINT1;/to clear the previous pending states rINTPND=BIT_EINT0|BIT_EINT1;rINTMSK=(BIT_EINT0|BIT_EINT1);Uart
21、_Getch();rEINTMASK=0 xffffff;rINTMSK=BIT_ALLMSK;(void Test_Eint(void)函数结束)注释:#define BIT_ALLMSK(0 xffffffff),52,4.4.2 中断异常方式的设计,嵌入式系统中一般具有与硬件、软件相关的中断源、软件错误相关的中断源、为调试程序而设置的中断源和系统分时所用的中断源。还有具有快速中断源FIQ和一般I/O中断源IRQ。执行中断要经过三个环节:中断响应、中断处理和中断返回。注意:在使用I/O中断处理事件比较频繁的场合时,会很明显地影响嵌入式系统的性能。因此,微处理器内部包含有直接存储控制通道DM
22、A。这样使用DMA方式,I/O的数据块传送至存储器的缓冲器区域就不需要微处理器介入,提高了微处理器的工作效率。,53,1、中断方式处理过程,在系统对外部事件做出反应的过程中,中断响应是第一个环节,主要的任务是确定中断源。然后根据中断源指引CPU进入具体的中断处理程序。由于芯片的引线数量受到的限制,因此很难为CPU芯片带足够多的中断请求线。这样一来,为了确定中断源的来源,就需要采用如下的辅助的手段,来实现这个功能。,辅助手段有以下二种形式:,(1)CPU在响应中断时,进入一个特殊的中断响应周期,并向外发一个“中断响应(ACK)”信号,同时要求中断源通过数据总线提供 一个“中断向量”。为了防止多个
23、外设同时发出中断向量而形成冲突的情况,还需要把所有可能成为中断源的设备连接成一条“中断链”,在“中断链”的不同位置应具有不同的优先级。(2)在外部提供一个“集线器”,称为“中断控制器”。它为外设提供多条中断请求线,但是将这些中断请求线(相或)合并成一条。与此同时,在中断控制器中还要提供一个寄存器,记录当前的(综合)中断请求来自哪条外部中断请求线,而CPU则可以像访问外设一样读出这个寄存器的内容,以确定中断请求的来源。,55,1)GPIO中断接口分类,GPIO是一个通用的可编程的I/O接口,其接口寄存器中的每一位都可以分别在程序的控制下设置成用于输入或者输出。而且,当用于输入的时候,还可以让每一
24、位的状态变化都引发一个中断请求。例如S3C44BOX具有30个中断源,包括1个看门狗定时器,6个定时器,6个UART,8个外部,4个DMA,2个RTC,1个ADC,1个IIC和1个SIO中断源。,56,S3C44B0X中断系统举例,S3C44B0X支持的中断处理模式称为矢量中断模式。中断控制器的角色,就是响应来自FIQ或IRQ的中断,并请求内核对中断进行处理。多个中断请求发生时,由硬件优先级逻辑确定应该有哪个中断源得到服务,同时硬件逻辑使中断向量表该中断矢量被自动加载到该中断源的入口地址(如0X18或0X1C)位置,在该位置执行跳转指令使程序跳到相应的中断服务线程。,57,2)控制中断的寄存器
25、,(1)中断控制寄存器(2)中断请求寄存器(3)中断模式寄存器(4)中断屏蔽寄存器(5)IRQ矢量模式寄存器(6)IRQ/FIQ中断服务寄存器(7)外部中断控制寄存器(8)外部中断请求寄存器,58,3)系统异常中断种类,复位中断(reset)未定义的指令中断软件中断指令预取中止数据访问中止外部中断请求快速中断请求 异常是由内部或外部源产生的,需要处理器处理的一个事件。,59,中断向量表,当一个中断发生以后,ARM 处理器便强制把PC 指针置为向量表中对应中断源的地址值。因为每个中断只占据向量表中一个字的存储器空间,只能放置一条ARM指令,所以通常在向量表中放的是跳转指令,使程序能从向量表里跳转
26、到存储器的其他地方,再执行中断处理。ARM要求中断向量表必须放置在从0地址开始,连续84 字节的空间内。各个中断矢量在向量表中的位置分配如下图所示。,中断向量表,中断矢量地址表,每个中断源对应的矢量地址,62,4)外部中断的应用,(1)I/O口设置 首先对PG口的工作模式进行设置,要让PG47工作在外部中断输入状态。因此,要将PG口设置在功能3模式下,采用语句:rPCONG=11 11 11 11 xx xxxxxxB;如果希望采用内部上拉,则语句为:rPUPG=0000 xxxxB。(2)外部中断触发模式设置利用外部中断控制寄存器来设置外部中断的触发模式。由于采用电平触发容易引起重复触发,因
27、此建议采用下降沿或上升沿触发,不同触发方式的语句如下:,63,外部中断的应用,采用下降沿触发时:rEXTINT=01x 01x 01x 01x xxx xxxxxxxxxB;采用上升沿触发时:rEXTINT=10 x 10 x 10 x 10 x xxx xxxxxxxxxB;采用边沿触发时:rEXTINT=11x 11x 11x 11x xxx xxxxxxxxxB;采用低电平触发时:rEXTINT=000 000 000 000 xxx xxxxxxxxxB;,64,S3C2410X中断控制器有56个中断源,对外提供24个外中断输入引脚,内部所有设备都有中断请求信号,例如DMA控制器、UA
28、RT、IIC等等。S3C2410X的ARM920T内核有两个中断,IRQ中断和快速中断FIQ。中断仲裁:当中断控制器接收到多个中断请求时,其内的优先级仲裁器裁决后向CPU发出优先级最高的中断请求信号或快速中断请求信号。,2、S3C2410中断系统简介,(1)S3C2410X中断系统结构主要由中断源和控制寄存器两大部分构成,其寄存器主要有4种:模式、屏蔽、优先级、挂起(标志)寄存器等。,(2)中断优先级仲裁器及工作原理,中断系统有6个分仲裁器和1个总仲裁器,每一个仲裁器可以处理6路中断。,(3)中断控制器专用寄存器有8个专用寄存器,主要使用前5个寄存器,该寄存器也就是中断标志寄存器各位:1:对应
29、中断源有中断请求0:对应中断源无中断请求注意:必须在中断处理程序中对其标志位清0。其方法为写1.,SRCPND-中断源挂起(标志)寄存器,该寄存器是设置各中断源是FIQ中断还是IRQ中断各位:1:对应中断源设为FIQ中断模式0:对应中断源设为IRQ中断模式,INTMOD-中断模式寄存器,各位:1:屏蔽对应中断源0:开放对应中断源,INTMSK-中断屏蔽寄存器,PRIORITY-中断优先级寄存器,ARB_SELn-n组优先级顺序控制位00:REQ0,1,2,3,4,5 01:REQ0,2,3,4,1,510:REQ0,3,4,1,2,5 11:REQ0,4,1,2,3,5ARB_MODEn-n组
30、优先级循环控制位0:优先顺序固定不变 1:优先顺序循环,每响应一次中断,其顺序循环改变一次,但REQ0、REQ5位置不变。,各位:1:对应的中断源被响应,且正在执行中断服务0:对应中断源未被响应注意:必须在中断处理程序中对其服务标志位清0。方法为对某位写1便清除为0。即在清除SRCPND中相应位后,要清除该寄存器相应位。,INTPND-中断服务(挂起)寄存器,该寄存器的偏移值指示在INTPND中显示的中断源各位:1:对应的中断源,在INTPND中被置位说明:当在中断服务程序中对SRCPND、INTPND中的标志位清0时,该寄存器的对应位自动清0。,INTOFFSET-中断偏移寄存器,SUBSR
31、CPND-子中断源请求标志寄存器,对有多个中断源的外设,显示其具体的中断请求各位:1:对应的子中断源有请求0:对应的子中断源无请求注意:在中断服务程序中,需要对其置1的标志位清0。,INTSUBMSK-子中断源屏蔽寄存器,对有多个中断源的外设,对具体的中断源进行屏蔽各位:1:屏蔽对应的子中断源0:开放对应的子中断源,在2410init.s文件中与的中断初始化部分程序开始及中断入口bResetHandler bHandlerUndef;handler for Undefined modebHandlerSWI;handler for SWI interruptbHandlerPabort;han
32、dler for PAbortbHandlerDabort;handler for DAbortb.;reservedbHandlerIRQ;handler for IRQ interrupt bHandlerFIQ;handler for FIQ interrupt本段意义:利用后面定义的宏来展开上面各行,使其进入它们所对应的中断服务子程序。,中断举例,77,LTORG;声明一个数据缓冲池的开始HandlerFIQ HANDLER HandleFIQHandlerIRQ HANDLER HandleIRQHandlerUndef HANDLER HandleUndefHandlerSWI H
33、ANDLER HandleSWIHandlerDabort HANDLER HandleDabortHandlerPabort HANDLER HandlePabort本段意义:利用后面定义的宏来展开上面各行,使其进入它们所对应的中断服务子程序,;本宏意义:转到相应中断服务子程序去执行 MACRO$HandlerLabel HANDLER$HandleLabel;如Label=IRQ,(HandlerIRQ)$HandlerLabelsubsp,sp,#4stmfdsp!,r0 ldr r0,=$HandleLabel ldr r0,r0str r0,sp,#4ldmfd sp!,r0,pcM
34、END,IRQ中断服务程序IsrIRQ subsp,sp,#4;reserved for PCstmfdsp!,r8-r9 ldrr9,=INTOFFSET;中断偏移寄存器ldrr9,r9ldrr8,=HandleEINT0;中断向量表首地址addr8,r8,r9,lsl#2ldrr8,r8strr8,sp,#8ldmfdsp!,r8-r9,pc本段意义:根据中断服务号,转去执行相应的中断处理程序段。,;中断向量表IntVectorTableHandleEINT0#4HandleEINT1#4HandleEINT2#4HandleEINT3#4HandleEINT4_7#4HandleEINT
35、8_23#4HandleRSV6#4HandleBATFLT#4HandleTICK#4HandleWDT#4HandleTIMER0#4HandleTIMER1#4,81,4.4.3 嵌入式微处理器串行接口,串行接口的本质功能是作为CPU和串行设备间的编码转换器。当数据从CPU经过串口发送出去时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。串口是系统资源的一部分,应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。,1、通用异步接收、发送器UART,UART的基本任务有:实现数据格式化。异步方式下接口自动生
36、成起、止位的帧数据格式。在面向字符的同步方式下,接口要在待发送的数据块前加上同步字符。进行串并转换。控制数据传输速度。即对波特率进行选择控制。进行错误检测。在发送时自动生成奇偶校验或其他校验码。在接收时,检查字符的奇偶校验或其他校验码,确定是否发生传输错误。UART输出的是TTL电平信号,经过专用转换电路,可以方便的实现RS-232通信方式。,83,例如1:S3C44BOX内部集成的UART,S3C44B0X UART单元提供了两个通用异步串口,每个串口可以操作在中断模式或DMA模式,支持波特率最大为115.2kbps,每个通道包含都有一个16字节的接收与发送FIFO缓冲区。每个UART模块包
37、含以下几个部件:波特率发生器,发送器,接收器和控制单元。,例如2、S3C2410处理器内部UART设计 S3C2410 的UART(通用异步串行口)有三个独立的异步串行I/O 端口:UART0、UART1、UART2,每个串口都可以在中断和DMA 两种模式下进行收发。UART支持的最高波特率达230.4kbps。每个UART 包含:波特率发生器、接收器、发送器和控制单元。波特率发生器以PCLK或UCLK为时钟源。发送器和接收器各包含1个16 字节的FIFO 寄存器和移位寄存器。S3C2410 的3个UART都有遵从1.0规范的红外传输功能,UART0、UART1有完整的握手信号,可以连接MOD
38、EM。当发送数据的时候,数据先写到FIFO 然后拷贝到发送移位寄存器,然后从数据输出端口(TxDn)依次被移位输出。被接收的数据也同样从接收端口(RxDn)移位输入到移位寄存器,然后拷贝到FIFO 中。,1)结构和工作原理(1)结构,主要有4部分构成:接收器、发送器、波特率发生器、控制逻辑等。,接收器/发送器的结构,(2)工作原理串行口的操作数据帧格式:可编程,包含1个开始位、5 到8 个数据位、1个可选的奇偶校验位、1个或2个停止位,通过线路控制器(ULCONn)来设置。发送中止信号:迫使串口输出逻辑0,这种状态保持一个传输帧的时间长度。通常在一帧传输数据完整地传输完之后,再通过这个全0 状
39、态将中止信号发送给对方。中止信号发送之后,传送数据连续放到FIFO 中(在不使用FIFO 模式下,将被放到输出保持寄存器)。接收器具有错误检测功能:可以检测出溢出错误,奇偶校验错误,帧错误和中止状况,每种情况下都会将一个错误标志在接收状态寄存器置位。,串行口的波特率发生器每个UART 的波特率发生器为传输提供了串行移位时钟。波特率产生器的时钟源可以从S3C2410 的内部系统时钟PCLK或UCLK 中来选择。波特率数值决定于波特率除数寄存器(UBRDIVn)的值,波特率数与UBRDIVn 的关系为:UBRDIVn=(int)(CLK/(f B*16)1 其中CLK为所选择的时钟频率,f B为波
40、特率。f B=CLK/16/(UBRDIVn 1)例如,如果波特率为115200bps 且PCLK 或UCLK 为40MHz,则UBRDIVn 为:UBRDIVn=(int)(40000000)(115200*16)1=(int)(21.7)1=21 1=20,串行口波特率误差极限在应用中,实际波特率往往与理想波特率有差别,其误差不能超过一定的范围,其极限为:UART传输10bit数据的时间误差应该小于1.87(3/160)。t_true=(UBRDIVn+1)1610/PCLK实际的传输10bit所需时间 t_ideal=10/baud_rate理想情况下传输10位需要的时间UART err
41、or(t_true t_ideal)/t_ideal)100%,串行口的自动流控制功能UART0和UART1不仅有完整的握手信号,而且有自动流控制功能,在寄存器UMCONn中设置实现。自动流控制是利用信号nRTS、nCTS来实现的。在接收数据时,只要接收FIFO中有两个空字节就会使nRTS有效,使对方发送数据;在发送数据时,只要nCTS有效,就会发送数据。其实现过程如下图所示。nRTS:请求对方发送nCTS:清除请求发送注意:这种自动流控制应用于对方也是UART设备,不能应用于MODEM设备。,使用FIFO进行收发主要是通过对FIFO状态寄存器UFSTATn的查询,确定进行收发。使用FIFO进
42、行发送:(1)选择发送模式(中断或者DMA模式)(2)查询对方是否有请求发送要求,由MODEM状态寄存器UMSTATn0给出,该位为1,则有请求,再查询FIFO状态寄存器UFSTATn的数据满状态位是否为1,如果不是1,可以向发送缓冲寄存器UTXHn写入发送的数据。上面二者有一个或者两个都不满足,则不发送数据。使用FIFO进行接收(请求发送):(1)选择接收模式(中断或者DMA模式)(2)请求发送。先要查询FIFO状态寄存器UFSTATn的数据满状态位是否为1,如果不是1,则可以向对方发出“请求发送信号”,对MODEM控制寄存器MCONn中的请求发送信号产生位置1,使UARTn发出nRTS信号
43、;如果UFSTATn的数据满状态位是1,则不能够请求发送数据。,不使用FIFO进行收发主要是通过对收/发状态寄存器UTRSTATn的查询,确定进行收发。数据发送:选择发送模式(中断或者DMA模式)查询对方是否有请求发送要求,由MODEM状态寄存器UMSTATn0给出,该位为1,则有请求,再查询发送/接收状态寄存器UTRSTATn1的“发送缓冲器空”状态位是否为1,如果是1,可以向发送缓冲寄存器UTXHn写入发送的数据。数据接收(请求发送):选择接收模式(中断或者DMA模式)请求发送。先要查询发送/接收状态寄存器UTRSTATn0的接收缓冲器“数据就绪状态位”是否为1,如果是1,需要先读取数据,
44、然后再请求对方发送数据,方法是对MODEM控制寄存器MCONn中的请求发送信号产生位置1,使UARTn发出nRTS信号。如果UFSTATn的数据满状态位是1,则不能够请求发送。,中断或DMA请求每个UART都有3类、7种事件产生中断请求或者DMA请求。7种中断请求事件是:溢出错误、奇偶校验错误、帧格式错误、传输中断信号、接收缓冲器数据就绪、发送缓冲器空、发送移位器空。它们可以分成3类:错误中断请求、接收中断请求、发送中断请求。接收中断:非FIFO模式:当接收缓冲寄存器收到数据后,产生中断请求。FIFO模式:Rx FIFO中数据的数目达到了触发中断的水平,或者超时(在三帧时间内未收到任何数据),
45、均产生中断请求。发送中断:非FIFO模式:当发送缓冲器空时,产生中断请求。FIFO模式:Tx FIFO中数据的数目达到了触发中断的水平。,错误中断:一共有4种错误中断:溢出错误、奇偶检验错误、帧格式错误、传输中断信号错误。非FIFO模式:只要有任何一个错误出现,就会产生中断请求。FIFO模式:Rx FIFO中数据溢出,或者出现了帧格式错误、奇偶校验错误、传输中断信号错误,都会产生中断请求。说明:(1)对于“奇偶校验错误、帧格式错误、传输中断信号错误”中断,在数据接收时就产生了,但是在数据接收产生时并非出现中断请求,而是在读出错误数据时才出现中断请求。(2)如果设置的是DMA模式,而不是中断请求
46、模式,对于以上所出现的中断请求,应该是DMA请求。(3)传输中断信号定义:在超出一帧的时间内,全部输出低电平。,循环检测模式S3C2410X的每一个UART都提供有检测功能,它是一种数据循环流动的自发、自收方式,数据从发送缓冲器传送到TXD,数据不经过引脚输出,在内部将数据传到接收引脚RXD,再传输到接收缓冲器。,2)UART专用寄存器3个UART,每个都有11个专用寄存器,共29个寄存器,(1)线路控制寄存器(ULCON),(2)控制寄存器(UCON),(2)控制寄存器(UCON),(3)FIFO控制寄存器(UFCON),(3)FIFO控制寄存器,(4)MODEM控制寄存器(UMCON),(
47、5)发送/接收状态寄存器(UTRSTAT),(6)Rx错误状态寄存器(UERSTAT),(7)FIFO状态寄存器(UFSTAT),(8)MODEM状态寄存器(UMSTAT),(9)发送缓冲寄存器(UTxH),(10)接收缓冲寄存器(URxH),(11)波特率除数寄存器(UBRDIV),3)UART应用举例 编写一程序,使用S3C2410X的UART2进行串行数据收发,要求用脉冲请求中断的方式、使用收/发FIFO,8个数据位、1个停止位、不校验,波特率为125kb/s。设Pclk为50MHz。(提示:主程序对UART2初始化、引脚配置、中断初始化等,并进行一次发送;中断服务程序进行数据收发,标签
48、清除中断请求标志和中断服务标志)解:(1)计算波特率除数:由公式:UBRDIVn=(int)(CLK/(f B*16)1 这里:Pclk=50MHz,f B=125kb/s计算得:UBRDIVn=25-1=24(2)UART2控制寄存器:线路控制寄存器:ULCON2=0b 0 000 0 11=0 x03含义:非红外、不校验、1个停止位、8个数据位,控制寄存器:UCON2=0b 0 0 0 0 0 0 0 01 01=0 x05含义:选Pclk、发/收中断脉冲请求、关闭接收超时中断、允许接收错误中断、不回送、不发送暂停信号、发/收用中断方式。FIFO控制寄存器:UFCON2=0b 10 01
49、0 0 0 1=0 x91含义:发/收FIFO选8字节触发、保留位为0、不复位发/收FIFO、使能FIFO。(3)引脚配置 需要设置TxD2、RxD2,它们对应GPH6、GPH7,在GPH配置寄存器GPHCON中的位置为:0b 1 0 1 0 方法:GPHCON=GPHCON&(0 xF12)|(0 xA12),(4)中断寄存器设置中断模式寄存器:INTMOD&=(115)INT_UART2位于第15位,将UART2设置为IRQ中断中断屏蔽寄存器:INTMSK&=(115)中断优先级寄存器PRIORITY:不设置,使用固定优先级。子中断屏蔽寄存器:INTSUBMSK&=(76)INT_ERR2
50、、INT_TXD2、INT_RXD2位于子中断屏蔽寄存器中的8、7、6位。(5)在中断服务程序中对寄存器的操作清除中断标志寄存器相应位:SRCPND&=(115)清除中断服务寄存器相应位:INTPND&=(115),113,2、RS-232-C串行接口,RS-232-C标准是一种硬件协议,用于连接DTE(数据终端设备)和DCE(数据通信设备)两种设备。规定包括以下三个方面:机械特性:一般为9针,D型插件;电气信号特性:负载电容不超过2500P,负载电阻在3K7K欧姆之间,电压在-3V-15V和+3V+15V之间;交换特性:允许全双工方式。在实际的应用中,通信距离一般在几十米内,通信速率较低。,