7嵌入式系统设计与开发部件工作原理与开发实例课件_第1页
7嵌入式系统设计与开发部件工作原理与开发实例课件_第2页
7嵌入式系统设计与开发部件工作原理与开发实例课件_第3页
7嵌入式系统设计与开发部件工作原理与开发实例课件_第4页
7嵌入式系统设计与开发部件工作原理与开发实例课件_第5页
已阅读5页,还剩221页未读 继续免费阅读

下载本文档

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

文档简介

1、7嵌入式系统设计与开发部件工作原理与开发实例,嵌入式系统设计与开发第7章 部件工作原理与开发实例,7嵌入式系统设计与开发部件工作原理与开发实例,本章提要,7.1 Flash存储器 7.2 SDRAM存储器 7.3 通用I/O接口 7.4 串行通信接口 7.5 中断控制器与键盘 7.6 定时器 7.7 LCD控制器 7.8 I2C总线接口,7嵌入式系统设计与开发部件工作原理与开发实例,7.1 Flash 存储器,S3C44B0X自身不具有ROM,因此必须外接ROM器件来存储掉电后仍需要保存的代码和数据。闪速存储器(flash memory)具有非易失性,并且可轻易擦写。 Flash ROM采用标

2、准总线接口与处理器交互,读取不需要任何特殊的代码,但需要首先在硬件上设定OMl0和大/小端,以便使处理器知道Flash ROM的数据长度和位序。 作为代码存储器,Flash ROM映射在处理器的Bank0地址空间(从系统地址0 x00000000开始)。系统上电复位时,处理器就自动从0 x00000000地址处开始取得指令运行,因此Flash ROM中要存放系统启动代码,这些代码必须在系统上电时完成一系列初始化的工作。经过这些初始化,系统才可以正确启动并开始工作。,7.1.1 概述,7嵌入式系统设计与开发部件工作原理与开发实例,7.1.2 存储器初始化,初始化存储器系统的编程对象是系统的存储器

3、控制器。存储器 控制器并不是ARM内核的一部分,不同的系统其设计不尽相 同,所以应该针对具体要求来完成这部分的程序设计。 1.存储器类型和时序配置 通常Flash和SRAM同属于静态存储器类型,可以合用同一 个存储器端口,而DRAM因为动态刷新和地址线复用等特性, 通常配有专用的存储器端口。 因为一般系统运行的速度瓶颈都在于存储器访问,所以存 储器访问时序应尽可能地快,但同时又要考虑由此带来的稳定 性问题,所以只有根据具体选定的芯片,进行多次的测试之 后,才能确定最佳的时序配置。,7嵌入式系统设计与开发部件工作原理与开发实例,2. 存储器地址分布 一种典型的情况是启动ROM的地址重映射(rem

4、ap)。 当一个系统上电后程序将自动从0地址处开始执行,因此在系统的初始状态,必须保证在0地址处存在正确的代码,即要求0地址开始处的存储器是非易失性的ROM或Flash等。但是因为ROM或Flash的访问速度相对较慢,每次中断发生后都要从读取ROM或Flash上面的向量表开始,影响了中断响应速度。因此有的系统便提供一种灵活的地址重映射方法,可以把0地址重新映射到RAM中去。在这种地址映射的变化过程当中,程序员需要仔细考虑的是程序的执行流程而不能被这种变化所打断。,7嵌入式系统设计与开发部件工作原理与开发实例,系统上电后从Flash内的0地址开始执行,启动代码位于地址0 x100开始的空间,当执

5、行到地址0 x200时,完成了一次地址的重映射,把原来0开始的地址空间由Flash转给了RAM。接下去执行的指令(这里为简化起见,忽略流水线指令预取的模型)将来自从0 x204开始的RAM空间。如果预先没有对RAM内容进行正确地设置,则里面的数据都是随机的,这样处理器在执行完0 x200地址处的指令后,再往下取指执行就会出错。解决的方法就是要使RAM在使用之前准备好正确的内容,包括开头的向量表部分。,7嵌入式系统设计与开发部件工作原理与开发实例,启动ROM地址重映射对程序执行流程的影响,7嵌入式系统设计与开发部件工作原理与开发实例,7.1.3 Flash 的调试和程序固化,1.Flash调试

6、当由于硬件资源限制,或者需要观察应用程序在实际硬件环境中运行的情况时,可以把在RAM调试通过的应用程序Bin代码文件烧写到Flash 芯片中进行调试。烧写到Flash芯片的程序运行不能得到正确结果或看要观察程序在Flash中的运行情况,这些都需要进行Flash调试工作。,7嵌入式系统设计与开发部件工作原理与开发实例,程序在Flash中调试与在RAM中调试工程配置不同: 1)调试选项中不需要执行脚本文件,该工作在启动 文件中完成,需要将连接后行为选项改为无。 2)调试过程也有所不同,连接仿真器后,无需再执 行下载程序操作,如果要从启动程序的入口开始 调试程序,必须先执行复位命令,此时程序将停 在

7、零地址处。,7嵌入式系统设计与开发部件工作原理与开发实例,2. 程序固化 在RAM中调试通过的程序与最终固化到Flash中的程序有所区别,用户需要在汇编器的预定义选项中设置编译定义符号,或者直接在初始化文件中增加定义编译项,由启动文件自己完成存储区的重映射而不是由命令脚本完成。 在链接器的链接文件中选择flash.ld,该链接文件和启动文件配合完成最初下载到Flash中的数据段的工作。 完成改动后,重新编译程序。然后使用Elf to Bin工具将.elf文件转换成二进制指令格式文件.bin。再利用Flash Programmer工具将.bin下载到Flash中。,7嵌入式系统设计与开发部件工作

