嵌入式课程设计-- 串口通信_第1页
嵌入式课程设计-- 串口通信_第2页
嵌入式课程设计-- 串口通信_第3页
嵌入式课程设计-- 串口通信_第4页
嵌入式课程设计-- 串口通信_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式系统二课程设计报告串口通信的设计班级:学号:姓名:指导教师:设计日期:2013年07月01日 至 2013年07月25日设计题目: 串口通信 设计的主要内容:通过编写软件设置S3C2410X 处理器 UART 相关控制寄存器和ARM 处理器系统硬件电路中 UART 接口,利用Embest EduKit-III 实验平台实现S3C2410X处理器和PC机的串行通信。 指导教师: 2013年6月30日教师评阅意见书:评阅教师: 2013 年 月 日1摘要 为了掌握嵌入式技术,就应该学习以ARM 微处理器为核心的嵌入式开发环境和开发平台。本设计采用ARM原理和C语言程序设计的,设置S3C241

2、0X 处理器 UART 相关控制寄存器和ARM 处理器系统硬件电路中 UART 接口,利用Embest EduKit-III 实验平台实现S3C2410X处理器和PC机的结合。关键字: Embest EduKit-III 实验平台;S3C2410X 串行通讯(UART)单元;UART 控制寄存器;串口通信1、绪论1.1目的和意义串口通信是目前单片机和 DSP 等嵌入式系统之间,以及嵌入式系统与 PC 机或无线模块之间的一种非常重要且普遍使用的通信方式。在嵌入式系统的硬件结构中,通常只有一个8位或 16位的 CPU, 不仅要完成主流程的工作, 同时还要处理随时发生的各种中断, 因而嵌入式系统中的

3、串口通信程序设计与 PC 机有很大的不同。为了顺应当今世界技术革新的潮流,了解、学习和掌握嵌入式技术,就必然要学习和掌握以ARM 微处理器为核心的嵌入式开发环境和开发平台。1.2设计内容本设计采用Embest EduKit-III 实验平台实现,通过EmbestIDE Pro for ARM软件编写程序,仿真调试。实现实验平台与PC的串口通信。通过PC的超级终端显示接受的结果。171设计要求和目的2、设计方案2.1方案选择本设计只用了Embest EduKit-III 实验平台的部分模块。其中包括ARM核心芯片S3C2410X以及串口通信模块。如图1所示,下面描述了所用模块的具体设置。图1 总

4、体设计框图 2.1.1S3C2410X 串行通讯(UART)单元 S3C2410X UART 单元提供三个独立的异步串行通信接口,皆可工作于中断和DMA 模式。使用系统时钟最高波特率达230.4Kbps,如果使用外部设备提供的时钟,可以达到更高的速率。每一个UART 单元包含一个 16 字节的FIFO,用于数据的接收和发送。 S3C44B0X UART 支持可编程波特率,红外发送/接收,一个或两个停止位,5bit/6bit/ 7bit/ 或 8bit 数据宽度和奇偶校验。2.1.2 波特率的产生 波特率由一个专用的UART 波特率分频寄存器(UBRDIVn )控制,计算公式如下: UBRDIV

5、n = (int)(ULK/(bps x 16) ) 1 或者UBRDIVn = (int)(PLK/(bps x 16) ) 1 其中:时钟选用 ULK 还是 PLK 由 UAR控制寄存器 UCONn10的状态决定。如果 UCONn10=0,用PLK 作为波特率发生,否则选用ULK 做波特率发生。UBRDIVn 的值必须1到(-1)之间。例如:ULK 或者PLK 等于40MHz,当波特率为 115200 时, UBRDIVn = (int)(40000000/(115200 x 16) ) -1 = (int)(21.7) -1 = 21-1 = 20 2.1.3 UART 通信操作 下面简

