1、第6章 片内功能模块,本章重点:, S3C2410A PWM(脉宽调制)定时器概述;PWM定时器操作;PWM定时器特殊功能寄存器;PWM定时器应用举例。在PWM定时器操作中,详细讲述了自动重装与双缓冲、手动更新、脉宽调制、输出电平控制、死区发生器、DMA请求模式等内容。 S3C2410A RTC(实时时钟)概述;RTC组成与操作;RTC特殊功能寄存器;RTC程序举例。在RTC组成与操作中,详细讲述了闰年产生器、读/写寄存器、后备电池、报警功能、节拍时间中断等内容。, S3C2410A看门狗定时器(WDT)概述;看门狗定时器操作;看门狗定时器特殊功能寄存器;看门狗定时器程序举例。 (4) 串行异
2、步通信基础;S3C2410A UART组成及操作;UART特殊功能寄存器;UART与RS-232C接口连接举例;UART程序举例;UART与红外收发器连接举例。,(5)模数转换器与触摸屏接口,包括:ADC与基础触摸屏接口基础知识; ADC与触摸屏接口概述; ADC与触摸屏接口操作;ADC与触摸屏接口特殊功能寄存器;ADC程序举例;ADC与触摸屏接口程序举例。 (6) S3C2410A IIC总线接口概述;IIS总线接口概述;SPI总线接口概述;MMC/SD/SDIO概述。,6.1 PWM定时器,6.1.1 PWM定时器概述 定时器模块参见图6.1,S3C2410A有5个16位的定时器。定时器0
3、3带有脉宽调制(Pulse Width Modulation,PWM)功能,这4个定时器的输出信号连接到S3C2410A的TOUT0TOUT3引脚,输出波形的频率和占空比可编程控制。定时器4是一个内部定时器,没有PWM功能,输出信号不连接到S3C2410A引脚。定时器0有一个死区发生器(dead zone generator),能够用于对大电流设备进行控制。,定时器0和1共用一个8位预分频器(prescaler),定时器24共用另一个8位预分频器。定时器计数时钟信号来源于时钟分频器(clock divider),通过编程能够选择时钟分频器的1/2、1/4、1/8、1/16分频信号或选择使用TC
4、LK0、TCLK1。8位预分频器是可编程的,根据保存在定时器配置寄存器TCFG0中的预分频值,对PCLK分频。定时器配置寄存器TCFG1为每个定时器选择时钟分频信号(1/2、1/4、1/8、1/16)或选择TCLK0、TCLK1。,S3C2410A片内定时器,支持自动重装模式(一次定时结束,以重装值开始下一次定时)或一次脉冲模式(一次定时结束,停止定时器)。定时器模块图见图6.1。, 定时器寄存器组成和定时器主要操作过程参见图6.2,除了定时器4,定时器03中每个定时器内部,都有下述寄存器。 定时器计数缓冲器寄存器TCNTBn,程序可读写,用于保存定时器计数初值。在手动更新(manual up
5、date)允许时,将这个初值送到定时器计数寄存器TCNTn,在TCNTn中进行递减计数操作。当自动重装(auto reload)允许时,一次计数结束(TCNTn递减计数达到0时),自动将TCNTBn的值装到TCNTn。TCNTBn值的不同,决定了输出信号TOUTn频率的不同。, 定时器比较缓冲器寄存器TCMPBn,程序可读写,用于保存定时器比较初值。在手动更新允许时,将这个初值送到定时器比较寄存器TCMPn。当执行计数的TCNTn的值与TCMPn的值相等时,计数器输出信号TOUTn电平由低变高。当自动重装允许时,一次计数结束(TCNTn递减计数达到0时),自动将TCMPBn的值装到TCMPn。
6、TCMPBn的值,被用作脉宽调制,即在输出信号TOUTn频率不变时,对每个输出脉冲低电平、高电平占用时间的调制,也称为输出信号占空比的调制。, 定时器计数寄存器TCNTn,是内部寄存器,程序不可读写。TCNTn也称为减法计数器、倒计数器或递减计数器。定时器的计数操作在TCNTn中执行。TCNTn计数时钟信号来源于时钟分频器。当TCNTn一次计数结束,或产生DMA请求,或产生中断请求,由编程决定。当一次计数结束,如果自动重装允许时,TCNTBn值送TCNTn、TCMPBn值送TCMPn,开始下一次计数;如果自动重装禁止,则计数器停止。, 定时器比较寄存器TCMPn,是内部寄存器,程序不可读写。在
7、计数过程中,一旦TCNTn的值与TCMPn的值相等,计数器输出TOUTn电平由低变高。, 定时器计数观察寄存器TCNTOn,程序可读写。在计数过程中,如果希望读出TCNTn的值,只能通过读出TCNTOn实现,不能直接读TCNTn的值。要使定时器03运行,主要操作包括:通过编程先送出计数值到TCNTBn,送出比较值(脉宽调制值)到TCMPBn。当设置为手动更新允许时,定时器自动将TCNTBn、TCMPBn的内容送TCNTn、TCMPn。然后设置启动定时器(TCON寄存器对应的start/stop位为1),则TCNTn开始递减计数。计数过程中当TCNTn的值与TCMPn的值相等时,输出信号TOUT
8、n的电平由低变高。如果允许自动重装,当TCNTn计数达到0时,进行重装,同时产生中断请求或DMA请求,再开始下一次定时。如果不允许自动重装,则定时器停止。,在计数过程中,可以给TCNTBn和TCMPBn装入一个新的值,在自动重装方式,新的值只能用于下一次定时,对当前正在进行的定时操作,不产生影响。定时器4除了没有TCMPB4和TCMP4寄存器外,其他寄存器与定时器03相同。定时器4不能进行脉宽调制,只能通过对TCNTB4设置不同的值,改变输出信号的频率。, PWM定时器用到的S3C2410A引脚信号PWM定时器输出信号,作为S3C2410A的TOUT0TOUT3引脚信号。可以将S3C2410A
9、引脚引入的时钟源TCLK1、TCLK0,作为定时器的时钟信号。,6.1.2 PWM定时器操作 基本定时操作基本定时操作见图6.3(p179)。 自动重装与双缓冲S3C2410A PWM定时器有双缓冲功能,也就是说有两个缓冲器,定时器计数缓冲器寄存器TCNTBn和定时器比较缓冲器寄存器TCMPBn。 图6.4(p181)是双缓冲功能的一个举例,图中省略了TCMPBn寄存器的值。, 定时器初始使用手动更新位和反相器位(p181) 定时器操作举例定时器操作举例见图6.5(p182)。 脉宽调制脉宽调制(Pulse Width Modulation,PWM)功能通过使用TCMPBn寄存器来实现,而PW
10、M的频率由TCNTBn寄存器的值确定。 图6.6(p183)通过举例,表明了TCMPBn的值越小,TOUTn输出高电平的时间越短,输出低电平的时间越长;而TCMPBn的值越大,TOUTn输出高电平的时间越长,输出低电平的时间越短。, 输出电平控制如图6.7(p183)所示,反相器设定为off或on,其输出信号TOUTn的波形高低电平正好相反。 死区发生器(dead zone generator)使用PWM对大电流设备进行控制时,常常用到死区(dead zone)功能。死区功能在切断一个开关设备和接通另一个开关设备之间,允许插入一个时间间隙。在这个时间间隙,禁止两个开关设备同时被接通,即使接通非
11、常短的时间也不允许。当定时器死区功能被允许时,输出波形见图6.8(p184)。, DMA请求模式定时器在每段指定时间后(一次定时结束)能够产生DMA请求信号。 DMA模式配置和DMA/中断操作见表6.1(p184)。图6.9(p185)表明,定时器3一旦设置为DMA模式,将不产生中断请求。定时器3的DMA请求和响应时间关系,也在图6.9中给出。,6.1.3 PWM定时器特殊功能寄存器 定时器配置寄存器0定时器配置寄存器0,即TCFG0,用于对两个8位预分频器配置,并且设置死区长度。其地址为0x51000000,可读写,Reset值为0x00000000,具体含义见表6.2(p185)。定时器输
12、入时钟频率 =PCLK/prescaler值+1/divider值prescaler值 = 0255divider值 = 2、4、8、16, 定时器配置寄存器1定时器配置寄存器1,即TCFG1,用于选择DMA请求通道和选择各定时器MUX(多路开关)的输入。其地址为0x51000004,可读写,Reset值为0x00000000,具体含义见表6.3(p185)。, 定时器控制寄存器定时器控制寄存器,即TCON,用于对各定时器的自动重装on/off、手动更新与否、启动/停止和输出反相器on/off进行设置,其地址为0x51000008,可读写,Reset值为0x00000000,具体含义见表6.4
13、(p186)。, 定时器计数缓冲器寄存器、比较缓冲器寄存器和计数观察寄存器定时器04都有计数缓冲器寄存器TCNTBn和计数观察寄存器TCNTOn,定时器4没有比较缓冲器寄存器,定时器03有比较缓冲器寄存器TCMPBn。除了地址不同以外,各定时器对应的寄存器含义相同,如表6.5(p187)和表6.6(p188)所示。,6.1.4 PWM定时器应用举例【例6.1】当PCLK=66.5MHz时,选择不同的时钟分频(1/2、1/4、1/8、1/16)输入,分别计算定时器最小分辨率、最大分辨率及最大定时区间。参见6.1.3节中定时器配置寄存器TCFG0的内容,根据定时器输入时钟频率计算式,计算结果见表6
14、.7(p188)。, 最小分辨率: 定时器输入时钟的频率=PCLK/prescaler值+1/divider值=66.5(MHz)/0+1/2=33.2500(MHz) 一个计数脉冲的时间 =1/33.2500(MHz)=0.0300(s), 最大分辨率:定时器输入时钟的频率=PCLK/255+1/2=66.5(MHz)/256/2=129.8828(kHz) 一个计数脉冲的时间=1/129.8828(kHz)=7.6992(s), 最大定时区间:由于TCNTBn=65535,计数到0共65536个计数脉冲,所以655367.6992(s)=0.5045(sec)。,【例6.2】下面给出了使用
15、C语言编写的,对定时器0/1/2/3测试的程序片段,假定程序中用到的寄存器地址在别的程序中已定义过。(见参考书p189),6.2 实时时钟,6.2.1 RTC概述S3C2410A芯片内部有一个实时时钟(Real Time Clock,RTC)模块,当系统电源闭合时,使用系统提供的电源,当系统电源切断时,由后备电池为RTC模块供电。无论系统加电或切断电源,RTC都在运行;可以对RTC设定报警时间。使用STRBLDRB指令,可以在RTC和CPU之间传送8位BCD码的数据,包括秒、分、时、日、星期、月、年。RTC模块使用32.768kHz的外部晶振工作。,RTC作为系统时钟使用,也能够执行报警功能、
16、产生节拍时间中断。主要特点有: 使用BCD码表示秒、分、时、日、星期、月、年; 有闰年产生器; 报警功能:有报警中断或从Power_OFF模式中唤醒功能; 解决了2000年问题; 独立的电源引脚(RTCVDD); 支持毫秒级节拍时间中断,可用于RTOS内核; 支持秒进位复位功能。,RTC用到的S3C2410A引脚信号有:外接晶振引脚信号XTIrtc、XTOrtc和外接电源引脚RTCVDD(1.8V)。,6.2.2 RTC组成与操作 RTC组成框图见图6.10。, 闰年产生器闰年产生器基于从BCDDATE、BCDMON、BCDYEAR来的数据,确定每个月的最后一天是28、29、30或31日。一个
17、8位的计数器只能表示2位BCD数字,因此它不能确定00(年的最低2位数字)年是闰年或不是闰年。为了解决这一问题,在S3C2410A的RTC模块中有一个硬件逻辑支持2000年作为闰年。要注意1900年不是闰年而2000年是闰年。因此在S3C2410A中,2位BCD码的00代表2000年,而不是1900年。, 读/写寄存器RTCCON控制寄存器位0必须被设置为1,然后才可以写RTC模块中的寄存器。如果这一位被设置为0,不能写入RTC模块中的寄存器。, 后备电池当系统电源切断时,通过RTC引脚提供电源到RTC模块,RTC逻辑由后备电池驱动。这时CPU接口与RTC的逻辑被阻塞,后备电池仅仅驱动晶振电路
18、和BCD计数器,使得BCD计数器功耗为最小。, 报警功能在Power_OFF模式或Normal操作模式,RTC在规定的时间产生一个报警信号。在Normal操作模式,报警中断ALMINT被激活;在Power_OFF模式,像ALMINT一样,电源管理唤醒信号PMWKUP也能够被激活。RTC报警控制寄存器RTCALM,确定报警允许/禁止和报警时间设定条件。, 节拍时间(tick time)中断RTC节拍时间被用作中断请求。节拍时间计数寄存器TICNT有1位中断允许位和7位节拍时间计数值位。计数值达到0时,节拍时间中断出现。中断周期计算如下:Period=(n+1)/128(second)式中:n为节
19、拍时间计数值,范围为1127。, 进位复位功能(round reset function) 进位复位功能由RTC进位复位寄存器RTCRST来实现。产生秒进位的边界(30、40或50秒)可以选择,在进位复位后,秒的值被设置为0。例如,如果当前时间是 23:37:47,并且设置进位边界为40秒,则进位复位功能改变当前时间为23:38:00。 32.768kHz外接晶振连接举例图6.11(p193)是使用32.768KHz晶振作为RTC单元晶振电路的一个实例。,6.2.3 RTC特殊功能寄存器 RTC控制寄存器RTC控制寄存器RTCCON由4位组成,位0即RTCEN用作控制禁止/允许对RTC寄存器的
20、写入,而其他3位CLKSEL、CNTSEL、CLKRST用于测试。RTCCON寄存器地址、Reset值及各位含义见表6.8(p194)和表6.9(p194)。, RTC 报警控制和报警数据寄存器RTC报警控制寄存器RTCALM,确定允许/禁止报警和报警时间。在Power_OFF模式,通过ALMINT和PMWKUP,RTCALM寄存器产生报警信号,参见图6.10(p192)。在Normal操作模式,仅仅通过ALMINT产生报警信号。RTC报警控制和报警数据寄存器地址及Reset值见表6.10(p194),寄存器各位的含义见表6.11(p195)。, RTC进位复位寄存器RTC进位复位寄存器RTC
21、RST,Reset值为0x0,地址及各位含义见表6.12(p196)。 节拍时间计数寄存器节拍时间计数寄存器TICNT,Reset值为0x00,地址及各位含义见表6.13(p196)。 秒、分、时、日、星期、月、年数据寄存器可以对这些寄存器设置当前时间和日期,读取当前时间和日期。这些寄存器使用BCD值,Reset值未定义,地址及各位含义见表6.14(p196)。,6.2.4 RTC程序举例 【例6.3】下面给出了使用C语言编写的测试RTC的程序片段。(见参考书P197),6.3 看门狗定时器,6.3.1 看门狗定时器概述看门狗定时器(Watch Dog Timer,WDT)简称看门狗,属于定时
22、器中的一种。 一般看门狗定时器概述一般看门狗定时器,通常可以由程序控制允许/禁止看门狗定时器,允许即启动定时器,禁止即停止定时器。看门狗定时器内部最少有一个计数寄存器,执行计数操作。使用时应该由程序给这个计数寄存器设定一个计数初值,然后允许看门狗定时器(启动),来一个计数脉冲,计数寄存器计一次数。对于减法计数器,当减到0时,产生一个定时输出信号,通常把这个定时输出信号作为内部Reset信号使用,重新启动控制器(指CPU中的控制器)。,简单地说,使用看门狗定时器,目的是当运行的程序受到了干扰,发生了死循环,或者由于运行的程序内部事先未发现的错误,导致程序不是按照程序员预定的运行路线运行时,看门狗
23、定时器能够重新启动控制器。, S3C2410A看门狗定时器概述S3C2410A片内有一个看门狗定时器模块,当控制器的操作受到像噪音或系统错误的干扰时,看门狗定时器能够重新启动控制器操作;这个定时器也能被用作一个通常的16位间隔时间定时器,产生中断请求。看门狗定时器用于重启控制器时,在看门狗定时器计数寄存器WTCNT中执行计数操作,当允许看门狗定时器时(WTCON5=1),每来一个计数脉冲,减1。当计数值减到0时,能够产生一个长度为128个PCLK时间长度的复位(Reset)信号。,6.3.2 WDT操作看门狗定时器功能框图如图6.12所示。,看门狗定时器用PCLK作为它唯一的源时钟。为了产生相
24、应的看门狗定时器时钟,PCLK先被预分频,之后再次被分频(称为时钟分频)。预分频值和时钟分频值的选择,在看门狗定时器的控制寄存器WTCON中被指定。合法的预分频值的范围从0到255。时钟分频值可以选择16、32、64或128。使用下式计算看门狗定时器时钟频率和每个定时时钟周期的时长。, WTDAT和WTCNT一旦看门狗定时器被允许(启动),看门狗定时器数据寄存器WTDAT(Watchdog Timer Data Register)的值不能被自动装入定时器计数寄存器WTCNT中,由于这个原因,计数初值必须同时写入WTDAT和WTCNT中,而且应该在看门狗定时器启动以前写入。3.调试环境的考虑,6
25、.3.3 看门狗定时器特殊功能寄存器 看门狗定时器控制寄存器通过配置看门狗定时器控制寄存器WTCON,能够允许/禁止看门狗定时器;可以选择不同的时钟分频值;允许/禁止中断;允许/禁止看门狗定时器Reset功能。如果用户要求把看门狗定时器用作通常的定时器,应该设置允许中断,同时禁止看门狗定时器Reset功能。具体内容见表6.15(p201)。, 看门狗定时器数据寄存器看门狗定时器数据寄存器WTDAT用作指定定时输出时长区间。 WTDAT寄存器地址及Reset值见表6.16(p201)。, 看门狗定时器计数寄存器看门狗定时器计数寄存器WTCNT,含有看门狗定时器在通常操作时的当前计数值,执行递减计
26、数操作。WTCNT寄存器地址及Reset值见表6.17(p202)。,6.3.4 WDT程序举例以下内容在涉及到C语言语句时,假定使用环境为C/OS-,并且寄存器地址已经定义过了。 电源加电启动后看门狗定时器的状态 看门狗定时器作为通常的计数器使用 允许看门狗定时器产生Reset信号(P202-203),【例6.4】以下程序允许看门狗定时器产生中断请求,中断5次后屏蔽看门狗定时器中断。程序运行环境为C/OS-,需要在main.c中调用看门狗定时器测试程序watchdog_test。(见参考书p203),6.4 UART,6.4.1 串行异步通信基础 串行、异步、全双工通信 并行通信与串行通信计
27、算机与计算机、计算机与外设之间通信方式可以分为并行通信与串行通信两种方式。如图6.13所示,并行通信在一个时间单位,或者说一次传输,数据线D7-D0同时传输8位(bit)数据;而串行通信一次传输,在发送数据线上只传输1位(bit)数据。,并行通信一般一次传输8位,也有传输16位、32位的。早期PC/XT计算机与打印机连接的接口就是8位并行接口。串行通信最简单的连接方式只使用三条线,一条为发送线,另一条为接收线,还有一条信号地。常见的例子是PC的串行口,也称为COM口、串口、RS-232C。可以将PC串口与嵌入式系统串口连接,实现串行通信。可以连接串口的设备在USB接口出现之前非常多,例如绘图机
28、、数字化仪、串口打印机等等,也可以将两台PC通过串口互连进行通信。, 同步、异步传输串行通信有同步传输、异步传输两种方式。同步传输要求在发送方和接收方使用同一个同步信号,也就是说每传送1位数据,需要使用另外的同步线传输一次同步信号。由于电路实现较为复杂,同步传输很少使用。异步传输发送方和接收方没有共同的同步信号。发送方可以在任何时候随时发送,接收方一直在监听并接收信息,双方各自使用自己的时钟信号。由于异步传输电路实现相对简单,使用较为广泛。, 单工、半双工、全双工串行通信的三种传输方式,如图6.14所示。单工指的是数据传输方向是固定的,只能从一方(A)送往另一方(B)。半双工双方均具备接收和发
29、送数据的能力,但只有一条传输线,尽管可以双向传输,但同一时刻只能一方(A)发送,另一方(B)接收。经过切换线路,然后才能由B方发送,A方接收。全双工指双方均具备发送、接收能力,发送和接收的数据分别在两条不同的线路上传输。全双工传输使用较为广泛。, 传输率、波特率、数据的帧格式 传输率、波特率传输率指每秒传输多少位(bit),传输率通常也称波特率。在计算机中,每秒传输多少位与波特率的含义是相同的。但在最初的定义上,传输率指每秒传输多少位,而波特率是指每秒传输的离散信号的个数。离散信号是指不均匀的、不连续的、也不相关的信号。在计算机中,只有两种离散信号0和1,所以波特率与每秒传输位数相同。在某些采
30、用脉冲调制的设备中,允许取4种相位,这时传输率与波特率是不相同的。,常用的波特率有:1200、2400、4800、9600、19200波特等。 帧格式串行异步通信数据的帧格式,也称数据格式、字符格式,见图6.15。, 典型UART举例通用异步收发器(Universal Asynchronous Receiver and Transmitter,UART)电路模块,有的集成在微处理器芯片内部,如S3C2410A中包含了UART;有的集成为一个单独的芯片,如Intel 8251A,与8086/8088微处理器配套使用。一个典型的微处理器片外的UART组成,如图6.16所示。, 电平/逻辑转换在图6
31、.16中,如果将UART的TxD输出引脚由电缆直接连接到另一个UART的RxD引脚,当电缆线长度大于0.5m时,标准TTL的输出信号(TxD)传输到对方(RxD)会变得不可靠,通常的方法是连接线路驱动器(line driver)电路,如MC1488发送器及MC1489接收器、MAX3232收发器等。使用线路驱动器时,在20kbps的速率下,建议最大传输距离为17m。使用线路驱动器连接两个UART的电路图,见图6.17。,图6.17中,UART的输入、输出是TTL电平信号,经过线路驱动器后,变成RS-232C信号。, 调制解调器在计算机网络普及以前,串行异步通信使用很广泛。为了使串行异步通信信号
32、能够远距离传输,或者通过电话线传输,曾经广泛地使用过调制解调器(modem)。调制解调器是由调制器和解调器两部分组成的。图6.18是串行异步通信使用MODEM互连的一个例子。,6.4.2 UART组成及操作 UART组成位于S3C2410A芯片内部的通用异步收发器(Universal Asynchronous Receiver and Transmitter,UART)提供了三个独立的异步串行I/O(Serial I/O,SIO)端口(或通道)。每个端口能够基于中断或基于DMA方式操作。 换句话说,UART能够产生中断或DMA请求,用来在CPU(或内存)与UART之间传输数据。,UART各通道
33、也支持查询方式在UART与CPU之间传输数据。 使用系统时钟时,UART能够支持位传输速率最高达到230Kbps。如果外设为UART提供时钟UEXTCLK,那么UART能够以更高的速度操作。 每个UART通道含有两个16字节的FIFO(First In First Out,先进先出)寄存器,一个用于接收数据,一个用于发送数据。 可以对S3C2410A UART以下参数通过编程设置:波特率;通常方式或红外(Infra Red,IR)发送/接收方式;1位或2位停止位;58位数据位;奇偶校验方式。,如图6.19所示,每个UART通道含有一个波特率发生器,一个发送器,一个接收器和一个控制单元。波特率发
34、生器使用PCLK或UEXTCLK时钟。发送器和接收器各有一个16字节的FIFO(即缓冲区)寄存器和移位器。在FIFO方式,要发送的数据先写入FIFO寄存器,然后复制到发送移位器,通过发送数据引脚TxDn移位输出;而接收数据从接收数据引脚RxDn输入并移位,然后从接收移位器复制到FIFO寄存器。,图6.19中,在FIFO方式,每个缓冲区寄存器的全部16字节用作FIFO寄存器。在非FIFO方式,仅仅每个缓冲区寄存器中的1字节用作保持寄存器。在非FIFO方式,要发送的数据先写入发送保持寄存器,然后复制到发送移位器,通过TxDn引脚移位输出;要接收的数据通过RxDn引脚输入并移位,然后从移位器复制到接
35、收保持寄存器。,S3C2410A中的UART有以下特点: 三个端口中每个端口的数据发送/接收可以基于中断或基于DMA方式操作,也可以基于查询方式操作; UART通道0、1和2支持红外通信协议IrDA1.0; UART通道0和1带有nRTS0、nCTS0、nRTS1和nCTS1。, UART使用的引脚信号(p211),3. UART操作 (1) 数据发送发送数据帧格式是可编程的。一帧数据由1位起始位,58位数据位,1位可选择的奇偶校验位和1位或2位停止位组成。,(2) 数据接收与数据发送一样,接收的数据帧格式也是可编程的。由1位起始位,58位数据位,1位可选择的奇偶校验位和1位或2位停止位组成。
36、接收器能够检测溢出错误(overrun error)和帧错误(frame error)。 接收超时条件出现,指示当接收器在(接收)3个字的时间内没有接收到任何数据,并且在FIFO方式Rx(接收)FIFO不空。,(3) 自动流控制S3C2410A的UART0和UART1使用nRTS和nCTS信号,支持自动流控制(Auto Flow Control,AFC)。 (4) 非自动流控制(由软件控制nRTS和nCTS) (5) RS-232C接口如果用户要通过RS-232C连接UART到调制解调器接口,nRTS、nCTS、nDSR、nDTR、nDCD和nRI信号是需要的,但是UART不支持这么多的信号。
37、在这种情况下,用户应该使用通用I/O端口(GPIO),由软件控制产生这些信号。,(6) 中断/DMA请求产生S3C2410A每个UART有5种状态信号,溢出错误、帧错误、接收缓冲区数据准备好、发送缓冲区空和发送移位器空,它们由对应的UART状态寄存器UTRSTATn和UERSTATn表示。与FIFO有关的中断见表6.18(p213)。,(7) UART错误状态FIFO除了接收FIFO,UART还有错误状态FIFO。错误状态FIFO指示,在接收FIFO中哪一个数据接收时有错误。只有当有错误的数据准备读出时,错误中断将被发出。 带有错误的字符在未被读出时,不产生错误中断,如表6.19和图6.21(
38、p214)所示。,(8) 波特率发生器每个UART通道的波特率发生器(baud rate generator),为发送器和接收器提供连续的时钟信号。用于波特率发生器的源时钟(source clock)可以选择S3C2410A的内部系统时钟PCLK,或由外部UART设备、系统,通过S3C2410A引脚UEXTCLK引入,方法是通过UCONn寄存器的时钟选择位UCONn10选择。,(9) 回送方式(loop back mode)(p215),(10) 红外方式S3C2410A UART模块支持红外(Infra Red,IR)方式发送和接收数据,可以在UART线控制寄存器ULCONn中通过设置红外方
39、式位指定。图6.22给出了红外方式功能模块图。,在红外方式,当发送数据位是0时,发送脉冲宽度是通常方式(非红外方式)串行发送一位时长的3/16。在红外接收方式,接收器必须检出这个3/16的脉冲,并识别作为0,详见图6.23图6.25(p216)。,6.4.3 UART特殊功能寄存器 UART线控制寄存器UART的3个通道各有1个线控制寄存器,分别是ULCON0、ULCON1和ULCON2,对应地址是0x50000000、0x50004000和0x50008000,可读写,Reset值均为0x00,具体含义见表6.20(p217)。 UART控制寄存器UART的3个通道各有1个控制寄存器,分别是
40、UCON0、UCON1和UCON2,对应地址是0x50000004、0x50004004和0x50008004,可读写,Reset值均为0x00,具体含义见表6.21(p217)。, UART FIFO控制寄存器UART的3个通道各有1个FIFO控制寄存器,分别是UFCON0、UFCON1和UFCON2,对应地址是0x50000008、0x50004008和0x50008008,可读写,Reset值均为0x00,具体含义见表6.22(p218)。 UART调制解调器控制寄存器UMCON0和UMCON1是UART通道0和通道1的调制解调器控制寄存器,地址分别是0x5000000C和0x50004
41、00C,可读写,Reset值均为0x00,具体含义见表6.23(p219)。另外,地址为0x5000800C的寄存器保留。, UART发送/接收状态寄存器UTRSTAT0、UTRSTAT1和UTRSTAT2分别是UART通道0、通道1和通道2的发送和接收状态寄存器,对应地址是0x50000010、0x50004010和0x50008010,只读,Reset值均为0x6,具体含义见表6.24(p219)。 UART(接收)错误状态寄存器UART的3个通道各有1个(接收)错误状态寄存器,分别是UERSTAT0、UERSTAT1和UERSTAT2,对应地址是0x50000014、0x50004014
42、和0x50008014,只读,Reset值均为0x0,具体含义见表6.25(p220)。, UART FIFO状态寄存器UART的3个通道各有1个UART FIFO状态寄存器,分别是UFSTAT0、UFSTAT1和UFSTAT2,对应地址是0x50000018、0x50004018和0x50008018,只读,Reset值均为0x0000,具体含义见表6.26(p220)。 UART调制解调器状态寄存器UART通道0和通道1各有1个UART调制解调器状态寄存器,分别是UMSTAT0和UMSTAT1,对应地址是0x5000001C和0x5000401C,只读,Reset值均为0x0,具体含义见表
43、6.27和图6.26。另外,地址为0x5000801C的寄存器保留。, UART发送缓冲区寄存器(发送保持寄存器与发送FIFO寄存器)UART发送缓冲区寄存器,在禁止使用FIFO方式,仅仅把缓冲区的1字节用作发送保持寄存器;在允许使用FIFO方式,缓冲区全部16字节用作发送FIFO寄存器。在表6.22(p218)中,如果UFCONn0=0,禁止使用FIFO,由处理器送来的8位发送数据,保存到发送保持寄存器。如果UFCONn0=1,允许使用FIFO,由处理器送来的8位发送数据,保存到发送FIFO寄存器。UART通道0、通道1和通道2各有1个发送缓冲区寄存器,分别是UTXH0、UTXH1和UTXH
44、2,具体内容见表6.28(p221)。UTXHn中位7:0称为TXDATAn域。, UART接收缓冲区寄存器(接收保持寄存器与接收FIFO寄存器)UART接收缓冲区寄存器,在禁止使用FIFO方式,仅仅把缓冲区的1字节用作接收保持寄存器;在允许使用FIFO方式,缓冲区全部16字节用作接收FIFO寄存器。在表6.22(p218)中,如果UFCONn0=0,禁止使用FIFO,UART接收到的数据保存在接收保持寄存器。如果UFCONn0=1,允许使用FIFO,UART接收到的数据保存在接收FIFO寄存器。UART通道0、通道1和通道2各有1个接收缓冲区寄存器,分别是URXH0、URXH1和URXH2,
45、具体内容见表6.29(p222)。URXHn中位7:0称为RXDATAn域。, UART波特率分频寄存器UART的3个通道各有1个波特率分频寄存器,分别是UBRDIV0、UBRDIV1和UBRDIV2,用于确定每个通道的发送/接收波特率,具体含义见表6.30(p222)。,6.4.4 UART与RS-232C接口连接举例 RS-232C接口简介RS-232C接口简称RS-232C。RS-232C标准是由美国EIA(电子工业联合会)与BELL公司共同开发并于1969年公布的一个串行通信协议。这个协议适合于数据传输速率比较低的场合。协议规定了信号线的功能和电气特性等内容。RS-232C接口目前广泛
46、地用于PC机、嵌入式系统和外部设备之间短距离、低速度的通信中。,协议规定了TxD(Transmitted Data,发送数据)和RxD(Received Data,接收数据)数据信号线逻辑0的电平为+5V+15V,逻辑1的电平为-5V-15V,即使用负逻辑表示。, UART与RS-232C连接举例S3C2410A的 UART0与MAX3232、MAX3232与DB-9连接见图6.30(p224)。, UART编程举例对于图6.30,UART初始化、读UART、写UART等程序部分代码见例6.5。 程序中开始部分定义了UART特殊功能寄存器的地址和寄存器中的一些位(或域)。例6.5中对于设置GP
47、IO端口和中断处理,没有列出全部程序,重点是对UART的编程。 【例6.5】S3C2410A UART通道0、1、2初始化,等待发送移位器空,查询方式得到一个字符和发送一字节的程序。(见参考书p224),6.4.6 UART与红外收发器连接举例 红外通信概述红外通信以红外线作为信息的载体进行数据传输,适合于短距离、点对点、直线式数据传输。红外通信技术在嵌入式系统有着比较广泛的应用。红外通信利用波长850nm900nm之间的红外线作为信息的载体进行通信。红外通信技术将二进制数调制成脉冲序列,驱动红外线发射管向外发射红外光;而接收端则将收到的红外光脉冲信号转换成电信号,再进行放大、滤波、解调后还原
48、成二进制数。,典型的红外数据传输模块由4部分组成:接口电路、编/解码器、发送器和接收器。S3C2410A UART接口电路中包含了编/解码器,见图6.22图6.25,实现了信号的调制和解调。红外发送和接收器可以做成一个器件,简称红外收发器。红外通信按发送速率可以分为SIR(Serial Infra Red)、MIR(Medium Infra Red)、FIR(Fast Infra Red)和VFIR(Vary Fast Infra Red)方式。其中SIR方式通信速率较低,最高速率为115.2Kbps,支持异步、半双工方式,通常依托UART接口。其他三种方式传输速率较高。,IrDA1.0是一个
49、红外通信协议,IrDA(Infrared Data Association,红外数据协会)协议规定了红外传输的距离为1m,速率为9.6115.2Kbps,响应角度为15,响应时间为10ms等内容。, UART与红外收发器的连接S3C2410A UART2与红外收发器的连接见图6.31(p228)。 支持红外方式的UART编程举例对于图6.31,例6.6给出了对应的初始化、发送一字节和接收一字节的程序片段。由于采用半双工方式,数据的收、发之间加了一定间隔的延时。,【例6.6】支持红外方式的UART编程举例。 初始化UART 发送一字节程序 接收一字节程序 (见参考书p228),6.5 ADC与触摸屏接口基础知识,