8、原理与开发实例,7.1.4 Flash 器件SST39VF160的应用,1.SST39VFl60介绍 SST39VF160是由SST公司推出的容量为1MB16倍的CMOS多用途Flash ROM。,7嵌入式系统设计与开发部件工作原理与开发实例,SST39VF160的引脚分布图,7嵌入式系统设计与开发部件工作原理与开发实例,SST39VFl60引脚功能描述,7嵌入式系统设计与开发部件工作原理与开发实例,(1)读操作 SST39VFl60的读操作是由CE和OE信号线控制的。当两者都为低时,处理器就可以从SST39VFl60的输出口读取数据。 CE是SST39VFl60的片选线,当CE为高,芯片未被

9、选中。OE是输出使能信号线。当CE或OE中某一个为高时,SST39VFl60的数据线为高阻态。,7嵌入式系统设计与开发部件工作原理与开发实例,SST39VFl60读操作时序图,7嵌入式系统设计与开发部件工作原理与开发实例,读时序参数,7嵌入式系统设计与开发部件工作原理与开发实例,(2)字写入操作 SST39VFl60的写操作主要是以一个字接一个字的方式进行写入的。在写入之前,扇区中如果有数据,则必须首先进行充分地擦除。写操作分3步进行:第1步,送出“软件数据保护”的3字节;第2步,送出地址和数据;第3步,内部写入处理阶段,这个阶段在第4个WE或CE的上升沿时被初始化。被初始化后,内部写入处理将

10、在20s时间内完成。在内部写入阶段,任何指令都将被忽略。,7嵌入式系统设计与开发部件工作原理与开发实例,SST39VF160的字写入流程图,7嵌入式系统设计与开发部件工作原理与开发实例,通过 控制的字写入时序图,7嵌入式系统设计与开发部件工作原理与开发实例,通过 控制的字写入时序图,7嵌入式系统设计与开发部件工作原理与开发实例,(3)整片擦除操作 扇区或块擦除操作允许SST39VFl60以一个扇区接一个扇区,或一个块接一个块地进行擦除。扇区或块的地址在WE的第6个下降沿处锁存,指令字节(30h或50h)在的第6个上升沿处锁存,之后,开始内部擦除操作。可以采用Data Polling bit或T

11、oggle bit的方法来判定内部擦除是否结束。 SST39VFl60还提供一个整片擦除的功能,允许使用者一次性快速擦除整个存储器(存储阵列每个单位都为1)。整片擦除同样通过执行6字节的指令序列来进行,6字节指令序列中包括片擦除指令(10h)和字节序列最后的地址5555h。,7嵌入式系统设计与开发部件工作原理与开发实例,SST39VF160的擦除操作,7嵌入式系统设计与开发部件工作原理与开发实例,2. 应用 (1)ST39VF160的擦除 SST39VF160具有3种擦除方式:整片擦除、 扇区擦除和块擦除。 扇区擦除子程序的主体: void SST39VF160_SectorErase(INT

12、32U SAaddr) Writeflash(0 x5555,0 xAA); Writeflash(0 x2AAA,0 x55); Writeflash(0 x5555,0 x80); Writeflash(0 x5555,0 xAA); Writeflash(0 x2AAA,0 x55); Writeflash(SAaddr,0 x30); Waitfor_endofprg(); ,7嵌入式系统设计与开发部件工作原理与开发实例,(2)ST39VF160的写入 整片擦除之后,就能够在Flash ROM的任意地址中 进行写入操作了。 写入子程序的主体 : Int SST39VF160_WordP

13、rog(unsigned long addr,unsigned int dat) Writeflash(0 x5555,0 xAA); Writeflash(0 x2AAA,0 x55); Writeflash(0 x5555,0 xA0); Writeflash(addr,dat); Waitfor_endofprg(); ,7嵌入式系统设计与开发部件工作原理与开发实例,7.2 SDRAM存储器,7.2.1 概述 随机存取存储器RAM(random access memory)是易失性的存储器,在掉电以后数据立即消失。 与ROM器件不同的是,它的随机读写速度非常快,写入数据之前也不需要进行擦

14、除 。 常用的RAM分为SRAM(静态RAM)和DRAM(动态RAM)两种类型 。 S3C44B0X芯片本身提供了与DRAM和SDRAM进行直接接口的解决方案,因此,不需要通过编程来实现它们所需的接口时序,而只需对与存储器控制器相关的寄存器进行适当配置。这个配置工作一般在启动代码中完成,系统在每次上电后但还未开始执行C语言程序之前,配置好SDRAM的特性参数,然后再进入C程序运行。,7嵌入式系统设计与开发部件工作原理与开发实例,7.2.2 SRAM器件的结构特点 一个SRAM中的位单元通常由46只晶体管组成,当这个位单元被赋予0或1的状态之后,它会保持这个状态直到下次被赋予新的状态,或者断电之

15、后才会更改或消失。SRAM的速度相对比较快,而且比较省电,但是存储1位的信息需要46只晶体管,制造成本较高。,7嵌入式系统设计与开发部件工作原理与开发实例,7.2.3 DRAM器件的结构特点 DRAM与SRAM不同,存储一个位的信息只需要1只晶体管,但是需要周期性地充电,才能使保存的信息不消失。 DRAM的一些资料显示,内存至少要每64ms刷新一次,这也就意味着内存有1%的时间要用来刷新。因为读取操作会破坏内存中的电荷,因此,内存不但要每64 ms刷新一次,而且每次读操作之后还要刷新一次,这样就增加了存取操作的周期。 DRAM的存取速度没有SRAM快,但是DRAM更容易做成大容量的RAM。一般

