




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式系统定义以应用为中心,以计算机技术为基础,软件、硬件可裁减,功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。ARM7架构的3级流水线取指级:取指级完成程序存储器中指令的读取,并放入指令流水线中。译码级:对指令进行译码 ,为下一周期准备数据路径需要的控制信号。这一级指令“占有”译码逻辑,而不“占有”数据路径。执行级:指令“占有”数据路径,寄存器被读取,运算单元产生相应的运算结果并回写到目的寄存器中,运算单元的结果则根据指令需求来更改状态寄存器的条件位。ARM9的5级流水线取指:指令从存储器中取出,放入指令流水线。译码:指令译码,从寄存器中读取寄存器操作数。执行:产生逻辑运算的结果或
2、存储器地址。访存/缓冲:如果需要,则访问数据存储器。否则,ALU的结果只是简单地缓冲一个时钟周期,以便使所有指令具有同样的流水线流程。回写:将指令产生的结果回写到寄存器,包括任何从存储器读取的数据。复杂指令集CISC 精简指令集RISCCISC处理器的实现复杂性更高,而RISC编译器的复杂性更高;CISC处理器功耗高、流水线效率低;RISC代码密度不高,可执行文件体积较大,汇编代码可读性较差总线分类 按相对于CPU的位置划分 片内总线 片外总线:按功能类型 数据总线Dbus 地址总线Abus 控制总线Cbus总线的主要参数 总线宽度 又称总线位宽,指的是总线能同时传送数据的位数。如16位总线就
3、是具有16位数据传送能力。总线频率 总线工作速度的一个重要参数,工作频率越高,速度越快。通常用MHz表示。总线带宽 又称总线的数据传送率,是指在一定时间内总线上可传送的数据总量,用每秒最大传送数据量来衡量。总线带宽越宽,传输率越高。总线带宽(单位:MB/s) =(总线宽度/8)× 总线频率如:总线宽度32位,频率66MHZ,则总线带宽=(32/8)* 66MHz=264MB/s一个微处理器系统可能含有多条总线 高速总线AHB 低速总线APB嵌入式存储系统是由寄存器、高速缓冲区Cache、主存储器和辅助存储器组成。SDRAM存储单元可以理解为一个电容,总是倾向于放电,为避免数据丢失,必
4、须定时刷新。FLASH存储器(可在线进行电写入、电擦除的ROM存储器)有两种主要技术NOR FLASH:具有SRAM接口,可字节读写、操作速度慢、10万次寿命NAND FLASH:多周期寻址,页读写、速度快、需ECC校验、100万次寿命、易产生坏块存储格式大端格式:高位字节排放在内存的低地址端,低位字节排放在内存的高地址端小端格式:低位字节排放在内存的低地址端,高位字节排放在内存的高地址端32bit的数0x12345678在Little-endian模式以及Big-endian模式CPU内存中的存放方式设计一个C语言程序,判定CPU的大、小端模式short int x;char x0,x1;x
5、=0x1122;x0=(char*)&x)0; /低地址单元x1=(char*)&x)1; /高地址单元若x0=0x11,则是大端; 若x0=0x22,则是小端.嵌入式软件分类 系统软件 控制、管理计算机系统的资源 支撑软件 辅助软件开发的工具应用软件 面向应用领域ARM指令集变种:T、M、E、D、I、J、F、S 标志 含义 说明T支持Thumb指令集Thumb指令集版本1:ARMv4TThumb指令集版本2:ARMv5TThumb-2:ARMv6TD片上调试DebugM支持长乘法32位乘32位得到64位,32位的乘加得到64位IEmbedded ICE在线仿真EDSP指令增加
6、了DSP算法处理器指令:16位乘加指令,带符号数的加减法,双字数据操作,cache预取指令JJava加速器Jazelle提高java代码的运行速度S可综合提供VHDL或Verilog语言设计文件ARM处理器工作状态ARM状态,执行32位的、字对齐的ARM指令 操作数寄存器的状态(位0)为0Thumb状态,执行16位的、半字对齐的Thumb指令 操作数寄存器的状态(位0)为1处理器模式说明备注用户(usr)正常程序工作模式不能直接切换到其它模式系统(sys)用于支持操作系统的特权任务等(系统调用)与用户模式类似,但具有可以直接切换到其它模式等特权快中断 (fiq)支持高速数据传输及通道处理FIQ
7、异常响应时进入此模式中断(irq)用于通用中断处理IRQ异常响应时进入此模式管理(svc)操作系统保护代码系统复位和软件中断响应时进入此模式中止(abt)用于支持虚拟内存和/或存储器保护访问无效的地址空间时会进入此模式未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式内部寄存器31个通用32位寄存器;6个状态寄存器。 R0R13为保存数据或地址值的通用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。R0R7为未分组的寄存器,对应于相同的32位物理寄存器。R8R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几
8、乎所有允许使用通用寄存器的指令都允许使用分组寄存器。R8R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。R13堆栈指针(SP)。在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都这样使用R14链接寄存器(LR)在每种模式下,模式自身的R14版本用于保存子程序返回地址,当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。R15为程序计数器
9、(PC),指向正在取指的地址。 R14寄存器与异常异常类型偏移数据中止8PC=ADDR+12,返回当前指令未定义0PC=ADDR+8,返回下一条指令软中断0PC=ADDR+8,返回下一条指令取指异常4PC=ADDR+8,返回当前指令IRQ/FIQ4PC=ADDR+12,返回下一条指令寄存器CPSR为程序状态寄存器,在异常模式中,另外一个寄存器“程序状态保存寄存器(SPSR)”可以被访问。每种异常都有自己的SPSR,在因为异常事件而进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。CPSR寄存器的格式N:运算结果的最高位。对于有符号二进制补码,结果为负数时N=1,为正数或零时N=
10、0;Z:指令结果为0时Z=1(通常表示比较结果“相等”),否则Z=0;C:当进行加法运算最高位产生进位时C=1,否则C=0。当进行减法运算最高位产生借位时C=0,否则C=1。对于结合移位操作的非加法/减法指令,C为从最高位最后移出的值,其它指令C通常不变; V:当进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V通常不变。立即寻址 操作数直接通过指令给出,数据包含在32位指令编码中,以#为前缀。0x, 0b, 0d分别对应16进制、2进制和10进制 例:MOV R1,#0x56000000寄存器寻址 把寄存器中的数值作为操作数,指令执行时直接取出寄存器值进行操作。寄存器内容
11、并不变化 例:MOV R2, R3 ;R2R3 ;R3中的内容赋给R2寄存器移位寻址 操作数由寄存器的值做相应移位而得到。移位的方式在指令中以助记符的形式给出,而移位的位数可用立即数或寄存器寻址方式表示。寄存器内容并不变化例:MOV R0,R1,LSL R3;R1 <<= R3 R0 = R15种位移操作:LSL/ASL 逻辑/算术左移,寄存器中字的低位空出位补0LSR逻辑右移,寄存器中字的高位空出位补0ASR算术右移,移位过程中保持符号位不变,即若源操作数为正数,则字的高位空出位补0,否则补1ROR循环右移,由字的低位移出位填入字的高位空出位RRX带扩展的循环右移,操作数右移一位
12、高位空出位用原C标志值填充;寄存器间接寻址 寄存器的内容为操作数的地址指针,用 标示。操作数存放在存储单元中例:LDR R0,R1变址寻址 将基址寄存器的内容与指令中给出的偏移量(不超过4KB)相加,形成操作数的有效地址 变址寻址包括基址加偏移和基址加索引寻址两种方式基址加偏移前索引寻址LDR R0,R1,4;R0R14基址加偏移带自动索引的前索引寻址LDR R0,R1,4! ;R0R14、R1R14基址加偏移后索引寻址LDR R0,R1,4;R0R1、R1R14基址加索引寻址LDR R0,R1,R2;R0R1R2相对寻址 由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后
13、得到的地址即为操作数的有效地址BL SUBRl ;调用到SUBRl子程序SUBR1 ; BL 使用了相对寻址方式多寄存器寻址 一条指令可以完成多个寄存器值的传送。这种寻址方式可以一次对多个寄存器寻址,最多可传送16个寄存器。LDMIA R1!,R2-R4,R5 ;R2R1,R3R14,R4R18,R5R112堆栈寻址 堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出” 。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种: 向上生长:向高地址方向生长,称为递增堆栈 向下生长:向低地址方向生长,递减堆栈
14、满堆栈 堆栈指针指向最后压入的堆栈的有效数据项 空堆栈 堆栈指针指向下一个待压入数据的空位置堆栈寻址命令包括LDMFA/STMFA、LDMEA/STMEA、LDMFD/STMFD、LDMED/STMED。LDM和STM表示多寄存器寻址,即一次可传送多个寄存器值。LDM:一次装载多个,这里用来出栈。 STM:一次存储多个,这里用来入栈。F/E表示指针指向的位置F:full满堆栈,表示堆栈指针指向最后一个入栈的有效数据项E:empty空堆栈,表示堆栈指针指向下一个要放入的空地址A/D表示堆栈的生长方式A:堆栈向高地址生长,即递增堆栈(Ascend)。D:堆栈向低地址生长,即递减堆栈(Descend
15、)。块复制寻址 多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。 如:STMIAR0!,R1-R7;将R1R7的数据保存到存储器中。;存储指针在保存第一个值之后增加,;增长方向为向上增长。A存储指针在保存第一个值前增加 B存储指针在保存第一个值后增加I增加方向为向上增长 D增加方向为向下增长通过控制GPF3,GPF4,GPF5,GPF6的控制实现对LED1,LED2,LED3,LED4 亮灭的控制。LED灯通过电源、限流电阻与ARM的I/O口相连,设计程序使得4个LED轮流闪烁。 #define GPFCON (*(volatile unsigned *)0x56000050)
16、#define GPFDAT (*(volatile unsigned *)0x56000054)#define GPFUP (*(volatile unsigned *)0x56000058)void main()/流水灯程序 unsigned char ledtab=0xf7,0xef,0xdf,0xbf; int i;GPFUP &= 0xFFFFFF87; /使能上拉F3-6GPFCON &= 0xC03f;GPFCON |= 0x1540; /将F3-6 设为输出口while(1)for(i=0; i<4; i+)GPFDAT=ledtabi;Delay(70)
17、;return(0);S3C2440的存储空间分成8组,通过CS0:7选择。最大容量是1GB,bank0-5为固定128MB,bank6-7的容量可编程改变,可以是2、4、8、16、32、64、128MB。S3C2440可以选择从NAND FLASH或NOR FLASH启动。启动NOR FLASH只能接到Bank0,其数据线宽只能是16位和32位。其它存储器的数据线宽可以是16位和32位。若定义SDRAM的起始地址#define _RAM_STARTADDRESS 0x30000000则可以确定该存储器连接到哪一根GCSn外部存储器中某一存储单元的地址为:基地址+偏移地址外接网卡控制芯片DM9
18、000,其片选端接到GCS4,则内部位于300H地址处的寄存器的实际地址为:0x2000 0000 + 0x0300 = 0x2000 0300按照K9F1208的组织方式可以分四类地址: Column Address、halfpage pointer、Page Address 、Block Address。Column Address表示数据在半页中的地址,大小范围0-255,用A0:7表示;halfpage pointer表示半页在整页中的位置,即在0-255空间还是在256-511空间,用A8表示;Page Address表示页在块中的地址,大小范围0-31,用A13:9表示; Bloc
19、k Address表示块在flash中的位置,大小范围04095,A25:14 表示。K9F1208通过4个周期寻址某一存储单元相关寄存器NAND Flash配置寄存器 NFCONF 地址0x4E000000NAND Flash命令设置寄存器 NFCMD 地址0x4E000004NAND Flash地址设置寄存器 NFADDR 地址0x4E000008NAND Flash数据寄存器 NFDATA 地址0x4E00000CNAND Flash操作状态寄存器 N
20、FSTAT 地址0x4E000010NAND Flash ECC寄存器 NFECC 地址0x4E000014Nand Flash的寻址把一个完整的Nand Flash地址分解成Column Address与Page Address进行寻址。Column Address只有8位,需配合A8完成一页范围内寻址。在0255内时用00h命令,当读取的起始地址是在256511时,则使用01h命令。 column_addr=0x102; NF_CMD= ; &
21、#160; 从2nd half开始读取 NF_ADDR= ; 1st Cycle NF_ADDR=page_address&0xff; &
22、#160; 2nd.Cycle NF_ADDR=(page_address>>8)&0xff; 3rd.Cycle NF_ADDR=(page_address>>16)&0xff; 4th.Cycle读页操作时序 NAND 读整页函数static void ReadPage(U32 addr, U8 *buf) /addr表示flash中的第几页,即flash地址>>9U16 i;NFChipEn(); /使能NandFla
23、shWrNFCmd(READCMD0); /发送读指令0x00,由于是整页读取,所以选用指令0x00WrNFAddr(0); /写地址的第1个cycle,即Column Address,由于是整页读取所以取0WrNFAddr(addr); /写地址的第2个cycle,即A9:16WrNFAddr(addr>>8); /写地址的第3个cycle,即A17:24WrNFAddr(addr>>16); /写地址的第4个cycle,即A25WaitNFBusy(); /等待系统不忙for(i=0; i<
24、;512; i+) bufi = RdNFDat(); /循环读出1页数据NFChipDs(); /释放NandFlash写页操作时序NAND 写整页函数static int WritePage(U32 addr, U8 *buf) /addr表示flash中的第几页,即flash地址>>9U32 i;NFChipEn(); /使能NandFlashWrNFCmd(PROGCMD0); /发送写开始指令0x80WrNFAddr(0); /写
25、地址的第1个cycleWrNFAddr(addr); /写地址的第2个cycleWrNFAddr(addr>>8); /写地址的第3个cycleWrNFAddr(addr>>16); 写地址的第4个cycleWaitNFBusy(); /等待系统不忙for(i=0; i<512; i+) WrNFDat(bufi); /循环写入1页数据WrNFCmd(PROGCMD1); /发送写结束指令0x10WaitNFBusy(); /等待系统不忙WrNFCmd(PROGCMD3
26、); /发送读状态指令0x70 NFChipDs(); /释放NandFlash return RdNFDat&0x01; /返回写操作结果在中断控制器中有五个控制寄存器:中断源未决寄存器,中断模式寄存器,屏蔽寄存器, 优先级寄存器和中断未决寄存器中断源未决寄存器(SRCPND)由32位构成,每位与一个中断源相关。当某个中断源产生中断请求服务,则对相应的位置1。因此该寄存器记录了哪个中断源在等待处理。注意:SRCPND寄存器的每一位都由中断源自动置位,而不管中断屏蔽寄存器(INTMASK)中对应的位是否被屏蔽。在某个特定中断源的中断服务程序中,SRCPND寄存器
27、的相应位必须被清除从而保证能收到同一中断源的下一次中断请求。换言之,如果SRCPND寄存器的某位始终置1,则总是被认为一个有效的中断请求等待处理。用户可以通过写数据到SRCPND寄存器来清除未决位。数据位为1表示该位置的未决位将清除,而0表示该位置的未决位保持不变。SRCPND寄存器的地址是0x4A000000,复位后为0x00000000。中断模式寄存器(INTMOD)是32位的,S3C2440的中断模式有2种:FIQ模式和IRQ模式。如果某位设置成1,则相应的中断按FIQ模式处理。若设置成0,则按IRQ模式处理。仅有一个中断源能够在FIQ模式下处理,也就是说,INTMOD仅有一个位可以被置
28、1。因此,用户应该将最紧迫的中断源设置为FIQ模式使用。INTMOD寄存器的地址是0x4A000004,复位后为0x00000000。中断屏蔽寄存器(INTMSK)也是由32位组成,每一位与一个中断源相对应。若某位设置为1,则中断控制器不会处理该位所对应的中断源提出的中断请求。如果设置为0,则对应的中断源提出的中断请求可以被处理。INTMSK寄存器的地址是0x4A000008,复位后为0xFFFFFFFF。中断优先级寄存器(PRIORITY)是IRQ中断模式下的中断优先级控制寄存器,每个中断源在寄存器中有3位对应,分别代表ARB_SEL的2位和ARB_MODE的1位。该寄存器的地址是0x4A0
29、0000C,复位后0x0000007F。中断未决寄存器(INTPND)是32位寄存器,寄存器中的每一位对应一个中断源。经过中断优先级仲裁器选出的优先级最高的中断后,这个中断在INTPND对应的位会被置1。在对于IRQ的中断服务程序中,可以读取寄存器决定那个中断源被处理。在该位写入1可以清除中断。该寄存器的地址是0x4A000010,复位后0x00000000。外部中断控制寄存器共有3个,分别为EXTINT0、EXTINT1、EXTINT2,它们均是可读/可写的,用于对24个外部中断请求信号的有效方式进行选择。其地址分别为0x56000088、0x5600008c、0x56000090,复位后均
30、为:0x00000000。外部中断屏蔽寄存器(EINTMASK)用来作为20个外部中断的屏蔽寄存器。其地址为0x560000A4,复位后为0x00FFFFF0,此寄存器是可读可写的。外部中断悬挂寄存器(EINTPEND)用来作为20个外部中断的未决定寄存器。其地址为0x560000A8,复位后为0x00,此寄存器是可读可写的例:利用两个按键触发外部中断EINT0、EINT2,写出中断初始化和服务程序。static void _irq Eint0_ISR(void) Delay(10);ClearPending(BIT_EINT0);Uart_Printf("EINT0 is occu
31、rred.n");static void _irq Eint2_ISR(void) Delay(10);ClearPending(BIT_EINT2);Uart_Printf("EINT2 is occurred.n");/中断初始化函数void Eint_Init(void)rGPFCON = rGPFCON & (3)|(1<<1); /GPF0 设置为EINT0rGPFCON = rGPFCON & (3<<4)|(1<<5); /GPF2 设置为EINT2rGPFUP|=(1<<0); /di
32、sable GPF0 pull uprGPFUP|=(1<<2); /disable GPF2 pull uprEXTINT0 = (rEXTINT0 & (7<<0)|(2<<0); /EINT0 >falling edge triggeredrEXTINT0 = (rEXTINT0 & (7<<8)|(2<<8); /EINT2 >falling edge triggeredpISR_EINT0 = (unsigned)Eint0_ISR;pISR_EINT2 = (unsigned)Eint2_ISR
33、; /开外部中断void Enable_Eint(void)rEINTPEND = 0xffffff; /to clear the previous pending statesrSRCPND |= BIT_EINT0|BIT_EINT2;rINTPND |= BIT_EINT0|BIT_EINT2;rEINTMASK=( (1<<11)|(1<<19) );rINTMSK=(BIT_EINT0|BIT_EINT2); int Main()Uart_Init(115200);Eint_Init();Enable_Eint();while(1) /等待中断,死循环Uart
34、_Printf("the main is runningn");Delay(50); 时钟计算FCLKUCLK看门狗基本原理预分频器的值和频率除数因子存放在看门狗定时器控制寄存器(WTCON)中,预分频器的值有效范围0 - 255。频率除数因子可以设定为 16、32、64 或128分频。看门狗定时器的定时器时钟周期公式:S3C2440A芯片的看门狗定时器逻辑中有3个控制其操作的专用寄存器:看门狗定时器控制寄存器(WTCON)、看门狗定时器数据寄存器(WTDAT)和看门狗计数器寄存器(WTCNT)。看门狗定时器控制寄存器(WTCON)是设定预分频器的值、设定看门狗是否有效、设
35、定4种频率除数因子、设定看门狗复位及中断使能。其地址为0x53000000,复位后为0x8021,此寄存器是可读可写的。看门狗定时器数据寄存器(WTDAT),其地址为0x53000004,复位后为0x8000,此寄存器是可读可写的。它用于存放看门狗定时器的溢出时间间隔值,即从定时器的计数器开始工作,到计数器值变为0的时间间隔。WTDAT寄存器通常存储的是一个计数常数,计数常数=所需时间间隔/计数时钟周期=所需时间间隔×(PCLK/(预分频器+1)/除数因子)看门狗定时器计数寄存器(WTCNT),其地址0x53000008,复位后为0x8000,此寄存器是可读可写的。它用作减1计数器,
36、它对计数时钟信号进行减1计数,即每来一个计数时钟脉冲,计数器内的值减1。因为WTDAT寄存器的值在看门狗定时器初始使能时,不能自动装载到WTCNT中,所以必须第一次要给WTCNT设定一个初始值。看门狗应用实例 P163/主功能函数void wtMain(void) Uart_Init(115200);Uart_Printf("watchdog test is beginningn");watchdog_test();/看门狗复位功能程序实现void watchdog_test(void) rWTCON=(prescaler_value<<8)|(clock_se
37、lect<<3);rWTDAT=15000;rWTCNT=15000;rWTCON &= (3<<1);rWTCON|=(1<<5)|(1<<0);while(1);/看门狗定时器功能程序实现void watchdog_test(void) /*初始化*/建立WatchDog 中断服务程序句柄pISR_WDT = (unsigned)watchdog_isr;/initialize interrupt registersClearPending(BIT_WDT_AC97);ClearSubPending(BIT_WDT);/*启动看门狗*
38、/Prescaler value=100、clock division factor=128、PCLK=50M/t_watchdog=1/PCLK/(Prescaler value+1)/Division_factor=0.00025856/disable watchdogrWTCON=(prescaler_value<<8)|(clock_select<<3);/看门狗时钟周期T=WTCNT*t_watchdog=3.8784S/看门狗喂狗rWTDAT=15000;rWTCNT=15000;rWTCON|=(1<<5)|(1<<2); /使能W
39、DT 定时器和中断/开中断EnableIrq(BIT_WDT_AC97);EnableSubIrq(BIT_WDT);while(1) ;S3C2440定时器Timer部件主要用于提供定时功能、脉宽调制(PWM)功能,它的应用比较灵活,对于需要一定频率的脉冲信号、一定时间间隔的定时信号的应用场合,它都能提供应用支持。S3C2440A有5 个16 位的定时器。定时器0、1、2、3 有脉宽调制功能(PWM),定时器4是一个没有输出引脚的内部定时器。定时器0 有一个用于驱动大电流设备的死区生成器。定时器从分频器接收自己的时钟信号,时钟分频器从相应的预分频器接收时钟信号。寄存器TCFG0配置8位预分频
40、器的分频值,寄存器TCFG1配置4位预分频器的分频值。定时器0 和1共享一个8 位的预分频器,定时器2,3,4 共享另一个8位预分频器。定时器输入时钟频率fTclk :fTclk=fpclk(Prescaler+1) /分频值式中:Prescaler,预分频值,0-255;分频值为1/2、1/4、1/8、1/16。 三个相关寄存器:TCNTBx、TCNTOx、TCMPBxTCNTBx:定时器缓存计数器TCNTOx:定时器观测值TCMPBx:定时器比较缓存计数器 预分频器 8位 分频器 1/2 1/4 1/8 1/16 外部TCK 计数器 观 察 寄 存 器 比较寄存器 PCLK 五 选 一 开
41、 关 初 值 寄 存 器 控 制 逻 辑TOUT中断当计数器TCNTBx中的值减到与TCMPBx的值相同时,TOUT的输出值取反。改变TCMPB的值,便改变了输出方波的占空比。定时器工作原理图每个定时器有一个自己的由定时器时钟驱动的16 位递减计数器TCNTn。当递减计数器为零时,定时器向CPU发出中断请求,同时相应的TCNTBn 的值自动加载到递减计数器。但是TCONn 的定时器使能位清零时(即定时器停止时),则相应的TCNTBn值不会装载到计数器中。TCMPBn 的值用于脉宽调制。当递减计数器的值和定时器控制逻辑中的比较寄存器的值匹配时,定时器控制逻辑改变输出电平。因此,比较寄存器决定了P
42、WM 输出的开启时间(上升或下降时间)。定时器有TCNTBn、TCNTn、TCMPBn、TCMPn和TCNTOn 寄存器。TCNTBn和TCMPn是内部寄存器的名字。TCNTn寄存器的值可以从TCNTOn寄存器中读取、当定时器为0,TCNTBn和TCMPBn可以被装载到TCNTn和TCMPn中。如果中断使能,当TCNTn为0时,则向CPU发出中断请求。 定时器基本操作 P156S3C2440A的定时器有一个双缓冲功能,在刷新一个定时器的同时,不会影响另一个正在运行的定时器正常运行。 TCNTBn中的值,不是计数器的当前状态值,而是下个定时器的重载值。当TCNTn为0时,自动重载TCNTBn的值
43、到TCNTn中。注意:如果自动重载位为设定为0,即使TCNTn递减为零,TCNTn也不再进一步操作。自动装载 P157定时器初值在开始计数前必须由手动装载:写初始值到TCNTBn和TCMPBn中。设置相应定时器的手动更新位。 设置相应定时器的启动位来启动定时器(且清除手动更新位)。如果定时器被强行停止,TCNTn保留计数器值且不从TCNTBn重载。如果要设置新值,必须执行手动更新。 定时器操作实例 P1571、使能自动重载功能。设置TCNTBn 为160(50+110),TCMPBn 为110。设置手动更新位且配置反相器位使能。手动更新位将TCNTBn 和TCMPBn 的值分别置给TCNTn
44、和TCMPn。然后分别设置TCNTBn 和TCMPBn 的值为80(40+40)和40 以决定下一个重载值。2、设置起始位,手动更新位为0,反相器关闭且自动重载开启。在等待时间后定时器开始倒计数。3、当TCNTn 的值和TCMPn 的值相同,TOUTn 的逻辑电平从低变为高。4、当TCNTn 为0,中断请求生成且TCNTBn 的值装载到一个临时寄存器中。在下一个定时器周期开始时,TCNTn 会从临时寄存器中重新加载计数值。5、在中断服务程序中,TCNTBn 和TCMPBn 的值被分别设置为80和60,用于下一轮的定时操作。6、当TCNTn 的值和TCMPn 的值相同,TOUTn 的逻辑电平从低
45、变成高。7、当TCNTn 为0,TCNTn 用TCNTBn 的值自动重载,并触发中断请求。8、在中断服务程序中,自动重载和自动请求被设禁止,从而停止定时器工作。9、当TCNTn 的值和TCMPn 的值相同,TOUTn 的逻辑电平从低变成高。10、TCNTn 为0,因为自动重载被设为禁止,TCNTn 不再被重载且定时器停止。11、没有其他的自动请求产生。定时器相关寄存器 共有6种、17个寄存器Register Address R/WDescription Reset Value TCFG00x51000000R/W配置寄存器 00x00000000 TCFG10x51000004R/W配置寄存器
46、 10x00000000TCON 0x51000008R/W控制寄存器0x00000000TCNTBn0x510000xx R/W 计数初值寄存器(5个)0x0000TCMPBn0x510000xxR/W比较寄存器(4个)0x0000TCNTOn0x510000xxR观察寄存器(5个)0x0000定时器应用实例 P168 volatile int variable0 = 0;int ctime = 0;void Test_TimerInt(void) rINTMSK = BIT_TIMER0;pISR_TIMER0 = (int)Timer0Done;Uart_Printf("nTi
47、mer0 Interrupt Testn");/ 每0.2秒产生一个中断/ 设定TCFG0, rTCFG1, rTCNTB0寄存器/ Timer Output Period = (TCNTB+1) x (Presc.+1) x Divider / PCLKrTCFG0 = 0xff;/ 预分频计数器= 255rTCFG1 = 0x03; / 0011 : 1/16设定为16分频rTCNTB0 = 2440; / (TCNT + 1) * 81.92 = 0.2*1000000rTCON = 0x02; /装载初值rTCON = 0x09; / 自动重载 while(1) if (va
48、riable0 = 5) variable0 = 0;ctime+;Uart_Printf("%d secondsn", ctime);rINTMSK |= (BIT_TIMER0);void _irq Timer0Done(void)/Timer定时器中断子函数rSRCPND = BIT_TIMER0; /清挂起位rINTPND = BIT_TIMER0;variable0+;Uart_Printf("variable0=%d ",variable0); 四线电阻屏测量原理 测量X坐标时:1)在X+,X-两电极加上一个电压Vref,Y+接一个高阻抗的A
49、DC。2)两电极间的电场呈均匀分布,方向为X+到X-。3)手触摸时,两个导电层在触摸点接触,触摸点X层的电位被导至 Y层所接的ADC,得到电压Vx。4)通过Lx/L=Vx/Vref,即可得到x点的坐标。触摸屏测量实例 P183void Touch_Screen_Init(void) rADCDLY=50000; /转换延时 (1/3.6864M)*50000=13.56msrADCCON = (1<<14)|(39<<6)|(0<<3)|(0<<2)|(0<<1)|(0);rADCTSC = (0<<8)|(1<&l
50、t;7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(3);/等待按下中断pISR_ADC = (unsigned)ADC_ISR;ClearSubPending(BIT_SUB_TC);ClearSubPending(BIT_SUB_ADC);ClearPending(BIT_ADC);EnableSubIrq(BIT_SUB_TC);EnableIrq(BIT_ADC);Uart_Printf( "nNow touchpanel controler is initial!n" ) ;
51、Uart_Printf( "Press it with touch pen and see what happendn" ) ;Uart_Printf( "nAny key to exit the touchpanel testn" ) ;Uart_Getch() ;Touch_Screen_Off() ;/ 触摸屏中断服务子函数void _irq ADC_ISR(void) int i; DisableIrq(BIT_ADC); DisableSubIrq(BIT_SUB_TC); rADCTSC=(1<<3)|(1<<2);
52、/连续转换 rADCCON|=0x1; /ADC启动 while(rADCCON & 0x1); /等待启动完成 while(!(rADCCON & 0x8000); /等待转换完成 for(i=0;i<5;i+) while(!(1<<15)&rADCCON); /检查转换是否结束 bufi0 = (0x3ff&rADCDAT0);/坐标的位置数据 bufi1 = (0x3ff&rADCDAT1);/Y坐标的位置数据 for(i=0;i<5;i+) Uart_Printf("X %4d, Y %4dn", b
53、ufi0, bufi1);Uart_Printf("the next touchn");rADCTSC =0xd3; /等待下次中断 ClearPending(BIT_ADC); ClearSubPending(BIT_SUB_TC); EnableSubIrq(BIT_SUB_TC); EnableIrq(BIT_ADC);/触摸屏关闭void Touch_Screen_Off(void) DisableIrq(BIT_ADC); DisableSubIrq(BIT_SUB_TC); rADCCON |= (1<<2); /ADC待机模式 rADCCON |=
54、 (1); /ADC无操作LCD显示原理VSYNC :帧同步信号 VD23:0 :LCD像素数据HSYNC :行同步脉冲信号 VCLK :像素时钟信号 DEN:Data Enable REGBANK:17个可编程的LCD寄存器 LCDCDMA:LCD数据DMA REGBANK是LCD控制器的寄存器组,含17个寄存器,用来设置各项参数。LCDCDMA是LCD控制器专用DMA通道,可以自动地从系统总线上取得图像数据,使得显示图像时不需要CPU的干涉。VIDPRCS将LCDCDMA中的数据组合成特定的格式(比如4位单扫、4位双扫和8位单扫),然后从VD23:0发给LCD屏TIMEGEN和LPC3600负责产生LCD屏所需要的控制时序,如VSYNC、HSYNC、VCLK、VDEN,然后从VIDEO MUX送给LCD屏。 每个VSYNC信号表示一帧数据的开始;每个HSYNC信号表示一行数据的开始。每个VCLK信号表示正在传输一个像素的数据。 行时序HSYNC信号有效时,表示一行数据的开始。HSPW表示HSYNC信号的脉冲宽度为(HSPW+1)个VCLK信号周期,即(HSPW+1)个像素,这(HSPW+1)个像素数据无效HSYNC信号后,还要经过(HBPD+1)个VCLK信号周期,有效的行数据才出现。所以,在HSYNC信号有效之后,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新疆生产建设兵团兴新职业技术学院《建筑评析》2023-2024学年第二学期期末试卷
- 新疆理工学院《Matlab应用基础》2023-2024学年第二学期期末试卷
- 新疆乌鲁木齐仟叶学校2025届下学期初三英语试题Ⅱ部5月月考考试试卷含答案
- 2025至2031年中国筛粉机行业投资前景及策略咨询研究报告
- 2025-2030年中国BOSS系统行业投资价值研究报告
- 2025-2030年中国PCB压合板产品专项调研与投资战略研究咨询报告
- 2025至2031年中国硫醇丁基锡复合物行业投资前景及策略咨询研究报告
- 2025年部门级安全培训考试试题附下载答案可打印
- 2025年公司项目部管理人员安全培训考试试题含完整答案(历年真题)
- 2024-2025公司级员工安全培训考试试题及答案考题
- 第03讲 实际问题与二元一次方程组(知识解读+达标检测)(原卷版)
- 2024年全球及中国法务和估价服务行业头部企业市场占有率及排名调研报告
- 招商岗位测试题及答案
- 中国科学技术交流中心招聘笔试真题2024
- 创新奖申请材料撰写指南与范文
- 中华人民共和国学前教育法解读
- 美容师考试相关法律法规的知识要点试题及答案
- 《运动处方》课件-高血压人群运动处方案例
- 人工智能技术与知识产权保护
- 2025年中国数控转台行业市场规模及投资前景预测分析报告
- 建筑工程技术毕业实践报告3000字
评论
0/150
提交评论