




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、感谢你的观看大连理工大学本科实验报告课程名称:嵌入式系统实验学院(系):电子信息与电气工程学部专 业: 自动化班 级:0804学 号:学生姓名:何韬2011 年11月18 日大连理工大学实验报告学院(系): 电信 专业: 自动化 班级:0804姓 名:何韬 学号:组:实验时间:2011-11-12 实验室:d108 实验台:指导教师签字: 成绩:实验二ARM勺串行口实验一、实验目的和要求见预习报告二、实验原理和内容见预习报告三、主要仪器设备硬件:AR限入式开发平台、用于 ARM7TDMI白JTAG仿真器、POPentium100以上、串口线。软件:PC机操作系统win98、Win2000或Wi
2、nXP、ARMSDT 2.51或ADS1.2集成开发环境、仿真器驱 动程序、超级终端通讯程序。四、实验步骤见预习报告五、核心代码在主函数中实现将从串口 0接收到的数据发送到串口 0 (Main.c)int main(void)char c11;char err;ARMTargetInit(); /开发版初始化LCD_Init();LCD_ChangeMode(DspTxtMode);/展换LCD显示模式为文本显示模式LCD_Cls();/文本模式下清屏命令while(1)Uart_SendByte(0,0xa);/ 换行Uart_SendByte(0,0xd);回车err=Uart_Getch
3、(c1,0,0); /从串口采集数据Uart_SendByte(0,c10); /显示采集的数据LCD_printf(c1);/ 向液晶屏输出return 0;六、实验结果与分析1 .ARM串口实验超级终端上显示:当输入一个字符,会在超级终端中显示出来,如下图所示。2 .ARM串口实验Debu世行显示:七、实验心得该实验展示了 ARM:用行口通讯过程及控制方式, 使我基本掌握了 ARM的串行口工作原理、 编程实现ARM的UART通讯及CPUJ用串口通讯的方法,对之前所学知识有了明确的理解和认识,能够在正确操作下准确做出实验现象,并在实验箱上显示出实验结果,使我收获很多。大连理工大学实验报告学院
4、(系): 电信 专业: 自动化 班级:0804姓 名:何韬 学号:组: 实验时间:2011-11-12 实验室:d108 实验台:指导教师签字: 成绩:实验九uC/OS-II在ARMf台的移植一、实验目的和要求见预习报告二、实验原理和内容见预习报告三、主要仪器设备硬件:AR嘏入式开发平台、用于 ARM7TDM的JTAG仿真器、PCI Pentium100以上、串口线。软件:PC机操作系统 win98、Win2000或WinXP、ARM SDT 2.51或ADS1.2集成开发环境、仿真器 驱动程序、超级终端通讯程序。四、实验步骤见预习报告五、核心代码所涉及到的函数:汇编函数OSStartHigh
5、Rdy()OSCtxSw()OSIntCtxSw()OSTickISR()C语言函数void *OSTaskStkInit (void (*task)(void *pd),void *pdata, void *ptos,INT16U opt)void OSTaskCreateHook (OS_TCB *ptcb)void OSTaskDelHook (OS_TCB *ptcb)void OSTaskSwHook (void)void OSTaskStatHook (void)void OSTimeTickHook (void)后5个函数为接口函数,可以不加代码 cut/OS-II 的启动: v
6、oid main (void) OSInit(); / 初始化 uC/OS-II .通过调用OSTaskCreate()或OSTaskCreateExt()创建至少一个任务; .OSStart(); /开始多任务调度,永不返回 基于uC/OS勺应用开发: void YourTask (void *pdata) /*用户代码*/OSTaskDel(OS_PRIO_SELF);main函数,ucos-ii初始化等定义:#include"./ucos-ii/includes.h" /* uC/OS interface */#include "./ucos-ii/add/
7、osaddition.h"#include "./inc/drivers.h"#include "./inc/sys/lib.h"#include "./src/gui/gui.h"#include <string.h>#include <stdio.h>#pragma import(_use_no_semihosting_swi) / ensure no functions that use semihosting/*任务定义*/*OS_STK SYS_Task_StackSTACKSIZE尸0,
8、; /system task#define SYS_Task_Prio1void SYS_Task(void *Id);*/OS_STK task1_StackSTACKSIZE=0, ; /Main_Test_Taskvoid Task1(void *Id);Main_Test_Task#define Task1_Prio 12OS_STK task2_StackSTACKSIZE=0, ; /test_Test_Task刷新任务堆栈堆栈堆栈void Task2(void *Id); /test_Test_Task#define Task2Prio 15/*已经定义的。亚务*#define
9、SYS_Task_Prio1#define Touch_Screen_Task_Prio9#define Main_Task_Prio 12#define Key_Scan_Task_Prio 58#define Lcd_Fresh_prio59#define Led_Flash_Prio60* int main(void)ARMTargetInit(); / do target (uHAL based ARM system) initialisation / OSInit(); / needed by uC/OS-II / OSInitUart();initOSFile();/#if USE
10、_MINIGUI=0/ initOSMessage();/ initOSDC();/ LoadFont();/#endif/loadsystemParam();/ create the tasks in uC/OS and assign increasing / priorities to them so that Task3 at the end of / the pipeline has the highest priority. /LCD_printf("Create task on uCOS-II.n");OSTaskCreate(SYS_Task, (void *
11、)0, (OS_STK *)&SYS_Task_StackSTACKSIZE-1, SYS_Task_Prio);OSTaskCreate(Task1, (void *)0, (OS_STK *)&task1_StackSTACKSIZE-1, Task1_Prio);OSTaskCreate(Task2, (void *)0, (OS_STK *)&task2_StackSTACKSIZE-1, Task2_Prio); OSAddTask_Init(0);LCD_printf("Starting uCOS-II.n");/LCD_printf(&
12、quot;Entering graph moden");LCD_ChangeMode(DspGraMode);OSStart(); / start the OS / / never reached / return 0;/mainvoid Task1(void *Id) for(;)printf("run task1'n");OSTimeDly(1000); void Task2(void *Id) for(;) printf("run task2'n"); OSTimeDly(3000); 六、实验结果与分析超级终端上交替显示
13、 run task1 , run task2 , run task1 , runtask1 , run task1 , run task2 , run task1 , run task1 , run task1。表明 由于task1的优先级为12,而task2的优先级为15,所以系统在task1和task2 同时就绪时总是先执行task1后执行task2.由于task2挂起时间为3秒,所以 在task2挂起期间task1能执行两次,而当第三次时由于task1与task2同时处于就绪态,由优先级次序,还是先执行taskl在执行task2.然后就这样周而复始的循环下去。为验证ucos的强实时性,可
14、以去掉task2 ()的“ OSTimeDly(3000); ”然后令taskl ()中的 “ OSTimeDly(1000); " 改为 “ OSTimeDly(10); ”。观察到的实验现象是在超级终端上显示被“ run taskl ”打断的” “ run task2 ",反之把taskl和task2的优先级交换则在超级终端上只显示“run task2 "。这说明ucos的强实时性得到了验证,因为在任何时候只要高优先级的任务都可以打断正在执行的低优先级任务,反之低优先级任务却不可打断正在执行的高优先级的任务。七、实验心得该实验使我了解了 uCOS-II内核的主
15、要结构,对所学知识有了加深刻的理解和认识, 基本掌握了将uCOS-II内核移植到ARM920TM理器上的方法,能够正确完成基本操作得 出正确结果。大连理工大学实验预习报告学院(系): 电信 专业: 自动化 班级:0804姓 名:何韬 学号:组:实验时间:2011-11-12 实验室:d108 实验台:指导教师签字: 成绩:实验二ARM勺串行口实验一、实验目的和要求1 .掌握ARM的串行口工作原理。2 .学习编程实现 ARM的UART通讯。3 .掌握CPU利用串口通讯的方法。二、实验原理和内容 实验原理:1 .硬件电路图核心板电路接口 硬件电路图一MAX3232: 接口连线:2 .异步串行I/O
16、异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传车版!道,因此串行I/O可以减少信号连线,最少用一对线即可进行。接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方 必须协调工作。在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。图2-1串行通信字符格式图2-1给出异步串行通信中一个字符的传送格式。开始前,线路处于空闲
17、状态,送出连续1”。传送开始时首先发一个()”作为起始位,然后出现在通信线上的是字符的二进制编码数据。每个字符的数据位长可以约定为 5位、6位、7位或8位,一般采用ASCII编码。后面是奇偶校验位,根据 约定,用奇偶校验位将所传字符中为1”的位数凑成奇数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。最后是表示停止位的1”信号,这个停止位可以约定持续1位、1.5位或2位的时间宽度。至此一个字符传送完毕,线路又进入空闲,持续为 1”。经过一段随机的时间后,下一 个字符开始传送才又发出起始位。每一个数据位的宽度等于传送波特率的倒数。微机异步串行通信中,常用的波特率为50,95, 110,
18、 150, 300, 600, 1200, 2400, 4800, 9600, 119200 等。 接收方按约定的格式接收数据, 并进行检查,可以查出以下三种错误:1 )奇偶错:在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。2)帧格式错:一个字符从起始位到停止位的总位数不对。3)溢出错:若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生溢出错。每一种错误都会给出相应的出错信息,提示用户处理。3. ARM自带的用行口寄存器ARM自带两个串行口,各带有16字节的FIFO (先入先出寄存器),最大波特率115.2K。每个UART 有7种状态:溢出错误、校验错误、帧错误、暂停态、接收
19、缓冲区准备好、发送缓冲区空、发送移位 缓冲器空,这些状态可以由相应的 UTRSTATn/UERSTAT表示,并且与发送接收缓冲区相对应的有错误 缓冲区。波特率的可以通过控制波特率寄存器( UBRDIVn)控制。 与UART有关的寄存器主要有以下几个: (1)UART线性控制寄存器 ULCONn该寄存器的第6位决定是否使用红外摸式,位53决定校验方式,位2决定停止位长度,位1和0决定每帧的数据位数。参考:普通模式,无奇偶校验,1位停止位,8为数据长度。(2) UART控制寄存器UCONn该寄存器决定 UART的各种摸式。UART FIFO®制寄存器UFCONn UART MODE瞳制寄
20、存器,分别决定UARTFIFO和MODEM勺模式。其中UFCONnW第0位决定是否启用 FIFO, UMCONn勺第0位是请求发送位,对我们来说是比较重要的。参考:Tx电平触发,Rxfe沿触发,禁止接收超时中断,允许接收错误中断,发送和接受模式均为01。(3)读写状态寄存器UTRSTAT以及错误态寄存 UERSTAT可以反映芯片目前的读写状态以及错误 类型。FIFO状态寄存器UFSTAT和MODE毗态寄存器UMSTAT通过前者可以读出目前 FIFO是否满以 及其中的字节数;通过后者可以读出目前MODEMJCTS状态。(4)发送寄存器UTXH和接收寄存器URXH这两个寄存器存放着发送和接收的数据
21、,当然只有一个 字节8位数据。需要注意的是在发生溢出错误的时候,接收的数据必须要被读出来,否则会引发下次 溢出错误。(5)最后是波特率引子寄存器 UBRDIV该寄存器为十六位,算法参见上页的部分。计算公式如下:UBRDIVn = (round_off)(MCLK/(bps x 16) )-1其中MCLK是系统频率,例如在 40MHz的情况下,当波特率取115200时,X 16)+0.5 ) -1=(int)(21.7+0.5)-1 =22 -1 = 21注意:由于ARM工作时存在小端和大端两种工作模式,所以同样一个寄存器在不同模式时地址也不 一样,需要加以区别。实验内容:学习串行通讯原理,了解
22、串行通讯控制器,阅读ARM芯片文档,掌握ARM的UART相关寄存器的功能,熟悉ARM系统硬件的UART相关接口。编程实现 ARM和计算机实现串行通讯:ARM监视串行口,将接收到的字符再发送给串口(计算机与开发平台是通过超级终端通讯的), 即按PC键盘通过超级终端发送数据,开发平台将接收到的数据再返送给PC在超级终端上显示。 三、实验步骤1 .新建工程,将“ Exp2 ARM串口实验”中的文件添加到工程中,这些是启动时所需要的文件。2 .定义与UART有关的各个寄存器地址和一些特殊的位命令。主要有以下各寄存器(44b.h ):/* UART的全部功能寄存器*/#define rULCON0 (*
23、(volatile unsigned *)0x1d00000)#define rULCONI (*(volatile unsigned *)0x1d04000)#define rUCONO (*(volatile unsigned *)0x1d00004)#define rUCONI (*(volatile unsigned *)0x1d04004)#define rUFCONO (*(volatile unsigned *)0x1d00008)#define rUFCONI (*(volatile unsigned *)0x1d04008)#define rUMCONO (*(volatil
24、e unsigned *)0x1d0000c)#define rUMCONI (*(volatile unsigned *)0x1d0400c)#define rUTRSTATO "volatile unsigned *)0x1d00010)#define rUTRSTAT1 "volatile unsigned *)0x1d04010)#define rUERSTAT0 "volatile unsigned *)0x1d00014)#define rUERSTAT1 "volatile unsigned *)0x1d04014)#define rUFS
25、TAT0 "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
26、 _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
27、 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 (
28、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) (*(volatileunsign
29、ed char *)0x1d00020)=(unsigned char)(ch)#define WrUTXH1(ch) (*(volatileunsigned 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 (0x1
30、d04020)#define URXH0 (0x1d00024)#define URXH1 (0x1d04024)#endif3 .编写串口驱动函数(MyUart.c):图2-4为串口初始化的实现流程。图2-4用口初始化4 .在主函数中实现将从用口 0接收到的数据发送到串口 0 (Main.c):图2-7为主函数 流程图。大连理工大学实验预习报告学院(系): 电信 专业: 自动化 班级:0804姓 名:何韬 学号:组:实验时间:2011-11-12 实验室:d108 实验台:指导教师签字: 成绩:实验九uC/OS-II在ARMf台的移植一、实验目的和要求1 . 了解uCOS-II内核的主要结构
31、。2 .掌握将uCOS-II内核移植到ARM920TM理器上的基本方法。二、实验原理和内容实验原理:所谓移植,指的是一个操作系统可以在某个微处理器或者微控制器上运行。虽然 uCOS-II的大部分源代码是用C语言写成的,仍需要用C语言和汇编语言完成一些与处理器相关的代码。比如:uCOS-II在读写处理器、寄存器时只能通过汇编语言来实现。因为uCOS-II在设计的时候就已经充分考虑了可移植性,所以,uCOS-II的移植还是比较容易的。要使uCOS-II可以正常工作,处理器必须满足以下要求:1 .处理器的C编译器能产生可重入代码。可重入的代码指的是一段代码(如一个函数)可以被多个任务同时调用,而不必
32、担心会破坏数据。也就是说,可重入型函数在任何时候都可以被中断执行,过一段时间以后又可以继续运行,而不会因为在函数中断的时候被其他的任务重新调用,影响函数中的数据。下面的两个例子可以比较可重入型函数和非可重入型函数:程序1:可重入型函数void swap(int *x, int *y)int temp;temp=*x;*x=*y;*y=temp;程序2:非可重入型函数int temp;void swap(int *x, int *y)temp=*x;*x=*y;*y=temp;程序1中使用的是局部变量temp作为变量。通常的C编译器,把局部变量分配在栈中。所以,多次调用同一个函数,可以保证每次的
33、temp互不受影响。而程序2中temp定义的是全局变量,多次调用函数的时候,必然受到影响。代码的可重入性是保证完成多任务的基础, 除了在C程序中使用局部变量以 外,还需要C编译器的支持。笔者使用的是ARMADS的集成开发环境,均可以生成可重 入的代码。2 .在程序中可以打开或者关闭中断。在uCOS-II 中,可以通过 OS_ENTER_CRITICAL()者OS_EXIT_CRITICAL(宏 来控制系统关闭或者打开中断。这需要处理器的支持,在ARM920T勺处理器上,可以设 置相应的寄存器来关闭或者打开系统的所有中断。3 .处理器支持中断,并且能产生定时中断(通常在10Hz1000Hz之间)
34、。uCOS-II是通过处理器产生的定时器的中断来实现多任务之间的调度的。在ARM920T勺处理器上可以产生定时器中断。4 .处理器支持能够容纳一定量数据的硬件堆栈。5 .处理器有将堆栈指针和其它CPU寄存器存储和读出到堆栈(或者内存)的指令。uCOS-II进行任务调度的时候,会把当前任务的CPU寄存器存放到此任务的 堆栈中,然后,再从另一个任务的堆栈中恢复原来的工作寄存器,继续运行另一个任务。所以,寄存器的入栈和出栈是uCOS-II多任务调度的基础。图4-1说明了 uC/OS的结构以及它与硬件的关系。ARM920说理器完全满足上述要求。接下来将介绍如何把 uCOS-II移植到Samsung 公
35、司的一款ARM920T-嵌入式处理器 S3c2410X上。实验内容:1 .将uC/OS-II内核移植到ARM暇处理器 上。2 .创建两个任务task1、task2 ,分别向串口输出数据,在超级终端上显示当前正在运行那个任务。三、实验步骤1 .将uCOS-II内核移植到ARM7微处理器上。2 .编写两个简单任务,在超级终端上观察两个任务的切换来测试一下移植 是否成功。为了使uCOS-II可以正常运行,除了上述必须的移植工作外,硬件初始化和 配置文件也是必须的。STARTUPS录下的文件还包括中断处理,时钟,串口 通信等基本功能函数。在文件main.c中给出了应用程序的基本框架,包括初始化和多任务的创建,启动等。任务创建方法如下:1)在程序开头定义任务堆栈,任务函数声明和任务优先级:OS_STK TaskName_StackSTACKSIZE尸0, ; 任务堆栈voi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高层决策支持系统办公用品使用表格
- 美容美发行业智能预约与美容美发管理系统方案
- 农民增收途径方案
- 宜宾市属国有企业人力资源中心宜宾国有企业管理服务有限公司2024年第四批员工公开招聘笔试参考题库附带答案详解
- 项目申报说明文书模板
- 医疗行业远程诊断与手术辅助系统设计
- 贵州2025年贵州省林业局直属事业单位招聘17人笔试历年参考题库附带答案详解
- 西安2025年陕西西安市事业单位招聘1287人笔试历年参考题库附带答案详解
- 肇庆广东肇庆德庆县总工会招聘镇(街道)社会化工会工作者15人笔试历年参考题库附带答案详解
- 潍坊2025年山东潍坊寿光市事业单位招聘24人笔试历年参考题库附带答案详解
- 必修一第三单元 单元挑战 探究密码安全问题课件
- 高中美术中的艺术治疗与心理健康
- 体育课电子教案模板
- 2022-2023学年河南省南阳市方城县科普版六年级下学期4月期中英语试卷(解析版)
- 国家辅助类药品一览表
- 2023年国内广西地区民宿行业分析报告
- 移动机器人SLAM技术 课件 【ch06】激光SLAM
- 2023版思想道德与法治绪论教学设计 担当复兴大任 成就时代新人教学设计
- 检验员培训资料-
- 房屋市政工程施工现场安全风险分级管控与防范措施清单
- 员工聘用合同聘用合同
评论
0/150
提交评论