嵌入式系统设计

发布 2022-10-21 06:41:28 阅读 8784

1 实验目的。

熟悉arm realview mdk 环境下软件的开发。

通过实验掌握 led 的显示控制方法。

了解 s3c2410x 处理器uart 相关控制寄存器的使用;掌握 arm 处理器串行通信的软件编程方法。

了解实时时钟的硬件控制原理及设计方法;掌握 s3c2410x 处理器的rtc 模块程序设计方法。

掌握四型实验箱扩展输入输出端口的原理和应用;掌握矩阵式键盘原理及编程方法。

通过实验掌握 iic 串行数据通信协议的使用;通过实验加深对 iic 总线工作原理的掌握。

掌握 s3c2410x 处理器的lcd 控制器的使用;通过实验掌握液晶显示文本及图形的方法与程序设计。

通过实验掌握 eeprom 器件的读写访问方法;通过实验掌握 s3c2410x 处理器的iic 控制器的使用。

了解 s3c2410x 处理器adc 相关控制寄存器的使用;通过实验掌握模数转换(adc)的原理;掌握 s3c2410x 处理器的adc 转换功能。

了解 s3c2410x 处理器pwm timer 相关控制寄存器的使用;掌握运用 pwm 控制直流电机的方法。

通过完成本次实验掌握arm 嵌入式软件开发与调试技术。

2实验设备。

硬件:embest edukit-iv 平台,ulink2 **器套件,pc 机;

软件:μvision ide for arm 集成开发环境,windows 98/2000/nt/xp。

3实验要求。

lcd屏幕上显示本人**、学号、姓名等信息。

换屏显示菜单功能:a. com test;

b. ad test;

c. motor test;

d. iic test

e: rtc test

合理地布置界面,每个区域(或每一屏)显示下列测试信息。

com测试:完成键盘从一个com2口输出,从另一个com2输入且在lcd上显示。若通讯过程出现不正常的情况,应有出错提示信息及报警功能;

ad 测试:通过调节旋钮监测模拟量的输入。其模拟量大小同时在lcd及led上显示(精确到1%);

motor测试:以a/d调节比例值作为占空比控制直流电机的转速,并显示占空比;

iic 测试:在lcd上显示存入在eeprom的数据。当有键盘输入时,存入epprom中读数,且读出再显示;

rtc测试:从eeprom中获取设定的时间,并显示当今的时间。

4 实验分析。

入手本次实验的基础是掌握lcd显示文本图形的程序设计以及矩阵键盘原理与编程方法,熟悉模块化设计方法,将我们这几个平时学习过的模块连接起来,组合成一个可以实现人机交互的程序:

在设计程序时应该明白这个道理:单片机程序的编写的实质是对其寄存器的编写。

com test:设计的关键是要弄清楚utxhi,utrstat,urxhi的作用与控制方法,知道应该将它们设为何种状态已达到传输与接收的目的。

ad test:硬件很简单,与其相关的寄存器只有adc 控制寄存器(adccon)和adc 数据寄存器(adcdat),对这两个寄存器进行正确的设置已达到控制adc的目的,但值得指出的是该实验模块同时包括了led的显示等其它内容,需要正确使用模块化设计方法来达到简化程序的目的,最后还应adc的电路结构有所了解,知道预分频的概念。

motor test:与ad test实验连接的非常紧密,应该掌握定时器减法缓冲寄存器(tcntbn)和比较缓冲寄存器(tcmpbn)及用它们来控制pwm 输出信号的占空比的方法,在实验中可以固定缓冲寄存器为1024,再将ad转换值赋给比较缓冲寄存器即可控制电机转速。

iic test:处理器通过iic 接口与外部串行器件进行数据传送,需要使用到如下寄存器:iic 总线控制寄存器iiccon,iic 总线状态寄存器iicstat,iic 总线地址寄存器 iicadd,iic 总线发送接收移位寄存器iicds。

需要掌握通过iic进行读写操作的程序设计以及iic 中断使能设置。

rtc test:本次实验中最困难的实验模块,关键是通过eeprom获取设定的时间并且能在设定时间后将设定后的时间在lcd上正常显示,此实验模块主要用到了iic的读写的使用方法,以及需要rtc的时间寄存器有效的设定,各种数据类型间的转换也是本实验模块的难点。

5 实验内容。

5.1 实验总流程。

如图1:图1 实验总流程。

5.2 实验内容。

首先将lcd显示与kaypad连接相关的函数准备好,这一点我是参考的demo例程。

com test:设两个数组sendbytes[20]和receivebytes[20],前者用来保存发送的字符,后者保存接受的字符;给按键得到的字符f_ucchar初始化,再判断它是否为fun,如果不是,则保存所按的键值到sendbytes[20],并计算按键的次数num,如果是,则将sendbytes[num]里的字符通过uart0发送至uart1给receivebytes[num];发送完毕后比较两个数组是否一致,如果不一致,则报错,图2为其流程。

图2 com test流程图。

ad test:对ad寄存器做相应设置:adccon:

允许分频并设预分频值大小,选择模拟信道输入,启动转换。adcdat:uscondata=radcdat0&0x3ff,即保留x坐标转换值至uscondata;以及将iic初始化设置:

