您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第4章b基于S3C2410的硬件结构与接口编程
编程注意事项如下。(1)A/D转换的数据可以通过中断或查询的方式来访问,如果是用中断方式,全部的转换时间(从A/D转换的开始到数据读出)要更长,因为中断服务程序返回和数据访问的原因。如果是查询方式则要检测ADCCON[15](转换结束标志位)来确定从ADCDAT寄存器读取的数据是否是最新的转换数据。(2)A/D转换开始的另一种方式是将ADCCON[1]置为1,这时只要有读转换数据的信号A/D转换就会同步开始。(3)与AD相关的寄存器①A/D采样控制寄存器ADCCON及其位描述(参见表4-77、表4-78)【例4-5】调节A/D转换测试程序。功能:调节A/D转换时的输入电位器,从串行口0输出A/D转换结果数值。主参考代码如下:intmain(void){inti,j;floatd;ARMTargetInit();//开发版初始化init_ADdevice();//A/D初始化Uart_Printf(0,\n);While(1){for(i=0;i=2;i++)//采样0~3路A/D值{for(j=0;j=1;j++){d=GetADresult(i)*3.3/1023;//数据采集,处理}Uart_Printf(0,a%d=%f\t,i,d);hudelay(1000);//延时}Uart_Printf(0,\r);}return0;}主要的定义和函数参考代码如下:#defineADCCON_FLAG(0x115)#defineADCCON_ENABLE_START_BYREAD(0x11)#definerADCCON(*(volatileunsigned*)0x58000000)#definerADCDAT0(*(volatileunsigned*)0x5800000C)#definePRSCVL(496)#defineADCCON_ENABLE_START(0x1)#defineSTDBM(0x02)#definePRSCEN(0x114)voidARMTargetInit(void);voidinit_ADdevice()//初始化AD{rADCCON=(PRSCVL|ADCCON_ENABLE_START|STDBM|PRSCEN);}intGetADresult(intchannel)//取采样值{rADCCON=ADCCON_ENABLE_START_BYREAD|(channel3)|PRSCEN|PRSCVL;hudelay(10);while(!(rADCCON&ADCCON_FLAG));//转换结束return(0x3ff&rADCDAT0);//返回采样值}S3C2410X中断控制器可以接收来自56个中断源的中断请求。这些中断源来自DMA、UART、I2C等这样的片内外围或片外外部引脚。其中24路为外部中断EINTn,外部中断中EINT4~EINT7、EINT8~EINT23是逻辑或的关系,它们共享一条中断请求线。当从内部外设和外部中断请求引脚接收到多个中断请求时,经过中断仲裁后,中断控制器向ARM920T请求FIQ或者IRQ中断。仲裁过程与硬件优先级有关,仲裁结果写入中断请求寄存器。中断请求寄存器帮助用户确定哪个中断产生。1.中断控制器的运行程序状态寄存器PSR中有F位和I位。如果PSR中的F位被置1,CPU不接收FIQ快速中断,同样如果I位PSR被置1,CPU不接收IRQ中断,因此中断控制器能够通过将PSR的F位、I位和相应的INTMSK中的位清零来接收中断。2.中断模式ARM920T有两种中断模式(INTMOD):FIQ和IRQ。在中断请求时所有的中断源要决定使用哪个模式。3.中断请求寄存器S3C2410X有两种中断请求寄存器:源挂起寄存器(SRCPND)和中断挂起寄存器(INTPND)。这些请求挂起寄存器揭示了一个中断是否正在请求。当中断源请求中断服务时,SRCPND寄存器中的相应位肯定被置1,然而,中断仲裁之后则只有INTPND寄存器的某1位被自动置1。即使该中断被屏蔽,SRCPND寄存器中的相应位也会被置1,但是INTPND寄存器将不会改变。当INTPND寄存器的某位被置1,且I位或者F位清零时中断服务即开始。SRCPND和INTPND寄存器能够被读和写,因此服务函数必须通过向SRCPND和INTPND中相应位写入“1”来清除中断请求条件。4.中断屏蔽寄存器INTMSK通过中断屏蔽寄存器的哪个屏蔽位被置1可以知道哪个中断被禁止。如果INTMSK的某个屏蔽位为0,此中断将会被正常服务。如果中断源产生了一个请求,SRCPND中的源请求位被置位,即使相应屏蔽位为1。5.中断源表4-81所示为中断控制器支持的56个中断源。6.中断优先级产生模块其中32个中断请求的优先级逻辑由7个仲裁位组成:6个一级仲裁位和一个二级仲裁位,如图4-21所示。每个仲裁器可以处理6个中断请求,基于一位仲裁器模式(ARB_MODE)和两位选择信号(ARB_SEL)。●如果ARB_SEL位为00B,优先级顺序是:REQ0,REQ1,REQ2,REQ3,REQ4,andREQ5。●如果ARB_SEL位为01B,优先级顺序是:REQ0,REQ2,REQ3,REQ4,REQ1,andREQ5。●如果ARB_SEL位为10B,优先级顺序是:REQ0,REQ3,REQ4,REQ1,REQ2,andREQ5。●如果ARB_SEL位为11B,优先级顺序是:REQ0,REQ4,REQ1,REQ2,REQ3,andREQ5。7.中断控制器特殊寄存器SFR中断控制器有5个控制寄存器:源挂起寄存器、中断模式寄存器、屏蔽寄存器、优先级寄存器和中断请求寄存器。(1)源挂起寄存器(SRCPND)及其位描述(参见表4-82、表4-83)该寄存器是32位的,每一位都同一个中断源相联系。如果中断源产生中断请求并等待中断服务,那么相应的位要设为1。相应的,该寄存器表明哪个中断源在等待请求被服务。注意,源挂起寄存器中的位被中断源自动置1不管屏蔽寄存器的值。另外,源挂起寄存器也不被优先级寄存器和中断控制器影响。在一个特定的中断源的中断服务程序中,SRCPND中的相应位应该被清除,这样才能正确得到下一次同一个中断源的中断。如果在中断服务程序返回时没有清除相应的位,中断控制器会认为该中断源又产生了一个中断。换句话说,如果SRCPND中有一位为1,中断控制器会始终认为一个有效的中断请求等待服务。(5)中断挂起寄存器(INTPND)(参见表4-88)32位的该寄存器显示了那个没有被屏蔽的,等待被服务的中断请求是否拥有最高的优先级。既然INTPND排在优先级寄存器后面,显然只有一位能够被置1,并且该中断请求向CPU产生一个IRQ。在IRQ的中断服务程序中,可以读取该寄存器以确定哪一个中断源被服务。像SRCPND一样,需要在中断服务程序中将SRCPND清除后将INTPND相应位清除。(7)子源挂起寄存器(SUBSRCPND)及其位描述(参见表4-91、表4-92)ARM920T有一个当前程序状态寄存器(CPSR)和5个保留程序状态寄存器(SPSR)用于异常处理。这些寄存器的功能如下。①保存最常用的ALU操作的有关信息;②控制中断的使能与禁止;③设定处理器的工作模式。寄存器的格式如下。●条件码标志:N、Z、C、V是条件码标志,它们可能会因为逻辑或算术运算的结果变化。有时候可能会被检测以决定某条指令是否执行。●控制位:低8位被称为控制位。当异常发生时,它的值可能会发生变化。如果处理器工作在特权模式下,它们的值也可被软件改变。●T位:它反应了工作的状态,该位为1表示工作在Thumb状态下,为0表示工作在Arm状态下。●I位、F位:这是中断禁止位,当被置1时,IRQ和FIQ就被禁止了。●模式位:它们决定了处理器的工作模式。并非任意一个组合就可以定义一个有效的工作模式。用户需要注意,如果非法的值写入这些位,处理器会进入一个无法恢复的状态,只能复位解决。8.异常中断的响应过程与返回过程异常中断的响应过程如下。①在合适的Lr寄存器中保存下一条指令的地址。②将处理器当前状态寄存器(CPSR)的值保存到异常中断的SPSR中。③设置当前状态寄存器(CPSR)的值,包括设置CPSR相应位的值使处理器进入特定的处理器模式。按要求屏蔽中断,通常应该屏蔽IRQ中断,在FIQ中断时屏蔽FIQ中断。④处理程序计数器(PC)。将PC值设为相应的中断服务程序的地址,从而实现跳转以执行中断程序。异常中断返回过程如下。①恢复状态寄存器。将保存在中断模式中的SPSR值赋予当前的状态寄存器。②将返回地址复制到程序计数器。这样程序将返回到异常中断产生的下一条指令或出现问题的指令处执行。③清除中断禁止位,如果中断入口处关闭了中断。液晶得名于其物理特性:它的分子晶体以液态而非固态存在。这些晶体分子的液体特性使得它具有两种非常有用的特点:①如果让电流通过液晶层,这些分子将会以电流的流向方向进行排列,如果没有电流,它们将会彼此平行排列。②如果提供了带有细小沟槽的外层,将液晶倒入后,液晶分子会顺着槽排列,并且内层与外层以同样的方式进行排列。液晶的第3个特性是很神奇的:液晶层能使光线发生扭转。液晶层表现的有些类似偏光器,这就意味着它能够过滤除了那些从特殊方向射入之外的所有光线。此外,如果液晶层发生了扭转,光线将会随之扭转,以不同的方向从另外一个面中射出。1.总线驱动方式一般带有驱动模块的LCD显示屏使用这种驱动方式,由于LCD已经带有驱动硬件电路,因此模块给出的是总线接口,便于与单片机的总线进行接口。驱动模块具有8位数据总线,外加一些电源接口和控制信号。而且自带显示缓存,只需要将要显示的内容送到显示缓存中就可以实现内容的显示。由于只有8条数据线,因此,常常通过引脚信号来实现地址与数据线复用,以达到把相应数据送到相应显示缓存的目的。2.控制器扫描方式内置的LCD控制器提供了下列外部接口信号:VFRAME/VSYNC/STV:帧同步信号(STN)/垂直同步信号(TFT)/SECTFT信号;VLINE/HSYNC/CPV:行同步脉冲信号(STN)/水平同步信号(TFT)/SECTFT信号;VCLK/LCD_HCLK:像素时钟信号(STN/TFT)/SECTFT信号;VD[23:0]:LCD像素数据输出端口(STN/TFT/SECTFT);VM/VDEN/TP:LCD驱动交流偏置信号(STN)/数据使能信号(TFT)/SECTFT信号;LEND/STH:行结束信号(TFT)/SECTFT信号;LCD_PWREN:LCD面板电源使能控制信号;LCDVF0:SECTFTOE信号;LCDVF1:SECTFTREV信号;LCDVF2:SECTFTREVB信号。(5)LCD控制寄存器5(LCDCON5)及其位描述(参见表4-106、表4-107)【例4-9】640x480TFTLCD屏测试。此程序完成640x480TFTLCD屏的初始化操作,并循环显示各种颜色来实现对LCD屏的测试。主函数如下:U32LCDBufferII2[480][640];intmain(void)/*在LCD上显示16位色图形的关键是填充二级显示缓冲,将显示像素的24位颜色信息写入LCDBufferII2。将RGB3种基本颜色按一定比例混合即可构成更复杂的颜色,每个像素的3种基本颜色分别占一个字节,可以方便地在程序里改写各基本颜色的数值,从而改变该像素的混合颜色。*/{inti,j,k;U32jcolor;ARMTargetInit();//开发版初始化LCD_Init();//LCD初始化for(i=0;i9;i++)//以下循环为用不同颜色填充显示缓冲区{switch(i)
本文标题:第4章b基于S3C2410的硬件结构与接口编程
链接地址:https://www.777doc.com/doc-2156367 .html