6、略介绍 UART 操作,关于数据发送,数据接收,中断产生,波特率产生,轮流检测模式,红外模式和自动流控制的详细介绍,请参照相关教材和数据手册。 发送数据帧是可编程的。一个数据帧包含一个起始位,5 到8 个数据位,一个可选的奇偶校验位和 1 到2 位停止位,停止位通过行控制寄存器ULCONn 配置。 与发送类似,接收帧也是可编程的。接收帧由一个起始位,5 到8 个数据位,一个可选的奇偶校验和1 到2 位行控制寄存器ULCONn 里的停止位组成。接收器还可以检测溢出错,奇偶校验错,帧错误和传输中断,每一个错误均可以设置一个错误标志。 溢出错误(Overrun error)是指已接收到的数据在读取之

7、前被新接收的数据覆盖。 奇偶校验错是指接收器检测到的校验和与设置的不符。 帧错误指没有接收到有效的停止位。 传输中断表示接收数据RxDn 保持逻辑0 超过一帧的传输时间。 在FIFO 模式下,如果RxFIFO 非空,而在3 个字的传输时间内没有接收到数据,则产生超时。2.1.4 UART 控制寄存器 1) UART 行控制寄存器 ULCONn 该寄存器的第6 位决定是否使用红外模式,位 53 决定校验方式,位2 决定停止位长度,位 1 和决定每帧的数据位数。 2)UART 控制寄存器 UCONn 该寄存器决定UART 的各种模式。 UCONn10= 1 : ULK 做比特率发生;0:PLK 做

8、比特率发生。 UCONn9 = 1: Tx 中断电平触发;0:Tx 中断脉冲触发。 UCONn8 = 1: Rx 中断电平触发;0:Rx 中断脉冲触发。 UCONn7 = 1: 接收超时中断允许;0:接收超时中断不允许。 UCONn6 = 1: 产生接收错误中断;0:不产生接收错误中断。 UCONn5 = 1: 发送直接传给接收方式(Loopback);0:正常模式。 UCONn4 = 1: 发送间断信号;0:正常模式发送。 UCONn3:2: 发送模式选择 00:不允许发送; 01:中断或查询模式 10:DMA0 请求(UART0 ) DMA3 请求(UART2 ) 11: DMA1 请求(

9、UART1 ). UCONn1:0 : 接收模式选择 00 :不允许接收 01 :中断或查询模式 10 :DMA0 请求(UART0 ) DMA3 请求(UART2 ) 11: DMA1 请求(UART1 ) 3) UART FIFO 控制寄存器 UFCONnUFCONn7:6 00:Tx FIFO 寄存器中有0 个字节就触发中断 01:Tx FIFO 寄存器中有4 个字节就触发中断 10:Tx FIFO 寄存器中有8 个字节就触发中断 11:Tx FIFO 寄存器中有0 个字节就触发中断 UFCONn5:4 = 00: Rx FIFO 寄存器中有0 个字节就触发中断 01:Rx FIFO 寄

10、存器中有4 个字节就触发中断 10:Rx FIFO 寄存器中有8 个字节就触发中断 11:Rx FIFO 寄存器中有0 个字节就触发中断 UFCONn3:保留。 UFCONn2 =1:FIFO 复位清零Tx FIFO; 0:FIFO 复位不清零Tx FIFO UFCONn1 =1:FIFO 复位清零 Rx FIFO; 0:FIFO 复位不清零 Rx FIFO UFCONn0 =1:允许 FIFO 功能; 0:不允许FIFO 功能 4) UART MODEM 控制寄存器 UMCONn(n0 或 1) UMCONn7:5 保留,必须全为 0 UMCONn4 1:允许使用AFC 模式; 0:不允许使

11、用AFC UMCONn3:1 保留,必须全为 0 UMCONn0 =1:激活nRTS; 0:不激活 nRTS 5) 发送寄存器 UTXH 和接收寄存器 URXH 这两个寄存器存放着发送和接收的数据,当然只有一个字节位数据。需要注意的是在 发生溢出错误的时候,接收的数据必须被读出来,否则会引发下次溢出错误。2.1.5 RS232 接口电路 UART0 串口电路如图4-4-1 所示,UART0 只采用二根接线 RXD0 和TXD0,因此只能进行简单的数据传输及接收功能。UART0 则采用MAX3221E作为电平转换器。3、硬件设计3.1Embest EduKit-III 实验平台采用双CPU子板,