16、的嵌入式系统中,主存储器采用DRAM,而快速存储器(cache memory)则采用SRAM。DRAM的优点是制造成本比SRAM低得多。,7嵌入式系统设计与开发部件工作原理与开发实例,DRAM结构中相对于SRAM多了两个部分:一个是由 (行地址脉冲选通器)引脚控制的行地址锁存器(row address latch),另一个是由(列地址脉冲选通器)引脚控制的列地址锁存器(column address latch)。,7嵌入式系统设计与开发部件工作原理与开发实例,DRAM的存储位单元结构,7嵌入式系统设计与开发部件工作原理与开发实例,DRAM中存储单元的内部结构,7嵌入式系统设计与开发部件工作原理

17、与开发实例,DRAM读取过程按以下步骤进行: 1)处理器通过地址总线将行地址传输到DRAM的地址引脚。 2)引脚被激活,这样,行地址被传送到行地址锁存器中。 3)行地址解码器根据接收到的数据选择相应的行。 4)引脚被确定不被激活,所以DRAM知道它不会进行写入操 作。 5)处理器通过地址总线将列地址传输到DRAM的地址引脚。 6)引脚被激活,这样列地址被传送到列地址锁存器中。 7)引脚同样还具有引脚的功能,此时Dout引脚知道需要向外 输出数据。 8)和都失效,这样就可以进行下一个周期的数据操作了。,7嵌入式系统设计与开发部件工作原理与开发实例,7.2.4 SDRAM器件的构成原理和应用特点,

18、SDRAM的存储位单元的基本原理同DRAM基本一样,但是这些存储位单元的组织和控制与DRAM却有很大的差别。 SDRAM是多Bank结构,大大提高了存储器的访问速度。 为了实现这个功能,SDRAM需要增加对多个Bank的管理,实现控制其中的Bank进行预充电。在一个具有两个以上Bank的SDRAM中,一般会多一根叫做BAn的引脚,用来实现在多个Bank之间的选择。,7嵌入式系统设计与开发部件工作原理与开发实例,7.2.5 SDRAM器件HY57V641620HG简介,HY57V641620HG 是一个容量为64Mb的同步动态随机存储器,能很好地适应主存储器的高密度和高带宽的数据传输性能。其存储

19、空间组织方式是:1M16bit4Bank。 HY57V641620HG提供的完全动态操作涉及时钟的上升沿,所有的输入和输出都是在时钟的上升沿触发的。数据通路被做成内部装管道线以获得非常高的带宽。全部输入和输出电压电平都与LVTTL相兼容。,7嵌入式系统设计与开发部件工作原理与开发实例,HY57V641620HG管脚图,7嵌入式系统设计与开发部件工作原理与开发实例,主要特性: 单一3.30.3V电源。 更新和自我更新。 全部引脚都与LVTTL接口相兼容。 4096更新循环/64ms。 针距0.88毫米的JEDEC标准,400密耳54引脚针薄型小尺寸封装。 可编程序的脉冲长度和类型:-1、2、4、

20、8或整页连续脉冲,-1、2、4和8为插入式脉冲。 所有输入和输出都是正边沿触发的。 可编程的CAS编码潜伏23周期。 具有通过UDQM或LDQM来隐藏数据的功能。 4个Bank运行。,7嵌入式系统设计与开发部件工作原理与开发实例,HY57V641620HG引脚描述,7嵌入式系统设计与开发部件工作原理与开发实例,HY57V641620HG引脚描述,7嵌入式系统设计与开发部件工作原理与开发实例,7.2.6 SDRAM应用编程,由于S3C44B0X内部的存储控制器部件提供了专门与SDRAM的器件的控制信号线,因此,对SDRAM的读和写都不需要特殊编程操作,只需要根据所选择的存储器的特性,在系统初始化

21、时对S3C44B0X相关的寄存器进行设置就可以了。,7嵌入式系统设计与开发部件工作原理与开发实例,实验参考程序 /* *名称: sRWramtest *功能: 使用汇编语言读/写已初始化的RAM区 */ sRWramtest: LDR r2,=0 x0C010000 /*字长读*/ LDR r3,=0 x55AA55AA STR r3,r2 /*字长写*/ LDR r2,=0 x0C010004 LDRH r3,r2 /*半字读*/ LDR r3,=0 x55AA STRH r3,r2,#2 /*半字写*/ STRH r3,r2 LDR r2,=0 x0C010008 LDRB r3,=0 x

22、AA /*字节读*/ STRB r3,r2,#1 /*字节写*/ LDRB r3,=0 x55 STRB r3,r2,#1 LDRB r3,=0 xAA STRB r3,r2,#1 LDRB r3,=0 x55 STRB r3,r2,7嵌入式系统设计与开发部件工作原理与开发实例,/* *名称: cRWramtest *功能: 使用高级语言读/写RAM区 */ /RAM 访问示例 #define RWram (*(unsigned long * )0 x0C10200) void cRWramtest(void) unsigned long *ptr=0 x0C010200; /R/W RAM

