ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:289.63KB ,
资源ID:10762779      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10762779.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(嵌入式复习.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

嵌入式复习.docx

1、嵌入式复习Ch4GPIO输出实验电路原理图GPIO输出实验程序 main.c#include “config.h”/定义LED控制口(输出高电平时点亮LED)#define LED1_CON (111) /*GPE11口*/#define LED2_CON (112) /*GPE12口*/#define LED3_CON (14) /*GPH4口*/#define LED4_CON (16) /*GPH6口*/定义蜂鸣器控制口#define BEEP (110) /*GPH10口*/#define BEEP_MASK (BEEP)void DelayNS(unit32 dly) /*控制蜂鸣器

2、Be一声*/void RunBeep(void) rGPHDAT= rGPHDAT &BEEP_MASK; DelayNS(5); /BEEP=0 rGPHDAT=rGPHDAT|BEEP; DelayNS(5); /BEEP=1 void LED_ DispAllOn(void) rGPHDAT= rGPHDAT|(0x0311); rGPHDAT= rGPHDAT|(0x054); void LED_ DispAllOff(void) rGPHDAT= rGPHDAT&(0x0311); rGPHDAT= rGPHDAT&(0x054);void LED_ DispNum (unit32

3、dat) /四只LED灯显示00001111十六进制数 dat=dat&0x0000000F; /参数过滤 /控制LED4、LED3显示(d3、d2位) if(dat&0x08) rGPHDAT= rGPHDAT|(0x016); else rGPHDAT= rGPHDAT&(0x016); if(dat&0x04) rGPHDAT= rGPHDAT|(0x014); else rGPHDAT= rGPHDAT&(0x014); /控制LED2、LED1显示(d1、d0位) rGPEDAT= (rGPEDAT&( (0x0311)|(dat&0x03)11);int main(void) in

4、t i; /初始化I/O, rGPECON25:22=0101b, GPE11、GPE12为输出 rGPECON= (rGPECON&(0x0F22)|(0x05 22); / GPH4、GPH6为输出、GPH10为输出 rGPHCON= (rGPHCON&(0x338)|(0x11 8); rGPHCON= (rGPHCON&(0x0320)|(0x0520); while(1) RunBeep(); /蜂鸣器响一声 for(i=0;i5;i+) /LED全闪烁5次 LED_DisAllOff(); /LED全熄灭 DelayNS(5); LED_DisAllOn(); /LED全点亮 De

5、layNS(5); for(i=0;i16;i+) /控制LED指示0F的16进制数值 LED_DisNum(i); /显示数值i DelayNS(5); return(0);GPIO输入实验电路原理图#include “config.h”/定义独立按键KEY1的输入口#define KEY_CON (14) /*GPF4口*/定义蜂鸣器控制口#define BEEP (110) /*GPH10口*/#define BEEP_MASK (BEEP)int main(void) /rGPFCON9:8=00b, GPF4为GPIO输入模式 rGPFCON= (rGPFCON&(0x038); /

6、rGPHCON21:20=01b,GPH10为GPIO输出模式 rGPHCON= (rGPHCON&(0x0320)|(0x0120); while(1) if(rGPFDAT&KEY_CON) /读取GPF4是否为高电平 rGPHDAT= rGPHDAT|BEEP; /为高电平则GPH10=1 else rGPHDAT= rGPHDAT&BEEP_MASK;/为低则GPH10=0 DelayNS(1); return(0);Ch6中断实验程序解析独立按键KEY1电路原理如图所示,设置GPFCON寄存器来选择GPF4引脚为外部中断EINT4功能,此时通过按下KEY1键即可触发外部中断。初始化S

7、3C2410A中断控制器,设置EINT4为IRQ中断,并使能中断允许。初始化完成后,等待外部中断产生。中断服务程序里负责把LED1控制口输出信号取反,清除中断标志后退出中断。#include “config.h”/定义LED控制口(输出高电平时点亮LED)#define LED1_CON (111) /*GPE11口*/#define LED2_CON (112) /*GPE12口*/#define LED3_CON (14) /*GPH4口*/#define LED4_CON (16) /*GPH6口*/定义独立按键KEY1的输入口#define KEY_CON (14) /*GPF4口*/

8、定义LED1控制值变量unit8 ledcon=0x00/*Eint4中断服务程序。把LED1控制口输出信号取反.*/void IRQ_Eint4(void) int i; rGPFCON= rGPFCON&(0x038);/设置GPIO输入 for(i=0;i10000;i+) ; /延时去抖动 if(rGPFDAT&KEY_CON) /为真则是假按键,则直接退出 rGPFCON= rGPFCON|(0x028); /设置GPIO为EINT4中断 rEINTPEND=(14); /清除中断标志 rSRCPND=(14); rINTPND= rINTPND; return; rGPFCON=

9、rGPFCON|(0x028); /设置回 EINT4中断口 if(ledcon) /把LED1控制口输出信号取反 ledcon=0; rGPEDAT=rGPEDAT&(LED1_CON); else ledcon=1; rGPEDAT=rGPEDAT&|LED1_CON; rEINTPEND=(14); /清除中断标志,发生中断该位置1 rSRCPND=(14); rINTPND= rINTPND; /清除中断未决寄存器的方法void EINT_init(void) /设置GPF4引脚为外部中断EINT4功能 rGPFCON=(rGPFCON&0xFFFFFCFF)|(0x028); /外部

10、中断EINT4设置为下降沿触发 rEXTINT0=(0x216); VICVectAddr4=(uint32)IRQ_Eint4;/中断向量地址设置 rPRIORITY=0x00000000; /使用默认的固定的优先级 rINTMOD=0x00000000; /所有中断均为IRQ中断 rINTMSK=0x0000010; /使能EINT4中断 rEINTMASK=0x00000010; /使能外部中断int main(void) /rGPECON25:22=0101b, GPE11、GPE12为GPIO输出 rGPECON= (rGPECON&(0x0F22)|(0x05 22); /rGPH

11、CON13:8=01xx01b, GPH4、GPH6为GPIO输出 rGPHCON= (rGPHCON&(0x338)|(0x118); LED_DisAllOff(); /熄灭LED1LED4 EINT_init(); /外部中断初始化 IRQEnable(); /使能IRQ中断(清零CPSR寄存器的I位) while(1); /等待外部中断 return(0);Ch8ADC实验内容S3C2410A具有1个8通道的10位模数转换器(ADC),有采样保持功能,输入电压范围是03.3V,在2.5MHz的转换器时钟下,最大的转换速率可达500KSPS。A/D转换器的AIN5、AIN7还可以与控制脚

12、配合实现触摸屏输入功能。为了正确使用A/D转换器,需要设置A/D转换器的时钟,还有A/D转换器的工作模式设置和输入通道选择,这都是通过ADCCON寄存器来设置的。然后置位ADDCCON寄存器的ENABLE_START位来控制启动A/D转换,读ADCCON寄存器的ECFLG位来判断A/D转换是否已经结束。当一次A/D转换结束后,通过读ADCDAT0寄存器来取得A/D转换结果,寄存器的低10位数据有效。unit32 ReadAdc(unit32 ch) int i; ch=ch&0x07; /参数过滤 /PRSCEN=1,使能分频器 /PRSCVL=(PCLK/ADC_FREQ1),即转换时钟为A

13、DC_FREQ /SEL_MUX=ch,设置ADC通道;STDBM=0,标准转换模式 /READ_START=0,禁止读(操作后)启动ADC /ENABLE_START=0,不启动ADC rADCCON=(114)|(PCLK/ADC_FREQ1)6)|(ch3)|(02)|(01)|(00); rADCTSC=rADCTSC&(0x03); /普通ADC模式(非触摸屏) for(i=0;i100;i+) ; rADCCON=rADCCON|(10); /启动ADC while(rADCCON&0x01) ; /等待ADC启动 while(!(rADCCON&0x8000));/等待ADC完成

14、 return(rADCDAT0&0x3ff); /返回转换结果int main(void) int vin0,vin1; UART_Select(0); /选择UART0 UART_Init(); /初始化UART0 while(1) /进行A/D转换 adc0=ReadAdc(0); adc1=ReadAdc(1); /通过串口输出显示 vin0=(adc0*3300)/1024; /读算实际电压值(mV) vin1=(adc1*3300)/1024; sprintf(disp_buf,“AIN0 is %d mV,AIN1 is %dn”,vin0,vin1); UART_SendStr

15、(disp_buf); DelayNS(20); return(0);Ch10串口编程操作步骤1、配置时钟,选择时钟源2、配置ULCONn寄存器:设置数据位、停止位校验位、模式3、配置UCONn寄存器:设置数据接收和发送模式、时钟源3、设置UFCONn:启用或禁止FIFO4、配置UBRDIVn和UDIVSLOTn:计算波特率5、发送数据:等待发送器为空,将要发送的8位数据赋给发送缓存寄存器UTXHn6、接收数据:等待接收缓冲区有数据可读,从接收缓存寄存器URXHn中取出数据。波特率设置UBRDIV0(16位)与UDIVSLOT0(16位)是与UCLK相关的寄存器,进一步决定了baud rate

16、(波特率)的值(单位是bps),在有了PCLK_PSYS与目标波特率的情况下,怎么设置UBRDIV0与UDIVSLOT0呢?中间变量DIV_VAL,这个中间变量与PCLK_PSYS、bps有这样的函数关系:DIV_VAL=(PCLK_PSYS/(bps*16)-1同时DIV_VAL与UBRDIV0与UDIVSLOT0也有这样的函数关系:DIV_VAL=UBRDIV0+光棍数/16 (光棍数是指UDIVSLOT0这个16位数在二进制形式下,1的数目)举例PCLK_PSYS=66Mhz,假设波特率为115200bps,那么DIV_VAL=66000000/(115200*16)-1=34.81左右

17、,对应过来就是UBRDIV0=34,光棍数=12.96约为13吧,那么UDIVSLOT0=b0001 1111 1111 1111 =0x1fff了,数一数,是不是13根光棍呢?又比如PCLK_PSYS=66.5Mhz,需要115200bps,则DIV_VAL=35.079左右,对应过来UBRDIV0=35,光棍数1.26左右,约为1,那么UDIVSLOT0=0x1。补充:S3C2410的UART实验下图是一个RS-232接口电路。电路中所采用的电平转换电路芯片为MAX3232,S3C2410芯片的UART0相关引脚(即:TxD0、RxD0、nRTS0、nCTS0)经过MAX3232电平转换后

18、连接到DB9型的插座上。这样就可以使用S3C2410芯片内部的UART0部件来控制符合RS-232标准的串行通信。初始化编程void UART_Init(void) /I/O口设置(GPH3,GPH2) rGPHUP= rGPHUP|(0x032); rGPHCON=(rGPHCON&(0x000000F0)|(0x000000A0); /串口模式设置 rUFCON0=0x00; /禁止FIFO功能 rUMCON0=0x00; /AFC(流控制)禁能 rULCON0=0x03;/禁止IrDA,无奇偶校验,1位停止位,8位数据位 rUCON0=0x245;/使用PCLK来生成波特率,发送电平触发

19、模式, /接收中断为边沿模式,使能接受错误中断,正常工作模式, /串口波特率设置 rUBRDIV0=(int)(PCLK/16.0/UART_BPS+0.5)-1;发送程序使用串口发送数据时,将待发送数据写入UTXH0寄存器,然后通过读取UTRSTAT0寄存器的值判断数据是否发送完成。void UART_SendByte(uint8 data) int i; while(!(rUTRSTAT0&0x02); /等待发送为空 for(i=0;i10;i+); rUTXH0=data; /发送数据 接收程序串口数据接收时,通过读取UTRSTAT0寄存器的值判断是否接收到数据,然后从URXH0寄存器

20、中读取数据, 。int UART_GetKey(void) int i; while(!(rUTRSTAT0&0x01); /等待接收为满 for(i=0;i10;i+); return (rURXH0); /发送数据main.c函数#include “config.h”/串口接收字符uint8 g_getch=0;int main(void) int i; UART_Select(0); /选择UART0 UART_Init(); /初始化UART0 for(i=0;i10;i+) UART_SendStr(“Hello World!n”); while(1) g_getch=UART_Ge

21、tKey(); /接收字符 if(g_getch=0x0D) /判断是否为回车键 UART_SendByte(r); /发送换行符 UART_SendByte(n); else UART_SendByte(g_getch); /发送接收到的字符 return(0);I2C程序/第一步,确定从设备和初始化设置I2C0.I2CDS0 = 0x90;/(先清pending操作)写从设备(LM75)地址I2C0.I2CSTAT0 = 0xf0; /设置主设备为主传送模式、Enable Rx/Tx等I2C0.I2CCON0 = 0xef; /使能ACK信号、设置预分频、使能中断、清pending fla

22、g等while (!(I2C0.I2CCON0&(14);/等待收到从设备应答后产生中断请求,可以继续/第二步,写命令,指示从设备模式I2C0.I2CDS0 = mode; /此处mode=0x0,表示读传感器数据模式I2C0.I2CCON0 = 0xef; /设置和清pending flagwhile (!(I2C0.I2CCON0&(14);for (delay = 0; delay0x1fffff; delay+) ;/第三步,主设备读模式I2C0.I2CDS0 = 0x90;I2C0.I2CSTAT0 = 0xb0; /设置主机接收模式I2C0.I2CCON0 = 0xef;while

23、 (!(I2C0.I2CCON0&(14);I2C0.I2CCON0 = 0xef; /使能ACK信号,预分频512,使能中断Rx/Txfor (delay = 0; delay 0xffff; delay+);high = I2C0.I2CDS0; /从LM75芯片获取温度数据(整数部分)I2C0.I2CCON0 = 0x2f; /关闭ACK信号,预分频:16,使能中断Rx/Txfor (delay=0; delay 0xffff; delay+);low = I2C0.I2CDS0; /从LM75芯片获取温度数据(小数部分)I2C0.I2CSTAT0 = 0x90; /这两步是主机接收模式操作结束时的标准操作I2C0.I2CCON0 = 0xef; /clear pending flag

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1