12、ARM7 S3C44B0子板,ARM9 S3C2410子板,16M NandFlash;4Kbit IIC BUS 的串行EEPROM ,2个串口,两个中断按钮,4个LED, 320*240 STN 彩色 LCD及TSP触摸屏,4×5键盘,20针JTAG接口,PS/2接口, 2个USB主口;1个USB从口, Sd卡,VGA接口,双PCI扩展接口,双以太网接口,8段数码管,双CAN总线模块,A/D 、D/A 模块,IDE 硬盘 +CF 卡模块 ;固态硬盘 16M × 8bit,MICROPHONE 输入口,IIS 音频信号输出口,GPRS 模块(选配),GPS 模块(选配)。

13、多外扩模块支持:提供 GPRS 模块、提供 GPS 模块、步进电机模块、摄像模块、PCI外部焊接板核心模块:基于ARM7架构的嵌入式芯片三星S3C44B0x芯片(或ARM9架构的嵌入式芯片三星S3C2410V6),整套系统可通过CPU子板可自由更换变化为ARM7或者ARM9电源:外部5V电源供电或者由USB接PC供电,电源指示LED以及500mA保险丝2M×16bit Flash;4M×16bit SDRM复位开关Embest EDUKIT-III软件配置:uCosII 实时操作系统移植例子以及源代码,uClinux实时操作系统移植例子以及源代码,Linux实时操作系统移植

14、例子以及源代码,WinCE实时操作系统移植例子*,Vxworks实时操作系统移植例子,GNU toolchain including ARM cross compiler, Linker, Assembler, and Utilities,基于Embest IDE Pro for ARM环境和Embest EDUKIT-III实验箱实验源程序。 3.2ULINK2 仿真器套件,PC 机ULINK2不仅具有ULINK仿真器的所有功能,还增加了串行调试(SWD)支持,返回时钟支持和实时代理等功能。开发工程师通过结合使用RealView MDK的调试器和ULINK2,可以方便的在目标硬件上进行片上调

15、试(使用on-chip JTAG,SWD和OCDS)、Flash编程。4、软件设计4.1软件设备 Embest IDE for ARM 集成开发环境,Windows 98/2000/NT/XP4.2程序流程图设计开始设置定时器寄存器设置端口寄存器等待ARM发送请求发送应答信号发送校验和发送完了发送数据并求校验和校验和清零ARM接收正确返回YYYNNN图2程序流程图4.3调试运行结果 如果输入就会马上显示在超级终端上(假设输入为abcdefg),输入回车符后打印一整串字符:按回车键就会显示:abcdefg 串口通信成功完成。5、总结与体会一方面,通过这一周的课程设计,对关于Embest EduK

16、it-III 实验平台,ULINK2 仿真器套件,S3C2410X 串行通讯(UART)单元结构的知识有了更加深刻的理解,而且对其用法掌握的更加熟练。在课程设计过程中,能够不断地发现问题,并想办法解决,如此提高了解决问题的能力。在程序设计方面,对串口通信的过程有了更深刻的理解和领会。通过本次课程设计,使我对ARM嵌入式开发有了一定的掌握和理解,巩固了我在ARM嵌入式系统开发及应用课程中所学的基本理论知识和实验技能,使我对ARM嵌入式系统开发及应用课程有了更深入的了解,熟悉了S3C2410 的串口的使用,了解S3C2410的内部功能模块,及内核架构。进一步激发了我对所学专业学习的兴趣;提高了我的

17、思考与实践能力。参考文献1  张勇编著.ARM原理与C语言程序设计. 西安:西安电子科技大学出版社,2004.2  王勇编著.嵌入式系统原理与设计. 杭州:浙江大学出版社,2007.3  马忠梅.ARM嵌入式处理器结构与应用. 北京:北京航空航天大学出版社,2002.4  周立功 等编著.ARM微控制器基础与实战. 北京:北京航空航天大学出版社,2003.5 杜春雷.ARM体系结构与编程M.北京:清华大学出版社,2003.6 周立功 .ARM嵌入式Linux系统构建与驱动开发范例M.北京:北京航空航天大学

