嵌入式系统设计与实例开发.ppt

  1. 1、本文档共66页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
A/D接口及采样实现 A/D转换器是摸拟信号源和CPU之间联系的接口,它的任务是将连续变化的摸拟信号转换为数字信号,以便计算机和数字系统进行处理、存储、控制和显示。在工业控制和数据采集及许多其他领域中,A/D转换是不可缺少的。 ARM S3C440BX芯片自带一个8路10位A/D转换器,该转换器可以通过软件设置为Sleep摸式,可以节电减少功率损失,最大转换率为500K,非线性度为正负1位。 其转换时间可以通过下式计算:如果系统时钟为66MHz,比例值为9,则为 66MHz/2 (9+1)/16 (完成转换至少需要16个时钟周期)=205.25KHz(相当于4.85us) 与AD相关的寄存器主要是如下三个: ADCPSR:采样比率寄存器。 通过设置该寄存器,可以设置采样率,最后得到的除数因子 =2(寄存器值+1)。 ADCDAT:转换结果数据寄存器。该寄存器的十位表示转换后的结果,全为1时为满量程3.3伏。 ⑴?????????? ADCCON:采样控制寄存器。其地址和意义参见下表: 该寄存器的0位是转换使能位,写1表示转换开始。1位是读操作使能转换,写1表示转换在读操作时开始。2、3、4位是通道号。5位为睡眠摸式设定,6位为转换标志位(只读)。 rADCCON=0x11(通道4开始转换) 初始化函数: void init_ADdevice() { rADCPSR=20; //采样率为32 rADCCON=ADCCON_SLEEP;//进入休眠摸式 } 读取某路摸拟量函数: int GetADresult(int channel) //channel为通道数 { rADCCON=(channel<<2)|ADCCON_ENABLE_START; //启动某路转换 while(!(rADCCON&ADCCON_FLAG));   //直到转换完毕 return rADCDAT; //返回转换结果 } 主函数如下: int Main(int argc, char **argv) { int i; float d=1024; init_ADdevice(); Uart_Printf("\n"); while(1) { for(i=0;i<=7;i++) { d=GetADresult(i)*5.00/1024; Uart_Printf("a%d=%f\n",i,d); Delay(10000); } } return 0; } 带操作系统的A/D功能实现 当系统内嵌入操作系统时,由于相当部分的工作已经被系统执行,甚至包括串行口的初始化工作,所以A/D功能的实现变得更加容易,下面我们看看如何周期性采集某路通道的信号,并在LCD上显示该信号的波形。 void AD_Check_Task(void *Id) { int i=0; float d; int oldx,oldy; PDC ADpdc; ADpdc=CreateDC(); init_ADdevice(); SetDrawOrg(ADpdc, 0,LCDHEIGHT, &oldx, & oldy); //设置原点 while(1) { if(ADOpen) //AD采集开关,按4键有效 {d=GetADresult(0)*3.3/1024;//采集数据,并处理 //在屏幕上展开显示采集曲线 if(i>=LCDWIDTH-1) { i=0; ClearScreen(); } OSSemPend(Lcd_Disp_Sem,0, &err);//得到信号量 SetPixel(ADpdc,i,(int)(-d*LCDHEIGHT/3.3),ADpdc->PenColor); OSMboxPost(LCDFresh_MBox,(void*)1); //刷新LCD OSSemPost(Lcd_Disp_Sem);//发送信号量 i++; } else //AD 开关:关 { ClearScreen(); i=0; } OSTimeDly(10); } } 在Main_Task中添加消息响应部分,通过设置某个全局变量,当按键盘上的某个键时(如nkey==4),变量改变,决定是否继续

文档评论(0)

kaku + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8124126005000000

1亿VIP精品文档

相关文档