




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ELTABARMII说明书述EL-TAB-ARM-II型教学实验系统属于一种综合的教学实验系统,它是集学习、应用编研究于一体ARM实验教学系统。用户可根据自己的需求选用不同类型的CPU适配hV线能够拓展较为丰富的实验接口板。用户在了解Tech_V标准后,更能研发出不同用途的实验接口板。除此之外,在实验板上有丰富的外围扩展资源(数字量IO输入输出,语音ARM的基础实验和数据通信实验、以太网实验。音频录放16位色LCD总线扩展接口模拟数字量输入输出4X4键盘8位数1.核心板的硬件资源(ARM920T核)☆☆☆☆☆单元。芯片名称S3C2410HY57V561620K9F5608数量功能板上标号1ARM920T,中央处理器S3C2410X2动态存储器(SDRAM),32MB/片HY57V5616201海量存储器,32MBK9F5608U1)电源模块AXAX887961AX88796AS1117-3.31AS1117-3.3AS1117-1.81AS1117-1.8MAX32321IMP811-S1AREFSEL模拟参考电压选择S3Step与4Step选择(CPU引脚)与3Step、4Step连接RESET键系统复位按键P.SUSB-HOSTUART0(CROSS/F)USB-DEVICERJ45访问以太网ARM-JTAGINTERFACEC功能单元INTERFACEB数据、地址单元TERFACEA功能单元号PWRLED1LED2钟晶振MHz2.核心板资源的具体介绍)NAND_FLASH海量存储器单元设置成00b,当核心板上电复位时,系统首先将Nand_Flash开始的0~4K的程序映射到3)同步动态存储器单元数据总线。片选NSCS6接两片HY57V561620单元作为片选信号,CPU分配给这两片该存储单元在板卡上标号为UART0(CROSS/F),选用了MAX3232电压转换芯片,进行5)主/从USB单元B6)网络单元为清楚显示核心板上各存储区及单元,见表1-5。号存储区存储的有效区容量(字节)HY57V561620态存储器Bank7HY57V561620态存储器Bank6AX88796Band2若干寄存器NAND_FLASH海量存储器Bank0JTAG(JointTestActionGroup,联合测试行动小组)是一种国际标准测试协议,主片内部封装了专门的测试电路TAP(TestAccessPort,测试访问口),通过专用的JTAG试时钟、测试数据输入和测试数据输出。通过JTAG接口,可对芯片内部的所有部件进行访问,因而是开发调试嵌入式系统的M引引脚名称描述1VTref目标板参考电压,接电源2VCC接电源3nTRST测试系统复位信号5TDI测试数据串行输入7TMS测试模式选择9TCK测试时钟11RTCK测试时钟返回信号13TDO测试数据串行输出nRESET目标系统复位信号8)核心CPU板上的外接接口单元CPUINTERFACEAINTERFACEBINTERFACEC个外扩接口单元,现对这三个接口的引脚加以说明。NTERFACEBINTERFACEB号号123LA19地址线O4LA18地址线O5LA17地址线O6LA16地址线O7EXA15地址线O8EXA14地址线O9EXA13地址线OEXA12地址线OND地ND地EXA11地址线OEXA10地址线O序号代号含义EXA9地址线OEXA8地址线OEXA7地址线OEXA6地址线OEXA5地址线OEXA4地址线OEXA3地址线OEXA2地址线OEXA1地址线OEXA0地址线OLA21地址线OLA20地址线ONCNCueditND地ND地NC空NC空NC空NC空NC空NC空NC空NC空VDD33VDD33NC空NC空NC空NC空NC空NC空NC空NC空序号代号含义ND地ND地EXD15数据线EXD14数据线EXD13数据线EXD12数据线EXD11数据线EXD10数据线EXD9数据线EXD8数据线ND地ND地EXD7数据线EXD6数据线665EXD5数据线IO66EXD4数据线IO67EXD3数据线IO68EXD2数据线IO69EXD1数据线IO70EXD0数据线IO71GND地72GND地73LNOE使能信号O74LNWE写信号O75LNOE使能信号O76NWIT等待信号I77NC空脚空78NGCS0片选信号O79GND地80GND地NTERFACEA序号序号代号义12V2-12V3ND地序号代号含义4ND地567ND地8ND地9NC空NC空NC空NC空NC空NC空NC空NC空+3.3V20+3.3V21SPICLK022MISO0SPI数据输入ICPU引脚23nSS0SPI片选OCPU引脚24MOSI0SPI数据输出OCPU引脚25GND地26GND地27NC空脚空28NC空脚空29NC空脚空30NC空脚空31GND地32GND地33NC空脚空34NC空脚空35IISLRCLKIIS左右声道时O钟36IISDOIIS数据输出O37GND地38GND地序号代号含义IO备注39IISCLKIIS输出时钟O40NC空脚空41NC空脚空42IISDIIIS数据输入I43GND地44GND地45TOUT0定时器输出0O47NC空脚空49TOUT1定时器输出151GND地52GND地54NC空脚空55NC空脚空56NGCS1片选信号1O57NC空脚空58NC空脚空59RESET复位信号O60NC空脚空61GND地62GND地63NC空脚空64NC空脚空65NC空脚空66NC空脚空69NGCS3序号代号OIO备注70NGCS1片选信号1O71NC空脚空72NC空脚空73NC空脚空74NC空脚空75NC空脚空76GND地77GND地78NC空脚空79GND地80GND地入、液晶、串口等和扩展子板间的通讯信号。见表1-9。序号代号含义IO备注1+5V+5V电源2+5V+5V电源3AIN0模拟输入0I4AIN1模拟输入1I5AIN2模拟输入2I6AIN3模拟输入3I7AIN4模拟输入4I8AIN5模拟输入5I9AREFB模拟输入负参考电压I10AREFT模拟输入正参考电压I11AVCOM模拟输入参考电压公I共端12TOUT2定时器输出2O13TOUT3定时器输出3O14NC空脚15ExINT4外部中断4I16ExINT5外部中断5I17ExINT6外部中断6I18ExINT7外部中断7I19nGCS4片选O20nGCS5片选O序号代号含义IO备注21NGCS4片选O22nGCS5片选O23LnWBE0写字节使能0O24LnWBE1写字节使能1O25LnWBE2写字节使能2O26LnWBE3写字节使能3O27UCLK输入输出口IO28GPH1输入输出口IO29CLKOUT0时钟输出信号源0O30CLKOUT1时钟输出信号源1O31IICSCLIIC总线时钟O32IICSDAIIC总线数据IO33RXD1串口1接收数据I34TXD1串口1发送数据O35RXD2串口2接收数据I36TXD2串口2发送数据O37SDDAT0SD卡数据0OEL-830底板未使用38SDDAT1SD卡数据1OEL-830底板未使用39SDDAT2SD卡数据2OEL-830底板未使用40SDDAT3SD卡数据3OEL-830底板未使用41SDCLKSD卡时钟OEL-830底板未使用42SDCMDSD卡命令OEL-830底板未使用43AIN6模拟输入6I44AIN7模拟输入7I45NC空脚46CDCLKCPU信号,解码器系统O47VD19液晶数据19OCPU引脚48VD20液晶数据20OCPU引脚49VD21液晶数据21OCPU引脚50VD22液晶数据22OCPU引脚51VD23液晶数据23OCPU引脚52VD10液晶数据10OCPU引脚53VD11液晶数据11OCPU引脚54VD12液晶数据12OCPU引脚55VD13液晶数据13OCPU引脚序号代号含义IO备注56VD14液晶数据14OCPU引脚57VD15液晶数据15OCPU引脚58VD3液晶数据3OCPU引脚59VD4液晶数据4OCPU引脚60VD5液晶数据5OCPU引脚61VD6液晶数据6OCPU引脚62VD7液晶数据7OCPU引脚63TSMX接触摸屏XN脚OCPU引脚64TSMY接触摸屏YN脚OCPU引脚65TSPY接触摸屏YP脚OCPU引脚66TSPX接触摸屏XP脚OCPU引脚67VM-VDEN液晶电压控制信号I68VF-VS液晶桢时钟O69VL-HS液晶线时钟O70VCLK液晶位时钟O71VD0液晶数据0O72VD1液晶数据1O73VD2液晶数据2O74VD3液晶数据3O75VD4液晶数据4O76VD5液晶数据5O77VD6液晶数据6O78VD7液晶数据7O79GND地880GND地有:LCD模块,触摸屏模块,语音单元模总线接口,总线扩展口等等。底板详细具体资源见表1-10。单元名称触摸屏模块语音模块键盘数码管模块模拟输入输出模块关键控制芯片控制器ADS7843UDA1341TSHD7279A74LS273,244液晶显示完成触摸响应语音模拟信号采集中断请求,数码管显示完成数据锁存,数据发送色ARM9实验不使用改芯总线扩展接口接下来详细介绍各模块单元。资源的具体介绍5V,+12V,-12V留有扩展接口,有扩展1)模拟输入输出接口单元t字量输出(通过八个LED灯显示),通过74LS273锁存。数字量的输入输出都映射到2)键盘数码管模块动8位共阴式数码管或(64只独立LED)的智能显示驱动芯片,该芯片同时还可连接CD的显示或多于64键的键盘接口。在该实验系统中,仅提供了3)音频模块UDATS。该芯片有两个串行同步变换通UDATS拟信号经过偏置CPU采集,然后实时的播放出去。DA功率放大,然后可以推动功率为0.4W的板处理单元原理框图音频输入偏置滤波处理音频输出功率放大5)触摸屏模块MIC:音频输入端子,麦克风等语音信号。SPEAKER:音频输出端子,可接耳机、音箱。“SPEAKER_R”:音量变大音量变小逆时针旋转音量变大音量变小顺时针旋转音量变大音量变小“SPEAKER音量变大音量变小逆时针旋转顺时针旋转本实验系统仅选用了LCD液晶显示屏,LCD的控制器使用S3C2410的内部集成的控5.5V);低功耗设计可满足产品的省电要求。其中,可调变位器VR2用于调节LCD屏色彩的对比度,产品出厂时,已设定成在室温下较好的对比度,当因温度低或高等因素显示不正常时,可适当调节VR2到合适的色彩。一般请不要调整。“VR2”:逆时针旋逆时针旋转顺时针旋转LCDONOFF,控制着LCD屏的电源,是电源的开关。由于实验箱上的资源众多,几乎每一个设备资源都要使用片选信号或中断信号或能满足的,因此该实验箱通过加入了一片CPLD芯片,用来完成各资源所需的地址译码,片选信号,以及一些高低电平的模拟。底板上大多的资源都通过CPLD的地址译码,进行片选电平的产生,以及模拟高低电D出了底板中所需信号的地址。##defineclrcs1#definesetcs1(*(volatileunsigned*)0x20000006)=0;tmp=(*(volatileunsigned*)0x20000006);模块名称相应说明总线接口模拟输入输出:具体的应用,请详见源码程序。12)其它接口说明电源单元:为系统提供+5V、+12V、-12V、+3.3V电源,其中号LED15LED16LED17LED18综上所述,本章介绍了该系统的硬件资源,看完本章内容,应该对实验系统有一个基本的了解,在后面的几章中将会结合光盘资料给出的实验程序详细介绍每个单元具体应用。当进行嵌入式系统开发时,选择合适的开发工具可以加快开发进度、节省开发成本。因此一套含有编辑软件、编译软件、汇编软件、连接软件、调试软件、工程管理及函数库的集成开发环境(IDE)是必不可少的。时在不需要仿真器的情况下,需要一根JTAG调试电缆就可以了,但它在调试的时候占用CPU资源,调试的稳定性稍差,成本低,比较适合学生实验使用。ADS调试时使用外接的情况下,其在调试时不占用CPU的资源,稳定性好,但是成本高,适合用于科研教学和嵌入式的产品开发。三星的S3C2410的硬件资源进行一系列的HARDWARE。这其中包括ADS1.2开发环境创建这些实验是脱离操作系统的HARDWARE,通过此类实验可以了解和学习ARM硬件的架构S动程序1.ADS1.2下建立工程1.运行ADS1.2集成开发环境(CodeWarriorforARMDeveloperSuite),点击位置。按确定保存项目。DebugEdit|DebugSettingslilerArchitectureorProcesser在SDRAM中运行,则可在0x30000000—0x33ffffff中选MSDRAM始地址,所以必须把你的程序空而且还必须是4字节对齐的地址(ARM状态)。通常入口点Imageentrypoint为0x30000000,ro_base入口的起始段标号。它的作用是通知编译器,整个项目的开始运行,是从该段开RMfromELFformat栏中选择Plainbinary,这是设置要下载到flash中的二进制文件。图ADS作为模板保存起来。首先,要将该项目工程文件改一个合适的名字,如S3C2410合适的模板目录名,如,S3C2410ARMExecutableImage,再将刚刚设置完的jectAddFiles的文件加入,ADS1.2不能自动进行文件分类,用户必须通过Project|CreateGroup来创建文件夹,然后把加入的文件选中,移入文件夹。或者鼠标放在文件填加区,右键点击,即出!如图2-1-11EditPreference编辑的颜色、字体大小,形状,变量、函数的颜色等等设置。如图2-1-12。在ADS1.2下进行仿真调试,首先需要一根仿真调试电缆。其驱动程序的安上图,左起第一个是全速运行,第二个是停止运行,第三个跳入函数内部,第四个单步执行,第五个跳出函数。到此,开发环境就全部介绍完了,这是ARM的开发基础,希望你有所收获。1.用汇编语言编写一个简单的应用程序程序ARM写规范ARM敏感,书写标号及指令时字母大到此行结束,注释可以在一行的顶格书写。ARM照我们提供的.ARM汇编语言程序的基本结构数据序列,具有特定的名称。段可以分为代码段的和数据段,代码段的内容为执行代码,数据段存放代码运行时所需的数据。一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行文件。可执行映像文件通常由以下几部分构成:◆一个或多个代码段,代码段为只读属性。◆零个或多个包含初始化数据的数据段,数据段的属性为可读写。◆零个或多个不包含初始化数据的数据段,数据段的属性为可读写。链接器根据系统默认或用户设定的规则,将各个段安排在存储器中的相应位置。源程序中段之间的相邻关系与执行的映象文件中的段之间的相邻关系不一定3.简单的小例子下面是一个代码段的小例子AREAENTRYRRRRRR…NDInit,CODE,READONLYR0,=0x3FF5000R1,0x0fR1,[R0]R0,=0x3F50008R1,0x1R1,[R0]在汇编程序中,用AREA指令定义一个段,并说明定义段的相关属性,本例中定下面是一个数据段的小例子AREADataArea,DATA,NOINIT,ALIGN=2DISPBUFSPACE200RCVBUFSPACE200……3.检查连接是否可靠,可靠后,接入电源线,系统上电。4.打开ADS1.2开发环境,从里面打开\实验程序\HARDWARE\ADS\实验二\asm.mcp项5.编译通过后,进入ADS1.2调试界面,加载\实验程序\HARDWARE\ADS\实验二axf程序的源码。UART这部分的代码,……bUARTUARTldrr1,=0x2afaaastrr1,[r0]ldrr0,=GPHUPldrr1,=0x7ffstrr1,[r0];//GPH[10:0]禁止上拉ldrr1,=0x0strr1,[r0]ldrr1,=0x0strr1,[r0]ldrr0,=ULCON0;//设置线寄存器ldrr1,=0x3;//正常模式,无奇偶校验,一个停止位,8个数据位strr1,[r0]xRXTXRX正常操作模式,中断请求或表决模式strr1,[r0]ldrrUBRDIV//设置波特率为115200ldrr1,=0x1a;//int(50700000/16/115200)-1=26strr1,[r0]movr1,#100Delaysubr1,r1,#0x1bneDelayldrr0,=INTMSKldrr1,[r0]andr1,r1,#0xefffffffstrr1,[r0]MOVR5,#127;//设置要打印的字符的个数MOVR1,#0x0;//设置要打印的字符LOOPLDRR3,=UTRSTAT0LDRR2,[R3]TSTR2,#0x04;//判断发送缓冲区是否为空BEQLOOP;//为空则执行下边的语句,不为空则跳转到LOOPLDRR0,=UTXH0STRR1,[R0]ADDR1,R1,#1SUBR5,R5,#0x01CMPR5,#0x0;//向数据缓冲区放置要发送的数据BNELOOPLOOP2BLOOP2分析清楚之后,我们改变R1的数据,换成其他的数据,然后保存、编译、调试。观S序ARMC言编程是大势所趋在应用系统的程序设计中,若所有的编程任务均由汇编语言来完成,其工作ARM速度较高,存储器的存储速度和存代码的移植十分方便,程序的重复使用率提高,程序架构清晰易懂,管理较为容ARMC规则RMMATPCS,就是ARM、Thumb的过程调用标准(ARM/ThumbProcedureCallndard语言来说,完全要依赖用户保证各个子程序遵循ATPCS的规则。具体来说,汇编C在汇编程序中使用EXPORT伪指令声明本子程序,使其他程序可以调用此子C的StartupINC目录下都有一3.简单的小例子下面是一个简单的小例子IMPORTMainAREAInit,CODE,READONLY;ENTRYLDRR0,=0x01d00000LDRR1,=0x245BLENDR1,[R0]Main;跳转到Main()函数处的C/C++程序束以上是一个简单的程序,先寄存器初始化,然后跳转到Main()函数标识的CCMainC中的Main()函数。#definerGPGCON(*(volatileunsigned*)0x56000060)//PortGcontrol#definerGPGDAT(*(volatileunsigned*)0x56000064)//PortGdatadefinerGPGUPvolatileunsignedx//Pull-upcontrolG在程序中实现,for(;;){if(flag==0){for(i=0;i<100000;i++);//延时rGPGCON=rGPGCON&0xfff0ffff|0x00050000;rGPGDAT=rGPGDAT&0xeff|0x200;for(i=0;i<100000;i++);//延时flag=1;}else{for(i=0;i<100000;i++);//延时rGPGCON=rGPGCON&0xfff0ffff|0x00050000;rGPGDAT=rGPGDAT&0xdff|0x100;for(i=0;i<100000;i++);//延时flag=0;}}3.检查连接是否可靠,可靠后,接入电源线,系统上电。5.编译通过后,进入ADS1.2调试界面,加载\实验程序\HARDWARE\ADS\实验三6.打开/实验软件/tools/目录下的串口调试助手工具,配置为波特率为115200,55。下边分析一下主程序的源码。CBOOTLOADER的章节里,要详细介#include"..\inc\config.h"unsignedchardata;//嵌入包括硬件的头文件//定义全局变量voidMain(void){Target_Init();Delay(10);data=0x55;while(1){Uart_Printf("%xDelay(10);}}//目标板初始化,定义串口的硬件初始化在//延时//给全局变量赋值dataxx位数,重新编译,下载,看看串口工BBARM统,该复杂系统里,多数硬件模块都是可配置的,需要由软件来预先设置其需要的工作状态,因此在用户的应用程序之前,需要由专门的一段代码来完成对系统基本的初始化工作。由于此类代码直接面对处理器内核和硬件控制器进行编程,故一般均用汇编语言实现。系统1.分配中断向量表2.初始化存储器系统3.初始化各工作模式的堆栈4.初始化有特殊要求的硬件模块5.初始化用户程序的执行环境6.切换处理器的工作模式7.呼叫主应用程序向量表中4个字节的存储空间,只能放置一条ARM指令,所以,通常放一条跳转指令让程序跳转到存储器的其他地方,再执行1.分配中断向量表的程序通常如下表示:AREAInit,CODE,READONLYENTRYResetHandlerUndefHandlerSWIHandlerPreAbortHandlerDataAbortHandlerandlerFIQHandlerENTRY是指定编译器保留这段代码,链接的时候要确保这段代码指针会自动寻找该关键字从该关键字处执行,该关键字的地址应满足4字节对齐外部中断向量中断等等,外设中断向量表同理需要相应的跳转指令,以发生相应中断时从对应的中断向量表跳到存储器的某个地方,一般可选择让其跳到SDRAM的高端地址,然后,再跳入中断服务程序的地址,往下执行。2.初始化存储器系统存储器类型,存储的容量以及时序配置、总线宽度等等。通常Flash和SRAM同属于静态存储器类型,可以合用同一个存储器端口;而DRAM因为有动态刷新和的存储器端口。除存储器外,网络芯片的存储器相关配置,外接大容量的存储卡的配置均在此处实现。存储器端口的接口时序优化是非常重要的,这会影响到整个系统的性能。因为一般系统运行的速度瓶颈都存在于存储器访问,所以存储器访问时序应尽可能的快;而同时又要考虑到由此带来的稳定性问题。3.初始化堆栈所以,对程序中需要用到的每一种模式都要给SP定义一个堆栈地址。方法是改再操作CPSR回到别的模式了,可能会对接下去的程序执行造成影响。这是一段堆栈初始化的代码示例:;//预定义处理器模式常量USERMODEFIQMODEIRQMODESVCMODEABORTMODEUNDEFMODESYSMODENOINTtStacksmrsr0,cpsrQUQUQUQUQUQUQUEQUxxxxxbf0xc0//屏蔽中断位bicr0,r0,#MODEMASKorrr1,r0,#UNDEFMODE|NOINTmsrcpsr_cxsf,r1ldrsp,=UndefStackorrr1,r0,#ABORTMODE|NOINTmsrcpsr_cxsf,r1ldrsp,=AbortStackorrr1,r0,#IRQMODE|NOINTmsrcpsr_cxsf,r1ldrsp,=IRQStackorrr1,r0,#FIQMODE|NOINTmsrcpsr_cxsf,r1ldrsp,=FIQStackbicr0,r0,#MODEMASK|NOINTorrr1,r0,#SVCMODEmsrcpsr_cxsf,r1ldrsp,=SVCStackmovpc,lrLTORG4.初始化有特殊要求的硬件模块。5.初始化应用程序执行环境RAM要的从ROMLDRr0,=|Image$$RO$$Limit|LDRr1,=|Image$$RW$$Base|LDRr3,=|Image$$ZI$$Base|CMPr0,r1相等BEQ%F10CMPr1,r3LDRCCr2,[r0],#4STRCCr2,[r1],#4BCC%B01LDRr1,=|Image$$ZI$$Limit|MOVr2,#02CMPr3,r1STRCCr2,[r3],#4BCC%B2|Image$$RW$$Base|:RW区在RAM里的执行区起始地址,也就是编译器选项ROMImageROLimtRW到RAM里面到遇到结束地址|Image$$ZI$$Limit|6.改变处理器模式因为在初始化过程中,许多操作需要在特权模式下才能进行(比如对CPSR的修改),所以要特别注意不能过早的进入用户模式。内核级的中断使能也可以考虑在这一步进行。如果系统中另外存在一个专门的中断控制器,比如三星的S3C2410,这么做总是安全的。7.呼叫主应用程序,就需要把程序流程转入主应用程序。最MPORTMainBMain直接从启动代码跳转到应用程序的主函数入口,当然主函数名字可以由用户IMPORT__mainB__main__main()是编译系统提供的一个函数,负责完成库函数的初始化和初始化应tionsconfiguretargetARMULARMUL程序。RTDPORTEPORTFPORTG配置这些端口,是通过一些寄存器来实现的,这些寄存器均有各自的地址,位长32位。往该地址中写入相应的数据,即可实现功能及数据配置。GPACON(0x56000000)//PortAontrolGPADAT(0x56000004)//PortAGPBCON(0x56000010)//PortBontrolGPBDAT(0x56000014)//PortBGPBUP(0x56000018)//Pull-upcontrolBGPCCON(0x56000020)//PortControlGPCDAT(0x56000024)//PortCGPCUP(0x56000028)//Pull-upcontrolCGPDCON(0x56000030)//PortDontrolGPDDAT(0x56000034)//PortDGPDUP(0x56000038)//Pull-upcontrolDGPECON(0x56000040)//PortEontrolGPEDAT(0x56000044)//PortEGPEUP(0x56000048)//Pull-upcontrolEGPFCON(0x56000050)//PortFontrolGPFDAT(0x56000054)//PortFGPFUP(0x56000058)//Pull-upcontrolFGPGCON(0x56000060)//PortGontrolGPGDAT(0x56000064)//PortGGPGUP(0x56000068)//Pull-upcontrolGGPHCON(0x56000070)//PortHontrolGPHDAT(0x56000074)//PortHGPHUP(0x56000078)//Pull-upcontrolHG中的对应位上,写入1,则该管脚输出为高电平,写入0,则该管脚输出为低电平。若配置为功能管脚,则该管脚变成具体的功能脚。值。当H口某管脚配置成输入端口,则在GPHDAT对应的地址中的对应位上,得到1,则该管脚的输入为高电平,得到0,则该管脚的输入为低电则该管脚输出为高电平,写入0,则该管脚输出为低电平。若配置为功能管脚,则该在程序中对GPI/O各寄存器的读写实现,是通过给宏赋值实现的。这些宏在2410addr.h#definerGPACON#definerGPADAT(*(volatileunsigned*)0x56000000)//PortAcontrol(*(volatileunsigned*)0x56000004)//PortAdata#definerGPBCONunsigned*)0x56000010)//PortBontrol#definerGPBDATunsigned*)0x56000014)//PortB#definerGPBUPunsigned*)0x56000018)//Pull-upcontrolB#definerGPCCONunsigned*)0x56000020)//PortControl#definerGPCDATunsigned*)0x56000024)//PortC#definerGPCUPunsigned*)0x56000028)//Pull-upcontrolC#definerGPDCONunsigned*)0x56000030)//PortDontrol#definerGPDDATunsigned*)0x56000034)//PortD#definerGPDUPunsigned*)0x56000038)//Pull-upcontrolD#definerGPECONunsigned*)0x56000040)//PortEontrol#definerGPEDATunsigned*)0x56000044)//PortE#definerGPEUPunsigned*)0x56000048)//Pull-upcontrolE#definerGPFCONunsigned*)0x56000050)//PortFontrol#definerGPFDATunsigned*)0x56000054)//PortF#definerGPFUPunsigned*)0x56000058)//Pull-upcontrolF#definerGPGCONunsigned*)0x56000060)//PortGontrol#definerGPGDATunsigned*)0x56000064)//PortG#definerGPGUPunsigned*)0x56000068)//Pull-upcontrolG#definerGPHCON#definerGPHDAT#definerGPHUP(*(volatileunsigned*)0x56000070)//PortHcontrol(*(volatileunsigned*)0x56000074)//PortHdata(*(volatileunsigned*)0x56000078)//Pull-upcontrolHfffx管脚配置成输入输出端口,也可把管脚配置成所需的功能管脚。D3.检查连接是否可靠,可靠后,接入电源线,系统上电。p5.编译通过后,进入ADS1.2调试界面,加载实验程序\HARDWARE\ADS\实验五理配置子程仿真调试驱动程序移等工作时,常使用此类中断。FIQ的优先IRQARM常模式,当一旦有中断发生,不管是外部常向量地址处,一般存有中断服务子程序的地址,所以,接下来PC指针跳入中断ARM,比如,串别,以及当发生中断时,它们都有相应的中断标志位,通过在发生中断是判断中断来识别到底哪一个中断发生了。C中断优先级产生模块如下图所示:从上图可以看出,中断优先级产生模块共有7个判优器,每个判优器是否使能由寄存器PRIORITY[6:0]决定,每个判优器下面有4~6个中断源,这些中断源对应着RR/W中断源挂起寄存器,当中断产生后,相应位置位R/W中断屏蔽寄存器,如果相应位置位则该中断被屏蔽R/W中断优先级控制寄存器,设置中断优先级R/W中断挂起寄存器,相应位对应正在执行的中断服务R中断源请求偏移寄存器R/W子中断源挂起寄存器R/W子中断屏蔽寄存器0x4a0000000x4a0000040x4a0000080x4a00000c0x4a0000100x4a0000140x4a0000180x4a00001cSRCPNDPRIORITYFSETSUBSRCPNDBMSK中断挂起寄存器主要是提供哪个中断有请求的标志寄存器,相应位置1,则说明有该中断请求产生。若相应位为0,则无该中断请求产生。中断模式寄存器主要是配置该中断是IRQ型中断,还是FIQ型中断。中断屏蔽寄存器的主要功能是屏蔽相应中断的请求,即使中断挂起寄存器的相应位已经置1,若中断屏蔽寄存器相应位置1,则中断控制器屏蔽该中断请求,也无法让CPU响应有一位被设置,即只有当前要服务的中断标志位置位。通过读它的值,就能判断出哪个中断发生了。在INTPND中相应位写入数据,就能清除掉中断挂起寄存器中的中断请求标志例项目,在Application/SRC/Main.c中可以看到,主程序中,在进行目标板初始化后,程序进入死循环,等待中断!在Startup2410/src/target.C文件中包括对要间,然后,等待定时器中断,当定时器中断到来时,就会进入定时器中断服务子程灯忽闪一次,则说明定时器发生了一次中断。最后,关闭中断请求,等待下一次的CPU中断服务子程序执行之前,必须打开ARM920T函数中,在做了这些准备后,就可以等待中断的到来了。voidTimer1INT_Init(void){//定时器接口使能if((rINTPND&BIT_TIMER1)){rSRCPND|=BIT_TIMER1;}pISR_TIMER1=(int)Timer1_ISR;rINTMSK&=~(BIT_TIMER1);//开中断;}TIMERINTInit在Target_Init()中调用。ptmcp3.检查连接是否可靠,可靠后,接入电源线,系统上电。5.编译通过后,进入ADS1.2调试界面,加载\实验程序\HARDWARE\ADS\实验六会由于定时中断的1秒钟发生一次,而一秒钟闪烁一次!也可以改变闪烁的频率,即改变Startup\target.c文件内的voidTimer1_init(void)函数里的rTCNTB1=48828;的小,闪烁频率越快。编译全速运行,观看结果,看闪烁频率是否发生了改CPU,中断方式尽管可以实时的 (DirectMemoryAcess),可以确保外设和计算机系统进行高速信息交换。这种方方法实现串口数据的发送,故使用BDMA。INC[0]0:源数据每传送一个,源数据地址增长一个;INC[0]0:目标数据每传送一个,源数据地址增长一个;接下来配置DCONn(n=0,1,2,3)寄存器,见表2-7-5。DCO位描述_HSCTSZ0:单位传输1:长度为4的猝发式传输VMOB[29]当计数器到达0时是否使能中断0:禁止中断1:使能中断[28]选择传输单位的大小[27]选择服务模式0:单服务模式式[31]选择请求模式或握手模式0:请求模式1:握手模式[30]选择同步模式为为DMA设置DMA请求源.DCON0:000:nXDREQ0001:UART0010:SDI011:Timer100:USBdeviceEP1DCON1:000:nXDREQ1001:UART1010:I2SSDI011:SPI:24]100:USBdeviceEP2DCON2:000:I2SSDO001:I2SSDI010:SDI011:Timer100:USBdeviceEP3DCON3:000:UART2001:SDI010:SPI011:Timer100:USBdeviceEP4SWH在DMA软件请求源和硬件请求源之间选择W_SELSW_TRIG位触发置来触发当当前计数器值等于零后是否重新加载OAD0:自动加载1:DMA通道关闭,不重新加载:20]传输数据的大小0:字节1:半字2:字3:保留TC初始化计数器,在这里设置计数器的值。接下来配置DMASKTRIGn如下表(表2-7-6)所示:位位描述[2]停止DMA操作[1]DMA通道开关位[0]DMA通道通过软件请求模式触发1:对这个DMA控制器请求一次DMA操作。注:这个位只有在DCONn[23]选择1并且本寄存器的ON_OFF位置1才能生效。当DMA操作开始后,本位自动清0DMASKTRIGnSTOPON_OFFSW_TRIG3.检查连接是否可靠,可靠后,接入电源线,系统上电。ADS打开\实验程序\HARDWARE\ADS\实验七\DMA.mcp项目文件,进行编译。打开/实验软件/tools/目录下的串口调试助手工具,配置为波特率为5.编译通过后,进入ADS1.2调试界面,加载\实验程序\HARDWARE\ADS\实验七手的最下栏可以看到接收的字符数,而此时CPU已经停止,但是串口仍然在发送接存储器访问的功能得以实现。实验结束。验八模拟输入输出接口的实验1.学习模拟输入输出接口的原理2.掌握接口程序实现的基本方法实验箱的CPU板上运行程序,按下相应的输入带锁键,与它对应的LED灯显本实验为模拟输入输出接口的实验,其基本原理就是使用一片缓冲芯片74LS244确定外面的数据的高低。本实验的输入是用8个带锁的完成模拟的输入输出接口的实现。while(1){for(i=0;i<1000;i++);rrrvolatileunsignedcharxCPU写入并行数据总线d0=rrr>>7&1;d1=rrr>>6&1;d2=rrr>>5&1;d3=rrr>>4&1;d4=rrr>>3&1;d5=rrr>>2&1;d6=rrr>>1&1;d7=rrr>>0&1;data=(d7<<7|d6<<6|d5<<5|d4<<4|d3<<3|d2<<2|d1<<1|d0);(*(volatileunsignedchar*)0x20000000)=data;//CPU把总线值写入锁存器for(i=0;i<1000;i++);if(data!=data_pre){Set_Color(GUI_YELLOW);Set_Font(&GUI_Font8x16);Disp_BinAt(data,170,120,8);//显示二进制数据Disp_HexAt(data,170,140,4);//显示十六进制数据Disp_DecAt(data,170,160,3);//显示十进制数据data_pre=data;}}DLCD电源开关。ADS,从里面打开\实验程序\HARDWARE\ADS\实验十\IO_SIM.mcp5.编译通过后,进入ADS1.2调试界面,加载实验程序\HARDWARE\ADS\实验十次是2;4;8;16;32;64;128。按下时均代表0。该实验是从数据总线上把检测到实验九键盘接口和七段数码管的控制实验1.学习4X4键盘的与CPU的接口原理键盘和7段数码管的控制实验,是通过键盘的控制芯片HD7279A来完成的。它的信号线及控制线连接到S3C2410上,驱动线直接连到8位共阴的7段数码管上。由于其芯VSC410的接口电压是3.3V,所以,HD7279A的信号、控制线经过CPLD把电压转换到3.3V,然后送入CPU中。HD7279是一片具有串行接口的可同时驱动8位共阴式数码管或独立的LED的智能显示驱动芯片。该芯片同时还可连接多达64键的键盘矩阵,单片即可完成显示键盘接口的全部功能。内部含有译码器可直接接受BCD码或16进制码并同时具有两种译码方式。此外还具有多种控制指令如消隐、闪烁、左移、右移、段寻址等,具有片选信号可方便地实现多于8位的显示或多于64键的键盘接口。HD7279在与S3C2410接口中,它使用了4根接口线。片选信号#CS(低电平有效),时钟信号CLK,数据收发信号DATA,中断信号#KEY(低电平送出),EL-ARM-830实验了三个通用I/O接口,和一个外部中断,实现了与HD7279A的连送给S3C2410的外部中断5请求脚,在CPU中断请求位打开的状态下,CPU会立即响应外部中断5的请求,PC指针就跳入中断异常向量地址处,进而跳入中断服务子程序中,由于外部中断4/5/6/7使用同一个中断控制器,所以,还必须判断一个状态寄存器,判断是否是外部中断5的中断请求,当判断出是外部中断5的中断请求,则程序继续执CPUCS选信号选中HD7279A,再发送时钟CLK信号和通过DATA线扫描按键,把得到键值回送给CPU,同时,在8位数码管上显示相关的指令内容,CPU编程资料HD7279A.PDF的文档,其中有详细、完备的编程资料。详细具体的应用,请参见\实验程序\HARDWARE\ADS\实验十一目录下的Key_Led.mcp项目文件。请详细阅读代码注释。LCD电源开关、音频的左右声道开关、触摸屏中断选择开关等均应处在关闭3.检查连接是否可靠,可靠后,接入电源线,系统上电。5.编译通过后,进入ADS1.2调试界面,加载实验程序\HARDWARE\ADS\实验十一码管循环左移。其他按键在最右两个数码管上显示键值。根据HD7279A.PDF文档可以进一步开发具体的相应的程序。3.学习调用简单的GUI绘图。示汉字,填充区域等基本绘制功能。调试驱动程序。通常我们常用的LCD显示模块,有两种,一是带有驱动电路的LCD显示模块,一是不带驱动电路的LCD显示屏。大部分ARM处理器中都集成了LCD的控制器,所以,针对ARM芯片,一般不使用带驱动电路的LCD显示模块。S3C2410中具有内置的LCD控制器,它能将显示缓存(在SDRAM存储器中)中的LCD显示,以及8位彩色、12位彩色LCD显示。在显示灰度时,它采用时间抖动算法 (time-basedditheringalgorithm)和帧率控制(FrameRateControl)方法,在显示彩色时,它采用RGB的格式,即RED、GREEN、BLUE,三色混合调色。通过软件编程,可以实现332的RGB调色的格式。对于不同尺寸的LCD显示器,它们会有不同的垂直和水平象素点、不同的数据宽度、不同的接口时间及刷新率,通过对LCD控制器中的相应寄存器写入不同的值,来配置不同的LCD显示板。S3C2410中内置的LCD控制器提供了下列外部接口信号(CPU引脚):VFRAME:LCD控制器和LCD驱动器之间的帧同步信号。它通知LCD屏开始显示新VLINE:LCD控制器和LCD驱动器间的同步脉冲信号,LCD驱动器通过它来将水平移位寄存器中的内容显示到LCD屏上。LCD控制器在一整行数据全部传输到LCD驱动器后发出VLINE信号。VCLKLCDLCD的象素时钟信号,LCD控制器在VCLK的上升KVM:LCD驱动器所使用的交流信号。LCD驱动器使用VM信号改变用于打开或关闭象素的行和列电压的极性。VM信号在每一帧触发,也可通过编程在一定数量的VLINE信号后触发。LCD_PWREN:LCD面板电源使能控制信号LCD控制器包含REGBANK,LCDCDMA,VIDPRCS,TIMEGEN和LPC3600。REGBANK具有17个可编程寄存器,用于配置LCD控制器。LCDCDMA为专用的DMA,它可以自动地入的情况下显示数据。VIDPRCS从LCDCDMA接收数据,将相应格式(比如4/8位单含可编程的逻辑,以支持常见的LCD驱动器所需要的不同接口时间和速率的要求。TIMEGEN部分产生VFRAME,VLINE,VCLK,VM等信号。320x240像素的8位数据的256彩色LCD屏,显示一屏所需的显示缓存为格式,这因硬件而定。在彩色图像显示时,首先要给显示缓存区一个首地址,这个地之后,接下来的76800字节,就为显示缓存区,这里的数[17:8]STN:VCLK=HCLK/(CLKVALx2)(CLKVAL≥2)TFT:VCLK=HCLK/[(CLKVAL+1)x2](CLKVAL≥0)[7]0=每一帧,1=由MVAL定义BPPMODE:选择BPP(BitsPerPixel)模式ENVID:0011:STN8位彩色模式0100:STN12位彩色模式LCD否0=不允许,LCDFIFO清除表2-12-2为LCD的控制寄存器2的的配置说明。VBPD:PDVSPW:在STNLCD上面应该置0在STNLCD上面应该置0表2-12-3为LCD的控制寄存器3的的配置说明。WDLY:表2-12-300=16HCLK,00=16HCLK,=48HCLK,64HCLKL表2-12-4为LCD的控制寄存器4的的配置说明。表2-12-4VMRate=VLINERate/(2*MVAL)留00=16HCLK,01=32HCLK,10=48HCLK,11=64HCLK表2-12-5为LCD的控制寄存器5的的配置说明。表2-12-5INVVCLK[10]STN/TFT:这个位设置VCLK活动边缘的极性0=在VCLK下降沿视频数据被取走1=在VCLK上升沿视频数据被取走INVVLINE[9]STN/TFT:这个位设置行脉冲的极性0=Normal=InvertedINVVFRAME[8]STN/TFT:这个位设置VFRAME脉冲的极性0=Normal=InvertedINVVD[7]STN/TFT:这个位设置VD(videodata)脉冲的极性0=Normal1=VDisinverted.INVPWREN[5]STN/TFT:这个位设置PWREN信号的极性0=Normal=InvertedBSWP[1]STN/TFT:字节交换控制位0=SwapDisable1=SwapEnableHWSWP[0]STN/TFT:半字交换控制位0=SwapDisable1=SwapEnable指示视频缓冲区在系统存储器的段地址A[30:22]LCDBANKLCD冲区应当与4M区域对齐,因此在分配存储区应当注意指示帧缓冲区或在双扫描LCD时的高帧缓冲区的开始地址A[21:1]注:表2-12-7为LCD的帧缓冲区开始地址寄存器2的的配置说明。公式如下:LCDBASEL=LCDBASEU+(PAGEWIDTH+OFFSIZE)x(LINEVAL+1)LCDBASEULCDBASEL束时,不能改变LCDBASEU和LCDBASEL的值,因为预取下一帧的数据优先于改变帧,如果这时改变帧,预取的数据将无效和将显示不正确.为了检查LINECNT,中断应当被屏蔽,否则如果在OFFSIZE:[21:11]虚拟屏幕偏移量(半字的数量),该值定义前一显示行的最后的半字和新的显示一行首先的半字之间的距离PAGEWIDTH:[10:0]虚拟屏幕宽度(半字的数量),该值定义帧的观察区域的宽度表2-12-9为LCD的RGB查找表寄存器3的的配置说明。在这三个寄存器中,我们要#defineM5D(n)((n)&0x1fffff)#defineMVAL(13)#defineMVAL_USED(0)#defineMODE_CSTN_8BIT(0x2001)#defineLCD_XSIZE_CSTN(320)#defineLCD_YSIZE_CSTN(240)#defineSCR_XSIZE_CSTN(LCD_XSIZE_CSTN*2)//虚拟屏幕大小#defineSCR_YSIZE_CSTN(LCD_YSIZE_CSTN*2)//#defineHOZVAL_CSTN(LCD_XSIZE_CSTN*3/8-1)//ValidVDdatalinenumberis8.#defineLINEVAL_CSTN(LCD_YSIZE_CSTN-1)#defineWLH_CSTN(0)#defineWDLY_CSTN(0)#defineLINEBLANK_CSTN(16&0xff)#defineCLKVAL_CSTN(6)//130hz@50Mhz,WLH=16hclk,WDLY=16hclk,LINEBLANK=16*8hclk,VD=8#defineLCDFRAMEBUFFER0x33800000//_NONCACHE_STARTADDRESSvoidLCD_Init(inttype){//SavethewastedpowerconsumptiononGPIO.xswitch(type){caseMODE_CSTN_8BIT:frameBuffer8Bit=(U32(*)[SCR_XSIZE_CSTN/4])LCDFRAMEBUFFER;//8-bitsinglescan,8bppCSTN,ENVID=offrLCDCON5=0;//BPP24BL:x,FRM565:x,INVVCLK:x,INVVLINE:x,INVVFRAME:x,INVVD:x,//INVVDEN:x,INVPWREN:x,INVLEND:x,PWREN:x,ENLEND:x,BSWP:x,HWSWP:xrLCDSADDR1=(((U32)frameBuffer8Bit>>22)<<21)|M5D((U32)frameBuffer8Bit>>1);rLCDSADDR2=M5D(((U32)frameBuffer8Bit+((SCR_XSIZE_CSTN)*LCD_YSIZE_CSTN))>>1);rDITHMODE=0;rREDLUT=0xfdb96420;rGREENLUT=0xfdb96420;rBLUELUT=0xfb40;break;default:break;}}U32GUI_Init(void);voidDraw_Point(U16x,U16y);U32Get_Point(U16x,U16y);voidDraw_HLine(U16y0,U16x0,U16x1);voidDraw_VLine(U16x0,U16y0,U16y1);voidDraw_Line(I32x1,I32y1,I32x2,I32y2);voidDraw_Circle(U32x0,U32y0,U32r);voidFill_Circle(U16x0,U16y0,U16r);voidFill_Rect(U16x0,U16y0,U16x1,U16y1);voidSet_Color(U32color);voidSet_BkColor(U32color);voidSet_Font(GUI_FONT*pFont);voidDisp_String(constI8*s,I16x,I16y);详细具体的应用,请参见\实验程序\HARDWARE\ADS\实验十二目录下的LCD.mcp项目文件。请详细阅读代码注释。开LCD的电源开关。4.打开ADS1.2开发环境,从里面打开\实验程序\HARDWARE\ADS\实验十二\Lcd.mcp5.编译通过后,进入ADS1.2调试界面,加载\实验程序\HARDWARE\ADS\实验十二AD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025浙江宁波前湾新区招聘城市社区专职工作者11人考试备考试题及答案解析
- 2025广东广州市荔湾区西关实验小学龙溪学校招聘编外教师1人笔试参考题库附答案解析
- 2025榆林横山区石湾卫生院招聘考试模拟试题及答案解析
- 2025浙江宁波象山县人力资源开发服务有限公司第一期招聘工作人员1人笔试参考题库附答案解析
- 吉安市阳光学校2025年面向区外公开选调教师考试参考题库附答案解析
- 2025首都医科大学附属北京安贞医院护理管理人才招聘1人笔试模拟试题及答案解析
- 服装行业个性化定制设计平台开发方案
- 2025年官方授权合同协议书样本
- 有色金属专业毕业论文
- gis毕业论文题目
- 《风力机理论与设计》全套教学课件
- 项目策划工作检查考核表
- 六年级上册数学课件-4.1 圆的周长 |冀教版 (共27张PPT)
- (标准版)康复治疗技术专业《 康复心理学 》课程标准
- 身体六大排毒PPT
- 在职人员报考(统招、在职)研究生申请表
- 丽声北极星自然拼读绘本第六级 The Clever Beaver 课件
- 1-AMS2628A-2013-中文版
- PEP小学英语五年级上册全册教案表格式
- 居家适老化改造需求评估量化表
- 北京市义务教育课程设置表
评论
0/150
提交评论