版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章
EWARM使用方法与芯片级程序2.1EWARM和ARM芯片级实例
2.2定时器中断与实例二
2.3串口通信与实例三
2.4本章小结
说明:本书所有的实例均是独立可运行的完整实例,为了节省篇幅和不重复介绍相同的代码,本书后续章节的实例均在本章实例一和已介绍的实例的基础上扩充而成,这样既可以大幅度减少篇幅,又不影响程序的完整性。2.1EWARM和ARM芯片级实例
J-LINK仿真器的JTAG接口电压为3.3V,本书使用的三个平台UP-Star、UP-CUP2410和TQ2440的JTAG接口均为
3.3V,所以可以直接相连。
如第1.1节所述,将笔记本电脑的一个USB口通过J-LINK仿真器(及其转接头)与UP-Star实验板(或UP-CUP2410实验箱、TQ2440开发板或其他ARM平台)上的JTAG接头相连接,笔记本电脑的另一个USB口通过USB转串口线与实验板上的串口0相连接,将实验板的电源线连接好,打开实验板电源开关和笔记本电脑,则实验环境与学习平台就建立好了,如图2-1所示。图2-1UP-Star实验硬件环境2.1.1EWARM开发环境和实例一
本节将介绍EWARM集成开发环境的使用方法。下面将演示一个仿真环境下运行的ARM芯片级的程序实例,读者需要具有《ARM原理与C程序设计》一书的基础知识,事实上,这本书也是本书的基础篇。本节的实例工程文件名为ex2_1,实现的功能为将UP-Star实验板上的三个LED灯闪烁点亮。如第1.1节所述安装好EWARM软件,安装EWARMV5.3/V5.4软件是件轻松的事情。EWARM软件的这个版本支持英语和日语,但是选择日语后,启动的是英语工作环境;而选择英语后,启动的却是日语工作环境(在软件启动后,右下角有一个国旗标志,点击后可以改变语言配置。尽管如此,这仍然是一处缺陷)。
选择“开始|所有程序|IARSystems|IAREmbeddedWorkbenchforARM5.30|IAREmbeddedWorkbench”或桌面快捷图标,进入IAREWARM软件工作环境,将弹出的“EmbeddedWorkbenchStartup”对话框关闭后,如图2-2所示。图2-2EWARM开发环境为了清晰地介绍实例ex2_1的创建过程,下面将工作的每一步用“S+数字”表示,例如第5步用S5表示。
S1.创建实例文件夹。
在D:\ZYUCOSII目录下创建子目录ex2_1,再在D:\ZYUCOSII\ex2_1目录下创建两个子目录,即ASM和User,ASM子目录存放所有汇编语言程序文件,而User子目录存放所有C语言程序文件(EWARM还会生成两个子目录,即settings和Debug,其中,Debug目录名可以在EWARM中指定,编译时生成,后面将介绍)。
S2.创建空项目ex2_1并保存。
在图2-2中点击“Project|CreateNewProject…”菜单,弹出如图2-3所示的对话框,选择“Emptyproject”工程模板,点击“OK”按钮,进入图2-4。图2-3创建新工程对话框图2-4输入工程文件名在图2-4中,输入工程文件名ex2_1后,点击“保存”按钮,进入图2-5。
在图2-5中的“Debug”表示新建的工程ex2_1处于调试工作模式下,即编译后的目标文件中包括调试信息和指示符。一般地,新建的工程均应工作在调试模式下,当工程正常工作后,再通过菜单“Project|EditConfigurations…”修改为“Release”发行模式。图2-5中Debug右上角的“*”号表示工作区没有存盘。点击图2-5左上角的全部文件存盘按钮,将工作区保存,弹出如图2-6所示的窗口。图2-5新建的空工程文件ex2_1在图2-6中,输入ex2_1,点击“保存”按钮,将保存工作区。此时,D:\ZYUCOSII\ex2_1目录下的文件如图2-7所示。
由图2-7可见,EWARM自动创建了一个目录settings和四个文件ex2_1.eww、ex2_1.ewp、ex2_1.ewd、ex2_1.dep,这四个文件均是ASCII码文本文件,可以用UltraEdit等软件打开。其中,eww扩展名表示工作区文件,ewp扩展名表示工程(或项目)文件。图2-6工作区存盘图2-7D:\ZYUCOSII\ex2_1目录下的文件
S3.配置工程ex2_1。
如图2-8所示,鼠标右键点击工作区中的工程文件ex2_1,在右键弹出菜单中选择“Options…”(或点击菜单“Project|Options…”,或按快捷键Alt+F7),进入如图2-9所示的窗口。图2-8空项目ex2_1窗口图2-9ex2_1的GeneralOptions|Target选项卡图2-9包含了配置项目的所有选项卡,在其中将处理器配置为“SamsungS3C2410A”,设置为“Little”Endian模式。还需要进一步配置其他选项卡,依次如图2-10~图2-21所示。图2-10GeneralOptions|Output选项卡图2-10中配置目标文件为可执行文件“Executable”(“Library”表示编译链接后的目标文件为库文件),输入目标文件路径为当前工作目录下的“Debug”子目录,该子目录下又有三个子目录。其中,Exe子目录存放.out和.hex类型的可执行文件;Obj子目录存放.o等类型的目标文件;List子目录存放.map等类型的文件。进行如图2-10所示的配置,编译工程后,将在D:\ZYUCOSII\ex2_1目录下创建Debug子目录。图2-11C/C++Compiler|Code选项卡在图2-11中,选中“Arm”单选钮,C语言编译生成的目标文件是32位的ARM指令集(这一步设置纯粹是笔者习惯)。
进行如图2-12所示的配置后,工程文件ex2_1编译时生成ex2_1.hex文件。事实上,这一步一般在需要进行Bootloader之前才配置。图2-12OutputConverter|Output选项卡图2-13Linker|Config选项卡图2-13为“Linker|Config”选项卡,在图中选中“Overridedefault”复选框后,可以选择“链接配置文件”(icf为其扩展名),此时,“Edit…”按钮将使能,如图2-14所示。图2-14Linker|Config选项卡对于高级的EWARM开发人员,会有自己编写的icf文件;而对于初学者,只需点击“Edit…”按钮,进入如图2-15所示的窗口。图2-15链接配置文件图形化编辑器按图2-15所示设置后,表示中断向量表位于地址0x0开始处;ROM空间从0x30000000到0x3003FFFF,大小为256KB;RAM空间从0x30040000到0x3013FFFF,大小为1MB;并依次设置了栈和堆的大小。点击图2-15中最后一个图的“Save”按钮进入图2-16。图2-16保存链接配置文件图2-17配置好的Linker|Config选项卡在图2-16中点击“保存”按钮,进入图2-17。
这时在D:\ZYUCOSII\ex2_1目录下多了一个ex2_1.icf文件,用UltraEdit打开后,其内容如下:参考图2-15,可读懂上面的文件内容,然后可以写出具有自己特色的icf文件(如果是用户自己写的icf文件,则图2-15所示的图形化编辑器无法编辑)。
图2-18中可以指定编译链接后的工程目标文件名,这里使用的是默认文件名ex2_1.out。图2-18Linker|Output选项卡图2-19这一项很重要,选中“Generatelinkermapfile”复选框,编译链接后,将产生.map文件(这里是ex2_1.map文件,位于D:\ZYUCOSII\ex2_1\Debug\List目录下),这个文件对于初学者尤其重要,阅读这个文件可以了解目标文件的存储配置。图2-19Linker|Output选项卡笔者使用了J-LINK仿真器,所以图2-20中选择“J-Link/J-Trace”,如果“Runto”复选框选中了,则在线仿真时,PC(程序计数器指针)将跳至main标号;如果不选中,则PC将跳到“_iar_program_start”标号处(对于初学者,建议选中)。图2-20Debugger|Setup选项卡在线仿真调试程序时,一般需要将程序下载到SDRAM中,所以,需要一个宏文件(
.mac为扩展名)对ARM开发板进行存储器配置(实际上,就是初始化存储器配置寄存器,使SDRAM正常工作),这个文件是ex2_1.mac,是使用UltraEdit编辑的,保存在D:\ZYUCOSII\ex2_1目录下,其内容如下:上述代码的功能依次为关闭看门狗定时器、设定CPU工作频率为192MHz以及配置SDRAM,这在《ARM原理与C程序设计》一书中曾介绍过。需要指出的是第15行代码,因为UP-Star外扩SDRAM为一片32MB的HY57V561620芯片,这里总线宽度和等待控制寄存器写入值应为0x11111110。
在图2-20中选中“J-Link/J-Trace”后,则可以进一步设置“J-Link/J-Trace”一栏,如图2-21所示。图2-21Debugger-J-Link/J-Trace|Setup选项卡在图2-21中,点击“OK”按钮,完成工程配置,返回到图2-5或图2-8所示界面。
S4.编辑一个代码文件。
点击“File|New|FileCtrl+N”菜单,如图2-22所示,或按快捷键Ctrl+N,进入如图2-23所示的界面。图2-22新建文件菜单图2-23新建文件编辑器在图2-23中输入一些代码,然后点击“File|Save”菜单或按下快捷键“Ctrl+S”存盘,弹出如图2-24所示的窗口。图2-24文件存盘在图2-24中选择目录为D:\ZYUCOSII\ex2_1\ASM,即汇编语言程序存放在ASM子目录下,然后,输入文件名为zyDef2410.s,点击“保存”按钮存盘。
S5.编辑其他的代码文件。
如同第S4步所示方法,依次编辑cstartup.s、zyDef2410.h、zyIRQ.c、zyLED.c和zyMain.c等文件,其中,将cstartup.s文件保存在D:\ZYUCOSII\ex2_1\ASM目录下,其他文件保存在D:\ZYUCOSII\ex2_1\User目录下。所有这些文件的源码罗列于第2.1.2节。
S6.将文件添加到工程ex2_1中。
如图2-25所示,在工程ex2_1的右键弹出菜单中,选择“Add|AddGroup...”可向“Workspace”工作区中添加分组标签,这里建立了两个分组,即asm和user,刚好与D:\ZYUCOSII\ex2_1下的两个目录同名,如图2-26所示。图2-25向工作区添加分组菜单图2-26添加了分组asm和user下面将各个文件依次添加到工作区中,例如添加zyMain.c文件到user分组中:在编辑窗口中打开zyMain.c文件,再在“user”分组标签的右键弹出菜单中选择“Add"zyMain.c"”项,即可将zyMain.c文件添加到工作区user分组中,如图2-27所示。图2-27向工程中添加文件由于zyMain.c正被打开,所以图2-27中出现了“Add”zyMain.c“”一项,点击该项可以将zyMain.c添加到工程中;如果希望添加其他的文件,则点击“AddFiles...”,在弹出的对话框中选择相应的文件即可。
依次将zyMain.c、zyLED.c、zyIRQ.c和cstartup.s文件添加到工程中,其中cstartup.s添加到asm分组下;其余文件添加到user分组下。被这些文件包括了的文件,会自动添加到相应文件的下面(点击“+”号后,可以看到被包括的文件,同时出现一个Output项),如图2-28所示。图2-28完整的ex2_1工程
S7.编译链接工程文件。
在图2-28中,点击菜单“Project|Make”或“Project|RebuildAll”,可编译链接工程ex2_1,生成目标文件ex2_1.out和ex2_1.hex(这两个文件位于D:\ZYUCOSII\ex2_1\Debug\Exe目录下),编译链接成功后如图2-29所示。图2-29ex2_1编译链接成功
S8.仿真运行工程ex2_1。
在图2-29中,点击“在线仿真”快捷按钮,或按下快捷键Ctrl+D,或单击菜单“Project|DownloadandDebug”,均可进入如图2-30所示的界面。图2-30EWARM仿真环境界面在图2-30中,点击“运行”快捷按钮,可看到UP-Star实验板上的三个LED灯循环闪烁。至此,整个实例ex2_1介绍完了。2.1.2实例一工程源码
下面给出实例一工程中所有文件的源代码,即文件zyDef2410.s、cstartup.s、zyDef2410.h、zyIRQ.c、zyLED.c和zyMain.c的源代码,读者在学习了《ARM原理与C程序设计》后,应均能读懂这些程序,下面仅就一些特别的地方作简单的说明。同时,该实例的MAP表文件ex2_1.map内容罗列于附录一,供初学者阅读分析。文件zyDef2410.s的内容如下:
文件cstartup.s的内容如下:上述代码中需要说明的是定义代码段的方法,例如第22行:
SECTION.intvec:CODE:NOROOT(2)
这里SECTION为关键字,表示定义段;段名为.intvec,这是个特殊段名,表示复位和异常中断向量表,必须定位在0x0~0x3F地址范围内;CODE为关键字,表示本段为代码段,如果是数据段,则使用DATA关键字,例如第15~20行;NOROOT为关键字,可理解为段中不使用的部分不会被初始化;括号中的2表示段的首地址必须为最低2个位为0的地址,即4个字节对齐,同理,第15~20行的数字3,表示最低3个位为0,即8字节对齐。第14行的“MODULE?cstartup”为定义一个模块,其中“?”不是通配符,而是一般的符号,国外的文档中常用“?”表示用户可以改为自己喜欢的符号。第123行的SFE表示取段的最高地址,由于ARM920T的栈顶是栈的高地址,所以SP赋为栈的最高地址。详细信息请参考“ARMIARAssemblerReferenceGuide”文件,可在EWARM安装目录中找到。文件zyDef2410.h的内容如下:文件zyIRQ.c的内容如下:
1/*FileName:zyIRQ.c
2**Byzhnyong@21
3**@2009-4-4
4**ISRSubroutine
5**CopyrightReserved
6*/
7
8voidISR_IrqHandler(void)
9{
10}文件zyLED.c的内容如下:文件zyMain.c的内容如下:21
22//InitLEDLight
23zrInitLED();
24
25while(1)
26{
27zrLEdCircle(2000);
28}
29}按照第2.1节的方法,新建工程ex2_2,存储目录为D:\ZYUCOSII\ex2_2(除了工程文件名由ex2_1换为ex2_2之外,其他文件和目录没有变化;原ex2_1.mac更名为ex2_2.mac),如图2-31所示。2.2定时器中断与实例二图2-31工程ex2_2显然,工程ex2_2的运行结果与实例ex2_1完全相同。实例ex2_1中使用轮询的方式闪烁LED灯,工程ex2_2将在ex2_1的基础上引入定时器中断,使用定时器中断的方式闪烁LED灯。下面首先介绍定时器中断,补充zyIRQ.c的内容;然后介绍完整的实例ex2_2。2.2.1S3C2410中断源
S3C2410A有56个中断源,定时器4(Timer4)中断为其中的一个中断,这些中断源的处理如图2-32所示(更详细的内容请参考《ARM原理与C程序设计》第170页或S3C2410A芯片手册第14章)。
如图2-32所示,有些中断源(Requestsources(withsub-register),约11个)具有子源悬挂寄存器(SUBSRCPND)和子源屏蔽寄存器(SUBMASK),这些源中断产生后,会自动向其SUBSRCPND相应的位写1。如果其SUBMASK屏蔽了这些中断,则这些中断不会响应;如果SUBMASK开放了这些中断,则这些中断和另外一些不具有子源寄存器的中断取或后进入到SRCPND中。为了解释的方便,假定SUBMASK屏蔽了所有带子源寄存器的中断源,则那些不带子源寄存器的中断源(Requestsources(withoutsub-register),约35个)产生后,将首先置位SRCPND(地址为0x4A000000)相应的位(不受屏蔽),表示该中断产生了,这些位和SRCPND的对应关系如表2-1所示。在进入中断服务程序后,应立即通过向相应的位写1清除该位,否则,会认为一个新的中断又产生了。图2-32S3C2410A中断源处理流程表2-1中断请求寄存器SRCPND虽然产生的中断请求可以使SRCPND相应的位置1,用以表示该中断发生了,但是中断是否能得到响应受图2-32中MASK的约束,MASK即为中断屏蔽寄存器INTMSK(地址为0x4A000008)。其32位的每一位为0表示开启中断,为1表示屏蔽(或关闭)中断,初始值为0xFFFFFFFF。但是这种约束只对图2-32中MODE确定为IRQ类型的中断才起作用,对于MODE确定为FIQ类型的中断,即快速响应中断,则INTMSK不能屏蔽。这里的MODE即为中断模式寄存器INTMOD(地址为0x4A000004)。其32位中相应的位设置为1表示该中断源为FIQ中断模式,清为0表示该中断源为IRQ中断,初始值为0x00000000。从图2-32中可以看出,IRQ模式的中断源还要经过Priority优先级仲裁,这里的Priority即为IRQ优先级寄存器PRIORITY(地址为0x4A00000C),初始值为0x7F,优先级设定内容请参考S3C2410A手册。
当某IRQ中断源得到了服务,如图2-32所示,则INTPND相应的位自动置1。当进入中断服务程序后,该位需要通过写1清零的方法清位。这里需要注意:① INTPND即中断挂起寄存器(地址为0x4A000010)不能向原本为0的位写入1!因此写1清零时,要确保写入1的位为1才可以,往往采用读出INTPND的值后重新写入读出值的方法;② INTPND与SRCPND不同:只要有中断发生,不管中断开启还是屏蔽着,SRCPND的相应位都会被置1,有多少个中断发生,就会有多少个相应的位被置1;即使有很多中断发生,INTPND每次只可能有一位被置1,即优先级高而得到服务的中断位。回到表2-1,表2-1中也给出了每个中断的偏移号,中断偏移号寄存器为INTOFFSET,其地址为0x4A000014,其复位值为0。在IRQ模式下,如果某个中断发生了,该中断偏移号将保存在INTOFFSET寄存器中。例中,表2-1中的INT_TIMER4中断(即定时器4中断)产生了,则其偏移号14将自动写入到INTOFFSET中。INTOFFSET是只读寄存器,通过清零INTPND和SRCPND,INTOFFSET自动清零。2.2.2定时器4中断
S3C2410A有5个16位的定时器,其中定时器0~3具有PWM波形输出功能,而定时器4没有外部波形输出,是一个内部定时器。本节设置定时器4,使它每1秒产生一次定时中断,其步骤如下:
S1.关闭IRQ中断,关闭所有中断源。
设置CPSR寄存器的第I位(第7位)为1,关闭IRQ中断;同时,设置INTMSK寄存器的值为0xFFFFFFFF,INTSUBMSK寄存器的值为0x7FF,关闭所有中断源。
S2.设置定时器4的工作频率为20kHz。
设置TCFG0寄存器的值为0x9500,定时器4预分频因子为149;设置TCFG1寄存器的值为0x30000,定时器4分频因子为1/16。于是,定时器4工作频率为PCLK/(149+1)/16=
20kHz(其中,PCLK为48MHz)。
S3.设置定时器4每1秒产生中断1次,并打开定时器4。
设置TCNTB4寄存器的值为0x4E20(十进制20000),当定时器4以20kHz的减计数频率减计数到0时,产生一次定时中断,即每隔20000/20kHz=1秒产生一次定时中断。设置TCON的值为0x600000,将刷新TCNTB4的值为0x4E20。然后,设置TCON寄存器的值为0x50000,开启定时器4。
S4.打开定时器4中断,开启IRQ中断。
设置INTMOD寄存器的值为0x0,工作在IRQ模式下;设置INTMSK寄存器的第14位为0,开启定时器4中断。设置CPSR寄存器的第7位为0,开启IRQ中断。
S5.编写中断服务程序。
经过S1~S4后,每隔1秒S3C2410将产生一次定时器4中断,将PC指针指向0x18地址处,该地址处一般为跳转指令,跳转到IRQ中断服务程序入口地址处,进入IRQ中断服务程序后,首先判断INTOFFSET的值,如果INTOFFSET的值为14,则中断源为定时器4,然后再跳转到定时器4的中断服务程序中。定时器4的中断服务程序将依次清除SRCPND和INTPND中对应于定时器4的位,然后开始定时器4的中断处理程序。
工程ex2_2中文件zyIRQ.c以函数的形式实现了上述各步过程,如表2-2所示。表2-2zyIRQ.c中函数名及作用
文件zyIRQ.c的完整代码如下所示:需要说明的是,这里使用C语言实现中断响应的方法与《ARM原理与C程序设计》中完全不同,这里借助一个IRQ中断入口函数,根据INTOFFSET的值选择对应的中断服务程序。
第38行的“_arm”表示该函数编译链接成ARM指令集。如果把该行的“_armvoidISR_IrqHandler(void)”改用“_arm_irqvoidISR_IrqHandler(void)”形式也是可以的,“_irq”指示该函数为IRQ中断服务函数,那么,cstartup.s文件(参考ex2_1)中的第65行中的“BL”改为“B”,第67行注释掉;同时,在头文件zyDef2410.h中的函数声明中添加“_irq”。由文件zrIRQ.c可知,当定时器4中断发生后,首先通过IRQ中断跳转到函数ISR_IrqHandler,然后,由INTOFFSET的值为14,转到“case14:”执行Timer4_Act函数,这个函数是定时器4的中断服务程序,实现每隔1秒时间UP-Star实验板上的三个LED灯同时点亮1秒。2.2.3实例ex2_2
现在,在图2-31的基础上,相对于工程ex2_1,对工程ex2_2中的文件进行编辑。由图2-31可知,工程ex2_2与工程ex2_1的文件数和名称相同,具有zyDef2410.s、cstartup.s、zyDef2410.h、zyIRQ.c、zyLED.c和zyMain.c等6个源文件。下面依次说明各个文件相对于工程ex2_1的变化内容。
(1)文件zyDef2410.s与工程ex2_1中的同名文件内容相同。
(2)文件cstartup.s在工程ex2_1中同名文件的基础上,把第142和143行内容注释掉,这样,S3C2410A工作于SVC(管理)模式,µC/OS-Ⅱ也工作在该模式下。
(3)文件zyDef2410.h增加了较多新的宏定义,现把完整的代码罗列如下:
(4)文件zyIRQ.c的内容已经在第2.2.2节给出了。
(5)文件zyLED.c添加了zrLEDoff函数,并改写了zyLED函数为zyLEDon函数,当zyLEDon的参数为4时,三个LED同时点亮,该文件的完整代码如下:
(6)文件zyMain.c中的while(1)循环什么都不做,程序靠中断来工作,该文件的完整代码如下:
进行完上述6步修改后,则工程ex2_2建设好了。编译链接好后,可在线仿真程序的执行情况,此时,三个LED灯将按设定的1秒时间间隔闪烁。按照第2.2节的方法,新建工程ex2_3,存储目录为D:\ZYUCOSII\ex2_3(除了工程文件名由ex2_2换为ex2_3之外,其他文件和目录没有变化;原ex2_2.mac更名为ex2_3.mac),如图2-33所示。2.3串口通信与实例三图2-33工程ex2_3的最初版本由图2-33,此时的工程ex2_3本质上是工程ex2_2,下面添加串口通信功能,使UP-Star实验板的串口0和计算机的串口(本书使用USB转串口线从笔记本电脑引出的串口,并把这个串口号修改为COM1,借助串口调试助手SComAssistantV2.2)间进行通信。2.3.1串口通信方法
串口通信是使用广泛且协议简单的通信方式,缺点在于速度低、通信距离短。
S3C2410A具有3个串口,每个串口具有11个寄存器,其中,串口0的寄存器基地址为0x50000000。对于简单的串口0通信来说,需要配置的寄存器有ULCON0(地址为0x50000000)、UCON0(地址为0x50000004)、UFCON0(地址为0x50000008)和UBRDIV0(地址为0x50000028)。初始化串口的过程是:UFCON0和UMCON0(地址为0x5000000C)置为0,表示不使用FIFO,不使用流控制;ULCON0置为0x03,表示1位停止位,8位数据位,无校验位;UCON0置为0x05,表示串口工作方式为中断方式或询问方式;UBRDIV0置为0x270,表示波特率为4800bps(1bps=
1bit/s,计算方法为PCLK(此处为48MHz)/16/波特率-1=0x270;如果设置为0x19,则波特率为115200bps。串口读写方式有两种,即询问方式和中断方式。询问方式下,循环进行串口的读/写过程,直到读或写的字符串接收或发送完毕;中断方式下,当串口接收到数据后或发送数据前将产生中断请求,在中断服务程序中实现串口的读或写。
S3C2410芯片上,串口0的收发占用了引脚GPH3和GPH2,需要配置这两个引脚为串口通信功能。
基本的串口读操作为从寄存器URXH0(地址为0x50000024)中读取一个字节;基本的串口写操作为向寄存器UTXH0(地址为0x50000020)中写入一个字节。说明:更详细的串口工作原理及其协议请参考网上资料或相关书籍。
本书中串口通信主要用于输出显示结果,即计算机上的串口调试助手作为显示输出终端。尽管UP-Star实验板带有一块真彩TFTLCD屏,但是驱动LCD屏的代码远远多于使用串口通信输出的代码(LCD驱动代码在UP-Star实验板配套光盘中可以找到)。
与串口0通信相关的代码位于文件zyUART0.c中,该文件的完整代码罗列如下:1/*FileName:zyUART0.c
2**Byzhnyong@21
3**@2009-4-4
4**CopyrightReserved
5*/
6
7#include"zyDef2410.h"
8
9//InitializeUART0
10voidzyInitUART0(void)11{
12//SetGPH3:2asRXD0:TXD0
13GPHCON=0xA0;
14
15//SetUART0Baudrate:4800bps,8-bit,1-bitstop
16UFCON0=0x0;
17UMCON0=0x0;
18ULCON0=0x03;
19UCON0=0x05;
20UBRDIV0=0x270;
21}
2223//ReceiveAbyte(8-bit)
24U8Rd_Uart0(void)
25{
26U8aByte;
27while(!(UTRSTAT0&0x01))
28aByte=URXH0;
29returnaByte;
30}
31
32//SendAbyte
33voidWr_Uart0(U8aByte)
34{
35while(!(UTRSTAT0&0x02));
36UTXH0=aByte;37}
38
39//SendAstring
40voidStr_Uart0(U8*str8)
41{
42while(*str8)
43{
44Wr_Uart0(*str8++);
45}
46}
47
48//SendAsignedbye
49voidSWr_Uart0(charaByte)50{
51while(!(UTRSTAT0&0x02));
52UTXH0=aByte;
53}
54
55//SendAsignedstring
56voidSStr_Uart0(char*str8)
57{
58char*p=&str8[0];
59while(*p)
60{
61SWr_Uart0(*p++);
62}
63
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 丽江文化旅游学院《民族图形基础》2021-2022学年第一学期期末试卷
- 兰州城市学院《心理诊断与评估》2022-2023学年第一学期期末试卷
- 山西省长治市2023-2024学年高三物理上学期8月月考试题含解析
- 过敏性休克治疗课件
- 髌骨疼痛的临床特征
- 《土壤的种类》课件
- 兰州城市学院《雕刻艺术》2023-2024学年第一学期期末试卷
- 昆明理工大学《普通物理(Ⅰ)》2022-2023学年第一学期期末试卷
- 中心型软骨肉瘤的临床特征
- 凯里学院《网页制作与网站开发实验》2022-2023学年第一学期期末试卷
- 乒乓球社团活动记录
- 固体废物处理与资源化实验
- 新时代中小学教师职业行为十项准则考核试题及答案
- 欧标EN1886应用于组合式空调机组检测应注意的问题
- 痛风讲课课件
- 动脉瘤夹闭术的手术护理课件
- DB32T 1363-2017 高速公路养护工程施工安全技术规程
- 原材料编码原则
- 室外电气管线施工方案-精
- 最新国际标准ISO-10816 介绍
- Unit 3 Just a brother 阅读理解课件-高中英语外研版必修第一册
评论
0/150
提交评论