北航研究生arm9嵌入式系统实验报告.doc

上传人:bao****ty 文档编号:117480845 上传时间:2019-12-05 格式:DOC 页数:40 大小:1.50MB
返回 下载 相关 举报
北航研究生arm9嵌入式系统实验报告.doc_第1页
第1页 / 共40页
北航研究生arm9嵌入式系统实验报告.doc_第2页
第2页 / 共40页
北航研究生arm9嵌入式系统实验报告.doc_第3页
第3页 / 共40页
北航研究生arm9嵌入式系统实验报告.doc_第4页
第4页 / 共40页
北航研究生arm9嵌入式系统实验报告.doc_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《北航研究生arm9嵌入式系统实验报告.doc》由会员分享,可在线阅读,更多相关《北航研究生arm9嵌入式系统实验报告.doc(40页珍藏版)》请在金锄头文库上搜索。

1、 北京航空航天大学ARM9嵌入式系统实验报告实验一、ARM基础知识和开发环境一、实验目的1掌握ARM的串行口工作原理。2学习编程实现ARM的UART通讯。3掌握S3C2410寄存器配置方法。二、实验内容 1熟悉打开已有工程的步骤,掌握仿真调试的方法。 2建立一个新工程,熟练掌握编译器和链接器的设置方法。 3从串口输入字符串,将09数字在超级终端上连续显示,“Enter”键换行。 4将第三步得到的字符转换成BCD码,限制在01023,用于控制直流电机。三、预备知识 1了解EWARM集成开发环境的基本功能 2学习串口通讯的基本知识3熟悉S3C2410串口有关的寄存器四、实验设备及工具 12410s

2、教学实验箱2S3C2410的JTAG仿真器3ARM EWARM5.3集成开发环境 4串口连接线五、实验原理及说明 1 异步串行IO 异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传输通道,因此串行IO可以减少信号连线,最少用一对线即可进行。接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方必须协调工作。在微型计算机中大量使用异步串行IO方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有

3、长度不定的空闲时间,因此效率较低。 图1 异步串行I/O示意图2 RS-232C接口通信的两种基本连接方式这是美国电子工业协会推荐的一种标准(Electronic industries Association Recoil-mended Standard)。它在一种25针接插件(DB25)上定义了串行通信的有关信号。这个标准后来被世界各国所接受并使用到计算机的IO接口中。两种连接方式如图2:图2 RS-232C接口通信的两种基本连接方式3 信号电平规定1) EIA电平:双极性信号逻辑电平, 它是一套负逻辑定义 -3V到-25V之间的电平表示逻辑“1” +3V到+25V之间的电平表示逻辑“0”2

4、) TTL电平:计算机内部(S3C2410)使用LVTTL电平3) 电平转换电路:常用专门的RS-232接口芯片,如SP3232、SP3220等,在LVTTL电平和EIA电平之间实现相互转换。4 异步串行口接口电路图3 异步串行口接口电路5 发送数据和接收数据1) 发送数据void Uart_SendByten(int Uartnum, U8 data) /往串口发送数据WrUTXH0(data); /往串口数据寄存器写数据 2) 接收数据 char Uart_Getchn(char* Revdata, int Uartnum, int timeout)/接收数据RdURXH0(); /读取串

5、口数据寄存器数据 void Uart_SendByten(int Uartnum, U8 data 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) if(r

6、UTRSTAT0 & 0x1)=0x01) /Receive data read *Revdata=RdURXH0(); return TRUE; else return FALSE; 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;rTC

7、NTB0= 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; 6 寄存器1) 线路控制寄存器ULCONn2) 控制寄存器UCONn3) 状态寄存器UTRSTAT4) 发送寄存器UTXH和接收寄存器URXH六、实验方法1 以实验一为模板,完成实验的1和2。2 将接收串口数据的数组cl1改为cl256,用c

8、li=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/1

9、024),setspeed是速度指令,取值范围01023。七、程序源代码/#include./ucos-ii/includes.h /* uC/OS interface */#include ./ucos-ii/add/osaddition.h/#include ./inc/drivers.h#include ./inc/MotorCtrl.h /*修改1: 包含头文件./inc/MotorCtrl.h*/#include ./inc/macro.h/*修改2: 包含头文件./inc/macro.h*/#include ./inc/sys/lib.h/#include ./src/gui/gu

10、i.h#define U8 unsigned char#include #include #define TRUE 1#define FALSE 0#define MOTOR_COUNT 12657 /*修改3: 定义MOTOR_COUNT 值*/#pragma import(_use_no_semihosting_swi) / ensure no functions that use semihosting #define rUTRSTAT0(*(volatile unsigned *)0x50000010)#define rUTRSTAT1(*(volatile unsigned *)0x

11、50004010)#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(in

12、t Uartnum, U8 data);void Uart_SendByten(int,U8);char Uart_Getchn(char* Revdata, int Uartnum, int timeout);void ARMTargetInit(void);void hudelay(int time);int main(void) /int ndev; char c1256; char err; char al1; int i,j; int setspeed=0;ARMTargetInit(); / do target (uHAL based ARM system) initialisation / init_MotorPort(); /*初始化*/while(1) Uart_SendByten(0,0xa);/换行 Uart_SendByten(0,0xd);/回车 for(i=0;i256;) err=Uart_Getchn(al,0,0);/从串口采集数据 if (err=TRUE) Uart_SendByten(0,al0);/显示采集的数据 c1i=al0-0x30; if(0xd=al0) al0=0; if(i4) setspeed=0; for(j=0;ji;j+)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号