北航ARM嵌入式系统实验 实验一 ARM基础知识和开发环境.docx_第1页
北航ARM嵌入式系统实验 实验一 ARM基础知识和开发环境.docx_第2页
北航ARM嵌入式系统实验 实验一 ARM基础知识和开发环境.docx_第3页
北航ARM嵌入式系统实验 实验一 ARM基础知识和开发环境.docx_第4页
北航ARM嵌入式系统实验 实验一 ARM基础知识和开发环境.docx_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

实验一 ARM基础知识和开发环境一、实验目的 1)掌握ARM的串行口工作原理。 2)学习编程实现ARM的UART通讯。3)掌握S3C2410寄存器配置方法。二、实验内容1)熟悉打开已有工程的步骤,掌握仿真调试的方法。2)建立一个新工程,熟练掌握编译器和链接器的设置方法。3)从串口输入字符串,将09数字在超级终端上连续显示,“Enter”键换行。4)将第三步得到的字符转换成BCD码,限制在01023,用于控制直流机。三、设计方法1)以实验一为模板,完成实验的1和2。2)将接收串口数据的数组cl1改为cl256,用cli=0x0d 回车字符作为一帧结束的条件。3)将“Exp4 电机转动控制实验” inc目录下的MotorCtrl.H 和src目录下的MotorCtrl.C拷到该工程相应目录,将MotorCtrl.C 添加到工程中。4)在main函数里包含以下头文件 #include “./inc/MotorCtrl.h”。5)在main函数里包含以下头文件 #include “inc/macro.h”,#define MOTOR_COUNT 12657 6)在Main函数里执行init_MotorPort( );7)直流电机调试的函数是 SetPWM(setspeed-512)*MOTOR_COUNT/1024),setspeed是速度指令,取值范围01023.四、预备知识1)了解ADS集成开发环境的基本功能 2)学习串口通讯的基本知识3)熟悉S3C2410串口有关的寄存器 五、实验设备1)2410s教学实验箱2)ARM ADS1.2集成开发环境3)用于ARM920T的JTAG仿真器4)串口连接线六、实验原理及说明 1)异步串行通信 异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方必须协调工作。在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。图1-1 串行通信字符格式 图1-1给出异步串行通信中一个字符的传送格式。开始前,线路处于空闲状态,送出连续“1”。传送开始时首先发一个“0”作为起始位(即双方同步信号),然后出现在通信线上的是字符的二进制编码数据。每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。最后是表示停止位的“1”信号,这个停止位可以约定持续1位、1.5 位或2位的时间宽度。至此一个字符传送完毕,线路又进入空闲,持续为“1”。经过一段随机的时间后,下一个字符开始传送才又发出起始位。每一个数据位的宽度等于传送波特率的倒数。 2)串行接口的物理层标准 只介绍EIA RS-232C标准: 这是美国电子工业协会推荐的一种标准(Electronic industries Association Recoil-mended Standard)。它在一种25针接插件(DB25)上定义了串行通信的有关信号。这个标准后来被世界各国所接受并使用到计算机的I/O接口中。在信号连线上大量采用9针接插件(DB9)来担当此任,几个主要信号包括: TXDRXD:是一对数据线,TXD称发送数据输出,RXD称接收数据输入。当两台微机以全双工方式直接通信(无MODEM方式)时,双方的这两根线应交叉联接(扭接)。 信号地:所有的信号都要通过信号地线构成耦合回路。 通信线有以上三条(TXD、RXD和信号地)就能工作了。其余信号主要用于双方设备通信过程中的联络(握手信号),而且有些信号仅用于和MODEM的联络。若采取微型机对微型机直接通信,且双方可直接对异步串行通信电路芯片编程,若设置成不要任何联络信号,则其它线都可不接。信号电平规定为:双极性的信号逻辑电平(-3V到-25V之间的电平表示逻辑“1”。+3V到+25V 之间的电平表示逻辑“0”),是一套负逻辑定义。RS-232C接口通信的两种基本连接方式如图1-2所示。 图1-2 RS-232C接口通信的两种基本连接方式3)信号电平规定 (1)EIA电平:双极性信号逻辑电平, 它是一套负逻辑定义-3V到-25V之间的电平表示逻辑“1”,+3V到+25V之间的电平表示逻辑“0”(2)TTL电平:计算机内部(S3C2410)使用LVTTL电平(3)电平转换电路:常用专门的RS-232接口芯片,如SP3232、SP3220等,在LVTTL电平和EIA电平之间实现相互转换。4)相关寄存器(1)线路控制寄存器ULCONn (2)控制寄存器 UCONn(3)状态寄存器UTRSTAT (4)发送寄存器UTXH和接收寄存器URXH七、实验步骤1)程序设计:子程序包括发送数据和接受数据,流程见图2图2 发送及接收子程序流程(左为发送、右为接收)主程序流程见图3图3 主程序流程图2)相关函数:初始化:s3c2410_cpu_init();/CPU时钟设置发送数据:void Uart_SendByten(int Uartnum, U8 data) /往串口发送数据WrUTXH0(data); /往串口数据寄存器写数据接收数据:char Uart_Getchn(char* Revdata, int Uartnum, int timeout)/接收数据RdURXH0(); /读取串口数据寄存器数据3)具体程序(只包含main.c,其余头文件及外设配置文件略)#include ./inc/drivers.h/ xin xiu gai#include “./inc/MotorCtrl.h”#include ./inc/macro.h /xin jia#include ./uhal/isr.h /xin jia#define U8 unsigned char#define MOTOR_COUNT 12657 #include #include #define TRUE 1#define FALSE 0#define rUTRSTAT0(*(volatile unsigned *)0x50000010)#define rUTRSTAT1(*(volatile unsigned *)0x50004010)#define WrUTXH0(ch)(*(volatile unsigned char *)0x50000020)=(unsigned char)(ch)#define WrUTXH1(ch)(*(volatile unsigned char *)0x50004020)=(unsigned char)(ch)#define RdURXH0()(*(volatile unsigned char *)0x50000024)#define RdURXH1()(*(volatile unsigned char *)0x50004024)void Uart_SendByten(int,U8);char Uart_Getchn(char* Revdata, int Uartnum, int timeout);void ARMTargetInit(void);void hudelay(int time);int main(void) char c1256; char err;ARMTargetInit(); / do target (uHAL based ARM system) initialisation init_MotorPort();while(1) err=Uart_Getchn(c1,0,0);/从串口采集数据 if (err=TRUE & c10=0x30 & c10=0x39 ) Uart_SendByten(0,c10);/显示采集的数据 if (c10=0xd) Uart_SendByten(0,0xa);/换行 Uart_SendByten(0,0xd);/回车Uart_Printf(0,nBegin control DC motor.ttPress any key to control step motor.n);for(;) for(int i=0;i3;i+) ADDatai=GetADresult(i);Uart_Printf(0,addata%d=%d ,i,ADDatai);hudelay(10);SetPWM(ADDatai-512)*MOTOR_CONT/1024);hudelay(10); void Uart_SendByten(int Uartnum, U8 data)/ok eric rong /int i;if(Uartnum=0) while(!(rUTRSTAT0 & 0x4); /Wait until THR is empty.hudelay(10);WrUTXH0(data); else while(!(rUTRSTAT1 & 0x4); /Wait until THR is empty.hudelay(10);WrUTXH1(data); char Uart_Getchn(char* Revdata, int Uartnum, int timeout)if(Uartnum=0)while(!(rUTRSTAT0 & 0x1); /Receive data read*Revdata=RdURXH0();return TRUE;elsewhile(!(rUTRSTAT1 & 0x1);/Receive data read*Revdata=RdURXH1();return TRUE;void init_MotorPort() rGPBCON=rGPBCON&0x3ffff0|0xa; /Dead Zone=24, PreScalero1=2;rTCFG0=(016)|2;/divider timer0=1/2;rTCFG1=0;rTCNTB0= MOTOR_CONT;rTCMPB0= MOTOR_MID;rTCON=0x2;/update mode for TCNTB0 and TCMPB0.rTCON=0x19;/timer0 = auto reload, start. Dead Zonevoid SetPWM(int value)rTCMPB0= MOTOR_MID+value;八、思考题1)232串行通讯的数据格式是什么?答:串行通信字符格式如下图所示: 在一次数据传输中包含1个起始位,7-9个数据位,0-1个校验位,1个停止位。在开始前,线路处于空闲状态,送出连续“1”。传送开始时首先发一个“”作为起始位,然后出现在通信线上的是字符的二进制编码数据。每个字符的数据位长可以约定为5 位、6 位、7 位或8 位,一般采用ASCII 编码。后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。最后是表示停止位的“1”信号,这个停止位可以约定持续1 位、1.5 位或2 位的时间宽度。至此一个字符传送完毕,线路又进入空闲,持续为“1”。经过一段随机的时间后,下一个字符开始传送才又发出起始位。每一个数据位的宽度等于传送波特率的倒数。微机异步串行通信中,常用的波特率为50,95,110,150,300,600,1200,2400,4800,9600等。 2)串行通讯最少需要几根线,分别如何连接?答:最少需要3根线,分别为RXD、TXD、信号地。两计算机通信的时候A的RXD接B的TXD,B的RXD接到A的TXD上,两者信号地相连。3)ARM的串行口有几个,相应的寄存器是什么?答:ARM自带三个UART端口,每个UART通道都有16字节的FIFO(先入先出寄存器)用于接受和发送。用系统时钟最大波特率可达230.4K,如果用外部时钟(UCLK)UART 可以以更高的波特率运行。UART线控制寄存器包括ULCON0,ULCON1和ULCON2,主要用来选择每帧数据位数、停止位数,奇偶校验模式及是否使用红外模式。UART控制寄存器包括UCON0, UCON1 and UCON2,主要用来选择时钟,接收和发送中断类型(即电平还是脉冲触发类型),接收超时使能,接收错误状态中断使能,回环模式,发送接收模式等。UART错误状态寄存器包括UERSTAT0, UERSTAT1 and UERSTAT2,此状态寄存器的相关位表明是否有帧错误或溢出错误发生。UART 模块中有三个接收/发送状态寄存

温馨提示

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

评论

0/150

提交评论