23、unsigned short *ptrh=0 x0C010200; /R/W RAM unsigned char *ptrb=0 x0C010200; /R/W RAM char i; unsigned char tmpb; unsigned short tmph; unsigned long tmpw; *ptr=0 xAA55AA; tmpw=*ptr; /字长读 *ptrh=tmph+1; /字长写 tmph=*ptrh; /半字读 *ptrh=tmph+1; /半字写 tmpb=*ptrb; /字节读 *ptrb=tmpb+1 /字节写 ,7嵌入式系统设计与开发部件工作原理与开发实例,

24、7.3 通用I/O接口,7.3.1 S3C44B0X的I/O端口 S3C44B0X具有71个多功能I/O,这些I/O的应用 是S3C44B0X处理器的基础应用,它们分为7组I/O 端口: 2个9位I/O端口(端口E和F)。 2个8位I/O端口(端口D和G)。 1个16位I/O端口(端口C)。 1个10位输出端口(端口A)。 1个11位输出端口(端口B)。,7嵌入式系统设计与开发部件工作原理与开发实例,端口A引脚定义,7嵌入式系统设计与开发部件工作原理与开发实例,端口B引脚定义,7嵌入式系统设计与开发部件工作原理与开发实例,端口C引脚定义,7嵌入式系统设计与开发部件工作原理与开发实例,端口D引脚

25、定义,7嵌入式系统设计与开发部件工作原理与开发实例,端口E引脚定义,7嵌入式系统设计与开发部件工作原理与开发实例,端口F引脚定义,7嵌入式系统设计与开发部件工作原理与开发实例,端口G引脚定义,7嵌入式系统设计与开发部件工作原理与开发实例,7.3.2 S3C44B0X芯片与端口相关的寄存器,(1)端口控制寄存器(PCONAG) (2)端口数据寄存器(PDATAG) (3)端口上拉寄存器(PUPCG) (4)外部中断控制寄存器(EXTINT),7嵌入式系统设计与开发部件工作原理与开发实例,PF端口的相关寄存器信息,7嵌入式系统设计与开发部件工作原理与开发实例,PCONF的位定义,7嵌入式系统设计与

26、开发部件工作原理与开发实例,PDATF的位定义,PUPF的位定义,7嵌入式系统设计与开发部件工作原理与开发实例,7.3.3 应用实例,发光二极管控制电路,7嵌入式系统设计与开发部件工作原理与开发实例,发光二极管LEDl和LED2的正极与芯片S3C44B0X的引脚47即VDD33连接,VDD33可以输出3.3 V电压,负极通过限流电阻R95、R96分别与芯片S3C44B0X的引脚23(nGCS4)、引脚24(nGCS5)连接,这两个引脚属于端口B,已经配置为输出口。通过向PDATB寄存器中相应的位写入0或1,可以使引脚23、24输出低电平或高电平。当引脚23、24输出低电平时,LED点亮;当引脚

27、23、24输出高电平时,LED熄灭。,7嵌入式系统设计与开发部件工作原理与开发实例,/*- function code-*/ /* * name:Led_Test * func:leds test funciton */ void Led_Test() /* 1 on - 2 on - all on - 2 off - 1 off */ leds_off(); Delay(1000); led1_on(); Delay(1000); led1_off(); led2_on(); Delay(1000); leds_on(); Delay(1000); led2_off(); Delay(100

28、0); led1_off(); ,7嵌入式系统设计与开发部件工作原理与开发实例,/* * name:leds_on * func:all leds on */ void leds_on() Led_Display(0 x3); /* * name:leds_off * func:all leds off */ void leds_off() Led_Display(0 x0); ,7嵌入式系统设计与开发部件工作原理与开发实例,/* * name:led1_on * func:led 1 on */ void led1_on() led_state = led_state | 0 x1; Led