确认信号f_ngetack清零,使能中断,iic初始化:设定从设备地址,使能ack 和iic 总线中断,设置iicclk 为mclk/512,清除pending 位以便响应中断。使能发送/接收中断。

初始判断是否按fun,如果否,启动按键设置,判断是否按键,如果否,一直等待,如果按键,显示ad转换值,并在led显示,如果按fun,回主界面,图3为其流程。

图3 ad test流程图。

motor test:行键值清零,判断是否按键,如果按键:对ad寄存器做相应设置,获取ad模拟量转化结果,定时器初始化:

端口b控制寄存器设置,端口上拉寄存器设置,定时器配置与控制寄存器设置等。pwm输出信号占空比控制设置,定时器自动重载,倒相,更新设置;在实验中可以固定缓冲寄存器为1024,再将ad转换值赋给比较缓冲寄存器即可控制电机转速,图4为其流程图。

图4 motor test流程图。

iic test:确认信号f_ngetack清零,使能中断,初始化iic,按键行地址清零,判断按键是否为“*”或“fun”,如果既没有按“*”又没有按“fun”,将按键字符写入eeprom,并在lcd逐个显示,如果是按“*”结束写操作,并在eeprom中将键值读出并显示,如果按“fun”,回主界面,图5为其流程图。

图5 iic test流程图。

rtc test:rtc初始化:rtc控制使能,相应的年月日等寄存器初始化;iic初始化,将eeprom的值读入rtc寄存器并做相应时间显示,判断是否按键,如果是“fun”,设定时间,如果是其它键,返回主界面,实验中需考虑很多细节问题,例如:

对iic的读写操作都应该对其初始化;设置按键时如何将设定的值有效的读与写,实验中的难点之一是如何将数组中的字符转换为整型量,图6为其流程图。

图6 rtc test流程图。

6 程序调试详解。

6.1 无法进行菜单选择。

初始时遇到一个头疼的问题就是无法进行菜单选择,经过设置断点,标志语句,单步运行的方法终于找到程序的故障点如下:

初始的按键判断程序:

rcpldkpladdr = 0x00键盘行线置0

f_nkeypress = 0标志位清零。

while(!f_nkeypress如有按键进入中断服务程序,将标志位置1

keypad_getkey(&f_ucchar); 按键值获取。

f_nkeypress = 0标志位清零。

其终端服务程序片段:

if(status & 0x40判断irqkey是否按下。

问题出在按键之后通过中断服务程序后标志位f_nkeypress置1,再跳出中断服务程序执行按键获取,可能会因为按键的抖动等原因无法获取相应的键值,解决方法是将按键获取语句直接写到中断服务程序里面,在标志位置1之后即获取键值,即:

if(status & 0x40)

这样便能正常选择菜单。

6.2 进行com test编程时,显示的发送字符与接收字符相同,但比较后报错。

经过反复调试,最后发现将系统初始化sys_init();中的串口选择改为uart1;如uart_select(uart1);则程序功能正常,具体原因不太明白。

6.3 iic test 以'*'为结束标志符,但按‘*’结束写入eeprom之后却将‘*’写进eeprom

问题的原因还是在编写程序的逻辑思路不清晰,由于是先判断按键是否为‘*’或‘fun’在确定是否按键,所以在按‘*’之后,数组datas_in会继续存入该键值,然后再统一写入eeprom,因为不想改变已编好程序的整体框架,所以在存入数组datas_in之前再进行键值的判断:

if(f_ucchar=='

break;

如果为‘*’则跳出存入数组datas_in字符的while循环。

在编写程序的过程中还遇到一些小的问题,比如com test最开始编写完成之后本意是想接受一串字符,但只能接收一个字符便停止,还有iic test在按某一个键值后会不停的连续写入并显示该键值等等,这些都是编写程序时思路不清晰造成的,经过耐心的理清程序的过程,便解决了这些问题。

程序附录:main

嵌入式ARM嵌入式系统设计

摘要 本系统设计了基于arm系统的嵌入式硬件平台,其中主要介绍了系统母版的具体电路实现,其硬件电路已经通过了信号完整性分析。中国 网 关键词 arm 嵌入式系统 中图分类号 tp368.1 文献标识码 a 文章编号 1007 9416 2012 12 0104 01 1 序言 本系统是设计一款基于a...

嵌入式linux与嵌入式系统设计

ustc bbs embedded斑竹d j主讲。感谢hongtao chen以及networking斑竹jun zxjun的大量幕后工作!感谢james zhang以及网络中心提供聚会的场地和大力支持!欢迎访问我的主页。聚会详情如下 名称 嵌入式系统设计以及嵌入式linux展望 时间 本周星期天 ...

嵌入式嵌入式系统原理与设计

第六章 iic总线。一 iic总线介绍 i2c总线 1.结构。2.工作原理 a b 主机 主设备 负责生成scl时钟,同时负责发出其实信号s和终止信号p 从机 从设备 被主机寻址的器件。1 a检测i2c总线是否 空闲 如果空闲 高 a发出起始信号 scl高,sda 2 寻址选择目标器件b,发送7位地...