18、出版社,2006.7 斯洛斯(Sloss,A.N.).ARM嵌入式系统开发:软件设计与优化M.北京:北京航空航天大学出版社,2005.8 ARM&Linux嵌入式系统教程.北京:北京航空航天大学出版社,2004.9 陈赜ARM9嵌入式技术及Linux高级实践教程M 北京:北京航空航天大学出版社,200510 孙天泽,袁文菊嵌入式设计及Linux驱动开发指南基于ARM9处理器M 第2版北京:电子工业出版社,2007.附录:程序清单/ UART 单元各寄存器的定义。 #define rULCON0 (*(volatile unsigned *)0x50000000) /UART 0 Lin

19、e control #define rUCON0 (*(volatile unsigned *)0x50000004) /UART 0 Control #define rUFCON0 (*(volatile unsigned *)0x50000008) /UART 0 FIFO control #define rUMCON0 (*(volatile unsigned *)0x5000000c) /UART 0 Modem control #define rUTRSTAT0 (*(volatile unsigned *)0x50000010) /UART 0 Tx/Rx status #defi

20、ne rUERSTAT0 (*(volatile unsigned *)0x50000014) /UART 0 Rx error status #define rUFSTAT0 (*(volatile unsigned *)0x50000018) /UART 0 FIFO status #define rUMSTAT0 (*(volatile unsigned *)0x5000001c) /UART 0 Modem status #define rUBRDIV0 (*(volatile unsigned *)0x50000028) /UART 0 Baud rate divisor #defi

21、ne rULCON1 (*(volatile unsigned *)0x50004000) /UART 1 Line control #define rUCON1 (*(volatile unsigned *)0x50004004) /UART 1 Control #define rUFCON1 (*(volatile unsigned *)0x50004008) /UART 1 FIFO control #define rUMCON1 (*(volatile unsigned *)0x5000400c) /UART 1 Modem control #define rUTRSTAT1 (*(v

22、olatile unsigned *)0x50004010) /UART 1 Tx/Rx status #define rUERSTAT1 (*(volatile unsigned *)0x50004014) /UART 1 Rx error status #define rUFSTAT1 (*(volatile unsigned *)0x50004018) /UART 1 FIFO status #define rUMSTAT1 (*(volatile unsigned *)0x5000401c) /UART 1 Modem status #define rUBRDIV1 (*(volati

23、le unsigned *)0x50004028) /UART 1 Baud rate divisor #define rULCON2 (*(volatile unsigned *)0x50008000) /UART 2 Line control #define rUCON2 (*(volatile unsigned *)0x50008004) /UART 2 Control #define rUFCON2 (*(volatile unsigned *)0x50008008) /UART 2 FIFO control #define rUMCON2 (*(volatile unsigned *

24、)0x5000800c) /UART 2 Modem control #define rUTRSTAT2 (*(volatile unsigned *)0x50008010) /UART 2 Tx/Rx status #define rUERSTAT2 (*(volatile unsigned *)0x50008014) /UART 2 Rx error status #define rUFSTAT2 (*(volatile unsigned *)0x50008018) /UART 2 FIFO status #define rUMSTAT2 (*(volatile unsigned *)0x

25、5000801c) /UART 2 Modem status #define rUBRDIV2 (*(volatile unsigned *)0x50008028) /UART 2 Baud rate divisor #ifdef _BIG_ENDIAN #define rUTXH0 (*(volatile unsigned char *)0x50000023) /UART 0 Transmission Hold #define rURXH0 (*(volatile unsigned char *)0x50000027) /UART 0 Receive buffer #define rUTXH

26、1 (*(volatile unsigned char *)0x50004023) /UART 1 Transmission Hold #define rURXH1 (*(volatile unsigned char *)0x50004027) /UART 1 Receive buffer #define rUTXH2 (*(volatile unsigned char *)0x50008023) /UART 2 Transmission Hold #define rURXH2 (*(volatile unsigned char *)0x50008027) /UART 2 Receive bu