29、_Display(led_state); /* * name:led1_off * func:led 1 off */ void led1_off() led_state = led_state ,7嵌入式系统设计与开发部件工作原理与开发实例,/* * name:Led_Display * func:Led Display control function * para:LedStatus - leds status */ void Led_Display(int LedStatus) led_state = LedStatus; if(LedStatus ,7嵌入式系统设计与开发部件工作原理

30、与开发实例,7.4 串行通信接口,7.4.1 概述 串行通信接口电路一般由可编程的串行接口芯片、波特率发生器、EIA与TTL电平转换器以及地址译码电路组成。采用的通信协议有两类:异步协议和同步协议。随着大规模集成电路技术的发展,通用的同步UART和异步UART接口芯片种类越来越多,采用这些芯片作为串行通信接口电路的核心芯片,会使电路结构比较简单,从而减少成本和体积,降低了设计开发的风险和难度。,7嵌入式系统设计与开发部件工作原理与开发实例,UART(universal asynchronous receiver/transmitter)通用异步收发器是用于计算机与串行设备的接口。它提供了RS-

31、232C数据终端设备接口,这样计算机就可以和调制解调器或其他使用RS-232C接口的串行设备通信了。S3C44B0X内部集成的UART单元提供两个独立的异步串行I/O端口,也就是通常所说的串口。在这里,串口不仅可以用来与外部设备进行数据通信,还可以用来观察系统的运行状况。作为接口的一部分,UART还提供以下功能:将由计算机内部传送过来的并行数据转换为输出的串行数据流;将计算机外部传来的串行数据转换为字节,供给计算机内部使用并行数据的器件;在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验;在输出数据流中加入启/停标记,并从接收数据流中删除启/停标记;处理由键盘或鼠标发出的中

32、断信号(键盘和鼠标也是串行设备);处理计算机与外部串行设备的同步管理问题。,7嵌入式系统设计与开发部件工作原理与开发实例,7.4.2 S3C44B0X的串行通信单元,S3C44B0X的串行通信(UART)单元提供两个独立的异步串行I/O端口,每个都可以在中断和DMA两种模式下工作。它们支持的最高波特率为115.2kb/s。每个UART通道包含2个16位FIFO分别提供给接收和发送。S3C44B0X的UART可以进行以下参数的设置:可编程的波特率、红外收/发模式、1或2个停止位、5位/6位/7位/8位数据宽度和奇偶校验。 每个UART模块包含以下几个部件:波特率发生器、发送器、接收器和控制单元。

33、波特率发生器以MCLK作为时钟源。发送器和接收器包含16字节的FIFO和移位寄存器。要被发送的数据首先被写入FIFO,然后被复制到发送移位寄存器中,最后从数据输出端口(TxDn)依次被移位输出。被接收的数据也同样从数据接收端口(RxDn)依次被移位输入到移位寄存器,然后被复制到FIFO中。,7嵌入式系统设计与开发部件工作原理与开发实例,UART的特性如下: RxD0、TxD0、RxDl和TxDl可以以中断模式或DMA模式工作。 UART通道0符合IRDA 1.0要求,且具有16字节的FIFO。 UART通道1符合IRDA 1.0要求,且具有16字节的FIFO。 支持收发时的握手模式。,7嵌入式

34、系统设计与开发部件工作原理与开发实例,7.4.3 UART操作,1. 数据发送 数据发送的帧格式是可编程的,包括一个起始位、58个 数据位、一个可选的奇偶位和12个停止位,这些都可以通过 线控制寄存器(UCONn)来设置。发送器也能够产生发送中 止条件。中止条件迫使串口输出保持在逻辑0状态,这种状态 保持超过一个传输帧的时间长度。通常在一帧传输数据完整地 传输完之后,再通过这个全0状态将中止信号发送给对方。中 止信号发送之后,传送数据将持续地放入到输出FIFO中(在不 使用FIFO模式下,将被放入输出保持寄存器)。,7嵌入式系统设计与开发部件工作原理与开发实例,2. 数据接收 与发送一样,接收

35、的数据帧格式同样是可编程的,包括一 个起始位、58个数据位、一个可选的奇偶校验位和12个停止 位,这些都可以通过线控制寄存器来设置。接收器还可以检测 到溢出错误、奇偶校验错误、帧错误和中止状况,每种情况下 都会将一个错误标志置位,检测到的各种错误描述如下: 溢出错误表示新的数据已经覆盖了旧的数据,因为旧的数据没有及时被读入。 奇偶校验错误表示接收器检测到了意料之外的奇偶校验结果。 帧错误表示接收到的数据没有有效的停止位。 中止状况表示RxDn的输入被保持为0状态的时间超过了一个帧传输的时间。 在FIFO模式下,接收FIFO不应为空,但当接收器在3个字时间内都没有接收到任何数据时,就认为发生了接

36、收超时状况。,7嵌入式系统设计与开发部件工作原理与开发实例,3.自动流控制 S3C44B0X的UART通过nRTS和nCTS信号支持自动流控 制(AFC),在这种情况下必须是UART与UART连接。如果 用户将UART连接到调制解调器,就应该在UMCONn寄存器中 禁止自动流控制位,并通过软件控制nRTS。在AFC中,nRTS 由接收器的接收情况来控制,nCTS则控制了发送器的工作。 UART发送器在nCTS信号被置1的时候发送FIFO中的数据(在 AFC中,nCTS意味着对方UART的FIFO已经准备好接收数 据)。在UART接收数据时,如果它的接收FIFO中还有多于2 个字节的剩余空间就必

37、须将nRTS置1,以便告诉对方“接收准 备好”;当接收FIFO的剩余空间少于1字节时,必须将nRTS清 0,说明“不能再接收”。,7嵌入式系统设计与开发部件工作原理与开发实例,UART AFC接口,7嵌入式系统设计与开发部件工作原理与开发实例,4.非自动流控制 非自动流控制是指通过软件nRTS和nCTS。 (1)接收操作步骤 1)选择接收模式(中断或BDMA模式)。 2)检查UFSTATn寄存器中接收FIFO计数器的值。如果值小于15,用 户必须设置UMCONn第0位的值为1(即激活nRTS);如果它等于 或大于15,用户必须设置该位的值为0(即失活Nrts)。 3)重复第2)步。 (2)发送

38、操作步骤 1)选择发送模式(中断或BDMA模式)。 2)检查UMSTATn第0位的值,如果为1(nCTS被激活),用户就可以 写数据到输出缓冲区或输出数据到FIFO寄存器中。,7嵌入式系统设计与开发部件工作原理与开发实例,5. 调制解调器接口 如果用户要连接到调制解调器接口,就需要用nRTS、 nCTS、nDSR、nDTR、DCD和nRI信号。在这种情况下,用 户可以使用其他I/O口由软件控制这些信号,因为AFC是不支持 RS-232C接口的。,7嵌入式系统设计与开发部件工作原理与开发实例,6.中断/DMA请求产生器 S3C44B0X的每个UART都有7个状态信号:接收FIFO/缓 冲区数据准

