ARM实验三 ARM的串行口实验
- 格式:doc
- 大小:167.50 KB
- 文档页数:10
ARM的串行口实验报告班级:电信091 学号: 2121姓名:指导教师:陶福寿日期: 2011年10月12日目录一、实验目的............................. 错误!未定义书签。
二、实验内容............................. 错误!未定义书签。
三、预备知识............................. 错误!未定义书签。
四、实验设备及工具....................... 错误!未定义书签。
五、实验原理及说明....................... 错误!未定义书签。
六、实验步骤............................. 错误!未定义书签。
七、思考题............................... 错误!未定义书签。
1.232串行通讯的数据格式是什么........ 错误!未定义书签。
2.串行通讯最少需要几根线,分别如何连接错误!未定义书签。
3.ARM的串行口有几个,相应的寄存器是什么错误!未定义书签。
4.用中断方式实现串口驱动。
........... 错误!未定义书签。
ARM的串行口实验一、实验目的1.掌握ARM的串行口工作原理。
2.学习编程实现ARM的UART通讯。
3.掌握CPU利用串口通讯的方法。
二、实验内容学习串行通讯原理,了解串行通讯控制器,阅读ARM芯片文档,掌握ARM的UART相关寄存器的功能,熟悉ARM系统硬件的UART相关接口。
编程实现ARM和计算机实现串行通讯:ARM监视串行口,将接收到的字符再发送给串口(计算机与开发板是通过超级终端通讯的),即按PC键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。
三、预备知识1、用EWARM集成开发环境,编写和调试程序的基本过程。
2、ARM应用程序的框架结构。
3、了解串行总线四、实验设备及工具硬件:ARM嵌入式开发平台、PC机Pentium100以上、用于ARM920T 的JTAG仿真器、串口线。
课程:嵌入式设计实验日期:2011 年 6 月成绩:实验三串口通讯实验一实验目的1 掌握ARM的串行口工作原理;2 学习并编程实现S3C2410的UART串口通讯;3 学习并掌握S3C2410寄存器的配置方法。
二实验内容1 实现查询方式串口的收发功能。
实现实验装置通PC平台的串口通讯,接受PC 平台发送出的数字,并将该数字重新返回给PC平台。
三实验设备1 硬件:DM2410B+实验系统PC机JTAG仿真器串口线。
2 软件:PC机操作系统(WINDOWS 2000)ARM DEVELOPER SUITE V1.2四、实验说明1, S3C241}串行A控制寄存器S3C2410自带三个异步串行口控制器,每个控制器有lfi字节的F工FO(先入先出寄存器),最大波特率115. 2Ko每个DART有7种状态:溢出错误,校验错误,帧错误,暂停态,接收缓冲区准备好,发送缓冲区空,发送移位缓冲器空。
通过设置UCONn寄存器选择UA RT时钟是由S3C2410的系统内部时钟PCLK产生还是有外部UART设备的时钟UCLK产生。
波特率的大小可以通过设置波特率寄存器CUBRDIVn)控制。
使用PCLK时的计算公式如下:UBRDIVn=(in七)CPCLYI/ (bps*lE))一1使用UCLK时的计算公式如下:UBRD工介=(int)CUCLYI/ Cbps}1E))一1与DART有关的寄存器有以下几个,关于寄存器的详细说明请参考S3C2410数据手册。
课程:嵌入式设计实验日期:2011 年 6 月成绩:1)线路控制寄存器ULCONn该寄存器的第6位决定是否使用红外模式,位5-3决定校验方式,位2决定停止位长度,位1 和位D决定每帧的数据位数。
2)控制寄存器UCONn该寄存器决定UA RT的各种模式。
3) FIFO控制寄存器UFCONn该寄存器用于收发缓冲的管理,包括缓冲的触发字节数的设置、F工FO的清除和使能。
4} MODEM控制寄存器UMCONn该寄存器用于设置流控方式。
arm实验报告ARM实验报告引言:ARM(Advanced RISC Machines)是一种基于精简指令集计算机(RISC)架构的微处理器系列,广泛应用于移动设备、嵌入式系统和智能家居等领域。
本实验报告旨在介绍ARM架构的基本原理、应用领域以及在实验中的应用。
一、ARM架构的基本原理ARM架构采用精简指令集计算机(RISC)的设计理念,注重指令的简洁性和执行效率。
相较于复杂指令集计算机(CISC),ARM架构的指令集更为简单,指令长度固定,执行速度更快,能够提高处理器的性能和能效比。
ARM架构的核心特点包括:1. 简洁指令集:ARM指令集采用三地址指令格式,指令长度为32位,操作码和寄存器字段清晰明了,易于编程和优化。
2. 统一寄存器:ARM架构中的寄存器集合统一,包括13个通用寄存器、程序计数器(PC)和状态寄存器(CPSR),简化了编程和寄存器间的数据传输。
3. 流水线技术:ARM处理器采用流水线技术,将指令的执行过程分为多个阶段,使得多条指令可以同时执行,提高了处理器的吞吐量。
4. 片上缓存:ARM架构支持片上缓存(Cache),能够提高数据的访问速度和处理器的效率。
二、ARM架构的应用领域1. 移动设备:由于ARM处理器具有低功耗和高性能的特点,广泛应用于智能手机、平板电脑和可穿戴设备等移动设备中。
ARM处理器能够提供流畅的用户体验和长时间的电池续航能力。
2. 嵌入式系统:ARM架构适用于嵌入式系统,如智能家居、工业自动化和车载电子等。
ARM处理器的小尺寸、低功耗和高性能使其成为嵌入式系统的首选。
3. 服务器和云计算:ARM架构逐渐在服务器和云计算领域崭露头角。
ARM服务器具有低能耗和高并发处理的特点,能够满足云计算和大数据处理的需求。
三、ARM实验应用在本次实验中,我们使用ARM开发板进行了一系列实验,包括LED控制、按键输入和串口通信等。
1. LED控制实验:通过编写ARM汇编语言程序,实现对开发板上的LED灯进行控制。
课程名称:嵌入式技术开课机房:11号机房2012年4月1日星期二8:10~11:35专业班级通信09( 班学号Xb09680204姓名江立坤实验项目名称实验3——ARM的串行口实验指导教师陈玮一、实验任务与实验目的实验目的1. 了解UART的基本知识2. 掌握基于群星系列CM3程序库的UART配置、数据收发编程3. 学会串口调试助手或超级终端的使用实验任务任务一:使用Stellaris驱动库函数,编写可以接收及发送字符串的基于EASY ARM 8962开发板的UART驱动程序任务二:在Microsoft Visual Studio开发环境下,使用C#编写一桌面程序,要求可以通过串口发送指令,使用其打开LED3~LED6。
命令协议可以自己定义。
二、报告内容任务一#include"uartGetPut.h"#include"systemInit.h"#include#include#include#define PART_LM3S8962#include// 定义接收缓冲区#define MAX_SIZE 40 // 缓冲区最大限制长度char RxBuf[1 + MAX_SIZE]; // 接收缓冲区int BufP = 0; // 缓冲区位置变量tBoolean RxEndFlag = false; // 接收结束标志// UART2中断服务函数void UART0_ISR(void {char c;unsigned long ulStatus;ulStatus = UARTIntStatus(UART0_BASE, true; // 读取当前中断状态UARTIntClear(UART0_BASE, ulStatus; // 清除中断状态if ((ulStatus & UART_INT_RX || (ulStatus & UART_INT_RT // 若是接收中断或者{ // 接收超时中断for (;; {if (!UARTCharsAvail(UART0_BASEbreak; // 若接收FIFO里无字符则跳出c = UARTCharGetNonBlocking(UART0_BASE; // 从接收FIFO里读取字符if (c == '\r' {UARTCharPut(UART2_BASE, '\r'; // 回显回车换行UARTCharPut(UART2_BASE, '\n';RxEndFlag = true; // 接收结束标志置位break;}if (isprint(c // 若是可打印字符{if (BufP < MAX_SIZE {UARTCharPut(UART2_BASE, c; // 回显RxBuf[BufP++] = c;RxBuf[BufP] = '\0';}}}}}// 以FIFO中断方式接收一个字符串,不回显,返回实际接收到的有效字符数int uartFIFOGets(char *s, int size {int n;while (!RxEndFlag;n = BufP;BufP = 0;RxEndFlag = false;strncpy(s, RxBuf, size;s[MAX_SIZE] = '\0';return (n;}// UART初始化void uartInit(void {SysCtlPeripheralEnable (SYSCTL_PERIPH_UART0; SysCtlPeripheralEnable (U0TX_PERIPH; // 使能RX/TX所在的GPIO端口GPIOPinTypeUART(U0RX_PORT, // 配置RX/TX所在管脚为U0RX_PIN; // UART收发功能GPIOPinTypeUART(U0TX_PORT, // 配置RX/TX所在管脚为U0TX_PIN; // UART收发功能UARTConfigSet(UART0_BASE, // 配置UART端口9600, // 波特率:9600UART_CONFIG_WLEN_8 | // 数据位:8UART_CONFIG_STOP_ONE | // 停止位:1UART_CONFIG_PAR_NONE; // 校验位:无UARTFIFOLevelSet(UART0_BASE, // 设置收发FIFO中断触发深度UART_FIFO_TX2_8, // 发送FIFO为2/8深度(4B)UART_FIFO_RX6_8; // 接收FIFO为6/8深度(12B)UARTIntEnable(UART0_BASE, UART_INT_TX; // 使能发送中断IntEnable (INT_UART0; // 使能UART总中断IntMasterEnable(; // 使能处理器中断UARTEnable (UART0_BASE; // 使能UART端口}// 通过UART发送一个字符void uartPutc(const char c {UARTCharPut(UART0_BASE, c;}// 通过UART发送字符串void uartPuts(const char *s {while (*s != '\0'uartPutc(*(s++;}// 通过UART接收一个字符char uartGetc(void {return (UARTCharGet(UART0_BASE;}// 功能:通过UART接收字符串,不回显,退格修改,回车结束// 参数:*s保存接收数据的缓冲区,只接收可打印字符(ASCII码32~127)// size是缓冲区*s的总长度,要求size >= 2(包括末尾'\0',建议用sizeof(来获取)// 返回:接收到的有效字符数目int uartGets(char *s, int size {char c;int n = 0;*s = '\0';if (size < 2return (0;size--;for (;; {c = uartGetc(; // 接收1个字符if (c == '\b'// 遇退格修改{if (n > 0 {*(--s = '\0';n--;}}if (c == '\r'// 遇回车结束{break;}if (n < size // 如果小于长度限制{if (isprint(c // 如果接收到的是可打印字符{*(s++ = c; // 保存接收到的字符到缓冲区*s = '\0';n++;}}}return (n; // 返回接收到的有效字符数目}任务二1. 控制协议命令格式: space space space响应格式: >space space space其中:space表示空格,亦可以其他字符替代,如,(逗号)、;(分号)之类例如,LED 3 0字段名称长度(字符个数)可选值列表Command 设备类型4 LEDS——0BUZZ——1LM75——2DeviceNo 设备号1 0~9LED:只能为3~6BUZZ:只能为1LM75:只能为1RD/WR 读写方向1 0——读1——写DeviceValue p设备值PC-ARMspan:1ARM-PC:1~N0——关闭1——打开X——温度值2. 协议实现桌面程序Device.cs using System;using System.Collections.Generic;using System.Text;using System.IO.Ports;namespace WindowsFormsApplication1{public class Device{#region Feilds Defintion//////属性///public LM8962DeviceType DeviceType { get; set; }Several terrorists have claimed to be responsible for the blast几个恐怖主义者已经声称对这起爆炸负责。
串行口实验实验报告实验报告:串行口实验一、实验目的:1. 掌握串行口通信原理;2. 熟悉使用串行口进行数据通信;3. 学习使用串行口进行数据的发送和接收。
二、实验仪器和材料:1. 串行口连线2. 上位机软件(如串口调试助手)3. PCB板三、实验原理:串行口通信是一种通过传送位来传送数据的通信方式。
通过串行口,计算机可以与其他设备进行数据交换。
串行通信需要发送方和接收方之间通过一条传输线连通,在一定的波特率下,发送方将数据转换为一系列位发送给接收方,接收方将接收到的位转换为相应的数据。
四、实验步骤:1. 将串行口连线正确连接好,一端连接到计算机的串行口,另一端连接到实验设备;2. 打开上位机软件,配置串行口参数,如波特率、数据位等;3. 在上位机软件中发送数据,观察实验设备上接收到的数据;4. 在实验设备中发送数据,观察上位机软件接收到的数据。
五、实验数据记录:在实验过程中,我们尝试了不同的波特率和数据位设置,并记录了每次的实验数据接收情况。
以下是其中一次实验的数据记录:- 实验参数:波特率9600bps,数据位8位,无校验位,停止位1位;- 发送数据:0x55;- 接收到的数据:0x55。
六、实验结果分析:根据实验数据,我们可以发现发送的数据0x55成功被接收到,说明串行口通信正常工作。
这说明我们正确配置了串行口参数,并且发送和接收的数据没有出现错误。
七、实验总结:通过本次实验,我们掌握了串行口通信的原理,学会了如何使用串行口进行数据通信。
实验结果表明,我们成功地发送和接收了数据。
在实际应用中,串行口通信在许多领域中都有广泛的应用,比如计算机与外设的连接、嵌入式系统的开发等。
掌握串行口通信技术对于我们的学习和工作都具有重要意义。
八、存在的问题和改进方向:在本次实验中,我们没有发现明显的问题。
但是,在实际应用中,串行口通信可能会面临一些问题,比如数据丢失、传输错误等。
我们可以进一步学习调试和排查这些问题,并学习如何处理和解决这些问题。
《APM 串口实验》实验报告课程名称:嵌入式微办理器技术班级:电信0901姓名:地点:嵌入式系统基础实训室指导教师:王瑾ARM 的串行口实验一、实验目的◆1.掌握ARM 的串行口工作原理。
◆2.学习编程实现ARM 的 UART 通信。
◆3.掌握CPU 利用串口通信的方法。
二、实验内容学习串行通信原理,认识串行通信控制器,阅读ARM 芯片文档,掌握ARM 的 UART 有关寄存器的功能,熟习ARM 系统硬件的UART 有关接口。
编程实现ARM 和计算机实现串行通讯:ARM 监督串行口,将接收到的字符再发送给串口(计算机与开发平台是经过超级终端通讯的),即按 PC 键盘经过超级终端发送数据,开发平台将接收到的数据再返送给 PC,在超级终端上显示。
三、预备知识1、1.用ARM SDT 2.5或ADS1.2集成开发环境,编写和调试程序的基本过程。
2、2.ARM应用程序的框架构造。
3、3.认识串行总线四、实验设施及工具硬件: ARM嵌入式开发平台、用于 ARM7TDMI的 JTAG 仿真器、 PC 机 Pentium100 以上、串口线。
软件: PC 机操作系统 win98 、 Win2000 或 WinXP 、 ARM SDT 2.51 或 ADS1.2 集成开发环境、仿真器驱动程序、超级终端通信程序。
五、实验原理及说明1.异步串行I / O异步串行方式是将传输数据的每个字符一位接一位( 比如先低位、后高位地传递。
数据的各不同位能够分时使用同一传输通道,所以串行I / O 能够减少信号连线,最少用一对线即可进行。
接收方关于同一根线上一连串的数字信号,第一要切割成位,再按位构成字符。
为了恢复发送的信息,两方一定协调工作。
在微型计算机中大批使用异步串行I /O 方式,两方使用各自的时钟信号,并且同意时钟频次有必定偏差,所以实现较简单。
可是因为每个字符都要独立确立开端和结束 ( 即每个字符都要从头同步,字符和字符间还可能有长度不定的安闲时间,所以效率较低。
实验三3.1 实验目的初步学会使用Embest IDE for ARM 开发环境及ARM 软件模拟器;通过实验掌握简单ARM 汇编指令的使用方法。
实验内容熟悉开发环境的使用并使用ldr/str,mov 等指令访问寄存器或存储单元。
使用add/sub/lsl/lsr/and/orr 等指令,完成基本数学/逻辑运算。
3.2实验目的通过实验掌握使用ldm/stm,b,bl 等指令完成较为复杂的存储区访问和程序分支,学习使用条件码,加强对CPSR 的认识。
实验内容熟悉开发环境的使用并完成一块存储区的拷贝;完成分支程序设计,要求判断参数,根据不同参数,调用不同的子程序。
3.3 实验目的通过实验掌握ARM 处理器16 位Thumb 汇编指令的使用方法。
实验内容使用THUMB 汇编语言,完成基本的reg/mem 访问,以及简单的算术/逻辑运算;使用THUMB 汇编语言,完成较为复杂的程序分支,push/pop,领会立即数大小的限制,并体会ARM 与THUMB 的区别。
3.4实验目的通过实验掌握学会使用msr/mrs 指令实现ARM 处理器工作模式的切换,观察不同模式下的寄存器,加深对CPU 结构的理解;通过实验掌握ld 中如何使用命令行指定代码段起始地址。
实验内容通过ARM 汇编指令,在各种处理器模式下切换并观察各种模式下寄存器的区别;掌握ARM 不同模式的进入与退出。
3.5 实验目的学会使用Embest IDE 编写简单的C 语言程序并进行调试;学会编写和使用命令脚本文件;掌握通过memory/register/watch/variable 窗口分析判断运行结果。
实验内容利用命令脚本初始化栈指针,并使用c 语言完成延时函数。
3.6 实验目的掌握建立基本完整的ARM 工程,包含启动代码,连接脚本等;了解ARM7 启动过程,学会使用Embest IDE 编写简单的C 语言程序和汇编启动代码并进行调试;掌握链接脚本的作用;掌握如何指定代码入口地址与入口点;掌握通过memory/register/watch/variable 窗口分析判断结果。
ARM的串行口实验报告实验目的:1.了解ARM的串行口通信原理和应用;2.掌握ARM串口编程的方法;3.实现ARM与外部设备的串行通信。
实验材料:1.ARM开发板2.计算机3.串行通信线缆实验步骤:1.硬件连接:a.将ARM开发板连接至计算机,使用USB线缆进行连接;b.使用串行通信线缆将ARM开发板与外部设备连接。
2.软件配置:a. 打开开发板所使用的开发环境(如Keil MDK);b.在开发环境中创建一个新的工程;c.配置并选择合适的ARM微处理器型号。
3.串口初始化:a.在代码中引入相应的头文件;b.配置串口的波特率、数据位、停止位和校验位;c.初始化串口。
4.串口发送数据:a.将需要发送的数据存入数据缓冲区;b.通过串口发送数据。
5.串口接收数据:a.等待接收数据;b.通过串口接收数据并存入接收缓冲区。
6.数据处理:a.对接收到的数据进行处理;b.可以根据需求进行解析或其他操作。
7.实验结果分析:a.验证串行口通信系统的可靠性和稳定性;b.判断实验结果与期望结果是否一致;c.分析实验中遇到的问题,并提出解决方案。
8.实验结论:a.总结实验过程和实验结果;b.总结串行口通信的应用和意义;c.总结ARM串口编程的方法和技巧。
实验注意事项:1.进行实验前,确保所有连接正确且紧固;2.实验前检查软件环境是否正确配置;3.实验中注意正确调用相应的API函数;4.在数据处理过程中,注意异常情况的处理;5.经常保存代码和实验结果,以备后续使用。
实验心得:通过本次实验,我了解了ARM的串行口通信原理和应用,并成功实现了ARM与外部设备的串行通信。
在实验过程中,我熟悉了串口初始化、发送数据和接收数据的步骤,并学会了对接收的数据进行处理。
通过实验,我深刻理解了串行口通信的重要性和应用价值,掌握了ARM串口编程的方法和技巧。
在后续的学习和实践中,我将进一步提升对ARM串口编程的理解和应用能力,将其运用到更多的实际项目中。
嵌入式实验报告_ARM的串行口实验一、实验目的本次实验的主要目的是深入了解和掌握 ARM 处理器的串行口通信原理及编程方法。
通过实际操作和编程实践,能够实现基于 ARM 的串行数据收发功能,为后续在嵌入式系统中的应用打下坚实的基础。
二、实验原理串行通信是指数据一位一位地顺序传送。
在 ARM 系统中,串行口通常由发送器、接收器、控制寄存器等组成。
发送器负责将并行数据转换为串行数据并发送出去,接收器则将接收到的串行数据转换为并行数据。
控制寄存器用于配置串行口的工作模式、波特率、数据位长度、停止位长度等参数。
波特率是串行通信中的一个重要概念,它表示每秒传输的比特数。
常见的波特率有 9600、115200 等。
在本次实验中,需要根据实际需求设置合适的波特率,以保证数据传输的准确性和稳定性。
三、实验设备与环境1、硬件设备:ARM 开发板、USB 转串口线、电脑。
2、软件环境:Keil MDK 集成开发环境、串口调试助手。
四、实验步骤1、建立工程在 Keil MDK 中创建一个新的工程,选择对应的 ARM 芯片型号,并配置工程的相关参数,如时钟频率、存储分配等。
2、编写代码(1)初始化串行口首先,需要设置串行口的工作模式、波特率、数据位长度、停止位长度等参数。
例如,设置波特率为 115200,数据位长度为 8 位,停止位长度为 1 位。
(2)发送数据通过编写发送函数,将要发送的数据写入串行口的数据寄存器,实现数据的发送。
(3)接收数据通过中断或者查询的方式,读取串行口的接收寄存器,获取接收到的数据。
(4)主函数在主函数中,调用发送函数发送数据,并处理接收的数据。
3、编译下载编写完成代码后,进行编译,确保代码没有语法错误。
然后,将生成的可执行文件下载到 ARM 开发板中。
4、连接设备使用 USB 转串口线将 ARM 开发板与电脑连接起来,并在电脑上打开串口调试助手,设置与开发板相同的波特率等参数。
5、测试实验在串口调试助手中发送数据,观察开发板是否能够正确接收并回传数据。
实验三 ARM的串行口实验一、实验目的1.掌握ARM的串行口工作原理。
2.学习编程实现ARM的UART通讯。
3.掌握CPU利用串口通讯的方法。
二、实验内容学习串行通讯原理,了解串行通讯控制器,阅读ARM芯片文档,掌握ARM的UART相关寄存器的功能,熟悉ARM系统硬件的UART相关接口。
编程实现ARM和计算机实现串行通讯:ARM监视串行口,将接收到的字符再发送给串口(计算机与开发板是通过超级终端通讯的),即按PC键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。
三、预备知识1.用EWARM集成开发环境,编写和调试程序的基本过程。
2.ARM应用程序的框架结构。
3、了解串行总线。
四、实验设备及工具硬件:ARM嵌入式开发平台、PC机Pentium100以上、用于ARM920T的JTAG 仿真器、串口线。
软件:PC机操作系统Win2000或WinXP、EWARM集成开发环境、仿真器驱动程序、超级终端通讯程序。
五、实验原理及说明1.异步串行I/O异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。
数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。
接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。
为了恢复发送的信息,双方必须协调工作。
在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。
但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。
图2-1 串行通信字符格式图2-1给出异步串行通信中一个字符的传送格式。
开始前,线路处于空闲状态,送出连续“1”。
传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。
每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。
后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。
也可以约定不要奇偶校验,这样就取消奇偶校验位。
最后是表示停止位的“1”信号,这个停止位可以约定持续1位、1.5位或2位的时间宽度。
至此一个字符传送完毕,线路又进入空闲,持续为“1”。
经过一段随机的时间后,下一个字符开始传送才又发出起始位。
每一个数据位的宽度等于传送波特率的倒数。
微机异步串行通信中,常用的波特率为50,95,110,150,300,600,1200,2400,4800,9600等。
接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误:1)奇偶错:在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。
2)帧格式错:一个字符从起始位到停止位的总位数不对。
3)溢出错:若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生溢出错。
每一种错误都会给出相应的出错信息,提示用户处理。
2.串行接口的物理层标准通用的串行I/O接口有许多种,现仅就最常见的两种标准作简单介绍。
1)EIA RS—232C这是美国电子工业协会推荐的一种标准(Electronic industries Association Recoil-mended Standard)。
它在一种25针接插件(DB—25)上定义了串行通信的有关信号。
这个标准后来被世界各国所接受并使用到计算机的I/O接口中。
⑴信号连线在实际异步串行通信中,并不要求用全部的RS—232C信号,许多PC/XT兼容机仅用15针接插件(DB—15)来引出其异步串行I/O信号,而PC中更是大量采用9针接插件(DB—9)来担当此任,因此这里也不打算就RS—232C的全部信号作详细解释。
图3-2给出两台微机利用RS—232C接口通信的联线(无MODEM),我们按DB—25的引脚号标注各个信号。
下面对图3-2中几个主要信号作简要说明。
保护地通信线两端所接设备的金属外壳通过此线相联。
当通信电缆使用屏蔽线时,常利用其外皮金属屏蔽网来实现。
由于各设备往往已通过电源线接通保护地,因此,通信线中不必重复接此地线(图中用虚线表示)。
例如使用9针插头(DB—9)的异步串行I/O接口就没有引出保护地信号。
TXD/RXD 是一对数据线,TXD称发送数据输出,RXD称接收数据输入。
当两台微机以全双工方式直接通信(无MODEM方式)时,双方的这两根线应交叉联接(扭接)。
信号地所有的信号都要通过信号地线构成耦合回路。
通信线有以上三条(TXD、RXD和信号地)就能工作了。
其余信号主要用于双方设备通信过程中的联络(握手信号),而且有些信号仅用于和MODEM的联络。
若采取微型机对微型机直接通信,且双方可直接对异步串行通信电路芯片编程,若设置成不要任何联络信号,则其它线都可不接。
有时在通信线的同一端将相关信号短接以“自握手”方式满足联络要求。
这就是如图2-2(a)所示的情况。
图2-2 实用RS-232C连线RTS/CTS 请求发送值号RTS是发送器输出的准备好信号。
接收方准备好后送回清除发送信号CTS后,发送数据开始进行,在同一端将这两个信号短接就意味着只要发送器准备好即可发送。
DCD 载波检测(又称接收线路信号检测)。
本意是MODEM检测到线路中的载波信号后,通知终端准备接收数据的信号,在没有接MODEM的情况下,也可以和RTS、CTS短接。
相对于MODEM而言,微型机和终端机一样被称为数据终端DTE(Data Terminal Equipment)而MODEM被称为数据通信装置DCE(Data Communications Equipment),DTE和DCE之间的连接不能像图3-2中有“扭接”现象,而应该是按接插件芯号,同名端对应相接。
此处介绍的RS—232C的信号名称及信号流向都是对DTE而言的。
DTR/DSR 数据终端准备好时发DTR信号,在收到数据通信装置装备好DSR 信号后,方可通信。
图3-2(a)中将这一对信号以“自握手”方式短接。
R1 原意是在MODEM接收到电话交换机有效的拨号时,使RI有效,通知数据终端准备传送。
在无MODEM时也可和DTR相接。
图3-2(b)给出了无MODEM情况下,DTE对DTE异步串行通信线路的完整连接,它不仅适用于微型机和微型机之间的通信,还适用于微型机和异步串行外部设备(如终端机、绘图仪、数字化仪等)的连接。
(2)信号电平规定RS—232C规定了双极性的信号逻辑电平:-3V到-25V之间的电平表示逻辑“1”。
+3V到+25V之间的电平表示逻辑“0”。
因此这是一套负逻辑定义。
以上标准称为EIA电平。
PC/XT系列使用的信号电平是-12V和+12V,符合EIA标准,但在计算机内部流动的信号都是TTL电平,因此这中间需要用电平转换电路。
常用芯片MCl488或SN75150将TTL电平转换为EIA电平,MCl489或SN75154将EIA电平转换为TTL电平。
PC/XT系列以这种方式进行串行通信时,在波特率不高于9600的情况下,理论上通信线的长度限制纽为15米。
2)20mA电流环20mA电流环并没有形成一套完整的标准,主要是将数字信号的表示方法不使用电子的高低,而改用20mA电流的有无:“1”信号在环路中产生20mA电流;“0”信号无电流产生。
当然也需要有电路来实现TTL电平和20mA电流之间的转换。
图3-3是PC/XT微机中使用的一种20mA电流环接口。
当发送方SOUT=1时,便有20mA电流灌入接收方的光耦合器,于是光耦合器导通,使SIN=1。
反之当发送方SOUT =0时环路电流为零,接收方光耦合器截止,SIN=0。
显然,当要求双工方式通信时,双方都应各有收发电路,通信联线至少要4根。
由于通信双方利用光耦合器实现电气上隔离,而且信号又是双端回路方式,故有很强的抗干扰性,可以传送远至1千米的距离。
图2-3 20mA电流环接口“0”、“1”信号的表示方法不同外,其他方面(如字符的传输格式)常借用RS—232C标准。
因此PC/XT微机中的异步串行信道接口往往将这两种标准做在一起,实际通过跨接线从二者中择一使用。
(3) ARM自带的串行口寄存器ARM自带三个UART端口,每个UART通道都有16字节的FIFO(先入先出寄存器)用于接受和发送。
用系统时钟最大波特率可达230.4K,如果用外部时钟(UCLK)UART可以以更高的波特率运行。
S3C2410X UART包括可编程波特率,红外发送/接收,插入一个或两个停止位,5字节,6字节,7字节,或8字节数据宽度和奇偶校验。
其特点是:-----基于DMA或者中断操作的RxD0,TxD0,RxD1,TxD1,RxD2,TxD2。
-----包括IrDA 1.0和16字节FIFO的UART通道0,1,2。
-----包括nRTS0,nCTS0,nRTS1和nCTS1的UART通道。
-----支持握手方式的接收/发送UART包括三个波特率因子寄存器UBRDIV0, UBRDIV1 and UBRDIV2,存储在波特率因子寄存器(UBRDIVn)中的值决定串口发送和接收的时钟数率(波特率),计算公式如下:UBRDIVn = (round_off)(MCLK / (bps x 16)+0.5) –1其中MCLK是系统频率,例如在40MHz的情况下,当波特率取115200时,UBRDIVn = (int)(40000000 / (115200 x 16)+0.5) -1= (int)(21.7+0.5) -1= 22 -1 = 21六、实验步骤1.新建工程,将“Exp2 ARM 串口实验”中的文件添加到工程中,这些是启动时所需要的文件。
2.定义与UART 有关的各个寄存器地址和一些特殊的位命令。
主要有以下各寄存器(44b.h):/* UART 的全部功能寄存器*/#define rULCON0 (*(volatile unsigned *)0x1d00000)#define rULCON1 (*(volatile unsigned *)0x1d04000)#define rUCON0 (*(volatile unsigned *)0x1d00004)#define rUCON1 (*(volatile unsigned *)0x1d04004)#define rUFCON0 (*(volatile unsigned *)0x1d00008)#define rUFCON1 (*(volatile unsigned *)0x1d04008)#define rUMCON0 (*(volatile unsigned *)0x1d0000c)#define rUMCON1 (*(volatile unsigned *)0x1d0400c)#define rUTRSTAT0 (*(volatile unsigned *)0x1d00010)#define rUTRSTAT1 (*(volatile unsigned *)0x1d04010)#define rUERSTAT0 (*(volatile unsigned *)0x1d00014)#define rUERSTAT1 (*(volatile unsigned *)0x1d04014)#define rUFSTAT0 (*(volatile unsigned *)0x1d00018)#define rUFSTAT1 (*(volatile unsigned *)0x1d04018)#define rUMSTAT0 (*(volatile unsigned *)0x1d0001c)#define rUMSTAT1 (*(volatile unsigned *)0x1d0401c)#define rUBRDIV0 (*(volatile unsigned *)0x1d00028)#define rUBRDIV1 (*(volatile unsigned *)0x1d04028)#ifdef __BIG_ENDIAN //大端摸式#define rUTXH0 (*(volatile unsigned char *)0x1d00023)#define rUTXH1 (*(volatile unsigned char *)0x1d04023)#define rURXH0 (*(volatile unsigned char *)0x1d00027)#define rURXH1 (*(volatile unsigned char *)0x1d04027)#define WrUTXH0(ch) (*(volatile unsigned char *)(0x1d00023)) =(unsigned char)(ch)#define WrUTXH1(ch) (*(volatile unsigned char *)(0x1d04023)) =(unsigned char)(ch)#define RdURXH0() (*(volatile unsigned char *)(0x1d00027)) #define RdURXH1() (*(volatile unsigned char *)(0x1d04027)) #define UTXH0 (0x1d00020+3) //byte_access address by BDMA #define UTXH1 (0x1d04020+3)#define URXH0 (0x1d00024+3)#define URXH1 (0x1d04024+3)#else //小端摸式#define rUTXH0 (*(volatile unsigned char *)0x1d00020)#define rUTXH1 (*(volatile unsigned char *)0x1d04020)#define rURXH0 (*(volatile unsigned char *)0x1d00024)#define rURXH1 (*(volatile unsigned char *)0x1d04024)#define WrUTXH0(ch) (*(volatile unsigned char *)0x1d00020)=( unsigned char)(ch)#define WrUTXH1(ch) (*(volatile unsigned char *)0x1d04020)=( unsigned char)(ch)#define RdURXH0() (*(volatile unsigned char *)0x1d00024) #define RdURXH1() (*(volatile unsigned char *)0x1d04024) #define UTXH0 (0x1d00020) //byte_access address by BDMA #define UTXH1 (0x1d04020)#define URXH0 (0x1d00024)#define URXH1 (0x1d04024)#endif3.编写串口驱动函数(MyUart.c):图2-4 为串口初始化的实现流程。