27、ffer #define WrUTXH0(ch) (*(volatile unsigned char *)0x50000023)=(unsigned char)(ch) #define RdURXH0() (*(volatile unsigned char *)0x50000027) #define WrUTXH1(ch) (*(volatile unsigned char *)0x50004023)=(unsigned char)(ch) #define RdURXH1() (*(volatile unsigned char *)0x50004027) #define WrUTXH2(ch)

28、 (*(volatile unsigned char *)0x50008023)=(unsigned char)(ch) #define RdURXH2() (*(volatile unsigned char *)0x50008027) #define UTXH0 (0x50000020+3) /Byte_access address by DMA #define URXH0 (0x50000024+3) #define UTXH1 (0x50004020+3) #define URXH1 (0x50004024+3) #define UTXH2 (0x50008020+3) #define

29、URXH2 (0x50008024+3) #else /Little Endian #define rUTXH0 (*(volatile unsigned char *)0x50000020) /UART 0 Transmission Hold #define rURXH0 (*(volatile unsigned char *)0x50000024) /UART 0 Receive buffer #define rUTXH1 (*(volatile unsigned char *)0x50004020) /UART 1 Transmission Hold #define rURXH1 (*(

30、volatile unsigned char *)0x50004024) /UART 1 Receive buffer #define rUTXH2 (*(volatile unsigned char *)0x50008020) /UART 2 Transmission Hold #define rURXH2 (*(volatile unsigned char *)0x50008024) /UART 2 Receive buffer #define WrUTXH0(ch) (*(volatile unsigned char *)0x50000020)=(unsigned char)(ch) #

31、define RdURXH0() (*(volatile unsigned char *)0x50000024) #define WrUTXH1(ch) (*(volatile unsigned char *)0x50004020)=(unsigned char)(ch) #define RdURXH1() (*(volatile unsigned char *)0x50004024) #define WrUTXH2(ch) (*(volatile unsigned char *)0x50008020)=(unsigned char)(ch) #define RdURXH2() (*(vola

32、tile unsigned char *)0x50008024) #define UTXH0 (0x50000020) /Byte_access address by DMA #define URXH0 (0x50000024) #define UTXH1 (0x50004020) #define URXH1 (0x50004024) #define UTXH2 (0x50008020) #define URXH2 (0x50008024) #endif /*下面列出的两个函数,是我们本实验用到的两个主要函数,包括 UART 初始化,字符 的接收函数,这几个函数可以在例程目录下 commoni

33、nclude2410lib.c 文件内找到。 */ void uart_init(int nMainClk, int nBaud, int nChannel) int i; if(nMainClk = 0) nMainClk = PCLK; switch (nChannel) case UART0: rUFCON0 = 0x0; /UART channel 0 FIFO control register, FIFO disable rUMCON0 = 0x0; /UART chaneel 0 MODEM control register, AFC disable rULCON0 = 0x3;

34、/Line control register : Normal,No parity,1 stop,8 bits rUCON0 = 0x245; / Control register rUBRDIV0=( (int)(nMainClk/16./nBaud+0.5) -1 ); / Baud rate divisior register0 break; case UART1: rUFCON1 = 0x0; /UART channel 1 FIFO control register, FIFO disable rUMCON1 = 0x0; /UART chaneel 1 MODEM control

35、register, AFC disable rULCON1 = 0x3; rUCON1 = 0x245; rUBRDIV1=( (int)(nMainClk/16./nBaud) -1 ); break; case UART2: rULCON2 = 0x3; rUCON2 = 0x245;rUBRDIV2=( (int)(nMainClk/16./nBaud) -1 ); rUFCON2 = 0x0; /UART channel 2 FIFO control register, FIFO disable break; default: break; for(i=0;i<100;i+); delay(0); / 下面是接收字符的实现函数: /* * name: uart_getch * func: Get a character from the uart * para: none * ret: get a char from uart channel * modify: * comment: */ char uart_getch(void) if(f_nWhichUart=0) while(!(rUTRSTAT0 & 0x1); /Receive data read

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论