39、备好、发送FIFO/缓冲区空、发送移位寄存器空、 溢出错误、奇偶校验错误、帧错误和中止,所有这些状态都由 对应的UART状态寄存器(UTRSTATn/UERSTATn)中的相应 位来表现。 当接收器要将接收移位寄存器的数据送到接收FIFO,它会 激活接收FIFO满状态信号,如果控制寄存器中的接收模式选为 中断模式,就会引发接收中断。 当发送器从发送FIFO中取出数据送到发送移位寄存器,那 么FIFO空状态信号将会被激活。如果控制寄存器中的发送模式 选为中断模式,就会引发发送中断。 如果接收/发送模式被选为DMA模式,“接收FIFO满”和“发 送FIFO空”状态信号同样可以产生DMA请求信号。,

40、7嵌入式系统设计与开发部件工作原理与开发实例,与FIFO有关的中断,7嵌入式系统设计与开发部件工作原理与开发实例,7. UART错误状态FIFO 除了接收FIFO寄存器之外,UART还具有一个状态 FIFO。状态FIFO中表示在FIFO寄存器中,哪一个数据被毫无 错误地接收。,7嵌入式系统设计与开发部件工作原理与开发实例,UART接收字符示例图,7嵌入式系统设计与开发部件工作原理与开发实例,8. 波特率发生器 每个UART的波特率发生器都为传输提供了串行移位时 钟。波特率发生器的时钟源可以通过S3C44B0X的内部系统时 钟来选择。波特率时钟由通过时钟源的16分频及一个由UART 波特率除数寄

