嵌入式系统与发技术重点内容计算机科学与技术学院马维华mwhua@nuaa.edu.cn第1章概念及基本方法第2章工作模式、存储模式、流水线第3章基本常用指令的使用第6章端口组件、UART、PWM定时器、WDT、ADC组件嵌入式系统及三要素定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。简单定义:嵌入到对象体系中的专用计算机系统。三要素:嵌入式系统的三个基本要素是嵌入性、专用性与计算机系统。(1)嵌入性是把软件嵌入到Flash存储器中,(2)专用性是指针对某个具体应用领域和场合,量体裁衣式的定制适用该场合的专用系统,(3)计算机系统是指必须具有计算机系统的组成,核心是计算机系统。三个要素决定了嵌入式系统是嵌入到对象体系中的一种专用的计算机系统。嵌入式系统設計与开发原则与步驟1.設計与开发原則既然嵌入式系统是嵌入到对象体系中的专用的计算机系统,因此嵌入式系统设计的基本原则:物尽其用。这一原则表明,嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余,以最小成本实现更高的性能,同时尽可能采用高效率的设计算法,以提高系统的整体性能,换句话说同,“物尽其用”就是“够用就好”,以最高性价比来设计嵌入式应用系统。2、设计与开发步骤嵌入式系统的设计步骤包括需求分析、体系结构设计、硬件设计,软件设计,执行机构设计、系统集成和系统测试。各个阶段之间往往要求不断的修改,直至完成最终设计目标。ARM存储模式关于存储模式:大端模式和小端模式,靠GPE8(ENDIAN)高低电平决定,高电平大端模式,低电平小端模式。让GPE8工作于功能1模式控制。掌握大小端模式存储结构。已知一个32位的一个字0x87654321,存放在内存0x12000004~0x12000007中,指出对于大端模式和小端模式下,字节0x65存放的地址。ARM指令流水线关于指令流水线:ARM采用指令流水线技术。不同内核指令流水线的级数不同。采用指令流水线的作用是提高指令执行效率。有3、5、6、7、8级不等。对于一个具有1条8级指令流水线的ARM处理器,假设每1级所需要的时间为1ns,求这种ARM处理器执行4000条指令最快所需要的时间。如果有两条这样的指令流水线那?ARM常用指令熟悉常用ARM汇编指令,能阅读简单程序回答问题:需要掌握的指令。MOVMNVLDR、LDRB、LDRHSTRORRANDB注意条件域ARM伪指令LDRADDMULCMPTSTBBCCBHIBEQBCSBLSBGEBLTBGTBLEARM指令条件域助记符后缀标志含义EQZ置位相等NEZ清零不相等CSC置位无符号数大于或等于CCC清零无符号数小于MIN置位负数PLN清零正数或零VSV置位溢出VCV清零未溢出HIC置位Z清零无符号数大于LSC清零Z置位无符号数小于或等于GEN等于V带符号数大于或等于LTN不等于V带符号数小于GTZ清零且(N等于V)带符号数大于LEZ置位或(N不等于V)带符号数小于或等于AL忽略无条件执行ARM芯片选型基本方法:根据需求,对照ARM芯片的技术要点去按照够用就好,略有余量的基本原则来选择。S3C44B0的端口組件及應用多功能GPIO的配置方法:1、端口配置寄存器PCONA~PCONG决定A~G端口的功能2、端口数据寄存器PDATA~PDATG端口A~G的数据,可输入输出3、上拉电阻寄存器PUPC~PUPG决定C~G端口是否内部上拉4、特殊上拉电阻寄存器SPUPR决定数据总线是否上拉S3C44B0的UART开发應用对于S3C44B0,已知MCLK=60MHz,阅读程序回答问题:ARM汇编语言如下,试说明完成的功能。LDRR0,=rPCONALDRR1,=0x3FFSTRR1,[R0];A口功能2LDRR0,=rPCONBLDRR1,=0x7FFSTRR1,[R0];B口功能2LDRR0,=rPCONDMOVR1,=0x0055STRR1,[R0];D口中GPD7~GPD4输入,GPD3~GPD0输出LDRR0,=rPCONFLDRR1,=0x120000STRR1,[R0];GPF6,7为UART1RXD和TXD,其余GPF为输出LDRR0,=rPCONGMOVR1,#0xFFFFSTRR1,[R0];F口为外部中断解答:具体功能见注释!S3C44B0的UART組件及开发應用常用UART寄存器1、UART线路控制寄存器ULCON0和ULCON1决定字符格式(数据位数、停止位、奇偶校验位,红外和正常模式)2、UART控制寄存器UCON0和UCON1决定中断类型、发送和接收触发方式、接收和发送中断允许等)3、UART发送接收状态寄存器UTRSTAT0和UTRSTAT1反映接收和发送状态4、UART发送接收数据寄存器UTXH0和UTXH1保持发送和接收的数据5、UART波特率发生器决定通信波特率UBRDIVn=INT(MCLK/(波特率×16)+0.5)-1S3C44B0的UART开发應用利用S3C44B0进行串行通信,已知MCLK=60MHz,阅读程序回答问题:LDRR0,=rPCONEORRR1,R0,#0x2800101000STRR1,[R0];写PCONE使GPE1GPE2为TXD0和RXD0用于串行通信功能LDRR0,rUFCON0MOVR1,#0STRR1,[R0];UFCON0=0禁止FIFOLDRR0,rULCON0ORRR1,#0x23;00100011STRR1,[R0];字符格式为:8位数据,1位停止位,奇校验LDRR0,=rUCON0ORRR1,R0,#0xC1STRR1,[R0];写UART0控制寄存器使允许接收中断正常接收发送LDRR0,=rUBRDIV0LDRR1,=325STRR1,[R0];设定波特率为11520BPS1、说明本程序完成的功能2、串行通信波特率是多少?3、对程序进行注释解答:1、本程序段完成的是对UART0进行初始化,使用GPE1和GPE2用于UART0的TXD0和RXD0进行串行通信,通信字符格式为8位数据,1位停止位,奇校验,禁止FIFO,允许接收中断,正常接收和发送。2、串行通信波特率根据UBRDIV0=[MCLK/(波特率×16)-0.5]怪整数所以:波特率=MCLK/((UBRDIV0+0.5)*16)=60000000/(325.5*16)=11520bps3、注释如上。S3C44B0的PWM組件及开发應用常用PWM寄存器1、定时器配置寄存器TCFG0决定输入给定时器的时钟频率的预分频系数2、定时器配置寄存器TCFG1决定输入给定时器的时钟频率的除数值3、定时器控制寄存器TCON决定定时器是否自动重装、是否开始定时停止定时,是否输出反转,是否允许死区控制等。4、定时器计数寄存器TCNTB0~TCNTB5和比较寄存器TCMPB0~TCMPB5S3C44B0的PWM开发應用用PWM的TOUT1和TOUT2分别控制两个指示灯LED1和LED2,要求TOUT1=1时LED1亮,TOUT2=1时LED2亮,编程让LED1以0.5秒闪亮(即0.5秒亮,0.5秒灭,循环),LED2以2秒闪亮。T1/T2定时器指定预分频系数199,除法器值16,MCLK=60MHz。解答:LED1闪亮0.5秒:T1设置0.5S定时且反转;LED2闪亮:T2设置2S定时且反转配置寄存器TCFG0=0xC7C7(T1和T2为199=0xC7预分频)配置寄存器TCFG1=0x330(T1和T2除法器值为16)定时器输入时钟频率=MCLK/(预分频值+1)/(除法器值)=60000000/(199+1)/16=18750Hz定时0.5秒,T1计数缓冲寄存器TCNTB1的值=0.5×18750=9375定时2秒,T2计数缓冲寄存器TCNTB2的值=2×18750=37500LDRR0,rTCFG0MOVR1,#0xC7C7或LDRR1,=0xC7C7STRR1,[R0];写TCFG0,分频系数为199=0xC7LDRR0,=rTCFG1LDRR1,=0x330STRR1,[R0];写TCFG1,除法器值16LDRR0,=rTCNTB1LDRR1,=9375STRR1,[R0];写TCNTB1LDRR0,=rTCNTB2LDRR1,=37500STRR1,[R0];写TCNTB2LDRR0,=rTCON;ORRR1,R0,#0xDD00;T1和T2自动重装/反转、启动定时器STRR1,[R0];写TCONS3C44B0的WDT組件及开发應用常用WDT寄存器1、WDT控制寄存器WTCON决定是否允许复位、是否允许中断以及决定预分频系数和时钟因子2、WDT数据寄存器WTDAT和计数寄存器WTCNT3、WDT定时输入时间:T_WDT=1/(MCLK/预分频系数+1)/分频系数4、WDT复位时间:T_RST=WTCNT×T_WDTS3C44B0的WDT开发應用如果MCLK=40MHz,采用预分频值为99,分频系数为64,要使WDT的定时时间为10秒,允许复位,禁止中断,写出WDT初始化程序片段。解答:t_watchdog=1/(MCLK/(预分频值+1)/分频系数)=1/(40000000/100/64)=160us溢出时间t=WTCNT*t_watchdog=10S=WTCNT*160us=10000000usWTCNT=62500LDRR0,rWTCONLDRR1,=0xF939STRR1,[R0];写WDT控制寄存器使禁止中断,允许复位,预分频系数99,分频系数64LDRR0,rWTCNTLDRR1,=62500STRR1,[R0];写WDT计数寄存器使计数值为62500,定时10秒S3C44B0的ADC組件及开发應用常用ADC寄存器1、ADC控制寄存器ADCCON决定是否允许启动、选择ADC通道、反映ADC转换状态2、ADC预分频寄存器ADCPSR决定预分频系数3、ADC转换时间:TADC=2×(ADCSPR的值+1)×16/MCLK4、ADC数据寄存器寄存转换后的10位数字量5、对ADC操作三要素:(1)选择通道并启动AD变换(2)查询状态(是否转换结束)(3)读取转换结果S3C44B0的ADC开发應用如果MCLK=64MHz1、让ADC转换时间为10uS,写出程序片段解答:ADC转换时间:TADC=2×(ADCSPR的值+1)×16/MCLKADCPSR=10/32*64-1=19主要是写ADCPSR寄存器,写寄存器三条指令:LDRR0,=rADCPSRMOVR1,#19STRR1,[R0]S3C44B0的ADC开发應用如果MCLK=64MHz2、将ADC通道3转换的结果存入R2中,如果结果小于30让R3=0,大于90,让R3=0xFFFFFFFF,其余让R3=R2。解答:用三步骤完成转换结果的提取:ADCCON=0x0FSTART:LDRR0,rADCCONMOVR1,#0x0FSTRR1,[R0];写ADCCON启动AD转换LP0:LDRR0,rADCCONTSTR0,#0x40;查询状态BEQLP0LDRR0,rADCDAT;取结果MOVR2,R0;存入R2中S3C44B0的ADC开发應用续解答续:CMPR2,#30BCCLPSET0CMPR2,#90BHILPSETFFMOVR3,R2BLPGOLPSET0:MOVR3,#0BLPGOLPSETF:MOVR3,#0xFFFFFFFFLPGO:BSTART