嵌入式系统实习报告
学 院: 电气信息工程学院
专 业: 通信工程
班 级: 07—1
姓 名: 乔振宇
学 号: 40
指导教师: 山传文
目 录
一、实习目的…………………………………………………………………………2
二、实习设备…………………………………………………………………………2
三、实习内容…………………………………………………………………………2
四、实习原理…………………………………………………………………………2
五、实习步骤…………………………………………………………………………5
六、实习主程序………………………………………………………………………6
七、实习中间过程……………………………………………………………………7
八、实习心得…………………………………………………………………………10
九、参考文献…………………………………………………………………………10
基于S3C2410嵌入式MDK开发和EduKit-IV-ucos-II实习
一、实习目的:
1、掌握有关音频处理的基础知识;
2、通过实验了解IIS音频接口的工作原理;
3、通过实验掌握对处理器S3C2410X中IIS模块电路的控制方法;
4、通过实验掌握对常用IIS接口音频芯片的控制方法。
5、初步掌握液晶屏的使用及其设计方法。
6、掌握S3C2410X处理器的LCD控制其使用。
7、掌握通过任务调度的方法把液晶显示函数添加到UC/os-II中。
二、实习设备:
1、硬件:Embest EduKit-IV平台,ULINK2仿真器套件,PC机;
2、软件:μVision IDE for ARM集成开发环境,Windows 98/2000/NT/XP。
三、实习内容:
1、将从UART1接收到的字符串回送显示。
2、通过使用Embest Edukit-IV实验板的彩色液晶屏进行电路设计,掌握液晶屏作为人机接口界面的设计方法,并编写任务函数在uc/os-II系统中实现位图显示,在uc/os-II中建立两个任务Task1和Task2,其中Task1顺序熄灭四个LED,延迟一会再顺序点亮四个LED,Task1和Task2在LED屏幕上循环显示两幅图片,并打印一些文字信息。
3、在实习箱上显示你的专业,姓名。
四、实习原理:
1、数字音频基础:
采样频率和采样精度在数字音频系统中,通过将声波波形转换成一连串的二进制数据再现原始声音,这个过程中使用的设备是模拟/数字转换器(Analog to Digital Converter,即ADC),ADC以每秒上万次的速率对声波进行采样,每次采样都记录下了原始声波在某一时刻的状态,称之为样本。
每秒采样的数目称为采样频率,单位为HZ(赫兹)。采样频率越高所能描述的声波频率就越高。系统对于每个样本均会分配一定存储位(bit数)来表达声波的声波振幅状态,称之为采样精度。采样频率和精度共同保证了声音还原的质量。
人耳的听觉范围通常是20Hz~20KHz,根据奈魁斯特(NYQUIST)采样定理,用两倍于一个正弦波的频率进行采样能够真实地还原该波形,因此当采样频率高于40KHz时可以保证不产生失真。CD音频的采样规格为16bit,44KHz,就是根据以上原理制定。
音频编码:脉冲编码调制PCM(Pulse Code Modulation)编码的方法是对语音信号进行采样,然后对每个样值进行量化编码,在“采样频率和采样精度”中对语音量化和编码就是一个PCM编码过程。ITU-T的64kbit/s语音编码标准G.711采用PCM编码方式,采样速率为8KHz,每个样值用8bit非线性的μ律或A律进行编码,总速率为64kbit/s。
CD音频即是使用PCM编码格式,采样频率44KHz,采样值使用16bit编码。
使用PCM编码的文件在Windows系统中保存的文件格式一般为大家熟悉的wav格式,实验中用到的就是一个采样44.100KHz,16位立体声文件t.wav。
在PCM基础上发展起来的还有自适应差分脉冲编码调制ADPCM (Adaptive Differential Pulse Code Modulation)。ADPCM编码的方法是对输入样值进行自适应预测,然后对预测误差进行量化编码。CCITT的32kbit/s语音编码标准G.721采用ADPCM编码方式,每个语音采样值相当于使用4bit进行编码。
2、IIS音频接口:
IIS (Inter-IC Sound)是一种串行总线设计技术,是SONY、PHILIPS等电子巨头共同推出的接口标准,主要针对数字音频处理技术和设备如便携CD机、数字音频处理器等。IIS将音频数据和时钟信号分离,避免由时钟带来的抖动问题,因此系统中不再需要消除抖动的器件。
IIS总线仅处理音频数据,其它信号如控制信号等单独传送,基于减少引脚数目和布线简单的目的,IIS总线只由三根串行线组成:时分复用的数据通道线,字选择线和时钟线。
3、电路设计原理:
(1)信号线
处理器中与IIS相关的信号线有五根:
①串行数据输入IISDI,对应IIS总线接口中的SD信号,方向为输入。
②串行数据输出 IISDO,对应IIS总线接口中的SD信号,方向为输出。
③左右通道选择 IISLRCK,对应IIS总线接口中的WS信号,即采样时钟。
④串行位时钟 IISCLK,对应IIS总线接口中的SCK信号。
⑤音频系统主时钟CODECLK,一般为采样频率的256倍或384倍,符号为256fs或384fs,其中fs为采样频率。CODECLK通过处理器主时钟分频获得,可以通过在程序中设定分频
(2)寄存器
处理器中与IIS相关的寄存器有三个:
①IIS控制寄存器IISCON,通过该寄存器可以获取数据高速缓存FIFO的准备好状态,启动或停止发送和接收时的DMA请求,使能IISLRCK、分频功能和IIS接口。
②IIS模式寄存器IISMOD,该寄存器选择主/从、发送/接收模式,设置有效电平、通道数据位,选择CODECLK和IISLRCK频率。
③IIS分频寄存器IISPSR。
(3)数据传送
数据传送可以选择普通模式或者DMA模式,普通模式下,处理器根据FIFO的准备状态传送数据到FIFO,处理器自动完成数据从FIFO到IIS总线的发送,FIFO的准备状态通过IIS的FIFO控制寄存器IISFCON获取,数据直接写入FIFO寄存器IISFIF。DMA模式下,对FIFO的访问和控制完全由DMA控制器完成,DMA控制器自动根据FIFO的状态发送或接收数据。
DMA方式下数据的传送细节请参考处理器手册中DMA章节。
音频芯片UDA1341TS 说明
电路中使用的音频芯片是PHILIPS的UDA1341TS音频数字信号编译码器,UDA1341TS可将立体声模拟信号转化为数字信号,同样也能把数字信号转换成模拟信号,并可用PGA(可编程增益控制),AGC(自动增益控制)对模拟信号进行处理;对于数字信号,该芯片提供了DSP(数字音频处理)功能。实际使用中,UDA1341TS广泛应用于MD、CD、notebook、PC和数码摄像机等。
UDA1341TS提供两组音频输入信号线、一组音频信号输出线,一组IIS总线接口信号,一组L3总线。
IIS总线接口信号线包括位时钟输入BCK、字选择输入WS、数据输入DATAI、数据输出DATAO和音频系统时钟SYSCLK信号线。
UDA1341TS的L3总线,包括微处理器接口数据L3DATA、微处理器接口模式L3MODE、微处理器接口时钟L3CLOCK三根信号线,当该芯片工作于微控制器输入模式使用的,微处理器通过L3
五、实习步骤:
1. 准备实验环境
使用ULINK2仿真器连接Embest EduKit-IV实验平台的主板JTAG接口;使用Embest EduKit-IV实验平台附带的交叉串口线,连接实验平台主板上的COM2和PC机的串口(一般PC只有一个串口,如果有多个请自行选择,笔记本没有串口设备的可购买USB转串口适配器扩充);使用Embest EduKit-IV实验平台附带的电源适配器,连接实验平台主板上的电源接口。
2. 串口接收设置
在PC机上运行windows自带的超级终端串口通信程序,或者使用实验平台附带光盘内设置好了的超级终端,设置超级终端:波特率115200、1位停止位、无校验位、无硬件流控制,或者使用其它串口通信程序。(注:超级终端串口的选择根据用户的PC串口硬件不同,请自行选择,如果PC机只有一个串口,一般是COM1)
3. 打开实验例程
1)拷贝实验平台附带光盘DISK3_S3C2410\03-Codes\01-MDK\Mini2410-IV文件夹到MDK的安装路径:Keil\ARM\Boards\Embest\(如果本实验之前已经拷贝,可以跳过这一步)。(注:用户也可拷贝工程到任意目录,本实验为了便于教学,故统一实验路径);
2)运行μVision IDE for ARM软件,点击菜单栏“Project”,选择“Open Project…”,在弹出的对话框选择实验例程目录7.3_IIS_Test子目录下的IIS_Test.Uv2工程。
3)默认打开的工程在源码编辑窗口会显示实验例程的说明文件readme.txt,详细阅读并理解实验内容。
4)工程提供了两种运行方式:一是下载到SDRAM中调试运行,二是固化到Nor Flash中运行。用户可以在工具栏Select Target下拉框中选择在RAM中调试运行还是固化Flash中运行。
5)接下来开始编译链接工程,在菜单栏“Projiet”选择“Build target”或者“Rebuild all target files”编译整个工程,用户也可以在工具栏单击“”或者“”进行编译。
6) 编译完成后,在输出窗口可以看到编译提示信息,比如“".\SDRAM\IIS_Test.axf" - 0 Error(s), 1 Warning(s).”,如果显示“0 Error(s)”即表示编译成功。
7)拨动实验平台电源开关,给实验平台上电,单击菜单栏Debug->Start/Stop Debug Session项将编译出来的映像文件下载到SDRAM中,或者单击工具栏“”按钮来下载。
8)下载完成后,单击菜单栏Debug->Run项运行程序,或者单击工具栏“”按钮来全速运行程序。用户也可以使用进行单步调试程序。
9)全速运行后,用户可以在超级终端看到程序运行的信息,出现“Please input words, then press Enter”提示后输入想要发送的数据,并已回车作为发送字符串的结尾标志。
10)用户可以Stop程序运行,使用μVision IDE for ARM的一些调试窗口跟踪查看程序运行的信息。
注:如果在第4)步用户选择在Flash中运行,则编译链接成功后,单击菜单栏Flash->Download项将程序固化到NorFlash中,或者单击工具栏按钮“”固化程序,从实验平台的主板拔出JTAG线,给实验平台重新上电,程序将自动运行。
六、实习主程序:
声音图像同步显示
七、实习中间过程:
1、 终端的设置如下
2、单独显示图片时终端显示结果如下
3、单独实现声音的程序如下
4、单独实现声音的终端显示结果如下
5、图片的转换如下
6、声音的转换如下
八、实习心得:
通过本次实习对ARM9嵌入式系统设计有了更深一步的了解,知道了如何使用uc/os软件进行编程编译,并下载到实验箱中,使图像、声音、文字得以显示,学会了转换IIS声音文件的工具:ProcBmp.exe和转换bmp图片文件的工具:Image2Lcd,使其能够在程序中运行。更重要的是学会了如何解决在实习中遇到的各种问题并很好的解决,为以后使用该软件进行编程打下了坚实的基础,也培养了自己对该软件的兴趣,大四的学生正面临找工作的压力,通过这次实习积累了经验,对找工作也起到了辅助的作用,希望能够有机会对该软件进行进一步的学习研究。最后感谢指导老师和同学们的细心帮助。
九、参考文献:
1、 熊茂华、杨震伦编著ARM嵌入式系统设计与开发应用,清华大学出版社,2008.1
2、 于明等,ARM9嵌入式系统设计与开发教程,北京:电子工业出版社,2006.5
3、 杜春雷等,嵌入式体系结构与编程,北京:清华大学出版社,2003.5
第二篇:嵌入式实验报告123131231
嵌入式实验报告
电子电气学院
嵌入式实验报告
题 目: UART接口实验 专业(班): 电信21202
项目组成员:艾楚雄
课程名称: 嵌入式系统实验设计
2015 年 12 月 31 日
嵌入式实验报告
一、 实验目的
1.掌握UART0各个控制器的设置,并能使用UART0接收PC发过来的数据,并将数据送回PC进行显示。
2.熟悉在Linux环境下用C语言进行编程,实现UP-NETARM2410-S实验台上对串行接口设备(tts0/1/2)的设置和读写操作。
二、 实验环境
ARM2410S嵌入式实验平台:2个RS-232,1个RS-485,1个IrDA。 与嵌入式平台连接的PC机:运行红帽子Linux系统,内核版本2.4。
三、实验内容
在一台PC机和实验台上进行实验,为模仿两台机子串口之间的通信,程序中使用多线程控制方法,一个线程负责往COM口发送数据,另一个线程负责接收。还有一个键盘监控线程负责程序的中断退出。比如写线程往串口写字符串“Hello UP-NetARM2410-S!”,接收线程接收后送回上位机终端的数据接收窗口进行显示。
UART0设置为通讯波特率115200,8位数据位,1位停止位,无奇偶校验。
1
嵌入式实验报告
四、实验步骤
1.根据实验内容,编写代码予以实现。(注:源代码见附件)
2.交叉编译源代码,生成可在嵌入式平台上运行的程序,并把程序考到共享目录下。命令如下:
armv4l-unknown-linux-gcc serial.c –o serial –lpthread cp serial /arm2410s/share
3.在终端启动 minicom,并挂载共享目录:
mount -t nfs 192.168.0.11:/arm2410s/share /host
4.为设备文件建立软链接:
ln -sf /dev/tts/0 /dev/ttyS0
5.运行程序:
./serial
6.观测并记录实验结果。
五、实验结果
在PC终端输出从COM口读出的字符串,圆满完成了实验要求。结果如下图所示:
2
嵌入式实验报告
六、实验总结
通过URAT接口实验,我们掌握了UART0各个控制寄存器的设置。熟悉了在Linux环境下用C语言进行编程,对UP-NETARM2410-S实验台上串行接口设备(tts0/1/2)的设置和读写操作。此次实验,让我们对Linux下嵌入式平台的开发工作有了初步的了解,增强了我们动手编码和通过实践解决实际问题的能力。
3
嵌入式实验报告
附件:
#include <stdio.h> //标准输入/输出定义 #include <stdlib.h>
#include <fcntl.h> //文件控制定义 #include <pthread.h> //线程库
#include <termios.h> //PPSIX终端控制定义 #include <unistd.h> //UNIX标准函数定义
#define BAUDERATE B115200
#define COM1 "/dev/ttyS0"
#define COM2 "/dev/ttyS1"
#define ENDMINITERM 27 //按ESC键退出 #define FALSE 0
#define TRUE 1
volatile int STOP = FALSE;
volatile int fd; //设备号
/*------------------------------------------------*/
void* keyboard(void* data) //键盘输入,按ESC退出 {
int c;
for(;;)
{
c = getchar();
if(c == ENDMINITERM)
{
STOP = TRUE;
break;
}
}
return NULL;
}
/*------------------------------------------------*/
void* receive(void* data) //接收线程
{
int c;
printf("\n read mode\n");
while (STOP == FALSE)
{
read(fd,&c,1); //COM端口
//printf("%c",&c);
write(1,&c,1); //stdout
}
4
嵌入式实验报告
printf("\n exit from reading modem\n");
return NULL;
}
/*------------------------------------------------*/
void* send(void* data) //发送线程
{
int c = '0';
printf("\nsend data\n");
while(STOP == FALSE)
{
c = c +1;
c = c%256;
write(fd,&c,1);
fflush(stdout);
usleep(10000); //延迟
}
return NULL; //等待子进程消亡
}
/*------------------------------------------------*/
int main(int argc, char** argv)
{
struct termios oldtio, newtio, oldstdtio, newstdtio;
int ok;
pthread_t th_a, th_b, th_c; //定义线程a,b,c
void* retval; //定义错误
if(argc>1)
fd = open(COM2,O_RDWR); //以读写方式打开串口
else
fd = open(COM1,O_RDWR);
if(fd<0)
{
perror(COM1); //提示错误信息
exit(-1); //返回
}
tcgetattr(0,&oldstdtio); //0设备属性值->oldstdio
tcgetattr(fd,&oldtio); /* save current modem settings */
tcgetattr(fd,&newstdtio); /* get working stdtio ,准备更改属性*/
newtio.c_cflag = BAUDERATE | CRTSCTS | CS8 | CLOCAL | CREAD;/*ctrol flag*/ //B115200速率,8位数据位,本地,接受使能
newtio.c_iflag = IGNPAR; /*input flag*/ newtio.c_oflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*output flag*/ newtio.c_lflag &= ~OPOST; /*local flag*/ newtio.c_cc[VMIN]=1; //指定最少读取字符数为1
newtio.c_cc[VTIME]=0; //指定读取每个字符等待时间为0
5
嵌入式实验报告
//开始清空modem线,并且设置modem属性
tcflush(fd, TCIFLUSH); //丢弃所有输入/输出队列上还没有读取或发送的数据 tcsetattr(fd,TCSANOW,&newtio); /*set attrib */
pthread_create(&th_a, NULL, keyboard, 0);
pthread_create(&th_b, NULL, receive, 0);
pthread_create(&th_c, NULL, send ,0);
pthread_join(th_a, &retval); //等待线程a结束
pthread_join(th_b, &retval);
pthread_join(th_c, &retval);
tcsetattr(fd, TCSANOW, &oldtio);
tcsetattr(0, TCSANOW, &oldstdtio);
close(fd);
exit(0);
}
//恢复原来设置,立即生效 6