41、存器(UBRDIVn)指定的16位除数决定。 UBRDIVn的值可以按照下式确定: UBRDIVn (取整)(MCLK/(波特率16)-1 除数的范围为12161。 例如,如果波特率为115 200b/s,且系统主频(MCLK)为 64MHz,则UBRDIVn的值为: UBRDIVn=(取整)(4 000 000/(11520016)-1,7嵌入式系统设计与开发部件工作原理与开发实例,9. 回送模式 S3C44B0X的UART提供一个测试模式,即回送模式。在 这种模式下,发送出的数据会立即被接收,这一特性用于校验 运行处理器内部发送和接收通道的功能。这种模式可以通过设 置UART控制寄存器(U

42、CONn)中的回送位来实现。,7嵌入式系统设计与开发部件工作原理与开发实例,10. 红外通信模式 S3C44B0X的UART模块支持红外线(IR)发送和接收, 可以通过设置UART控制寄存器(ULCONn)中的红外模式位 来选择这一模式。 在IR发送模式下,发送阶段是通过正常串行发送占空比 3/16的脉冲波进行调制(当传送的数据位为0值);在IR接收 模式下,接收必须通过检测3/16脉冲波来识别0值。,7嵌入式系统设计与开发部件工作原理与开发实例,通常情况下传输帧的时序,7嵌入式系统设计与开发部件工作原理与开发实例,(a)红外线接收模式时序图,(b)红外线发送模式时序图,7嵌入式系统设计与开发

43、部件工作原理与开发实例,7.4.4 UART寄存器,寄存器名称中的n表示0或1,例如ULCONn对应 串口0为ULCON0,对应串口1为ULCONl。 1. UART线控制寄存器 线控制寄存器(ULCONn),它的作用是用来规定传输帧的格式。,7嵌入式系统设计与开发部件工作原理与开发实例,线控制寄存器位定义,7嵌入式系统设计与开发部件工作原理与开发实例,2. UART控制寄存器,UART控制寄存器位定义,7嵌入式系统设计与开发部件工作原理与开发实例,UART控制寄存器位定义,7嵌入式系统设计与开发部件工作原理与开发实例,3. FIFO控制寄存器,FIFO控制寄存器位定义,7嵌入式系统设计与开发

44、部件工作原理与开发实例,4. UART的Modem控制寄存器,Modem控制寄存器位定义,7嵌入式系统设计与开发部件工作原理与开发实例,5. UART发送/接收状态寄存器,UART发送/接收状态寄存器位定义,7嵌入式系统设计与开发部件工作原理与开发实例,6. UART错误状态寄存器,UART错误状态寄存器位定义,7嵌入式系统设计与开发部件工作原理与开发实例,7. UART的FIFO状态寄存器,FIFO状态寄存器位定义,7嵌入式系统设计与开发部件工作原理与开发实例,8. UART的Modem状态寄存器,Modem状态寄存器位定义,7嵌入式系统设计与开发部件工作原理与开发实例,9. UART发送/

45、接收保持寄存器,UART发送保持寄存器位定义,UART接收保持寄存器位定义,7嵌入式系统设计与开发部件工作原理与开发实例,10. UART波特率除数寄存器,UART波特率除数寄存器位定义,7嵌入式系统设计与开发部件工作原理与开发实例,7.4.5 串行通信的应用与编程,1.电路接口和I/O口设置,串口电路,7嵌入式系统设计与开发部件工作原理与开发实例,2. 串行通信函数库函数 (1)初始化程序 static int whichUart=0 void Uart_Init(int mclk,int baud) int i; if(mclk=0) mclk=MCLK; rUFCON0=0 x0; /

46、FIFO disable rUFCON1=0 x0; rUMCON0=0 x0; rUMCON1=0 x0; /UART0 rULCON0=0 x3; /Normal,no parity,1 stop,8bit rUCON0=0 x245; /rx=edge,tx=level,disable timeout int.,enable rx error int.,normal, / interrupt or polling rUBRDIV0=(int)(mclk/16./baud+0.5)-1); /UART1 rULCON1=0 x3; rUCON1=0 x245; rUBRDIV1=(int)

47、(mclk/16./baud+0.5-1); for(i=0;i100;i+); ,7嵌入式系统设计与开发部件工作原理与开发实例,(2)收字符函数 char Uart_Getch(void) if(whichUart= =0) while(!(rUTRSTAT0 ,7嵌入式系统设计与开发部件工作原理与开发实例,(3)送字符函数 void Uart_SendByte(int data) if(whichUart= =0) if(data= =n) while(!(rUTRSTAT0 ,7嵌入式系统设计与开发部件工作原理与开发实例,else if(data= =n) while(!(rUTRSTA

48、T 1 ,7嵌入式系统设计与开发部件工作原理与开发实例,7.5 中断控制器与键盘,7.5.1 传统键盘介绍 键盘的结构通常有两种形式:线性键盘和矩阵键盘。,7嵌入式系统设计与开发部件工作原理与开发实例,线性键盘由若干个独立的按键组成,每个按键的一端与微机的一个I/O口相连。有多少个键就要有多少根连线与微机的I/O口相连,因此,只适用于按键少的场合。,简单键盘电路,7嵌入式系统设计与开发部件工作原理与开发实例,矩阵键盘的按键按N行M列排列,每个按键占据行列的一个交点,需要的I/O口数目是N+M,容许的最大按键数是NM。显然,矩阵键盘可以减少与微机接口的连线数,简化结构,是一般微机常用的键盘结构。

49、根据矩阵键盘的识键和译键方法的不同,矩阵键盘又可以分为非编码键盘和编码键盘两种。 1. 非编码键盘 非编码键盘主要用软件的方法识键和译键。根据扫描方法的不同,可以分为行扫描法、列扫描法和反转法3种。 2. 编码键盘 编码键盘主要用硬件来实现键的扫描和识别,通常使用8279专用接口芯片,在硬件上要求较高。,7嵌入式系统设计与开发部件工作原理与开发实例,矩阵键盘电路,7嵌入式系统设计与开发部件工作原理与开发实例,7.5.2 中断控制器概述,S3C44B0X的中断控制器可接收来自30个中断源的中断请求。这些中断源来自DMA、UART、SIO等芯片内部外围或接口芯片的外部引脚。在这些中断源中,有4个外

50、部中断(EINT4/5/6/7)是逻辑“或”的关系,它们共用一条中断请求线。UART0和UART1的错误中断也是逻辑“或”的关系。 中断控制器的任务是在片内外围和外部中断源组成的多重中断发生时,经过优先级判断选择其中一个中断,通过FIQ或IRQ向ARM7TDMI内核发出FIQ或IRQ中断请求。 实际上最初ARM7TDMI内核只有FIQ(快速中断请求)和IRQ(通用中断请求)两种中断,其他中断都是各芯片厂家在设计芯片时定义的,这些中断根据中断的优先级高低来进行处理。 当多重中断源请求中断时,硬件优先级逻辑会判断哪一个中断将被执行,同时,硬件逻辑自动执行由0 x18(或0 xlC)地址到各个中断源

51、向量地址的跳转指令,然后再由中断源向量进入相应的中断处理程序。和原来的软件实现方式相比,这种方法可以显著地缩短中断响应时间。,7嵌入式系统设计与开发部件工作原理与开发实例,S3C44BOX的中断源及其向量地址,7嵌入式系统设计与开发部件工作原理与开发实例,S3C44BOX的中断源及其向量地址,7嵌入式系统设计与开发部件工作原理与开发实例,中断控制器一般是通过对中断控制器的特殊功能寄存器的设置来实现相应的中断功能,包括是否使能中断,选择什么样的中断方式,是否中断挂起,是否屏蔽哪个中断以及中断优先级的设定等。 1.中断控制寄存器INTCON INTCON寄存器的位0为FIQ中断使能位,位1为IRQ

52、中断使能位,位2选择IRQ中断为矢量中断模式或是普通模式。,7嵌入式系统设计与开发部件工作原理与开发实例,中断控制寄存器INTCON,7嵌入式系统设计与开发部件工作原理与开发实例,2.中断挂起寄存器INTPND 中断挂起寄存器INTPND共有26位,每一位对应着一个中断源。当中断请求产生时,相应的位会被设置为1。中断服务程序中必须加入对I_ISPC和F_ISPC写1的操作来清除挂起条件。 如果有几个中断源同时发出中断请求,那么不管它们有没有被屏蔽,其相应的挂起位都会置1。只是优先级寄存器会根据它们的优先级来响应当前优先级最高的中断。,7嵌入式系统设计与开发部件工作原理与开发实例,中断挂起寄存器

53、INTPND,7嵌入式系统设计与开发部件工作原理与开发实例,3.中断模式寄存器INTMOD 中断模式寄存器INTMOD共有26位,每一位对应着一个中断源。当中断源的模式位设置为1时,对应的中断会由ARM7TDMI内核以FIQ模式来处理;相反,当模式位设置为0时,中断会以IRQ模式来处理。,7嵌入式系统设计与开发部件工作原理与开发实例,中断模式寄存器INTMOD,7嵌入式系统设计与开发部件工作原理与开发实例,4.中断屏蔽寄存器INTMSK 在中断屏蔽寄存器INTMSK中,除了全局屏蔽位外,其余的26位都分别对应一个中断源。当屏蔽位为1时,对应的中断被屏蔽;当屏蔽位为0时,该中断可正常执行。如果全

54、局屏蔽位被设置为1,则所有的中断都不执行。 如果使用了矢量中断模式,则在中断服务程序中改变了中断屏蔽寄存器INTMSK的值,这时并不能屏蔽相应的中断过程,因为该中断在中断屏蔽寄存器之前已被中断挂起寄存器INTPND锁定了。要解决这个问题,就必须在改变中断屏蔽寄存器后,再清除相应的挂起位(INTPND)。,7嵌入式系统设计与开发部件工作原理与开发实例,中断屏蔽寄存器INTMSK,7嵌入式系统设计与开发部件工作原理与开发实例,5.IRQ向量模式相关寄存器 S3C44B0X中的优先级产生模块包含5个单元:1个主单元和4个从单元。每个从优先级产生单元管理6个中断源;主优先级产生单元管理4个从单元和2个

55、中断源。 每个从单元有4个可编程优先级中断源(sGn)和2个固定优先级中断源(kn)。这4个可编程优先级中断源的优先级是由I_PSLV寄存器决定的。另外2个固定优先级中断源在6个中断源中的优先级最低。 主单元可通过I_PMST寄存器来决定4个从单元和2个中断源的优先级。2个中断源INT_RTC和INT_ADC在26个中断源中的优先级最低。 如果几个中断源同时发出中断请求,那么这时1_ISPR寄存器可显示当前具有最高优先级的中断源。,7嵌入式系统设计与开发部件工作原理与开发实例,IRQ向量模式相关寄存器,7嵌入式系统设计与开发部件工作原理与开发实例,6. IRQ从群优先级寄存器I_PSLV IR

56、Q从群优先级寄存器I_PSLV,其决定了在每个从群中4个中断源的中断优先级。,IRQ从群优先级寄存器I_PSLV,7嵌入式系统设计与开发部件工作原理与开发实例,7. IRQ主群优先级寄存器I_PMST IRQ主群优先级寄存器I_PMST,其决定了4个主群的中断优先级。,IRQ主群优先级寄存器I_PMST,7嵌入式系统设计与开发部件工作原理与开发实例,8. 当前IRQ从群优先级寄存器I_CSLV 当前IRQ从群优先级寄存器I_CSLV,其表示了在从群中各中断源当前的优先级状态。如果应用轮询模式,I_CSLV可能不同于I_PSLV。,当前IRQ从群优先级寄存器I_CSLV,7嵌入式系统设计与开发部

57、件工作原理与开发实例,9. 当前IRQ主群优先级寄存器I_CMST 当前IRQ主群优先级寄存器I_CMST,其表示各主群当前的优先级状态。,当前IRQ主群优先级寄存器I_CMST,7嵌入式系统设计与开发部件工作原理与开发实例,10. IRQ中断服务挂起寄存器I_ISPR IRQ中断服务挂起寄存器I_ISPR,其表示当前正在被响应的中断。虽然有多个中断挂起位被打开,但只有1位发生作用。,7嵌入式系统设计与开发部件工作原理与开发实例,IRQ中断服务挂起寄存器I_ISPR,7嵌入式系统设计与开发部件工作原理与开发实例,11. IRQFIQ中断挂起清零寄存器I_ISPCF_ISPC IRQFIQ中断挂

58、起清零寄存器I_ISPCF_ISPC,其主要用来清除中断挂起位INTPND。I_ISPCF_ISPC也表明了相应ISR(中断服务程序)末尾的中断控制器。在ISR的末尾,相应的挂起位必须被清除。 通过对I_ISPCF_ISPC相应位写1来清除中断挂起位INTPND,这一特点减小了清除INTPND的代码大小。相应的INTPND位被I_ISPCF_ISPC自动清除,INTPND寄存器不能直接被清除。,7嵌入式系统设计与开发部件工作原理与开发实例,IRQ/FIQ中断挂起清零寄存器I_ISPC/F_ISPC,7嵌入式系统设计与开发部件工作原理与开发实例,7.5.3 键盘的软硬件实现原理,有些特殊情况下,

59、由于通用的I/O口有限,而又需要大量的按键输入,这就要求一种新的键盘结构,即用尽量少的I/O口实现尽可能多的键盘输入。经过分析,实际上用N+1个I/O口,辅以适当的接口电路,是可以实现NN个按键的。,7嵌入式系统设计与开发部件工作原理与开发实例,1. 硬件实现,键盘接口电路,7嵌入式系统设计与开发部件工作原理与开发实例,2. 工作过程 该键盘是采用中断扫描的方式进行工作,行线选用了4个数据线,列线选用了4个地址线。行线接上拉电阻保持高电平,并通过与门74HC08将输出信号与MCU的中断EXINT1连接,列线接下拉电阻保持低电平。当有键盘按下时,该行线被拉为低电平,使得EXINT1输入也为低电平

60、,MCU产生中断。中断产生后通过对键盘的行和列进行扫描的方法可以计算出是哪个键按下,并跳到相应的键盘处理程序中去。芯片74HC541是通过片选信号nGCS3来选通的,这样可以保证在键盘不使用的情况下MCU读不到行线的输入信息。,7嵌入式系统设计与开发部件工作原理与开发实例,键值及其判断,7嵌入式系统设计与开发部件工作原理与开发实例,键值及其判断,7嵌入式系统设计与开发部件工作原理与开发实例,3. 软件设计,程序流程图,7嵌入式系统设计与开发部件工作原理与开发实例,7.5.4 中断式键盘的应用编程,1键盘控制初始化 /* * name:init_keyboard * func:init keyb

温馨提示

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

评论

0/150

提交评论