S3C2410A实验指导说明书_第1页
S3C2410A实验指导说明书_第2页
S3C2410A实验指导说明书_第3页
S3C2410A实验指导说明书_第4页
S3C2410A实验指导说明书_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

...wd......wd......wd...目录第1章实验要求3第2章预备知识4一、ADS1.2安装4二、ADS1.2下使用Wiggler电缆调试5三、配置ads1.2软件6四、H-JTAG驱动程序的使用8第3章S3C2410A实验24实验一ADS1.2开发环境创立与简要介绍24一、实验目的24二、实验内容24三、实验设备24四、实验步骤24五、实验步骤32实验二ARM的I/O接口实验34一、实验目的34二、实验内容34三、实验设备34四、实验原理34五、实验步骤36六、参考程序36实验三ARM的中断实验37一、实验目的37二、实验内容37三、实验设备37四、ARM的中断原理37五、三星的2410ARM处理器的中断的使用37六、中断编程实例31七、实验步骤32八、分析理解32实验四ARM的UART实验34一、实验目的34二、实验内容34三、实验设备34四、UART的工作原理34五、实验步骤39六、分析理解39实验五ARM的A/D接口实验40一、实验目的40二、实验内容40三、实验设备40四、实验原理40五、实验步骤44六、分析理解44实验六键盘接口和七段数码管的控制实验45一、实验目的45二、实验内容45三、实验设备45四、实验原理45五、实验步骤49六、分析理解49七、要求50实验要求ARM实验室是电子信息科学与技术的专业实验室。旨在培养学生对嵌入式系统设计和开发的能力,使学生加深对嵌入式系统设计思想的理解,掌握ARM实验平台进展程序设计、开发的技巧和方法,进而增强学生的实践能力和动手能力,提高其创新意识。实验室还为大学生电子设计大赛,电子类学生的毕业设计、课程设计以及科研训练提供实验环境。利用嵌入式实验开发系统。实验要求在实验过程中,要求学生做到:〔1〕预习实验指导书有关局部,认真做好实验内容的准备,就实验可能出现的情况提前作出思考和分析。〔2〕仔细观察上机编程时出现的各种现象,记录主要情况,作出必要说明和分析。〔3〕认真书写实验报告。实验报告包括实验目的和要求,实验情况及其分析,写出程序设计说明,给出源程序框图和清单。〔4〕遵守机房纪律,服从辅导教师指挥,保护实验设备。〔5〕实验课程不迟到,如有事不能出席,所缺实验一般不补。实验的验收将分为两个局部。第一局部是上机操作,包括检查程序运行和即时提问。第二局部是提交书面的实验报告。预备知识ADS1.2安装翻开安装光盘的ads1.2文件夹,双击SETUP.EXE,进展安装,按默认设置,也可适当更改安装路径。安装完成后,出现一个添加licence的界面,选中ADS1.2目录下的crack文件夹中的licence.dat文件,点下一步,直至完毕。至此,完成软件的安装。ADS1.2下使用Wiggler电缆调试安装Rdi.dll将文件夹下的Rdi.dll、dev.ini、dev文件夹一同拷贝到xx:\ProgramFiles\ARM\ADSv1_2\Bin目录下〔推荐目录〕;2.安装并口驱动运行GiveIOInstaller.exe选择InstallService配置ads1.2软件翻开AXD,选择菜单〞options〞中的〞configuertarget…〞,如以下列图:点击〞ADD〞,再弹出的列表框中找到开场拷贝的RDI.dll,如以下列图:翻开后再点击Configure进展配置,点击〞OK〞,如果此时连接了Wiggler电缆和实验箱,即可进入正确的调试模式,如以下列图:H-JTAG驱动程序的使用安装操作说明首先,将H-JTAGv2.0.exe应用程序双击,安装。安装到你的C盘或D盘的programfiles下,安装成功后,在桌面上会出现图1左下方的图标H-JTAG。连上wiggler电缆,双击图标H-JTAG,弹出图1的右面的对话框。假设检测,连接成功,最小化H-JTAG。到开场/程序/ARMDeveloperSuite1.2目录下翻开ADS1.2的调试器AXD。将弹出图8。点击,深色处,之后点击OK。〔注意,这步前,应该正确安装H-JTAGV2.0.exe程序〕S3C2410A实验ADS1.2开发环境创立与简要介绍实验目的熟悉ADS1.2开发环境,正确使用仿真调试电缆进展编译、下载、调试。了解ARM汇编语言的根本框架,学会使用ARM的汇编语言编程。了解ARMC语言的根本框架,学会使用ARM的C语言编程实验内容学习ADS1.2开发环境用汇编语言编写一个简单的应用程序用C语言编写一个简单的应用程序实验设备EL-ARM-830+教学实验箱,PC机,仿真调试电缆。ADS1.2集成开发环境,仿真调试电缆驱动程序实验步骤ADS1.2下建设工程运行ADS1.2集成开发环境〔CodeWarriorforARMDeveloperSuite〕,点击File|New,在New对话框中,选择Project栏,其中共有7项,ARMExecutableImage是ARM的通用模板。选中它即可生成ARM的执行文件。同时,如图2-1-1图2-1-1还要在,Projectname栏中输入工程的名称,以及在Location中输入其存放的位置。按确定保存工程。在新建的工程中,选择Debug版本,如图2-1-2,使用Edit|DebugSettings菜单对Debug版本进展参数设置。图2-1-2在如图2-1-3中,点击DebugSetting按钮,弹出2-1-4图,选中TargetSetting图2-1-3图2-1-4项,在Post-linker栏中选中ARMfromELF项。按OK确定。这是为生成可执行的代码的初始开关。在如图2-1-5中,点击ARMAssembler,在ArchitectureorProcesser图2-1-5栏中选ARM920T。这是要编译的CPU核。在如图2-1-6中,点击ARMCCompliler,在ArchitectureorProcesser栏中选ARM920T。这是要编译的CPU核。图2-1-6在如图2-1-7中,点击ARMlinker,在outpur栏中设定程序的代码段地址,以及数据使用的地址。图中的ROBase栏中填写程序代码存放的起始地址,RWBase栏中填写程序数据存放的起始地址。该地址是属于SDRAM的地址。图2-1-7图2-1-8在options栏中,如图2-1-8,Imageentrypoint要填写程序代码的入口地址,其他保持不变,如果是在SDRAM中运行,则可在0x30000000—0x33ffffff中选值,这是64MSDRAM的地址,但是这里用的是起始地址,所以必须把你的程序空间给留出来,并且还要留出足够的程序使用的数据空间,而且还必须是4字节对齐的地址〔ARM状态〕。通常入口点Imageentrypoint为0x30000000,ro_base也为0x30000000。在Layout栏中,如图2-1-9,在Placeatbeginningofimage框内,需要填写工程的入口程序的目标文件名,如,整个工程工程的入口程序是2410init.s,那么应在Object/Symbol处填写其目标文件名2410init.o,在Section处填写程序入口的起始段标号。它的作用是通知编译器,整个工程的开场运行,是从该段开场的。图2-1-9在如图2-1-10中,即在DebugSetting对话框中点击左栏的ARMfromELF项,在Outputfilename栏中设置输出文件名*.bin,前缀名可以自己取,在Outputformat栏中选择Plainbinary,这是设置要下载到flash中的二进制文件。图2-1-10中使用的是test.bin.图2-1-10到此,在ADS1.2中的根本设置已经完成,可以将该新建的空的工程文件作为模板保存起来。首先,要将该工程工程文件改一个适宜的名字,如S3C2410ARM.mcp等,然后,在ADS1.2软件安装的目录下的Stationary目录下新建一个适宜的模板目录名,如,S3C2410ARMExecutableImage,再将刚刚设置完的S3c2410ARM.mcp工程文件存放到该目录下即可。这样,就能在图2-1-10中看到该模板。新建工程工程后,就可以执行菜单Project|AddFiles把和工程所有相关的文件参加,ADS1.2不能自动进展文件分类,用户必须通过Project|CreateGroup来创立文件夹,然后把参加的文件选中,移入文件夹。或者鼠标放在文件填加区,右键点击,即出!如图2-1-11 图2-1-11先选AddFiles,参加文件,再选CreateGroup,创立文件夹,然后把文件移入文件夹内。读者可根据自己习惯,更改Edit|Preference窗口内关于文本编辑的颜色、字体大小,形状,变量、函数的颜色等等设置。如图2-1-12。图2-1-122.ADS1.2下仿真、调试在ADS1.2下进展仿真调试,首先需要一根仿真调试电缆。其驱动程序的安装和使用在光盘中的\实验软件\ARM9_RDI中,里面有相关的文档。在连上调试电缆后,给实验箱上电,翻开调试软件AXDDebugger。点击File|loadimage加载文件ADS.axf(\实验程序\HARDWARE\ADS\实验三\ADS\ADS_data目录下)。翻开超级终端,设置其参数为:波特率为115200,数据位数8,奇偶校验无,停顿位无1,数据流控无。点击全速运行,出现图2-1-13的界面:图2-1-13在最后介绍调试按钮,上图,左起第一个是全速运行,第二个是停顿运行,第三个跳入函数内部,第四个单步执行,第五个跳出函数。到此,开发环境就全部介绍完了,这是ARM的开发根基。ARM使用C语言编程是大势所趋在应用系统的程序设计中,假设所有的编程任务均由汇编语言来完成,其工作量巨大,并且不易移植。由于ARM的程序执行速度较高,存储器的存储速度和存储量也很高,因此,C语言的特点充分发挥,使得应用程序的开发时间大为缩短,代码的移植十分方便,程序的重复使用率提高,程序架构清晰易懂,管理较为容易等等。因此,C语言的在ARM编程中具有重要地位。ARMC语言程序的根本规则在ARM程序的开发中,需要大量读写硬件存放器,并且尽量缩短程序的执行时间的代码一般使用汇编语言来编写,比方ARM的启动代码,ARM的操作系统的移植代码等,除此之外,绝大多数代码可以使用C语言来完成。C语言使用的是标准的C语言,ARM的开发环境实际上就是嵌入了一个C语言的集成开发环境,只不过这个开发环境和ARM的硬件严密相关。在使用C语言时,要用到和汇编语言的混合编程。当汇编代码较为简洁,则可使用直接内嵌汇编的方法,否则,使用将汇编文件以文件的形式参加工程当中,通过ATPCS的规定与C程序相互调用与访问。ATPCS,就是ARM、Thumb的过程调用标准〔ARM/ThumbProcedureCallStandard〕,它规定了一些子程序间调用的根本规则。如存放器的使用规则,堆栈的使用规则,参数的传递规则等。在C程序和ARM的汇编程序之间相互调用必须遵守ATPCS。而使用ADS的C语言编译器编译的C语言子程序满足用户指定的ATPCS的规则。但是,对于汇编语言来说,完全要依赖用户保证各个子程序遵循ATPCS的规则。具体来说,汇编语言的子程序应满足下面3个条件:●在子程序编写时,必须遵守相应的ATPCS规则;●堆栈的使用要遵守相应的ATPCS规则;●在汇编编译器中使用-atpcs选项。根本的ATPCS规定,请详见提供的相关PDF文档。汇编程序调用C程序汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。在汇编程序中使用IMPORT伪指令声明将要调用的C程序函数。在调用C程序时,要正确设置入口参数,然后使用BL调用。C程序调用汇编程序汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。在汇编程序中使用EXPORT伪指令声明本子程序,使其他程序可以调用此子程序。在C语言中使用extern关键字声明外部函数〔声明要调用的汇编子程序〕。在C语言的环境内开发应用程序,一般需要一个汇编的启动程序,从汇编的启动程序,跳到C语言下的主程序,然后,执行C程序,在C环境下读写硬件的存放器,一般是通过宏调用,在每个工程文件的Startup2410/INC目录下都有一个2410addr.h的头文件,那里面定义了所有关于2410的硬件存放器的宏,对宏的读写,就能操作2410的硬件。具体的编程规则同标准C语言。简单的小例子下面是一个简单的小例子IMPORTMainAREAa,CODE,READONLY;ENTRYLDRR0,=0x01d00000LDRR1,=0x245STRR1,[R0];把0x245放到地址0X01D00000BLMain;跳转到Main()函数处的C/C++程序END;标识汇编程序完毕以上是一个简单的程序,先存放器初始化,然后跳转到Main()函数标识的C/C++代码处,执行主要任务,此处的Main是声明的C语言中的Main()函数。实验步骤本实验仅使用实验教学系统的CPU板,串口。在进展本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆,以及串口间连接公/母接头串口线。检查连接是否可靠,可靠后,接入电源线,系统上电。翻开ADS1.2开发环境,从里面翻开C.mcp工程文件,进展编译。编译通过后,进入ADS1.2调试界面,加载C_Data\Debug中的映象文件程序映像C.axf。翻开/实验软件/tools/目录下的串口调试助手工具,配置为波特率为115200,校验位无,数据位为8,停顿位为1。不要选十六进制显示。之后,在ADS调试环境下全速运行映象文件,应出现图2-3-1界面。本程序连续发送55。图2-3-1下边分析一下主程序的源码。在C程序前的局部为系统的初始化,这在后边BOOTLOADER的章节里,要详细介绍。#include"..\inc\config.h"//嵌入包括硬件的头文件unsignedchardata;//定义全局变量voidMain(void){ Target_Init();//目标板初始化,定义串口的硬件初始化在//target.c中定义Delay(10);//延时data=0x55;//给全局变量赋值while(1){Uart_Printf("%x",data);//串口0输出Delay(10);} }把data=0x55;语句中的0x55,换成其他8位数,重新编译,下载,看看串口工具上输出是什么内容。ARM的I/O接口实验实验目的了解S3C2410的通用I/O接口掌握I/0功能的复用并熟练的配置,进展编程实验实验内容利用ADS1.2编译,在实验箱的CPU板上点亮LED灯LED1、LED2,并轮流闪烁!keil(mdk4.12)点亮LED灯LED1、LED2,并轮流闪烁!实验设备EL-ARM-830+教学实验箱,仿真调试电缆。ADS1.2集成开发环境,仿真调试驱动程序。kiel+Proteus软件。实验原理S3C2410CPU共有117个多功能复用输入输出口,分为8组端口:4个16位的I/O端口〔PORTC、PORTD、PORTE、PORTG〕2个11位的I/O端口〔PORTB和PORTH〕1个8位的I/O端口〔PORTF〕1个23位的I/O端口〔PORTA〕这些通用的GPI/O接口,是可配置的,PORTA除功能口外,它们仅用作输出使用,剩下的PORTB、PORTC、PORTD、PORTE、PORTF、PORTG均可作为输入输出口使用。配置这些端口,是通过一些存放器来实现的,这些存放器均有各自的地址,位长32位。往该地址中写入相应的数据,即可实现功能及数据配置。现用G口举例说明。对于G口如表2-1、表2-2、表2-3,表2-1RegisterAddressR/WDescriptionResetValueGPGCON0x56000060R/WConfigurethepinsofportG0x0GPGDAT0x56000064R/WThedataregisterforportGUndefinedGPGUP0x56000068R/WPull-updisableregisterforportG0xF800Reserved0x5600006C–Reserved表2-2PortGSelectablePinFunctionsGPG15Input/outputEINT23nYPONGPG14Input/outputEINT22YMONGPG13Input/outputEINT21nXPONGPG12Input/outputEINT20XMONGPG11Input/outputEINT19TCLK1GPG10Input/outputEINT18–GPG9Input/outputEINT17–GPG8Input/outputEINT16–GPG7Input/outputEINT15SPICLK1GPG6Input/outputEINT14SPIMOSI1GPG5Input/outputEINT13SPIMISO1GPG4Input/outputEINT12LCD_PWRENGPG3Input/outputEINT11nSS1GPG2Input/outputEINT10nSS0GPG1Input/outputEINT9–GPG0Input/outputEINT8–表2-3GPGDATBitDescriptionGPG[15:0][15:0]Whentheportisconfiguredasinputport,datafromexternalsourcescanbereadtothecorrespondingpin.Whentheportisconfiguredasoutputport,datawritteninthisregistercanbesenttothecorrespondingpin.Whentheportisconfiguredasfunctionalpin,undefinedvaluewillberead.表2-4GPGUPBitDescriptionGPG[15:0][15:0]0:Thepull-upfunctionattachedtotothecorrespondingportpinisenabled.1:Thepull-upfunctionisdisabled.(GPG[15:11]are"pull-updisabled"stateattheinitialcondition.)也就是说,在地址0x56000060中,给32位的每一位赋值,那么,在CPU的管脚上就定义了管脚的功能值。当G口某管脚配置成输出端口,则在GPDAT对应的地址中的对应位上,写入1,则该管脚输出为高电平,写入0,则该管脚输出为低电平。假设配置为功能管脚,则该管脚变成具体的功能脚。其他端口配置请参见PDF文挡。在程序中对GPI/O各存放器的读写实现,是通过给宏赋值实现的。这些宏在2410addr.h中定义;具体如:。#definerGPGCON(*(volatileunsigned*)0x56000060)//Gcontrol#definerGPGDAT(*(volatileunsigned*)0x56000064)//Gdata#definerGPGUP(*(volatileunsigned*)0x56000068)//Pull-upcontrolG因此,配置端口G,在程序中也就是用如下语句即可:rGPGCON=rGPGCON&0xFFFF0FFF|0x00050000;//配置第8、第9位为输出管脚rGPGDAT=rGPGDAT&0xFCFF|0x0100;//配置第8位输出为高电平,第9位输出低电平。rGPGDAT=rGPGDAT&0xFCFF|0x0200;//配置第8位输出为低电平,第9位输出高电平。#definerGPGCON(*(volatileunsigned*)0x56000060)//PortGcontrol#definerGPGDAT(*(volatileunsigned*)0x56000064)//PortGdata#definerGPGUP(*(volatileunsigned*)0x56000068)//Pull-upcontrolGinti;intmain(void){rGPGCON=rGPGCON&0xfff0ffff|0x00050000;for(;;){ rGPGDAT=rGPGDAT&0xfcff|0x200; for(i=0;i<10000;i++);//延时 rGPGDAT=rGPGDAT&0xfcff|0x100; for(i=0;i<10000;i++);//延时 }}其他的各功能存放器在2410addr.h中也都有相应的定义,参照该做法,即可把GPI/O管脚配置成输入输出端口,也可把管脚配置成所需的功能管脚。实验步骤本实验使用实验教学系统的CPU板,在进展本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆。检查连接是否可靠,可靠后,接入电源线,系统上电。翻开ADS1.2开发环境,从里面翻开IO.mcp工程文件,进展编译。编译通过后,进入ADS1.2调试界面,加载实验程序IO_Data\Debug中的映象文件程序映像IO.axf。在ADS调试环境下全速运行映象文件。观察CPU板左下角的LED1、LED2灯轮流的的闪烁!这是对GPGIO口操作的结果。具体实现见程序。参考程序voidMain(void){inti; Target_Init();rGPGCON=rGPGCON&0xfff0ffff|0x00050000;while(1){ for(i=0;i<2000000;i++);//延时 rGPGDAT=rGPGDAT&0xfcff|0x0200; for(i=0;i<2000000;i++);//延时 rGPGDAT=rGPGDAT&0xfcff|0x100; }}ARM的中断实验实验目的掌握的中断资源及其相关中断存放器的进展合理配置掌握对实验内容学习响应外部中断请求的配置方法,并通过响应定时器中断,执行中断服务子程序使CPU板上的LED指示灯闪烁。实验设备EL-ARM-830+教学实验箱,PentiumII以上的PC机,仿真调试电缆。PC操作系统WINXP或WIN7,ADS1.2仿真调试驱动程序ARM的中断原理在ARM中,有两类中断,一类是IRQ,一类是FIQ,IRQ是普通中断,FIQ是快速中断,在进展大批量的复制、数据转移等工作时,常使用此类中断。FIQ的优先级高于IRQ。同时,它们都属于ARM的异常模式,当一旦有中断发生,不管是外部中断,还是内部中断,正在执行的程序都会停下,PC指针进而跳入异常向量的地址处,假设是IRQ中断,则0x18处,假设是FIQ中断,则跳到0x1C处。异常向量地址处,一般存有中断服务子程序的地址,所以,接下来PC指针跳入中断服务子程序中。当完成中断服务子程序后,PC指针会返回到被打断的程序的下一条地址处,继续执行程序。这就是ARM中断操作的根本原理。但是,通常由于生产ARM处理器的各厂家都集成了很多中断请求源,比方,串口中断、AD中断、外部中断、定时器中断、DMA中断等等,所以,很多中断可能同时请求中断,因此,为区分它们,更准确的完成任务,这些中断都有相应的优先级别,以及当发生中断时,它们都有相应的中断标志位,通过在发生中断是判断中断优先级,和访问中断标志位的状态来识别到底哪一个中断发生了。三星的2410ARM处理器的中断的使用首先,ARM920TCPU的PSR存放器中的F位为1,则CPU不会响应中断控制器的FIQCPU的PSR存放器中的I位为CPU也不会响应中断控制器的IRQ中断,为使CPU响应中断,须在启动代码中将其设为0,以及使INTMSK存放器中的相应位置0。S3C2410A共有56个中断源,有26个中断控制器,外部中断EXTIN8~23共用一个中断控制器,外部中断EXTIN4~7共用一个中断控制器,9个UART中断分成3组,共用3个中断控制器,ADC和触摸屏共用一个中断控制器。见表2-中断的优先级是由主组号和从ID号的级别控制的。中断优先级产生模块如以下列图所示:图2-6-1从上图可以看出,中断优先级产生模块共有7个判优器,每个判优器是否使能由存放器PRIORITY[6:0]决定,每个判优器下面有4~6个中断源,这些中断源对应着REQ0~REQ5这6个优先级,这些优先级由存放器PRIORITY[20:7]的相应位决定。要正确使用S3C2410的中断控制器,必须设置如下的存放器,如下表2-6-1所示:表2-6-1SRCPND0x4a000000R/W中断源挂起寄存器,当中断产生后,相应位置位INTMOD0x4a000004R/W中断模式存放器,设定IRQ或FIQ模式INTMSK0x4a000008R/W中断屏蔽存放器,如果相应位置位则该中断被屏蔽PRIORITY0x4a00000cR/W中断优先级控制存放器,设置中断优先级INTPND0x4a000010R/W中断挂起存放器,相应位对应正在执行的中断服务INTOFFSET0x4a000014R中断源请求偏移存放器25第三章25SUBSRCPND0x4a000018R/W子中断源挂起存放器INTSUBMSK0x4a00001cR/W子中断屏蔽存放器中断挂起存放器主要是提供哪个中断有请求的标志存放器,相应位置1,则说明有该中断请求产生。假设相应位为0,则无该中断请求产生。中断模式存放器主要是配置该中断是IRQ型中断,还是FIQ型中断。中断屏蔽存放器的主要功能是屏蔽相应中断的请求,即使中断挂起存放器的相应位已经置1,假设中断屏蔽存放器相应位置1,则中断控制器屏蔽该中断请求,也无法让CPU响应该中断。INTPND为向量IRQ中断服务挂起状态存放器,当向量IRQ中断发生时,该存放器内只有一位被设置,即只有当前要服务的中断标志位置位。通过读它的值,就能判断出哪个中断发生了。在INTPND中相应位写入数据,就能去除掉中断挂起存放器中的中断请求标志位,以使CPU不再响应中断,其实,CPU响应中断是看中断挂起存放器中的请求标志位有没有置位,假设置位,又屏蔽位翻开,ARM920T的PSR的F或I为也翻开,那么,CPU就响应中断,否则,有一个条件不成立,则CPU无法响应中断。SRCPND――源中断指示存放器SRCPND存放器32位中的每一位对应着一个中断源,每一位被设置为1,则相应的中断源产生中断请求并且等待中断被服务。因此,这个存放器说明了哪个中断源在等待中断请求被处理。注意,SRCPND存放器的每一位是由中断源自动设置的,而不管INTMSK存放器中的屏蔽位是否置1。另外,SRCPND存放器不影响中断控制器的优先级逻辑。在指定中断源的中断服务程序中,SRCPND存放器相对应的位必须被去除,这样才可以正确响应来自同一中断源的中断请求。如果从ISR返回而没有去除相应的位,也就是RCPND存放器中的对应的位还是1,那么就会一直响应这个中断请求。SRCPND中相应的中断位去除的时间依赖于用户的需求,如果想要从同一中断源接收另一次有效的中断请求,你在第一次就应该去除相应的位,并且使能中断。用户可以通过向SRCPND存放器的相应位写“1〞,这样可以去除该位。下表为SRCPND存放器的地址和位定义说明RegisterAddressR/WDescriptionResetValueSRCPND0X4A000000R/WIndicate the interruptrequeststatus.0 = The interrupt has notbeenrequested.1=Theinterruptsourcehasassertedtheinterruptrequest.0x00000000INTMOD――中断模式存放器中断模式存放器〔〕的32位中的每一位对应一个中断源,当INTMOD的每一位都设置位1,则ARM内核将以FIQ模式相应中断,否则将以IRQ模式相应中断。INTMOD存放器的定义如下表:RegisterAddressR/WDescriptionResetValueNTMOD0X4A000004R/WInterruptmoderegiseter.0=IRQmode1=FIQmode0x00000000INTPND――中断请求存放器中断请求存放器32位中的每一位对应着相应的中断请求,经过优先级逻辑后,INTPND存放器只能有一位被设置为1,并且向ARM产生中断请求。在IRQ中断服务子程序,能够读取这个存放器的值来决定32个中断源的那一个中断被服务。同SRCPND存放器,在中断服务子程序里,这个存放器的相应位需要被去除INTPND存放器写一个数据1,来去除存放器的指定位。INTMSK――中断屏蔽存放器在INTMSK存放器中,32位依次对应着每个中断源,如果指定位被设为1,ARM将不响应中断源的中断请求〔注意,即使在SRCPND相应的位被置位1的条件下也不响应〕。如果屏蔽位为0,则中断请求可以被响应。PRIORITYRegisterAddressR/WDescriptionResetValuePRIORITY0x4A00000CR/WIRQprioritycontrolregister0x7FPRIORITYBitDescriptionInitialStateARB_SEL6[20:19]600==10==[18:17]500=01=REQ10=11=REQ[16:15]400==REQ10==REQ[14:13]300==REQ10==REQ[12:11]200==REQ10==REQ[10:9]100==REQ10==REQ[8:7]000==10==ARB_MODE6[6]60=not1=27第三章27[5]50=not1=[4]40=not1=[3]30=not1=[2]20=not1=[1]10=not1=[0]00=not1=INTOFFSET――中断偏移存放器中断偏移存放器INTOFFSET中的值显示了INTPND存放器中哪一个IRQ的SRCPND和INTPND后将自动去除。S3C2440A子中断列表SUBSRCPND――次级源中断指示存放器INTSUBMSK――次级中断屏蔽存放器表2-6-2第三章第三章29EXTINTn――外部中断控制存放器n外部中断控制存放器可以控制外部中断信号有效方式,外部中断信号有效方式可以设置为电平触发和边沿触发,具体内容见下表。EXTERNALINTERRUPTCONTROLREGISTER(EXTINTn)The24externalinterruptscanberequestedbyvarioussignalingmethods.TheEXTINTnconfiguresthesignalingmethodbetweentheleveltriggerandedgetriggerfortheexternalinterruptrequest,andalsoconfiguresthesignalpolarity.Torecognizethelevelinterrupt,thevalidlogiclevelonEXTINTnpinmustberetainedatleastfor40nsbecauseofthenoisefilter(EINT[15:0]).EXTINT0BitDescriptionEINT7[30:28]Setof000=001=High=10x==3030EINT6[26:24]Setof000==High=edge10x=edge=BothEINT5[22:20]SetofEINT5.000==High=edge10x=edge=BothEINT4[18:16]SetofEINT4.000==High=edge10x=edge=BothEINT3[14:12]SetofEINT3.000==High=edgetriggered10x=edge=BothEINT2[10:8]SetofEINT2.000==High=edge10x=edge=BothEINT1[6:4]SetofEINT1.000==High=edge10x=edge=BothEINT0[2:0]SetofEINT0.000==Highlevel =edge10x=edge=BothBitDescriptionReserved[31]EINT15[30:28]Setof000===edge10x=edge=BothReserved[27]EINT14[26:24]SetofEINT14.000===edge10x=edge=BothReserved[23]EINT13[22:20]SetofEINT13.000===edge10x=edge=BothReserved[19]EINT12[18:16]SetofEINT12.000===edge10x=edge=BothReserved[15]EINT11[14:12]Setof000===edge10x=edge=BothReserved[11]EINT10[10:8]SetofEINT10.000===edge10x=edge=BothReserved[7]EINT9[6:4]SetofEINT9.000===edge10x=edge=BothReserved[3]EINT8[2:0]SetofEINT8.000===edge10x=edge=Bothtriggered31第三章31BitDescriptionFLTEN23[31]Filterfor0=1=EINT23[30:28]Setof000===10x=edge=edgeFLTEN22[27]Filterfor0=1=EINT22[26:24]SetofEINT22.000===10x=edge=edgeFLTEN21[23]Filterfor0=1=EINT21[22:20]SetofEINT21.000===10x=edge=edgeFLTEN20[19]Filterfor0=1=EINT20[18:16]SetofEINT20.000===10x=edge=edgetriggeredFLTEN19[15]Filterfor0=1=EINT19[14:12]SetofEINT19.000===10x=edge=edgetriggeredFLTEN18[11]Filterfor0=EINT18[10:8]SetofEINT18.000===10x=edge=edge[7]Filterfor0=1=EINT17[6:4]SetofEINT17.000===10x=edge=edgeFLTEN16[3]Filterfor0=1=EINT16[2:0]SetofEINT16.000===10x=edge=edgeEXTERNALINTERRUPTFILTERREGISTER(EINTFLTn)TheEINTFLTnthelengthoffilterfor8interrupts(EINT[23:16]).EXTERNALINTERRUPTMASKREGISTER(EINTMASK)中断编程实例在ADS1.2的开发环境下,翻开Interrupt.mcp工程,在Application/SRC/Main.c中可以看到,主程序中,在进展目标板初始化后,程序进入死循环,等待中断!在Startup2410/src/target.C文件中包括对要使用的中断控制器的初始化程序,CPU响应了该中断后的中断服务子程序。该工程的程序流程是,按下程序启动后,初始化定时器1,设定定时器的中断时间,然后,等待定时器中断,当定时器中断到来时,就会进入定时器中断服务子程序,而中断服务子程序会把LED1和LED2灯熄灭或点亮,从现象中看到LED1和LED2灯忽闪一次,则说明定时器发生了一次中断。最后,关闭中断请求,等待下一次的中断的到来。为使CPU响应中断,在中断服务子程序执3232行之前,必须翻开ARM920T的CPSR中的I位,以及相应的中断屏蔽存放器中的位。打开相应的中断屏蔽寄存器中的位,是在target.C中的voidTimer1INT_Init(void)函数中,在做了这些准备后,就可以等待中断的到来了。voidTimer1INT_Init(void){//定时器接口使能if((rINTPND&BIT_TIMER1)){rSRCPND|=BIT_TIMER1;}pISR_TIMER1=(int)Timer1_ISR;rINTMSK &=~(BIT_TIMER1); //开中断;}TIMER1INT_Init()函数已在Target_Init()中调用。详见Interrupt.mcp源代码注释。实验步骤本实验仅使用实验教学系统的核心CPU板。在进展本实验时,LCD电源开关,音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。在PC机并口和实验箱的CPU板上的JTAG缆。检查连接是否可靠,可靠后,接入电源线,系统上电。翻开超级终端0,超级终端1,进展设置〔115200,8位数据,1位停顿位,无奇偶校验〕;翻开ADS1.2编译通过后,进入ADS1.2中的映象文件程序映像在ADS和LED1和1可以改变闪烁的频率,即改变文件内的rTCNTB1=越快。编译全速运行,观看结果,看闪烁频率是否发生了改变!这是对GPIO口操作的结果。具体实现见程序。分析理解运行程序开发版上的led1和led2交替闪烁。〔3分〕定时器中断服务子程序〔0.5分〕intflag;voidirqTimer1_ISR(void){if(flag==0){rGPGDAT=rGPGDAT&0xeff|0x200;flag=1;}else{rGPGDAT=rGPGDAT&0xdff|0x100;flag=0;}rSRCPND|=BIT_TIMER1;rINTPND|=BIT_TIMER1;}定时器初始化程序〔0.5分〕void{=&|GPG=|=255; //=0<<4; //=//在下,1秒钟的记数值=/4/256===(1|(1<<|(0=|(0<<|(1}异常及中断控制器的初始化〔1分〕void{=====0x0; ==//Allis<-SOP}分别利用main分〕,实现了周期不同。ARM的UART实验实验目的了解并熟悉UART的概念及其工作原理;掌握ARM相应的存放器配置;能够用C编写出相应的串口程序;实验内容在实验箱的CPU板上运行程序,在超级终端上回显发送的数据!实验设备EL-ARM-830+教学实验箱,PC机,仿真调试电缆,串口电缆。PC操作系统WIN7或WINXP,ADS1.2集成开发环境,仿真调试驱动程序。UART的工作原理通用的串行I/O接口有许多种,最常见的一种标准是美国电子工业协会推荐的一种标准,即RS—232C。这种标准在PC系列中大量采用9针接插件。在ARM的处理器中,也采用了这种标准。具体的硬件机械、电气特性请参阅有关RS232串口通信的书籍。S3C2410的UART〔UniversalAsynchronousReceiverandTransmitter,通用异步收发器〕单元提供3个独立的异步串行I/O口,都可以运行于中断模式或DMA模式。也就是说,UART可以产生中断请求或DMA请求,以便在CPU和UART之间传递数据。它最高可支持115200bps的传输速率。S3C2410中每个UART通道包含两个用于接收和发送数据的16位FIFO队列。S3C2410的每个UART都有波特率发生器、数据发送器、数据接收器,及控制单元。内部数据通过并行数据总线到达发送单元后,进入FIFO队列,或不进入FIFO队列,通过发送移相器TXDn引脚发送出去,送出的数据通过一个电压转换芯片将3.3V的TTL/COMS电平转换成EIA〔ElectronicindustriesAssociation〕电平,送进PC的串口。数据接收的过程刚好相反,外部串口信号需要先把EIA电平经电压转换芯片把电平转换3.3V的TTL/COMS电平,然后由RXDn管脚进入接收移相器,经过转换后放到并行数据总线上,由CPU进展处理或直接送到存储器中〔DMA方式下〕。在正确使用S3C2410的串口进展收发实验前,首先,要配置相关的存放器组。见表2-8-1。表2-8-1为串口0和串口1的线性控制存放器的配置说明,推荐使用值:0x03; infra-RedMode:红外、正常模式选择: [6]0正常模式,1红外模式UARTLINECONTROLREGISTERTherearethreeUARTlinecontrolregistersincludingULCON0,ULCON1,andULCON2intheUARTblock.RegisterAddressR/WDescriptionULCON00x50000000R/WUARTchannel0linecontrolregisterULCON10x50004000R/WUARTchannel1linecontrolregisterULCON20x50008000R/WUARTchannel2linecontrolregisterULCONnBitDescriptionULCON0R/WUARTchannel0linecontrolregisterULCON1R/WUARTchannel1linecontrolregisterULCON2R/WUARTchannel2linecontrolregister表2-8-1ParityMode:奇偶校验模式选择:[5:3]0XX无奇偶校验 100奇校验 101偶校验 110强制校验/校验1 111强制校验/校验0 Numberofstopbit:停顿位选择:[2]01个停顿位,12个停顿位Wordlength:字长 [1:0]005位,016位,107位,118位表2-8-2为串口0和串口1的控制存放器的配置说明,推荐使用值:0X245;ClockSelection选择使用的时钟[10]0:使用PCLK,1:使用UCLK引脚引入的时钟Txinterrupttype发送中断请求类型[9]0=边沿,1=电平Rxinterrupttype接收中断请求类型[8]0=边沿,1=电平Rxtimeoutenable允许/不允许Rx超时中断[7]0=制止1=使能Rxerrorstatusinterruptenable允许/不允许UART错误中断[6]0=不允许1=允许表2-8-2Loop-backMode:该位为1使UART进入loopback模式[5]0=正常模式,1=Loop-back模式SendBreakSignal:该位为1使UART发送一个暂停条件,该位在发送一个暂停信号后自动去除[4]0=正常发送,1=发送断点信号TransmitMode:这两位确定哪个模式可以写TX数据到UART发送保持存放器[3:2]00=制止01=中断请求或查询模式10=BDMA0请求(仅为UART0)11=BDMA1请求(仅为UART1)ReceiveMode: 这两位确定哪个模式可以从UART接收缓冲存放器读数据00=制止01=中断请求或查询模式10=BDMA0请求(仅为UART0)11=BDMA1请求(仅为UART1)表2-8-3为串口0和串口1的FIFO控制存放器的配置说明,推荐使用值:0X00;表2-8-3TxFIFOTriggerLevel:这两位确定发送FIFO的触发条件[7:6]00=空,01=4字节,10=8字节,11=12字节RxFIFOTriggerLevel这两位确定接收FIFO的触发条件[5:4]00=空,01=4字节,10=8字节,11=12字节Reserved[3] 保存TxFIFOResetTXFIFO复位位,该位在FIFO复位后自动去除[2]0=正常,1=TxFIFO复位RxFIFOResetRxFIFO复位位,该位在FIFO复位后自动去除[1]0=正常,1=RxFIFO复位FIFOEnableFIFO模式选择[0]0=制止FIFO1=FIFO模式表2-8-3为串口0和串口1的模式控制存放器的配置说明,推荐使用值:0X00;AFC(AutoFlowControlAFC是否允许[4]0=制止1=使能RequesttoSend:如果AFC允许,该位忽略[0]0=高电平(制止nRTS)1=低电平(激活nRTS)表2-8-4这是需要用程序配置的有关串口的存放器,其他的是一些状态存放器,如UARTTX/RX状态存放器,UART错误状态存放器,UARTFIFO状态存放器,UARTMODEM状态存放器,UART接收缓冲存放器和FIFO存放器。当然,关于UART波特率设置,则有专门的分频存放器进展设置。计算公式具体如下:UBRDIVn=(int)(PCLK/(bpsx16))–1或者UBRDIVn=(int)(UCLK/(bpsx16))–1PCLK是外围总线频率,UCLK是UCLK引脚引入的时钟频率。例如在PCLK=50.7MHz下,当波特率取115200时,UBRDIVn=int(50700000/115200/16)–1=26根据具体的程序要求,正确配置各存放器。详细具体设置应用,请参见HARDWARE\ADS\实验八目录下的UART.mcp工程文件。请详细阅读代码注释。实验步骤本实验使用实验教学系统的CPU板,串口。在进展本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆。使用串口线连接PC机串口1和实验箱CPU板的串口。检查连接是否可靠,可靠后,接入电源线,系统上电。翻开ADS1.2开发环境,从里面翻开\实验程序\HARDWARE\ADS\实验八\uart.mcp工程文件,进展编译。编译通过后,进入ADS1.2调试界面,加载实验程序\HARDWARE\ADS\实验八\UART_Data\Debug中的映象文件程序映像UART.axf。翻开超级终端0,超级终端1,进展设置〔115200,8位数据,1位停顿位,无奇偶校验〕;在ADS调试环境下,全速运行映象文件。激活超级终端0,敲键盘,观察超级终端0,超级终端1的内容显示!所敲键盘的字符应该在两个超级终端上显示出来。实验的原理就是把键盘敲击的字符通过PC机的串口发送给实验箱上的ARM的CPU板的串口0,ARM的CPU板上的串口得到字符后,通过ARM把它送给CPU板上的串口0输出给PC机。这样,就完成了串口间的收发数据。分析理解如何设置串口的波特率串口是如何发送、接收数据的在超级终端上显示特定的字符串(HelloWorld!)。ARM的A/D接口实验实验目的学习A/D接口原理掌握S3C2410的A/D相关存放器的配置及编程应用方法;实验内容在实验箱的CPU板上运行程序,在超级终端及LCD上显示采集到的数据值!实验设备EL-ARM-830+教学实验箱,PentiumII以上的PC机,仿真调试电缆,串口电缆。PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱动程序。实验原理A/D转换器是模拟信号和CPU之间联系的接口,它是将连续变化的模拟信号转换为数字信号,以供计算机和数字系统进展分析、处理、存储、控制和显示。在工业控制和数据采集及许多其他领域中,A/D转换是不可缺少的。按照转换速度、精度、功能以及接口等因素,常用的A/D转换器有以下两种:a.双积分型的A/D转换器双积分型也称为二重积分式,其实质是测量和比拟两个积分的时间,一个是对模拟信号电压的积分时间T,此时间常是固定的,另一个是以充电后的电压为初值,对参考电源Vn的反向积分,积分电容被放电至零,所需的时间Ti。模拟输入电压Vi与参考电压Vref之比,等于上述两个时间之比。由于Vref、T时间固定,而放电时间Ti可以测出,因而可以计算出模拟输入电压的大小。b.逐次逼近型的A/D转换器逐次逼近型也称为逐位比拟式,它的应用比积分型更为广泛,通常主要有逐次逼近存放器SAR、D/A转换器、比拟器以及时序和逻辑控制等局部组成。通过逐次把设定的SAR存放器中的数字量经D/A转换后得到电压Vc与待转换模拟电压V0进展比拟。比拟时,先丛SAR的最高位开场,逐次确定各位的数码应为‘1’还是‘0’,而得到最终的转换值。其工作原理为:转换前,先将SAR存放器各位清零,转换开场时,控制逻辑电路先设定SAR存放器的最高位为‘1’,其余各位为‘0’,此值经D/A转换器转换成电压Vc,然后将Vc与输入模拟电压Vx进展比拟。如果Vx大于等于Vc,说明输入的模拟电压高于比拟的电压,SAR最高位的‘1’应保存;如果Vx小于Vc,说明SAR的最高位应去除。然后在SAR的次高位置‘1’,依上述方法进展D/A转换和比拟。如此反复上述过程,直至确定出SAR存放器的最低位为止,此过程完毕后,状态线改变状态,说明已完成一次转换。最后,逐次逼近存放器SAR中的数值就是输入模拟电压的对应数字量。位数越多,越能准确逼近模拟量,但转换所需的时间也越长。三星2410的A/D的工作介绍S3C2410的A/D转换器包含一个8路模拟输入混合器,可以将模拟输入信号转换成10位数字编码。在AD转换时钟为2.5MHz时,其最大转换率为500KSPS。AD转换操作支持片上采样保持功能和掉电模式。特征如下:最大转换速率:500KSPS输入电压范围:0-3.3V在正确使用S3C2410的AD进展采集实验前,首先,要配置相关的存放器组。见表2-9-1。表2-18为A/D转换存放器的配置说明。表2-9-1 ECFLGA/D转换状态标志(只读)[15]0=A/D转换中1=A/D转换完毕 PRSCENA/D转换预比例因子〔预定值〕使能[14]0=制止1=使能PRSCVL[13:6]预比例因子设置SEL_MUX模拟输入通道选择[5:3]000=AIN0001=AIN1010=AIN2011=AIN3100=AIN4101=AIN5110=AIN6111=AIN7STDBM模式选择[2]0=普通模式1=待命模式READ_STARTA/D转换通过读来启动[1]0=通过读操作关闭1=通过读操作启动ENABLE_STARTA/D转换通过允许来启动〔如果READ_START位无效〕[0]0=关闭 1=A/D转换开场,之后该位自动去除表2-9-2为A/D转换器转换模式的配置说明,表2-9-2在普通AD转换时,AUTO_PST和XY_PST都设置成0即可,其他各位与触摸屏有关,可以忽略,不需设置。表2-9-3为A/D转换器数据存放器的说明。表2-9-3在这个数据存放器是只读,可以读取A/D转换的数字量。9~0位是转换后的数字量。根据具体的程序要求,正确配置各存放器。现举例如下:〔仔细分析转换过程〕intGet_AD(unsignedcharch){inti;intval=0;if(ch>7)return0; //通道不能大于7for(i=0;i<16;i++){ //为转换准确,转换16次rADCCON|=0x1;//启动A/D转换rADCCON=rADCCON&0xffc7|(ch<<3); while(rADCCON&0x1); //防止第一个标志出错 while(!(rADCCON&0x8000));//防止第二个标志出错 val+=(rADCDAT0&0x03ff); Delay(10);}return(val>>4);//为转换准确,除以16取均值}voidAD_Init(void){rADCDLY=(0x100); //ADCStartorIntervalDelayrADCTSC=0;//设置成为ADC模式rADCCON=(1<<14)|(49<<6)|(ch<<3)|(0<<2)|(0<<1)|(0);//设置ADC控制存放器}注:rADCCON,这种宏形式,在Startup2410/INC/2410addr.h中已定义!详细具体的应用,请参见HARDWARE\ADS\实验九目录下的AD.mcp工程文件。请详细阅读代码注释。实验步骤本实验使用实验教学系统的CPU板,串口、AD通道选择开关、LCD单元。在进展本实验时,音频的左右声道开关、触摸屏中断选择开关等均应处在关闭状态。在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆。使用串口线连接PC机串口1和实验箱CPU板的串口,使用直连线连接底板串口2和PC机上的串口2之间的电缆。检查连接是否可靠,可靠后,接入电源线,系统上电。拨码开关SW5为选中的A/D转换的通道,值得注意的是本实验系统八个通道可以同时采集一个信号源。实验时要选中采集的通道号,即对应的SW5开关拨到ON状态。例如SW3的1拨到ON状态,说明用AD转换器的通道1采集,如果,8个通道全部选择为ON,则表示用8个通道采集。本实验程序使用通道1采集数据,所以,SW5的1应该拨到ON状态。要给ADIN一个输入信号,可以是底板上的SQUARE信号和SINE信号,也可是外部信号,但是必须注意,接外部电压信号时,要共地,以及信号的电压范围为0—2.5V,切记!!!翻开ADS1.2开发环境,从里面翻开\实验程序\HARDWARE\ADS\实验九\AD.mcp工程文件,进展编译。编译通过后,进入ADS1.2调试界面,加载AD_Data\Debug中的映象文件程序映像AD.axf。在ADS调试环境下,全速运行映象文件。翻开LCD电源开关,检查SW3上选择的是通道几。确认后,观察LCD上1通道当前采集的情况。由于液晶的显示速度比波型慢许多,所以要暂停程序才会看到比拟清楚的波形。由于信号源输出后,电压经过缩放和偏置处理。使得的ARMCPU板所采集到的电压值的变化范围缺乏0—2.5V,故而采集到的数字值,不能满程。但这些不会影响实验原理的显示。分析理解程序运行并在LCD屏幕上显示〔3分〕分析在屏幕中显示文字和图形,〔0.5分〕理解在超级终端上显示采集的数据。〔0.5分〕分析了解ADC初始化。〔0.5分〕分析了解ADC过程。〔0.5分〕如何在LCD上面显示AD转换后的波形。〔1分〕周期长一些,幅度大一些。键盘接口和七段数码管的控制实验实验目的学习4X4键盘的与CPU的接口原理掌握键盘芯片HD7279的使用,及8位数码管的显示方法;实验内容通过4X4按键完成在数码管上的各种显示功能,以及LCD上显示。实验设备EL-ARM-830+教学实验箱,PC机,仿真调试电缆。PC操作系统WINXP,ADS1.2集成开发环境,仿真调试驱动程序。实验原理键盘和7段数码管的控制实验,是通过键盘的控制芯片HD7279A来完成的。它的+信号线及控制线连接到S3C2410上,驱动线直接连到8位共阴的7段数码管上。由于其芯片的接口电压是5V的,而S3C2410的接口电压是3.3V,所以,HD7279AHD7279是一片具有串行接口的可同时驱动8位共阴式数码管或独立的LED的智能显示驱动芯片。该芯片同时还可连接多达64键的键盘矩阵,单片即可完成显示键盘接口的全部功能。内部含有译码器可直接承受BCD码或16进制码并同时具有两种译码方式。此外还具有多种控制指令如消隐、闪烁、左移、右移、段寻址等,具有片选信号可方便地实现多于8位的显示或多于64键的键盘接口。HD7279在与S3C2410接口中,它使用了4根接口线。片选信号#CS〔低电平有效〕,时钟信号CLK,数据收发信号DATA,中断信号#KEY〔低电平送出〕,EL-ARM-830+实验箱与其的接口中,使用了三个通用I/O接口,和一个外部中断,实现了与HD7279A的连接,S3C2410的外部中断接HD7279的中断#KEY,三个I/O口分别与HD7279A的其他控制、数据信号线相连。HD7279的其它管脚分别接4X4按键和8位数码管。当程序运行时,按下按键,平时为高电平的HD7279A的#KEY就会产生一个低电平,送给S3C2410的外部中断5请求脚,在CPU中断请求位翻开的状态下,CPU会立即响应外部中断5的请求,PC指针就跳入中断异常向量地址处,进而跳入中断服务子程序中,由于外部中断4/5/6/7使用同一个中断控制器,所以,还必须判断一个状态存放器,判断是否是外部中断5的中断请求,当判断出是外部中断5的中断请求,则程序继续执行,CPU这时,通过发送#CS片选信号选中HD7279A,再发送时钟CLK信号和通过DATA线发送控制指令信号给HD7279A,HD7279A得到CPU发送的命令后,识别出该命令,然后,扫描按键,把得到键值回送给CPU,同时,在8位数码管上显示相关的指令内容,CPU在得到按键后,有时,程序还会给此键值一定的意义,然后再通过识别此按键的意义,进而进展相应的程序处理。要进一步开发显示功能,请参见关于HD7279芯片及相应的编程资料HD7279A.PDF的文档,其中有详细、完备的编程资料。在ADS调试环境下全速运行映象文件。按下任意键值,观察数码管的显示。说明:“0”“1”“2”“4”“9”“A〞键表示数码管循环左移。其他按键在最右两个数码管上显示键值。根据HD7279A.PDF文档可以进一步开发具体的相应的程序。详细具体的应用,请参见Key_Led.mcp工程文件。请详细阅读代码注释。#include"..\INC\config.h"voidMain(){ charp; Target_Init();//目标初始化 while(1) { switch(key_number) { case0: send_byte(cmd_test); //测试键 break;case1:for(p=0;p<8;p++)//右移8位{ send_byte(0xA0); send_byte(0xC8+7); send_byte(p);long_delay();Delay(7000);} break; case2: for(p=0;p<8;p++)//循环右移{ send_byte(0xA0); send_byte(0xC8+7); send_byte(p);

温馨提示

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

评论

0/150

提交评论