嵌入式课程设计
- 格式:docx
- 大小:361.81 KB
- 文档页数:9
.
盐 城 师 范 学 院
课 程 设 计 报 告
系(院、校区): 物电学院
专 业: 电子信息工程(通信技术)
学 生 姓 名: 学 号:
课程设计题目: 嵌入式Linux智能停车终端系统
起 迄 日 期:
课程设计地点:
指 导 教 师: .
1、 课程设计综述
本次课程设计由华清远见资深讲师向我们学生展示完整嵌入式项目设计开发流程及方法,以及嵌入式核心技术运用等满足企业真实岗位需求的实用内容,帮助学生在快速熟悉ARM-Linux开发环境的搭建及相关工具的配置及使用,嵌入式项目开发的代码编写规范,以及基于ARM-Linux 产品实现细节等,并在行业专家的引导下,体验一个全真案例的实战过程,同时通过更多行业典型应用的示范分析帮助学生更贴近企业的真实需求和行业的发展,为进一步在嵌入式研发行业中发展打下坚实基础。随着科技的进步,电子技术、计算机技术、通讯技术不断地向各种收费领域渗透,当今的停车场收费系统已经向智能型的方向转变。先进可靠的停车场收费系统在停车场管理系统中的作用越来越大。所以本次课程设计就是用嵌入式Linux设计一个只能停车终端系统。
2、 开发平台和软件环境
2.1硬件平台
表2.1 硬件配置表
名称 说明
CPU
Cortex-A8构架S5PC100
FLASH 2M norflash + 256M Nand Flash
SDRAM
256M
USB
4路USB Host接口,USB2.0-OTG接口
网口 DM9000以太网控制器
串口
2个5线串口, 1路3线串口
摄像头
USB2.0接口
/Camera接口
I/O
8路I/O
A/D转换器
10bit
电压0-3V
LCD 480*320大小
PWM 蜂鸣器实验
2.2软件平台
.
表2.2 软件环境需求表
名称 说明
操作系统 Linux-2.6.26.5
开发工具 GNU工具
启动代码 u-boot 1.3.1 或者1.3.4
驱动程序 项目所涉及到的硬件驱动(蜂鸣器、ADC,按键、FLASH、USB-CAMERA,SD卡等)
文件系统:
要求根文件系统采用cramfs,用户文件系统采用JFFS2或者yaffs2
协议栈
TCP/IP (TFTP/NFS实验)
服务器 B0A或者APACHE 服务器
3、 系统软件架构与流程图
3.1软件架构
表3.1 系统软件架构图
3.2系统工作流程图 .
4、课程项目内容
4.1 LED模块
4.1.1模块功能说明
开发平台上有四个LED灯硬件资源,主要用于模拟信号提示,也可用于限高报警灯的警报,灯的顺序可由项目开发需求自行决定。
4.1.2模块部分代码
#define GPG3CON (*(volatile unsigned int *)0xE03001C0)
#define GPG3DAT (*(volatile unsigned int *)0xE03001C4)
#define N 1000000 .
void mydelay(unsigned int count)
{
while (count > 0)
count--;
}
void main(void)
{
//GPG3CON = GPG3CON & 0xffff0000 | 0x000011111;
GPG3CON = GPG3CON & (~0xffff) | 0x1111;
while(1)
{
GPG3DAT=0x2;
mydelay(N);
GPG3DAT=0x4;
mydelay(N);
GPG3DAT=0X8;
mydelay(N);
GPG3DAT=0x1;
mydelay(N);
GPG3DAT=0x8;
mydelay(N);
GPG3DAT=0X4;
mydelay(N);
}
4.1.3模块技术点
1.S5PC100硬件平台的GPIO端口控制;
2.学会查看S5PC100硬件平台原理图LED模块;
3.寄存器的位与和位或操作。
4.2 PWM模块
4.2.1模块功能说明
脉宽调制(PWM)控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。
4.2.2模块部分代码
main.c Created on: 2013-5-20 .
Author: Administrator
*/
/*
* 主函数 pwm_music
*/
//包含系统寄存器定义的头文件
#include "s5pc100.h"
//音阶频率表
const unsigned int yinyue[3][7]
={
// DO RE MI FA SO LA XI
262, 294, 330, 370, 415, 266, 294, //低音
523, 578, 659, 698, 784, 880, 988, //中音
1046, 1174, 1318, 1396, 1567, 1700, 1975 //高音
};
void soft_delay(unsigned int mloop)
{
while( --mloop>0 );
}
void PwmBeepInit( void )
{
GPD.GPDCON = (GPD.GPDCON & (~0xf0)) | (0x2<<4);
TIMER.TCFG0 = ( TIMER.TCFG0 & ~0xff ) | 65; //初始化预分频值是prescal0的预分频值是66
TIMER.TCFG1 = ( TIMER.TCFG1 & ~0xf0 ) | (0<<4); //初始化多路选通开关的值是 1/1 与prescal0配合使用,
//总的预分频的值是66
TIMER1.TCNTB1 = 1000; // 初始化向下计数值是1000
TIMER1.TCMPB1 = 500; // 初始化比较寄存器的值是500
TIMER.TCON = TIMER.TCON | (1<<9) ; // TCON寄存器手动更新
TCNTB1 TCMPB1
}
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
* 调用该函数, 可以控制蜂鸣器响起, 原理是使能了PWM的TOU1功能为动重装模式
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> */
void beep_on( void )
{ .
TIMER.TCON = ( TIMER.TCON & (~(0xf<<8))) | (1<<11) | (1<<8);
}
// 00001111 0000 0000
* 调用该函数, 可以控制蜂鸣器响起, 原理是停止了PWM的TOU1功能
void beep_off( void )
{
TIMER.TCON = ( TIMER.TCON & (~(0x1<<8))) ;
}
* 设置蜂鸣器发生频*
* 输入参数: unsigned int fre : 设置蜂鸣器的频率值
#define SYS_SET_FREQUENCE 1000000
void beep_set_frequence( unsigned int fre )
{
//若蜂鸣器的发声频率为0则返回
if( 0==fre )
return ;
TIMER1.TCMPB1 = SYS_SET_FREQUENCE/(fre+fre); //根据设定频率重新设定计数器比较的值
TIMER1.TCNTB1 = SYS_SET_FREQUENCE/fre; //根据频率重新调整计数值
}
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
* 大海的简谱, 如果大海能够.....
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */
const unsigned char dahai[] =
{
0x13, 0x15 , 0x16, 0x16, 0x16, 0x16, 0x21, 0x16, 0x15, 0x15, 0x16,
0x15, //哀愁
0x13, 0x12 , 0x11, 0x11, 0x11, 0x11, 0x12, 0x13,
0x13, 0x12 , 0x11, 0x11, 0x11, 0x11, 0x21, 0x16, 0x15, 0x15, 0x16,
0x15,
0x13, 0x15, 0x16, 0x21, 0x21, 0x16, 0x15, 0x15,//飘远
};
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
* 大海的简谱, 控制每一个音的时间 1为长时间 4为短时间
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */
const unsigned char time[] =
{
4, 4, 4, 2, 4 , 2, 4, 4, 4, 2, 4,
2 ,//哀愁
4, 4, 4, 2, 4, 2, 2, 1,