版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、谢谢观赏大连理工大学本科实验报告课程名称:嵌入式系统实验学院(系):电子信息与电气工程学部专业:自动化班级:0804学号:学生姓名:何韬2011年11月18日大连理工大学实验报告学院(系):电信专业:自动化班级:0804姓名:何韬学号:组:实验时间:2011-11-12实验室:d108实验台:指导教师签字:成绩:实验二ARM勺串行口实验一、实验目的和要求见预习报告二、实验原理和内容见预习报告三、主要仪器设备硬件:AR限入式开发平台、用于ARM7TDMI白JTAG仿真器、POPentium100以上、串口线。软件:PC机操作系统win98、Win2000或WinXP、ARMSDT2.51或ADS
2、1.2集成开发环境、仿真器驱动程序、超级终端通讯程序。四、实验步骤见预习报告五、核心代码在主函数中实现将从串口0接收到的数据发送到串口0(Main.c)intmain(void)charc11;charerr;ARMTargetInit();/开发版初始化LCD_Init();LCD_ChangeMode(DspTxtMode);/展换LCD显示模式为文本显示模式LCD_Cls();/文本模式下清屏命令while(1)Uart_SendByte(0,0xa);/换行Uart_SendByte(0,0xd);回车err=Uart_Getch(c1,0,0);/从串口采集数据Uart_SendBy
3、te(0,c10);/显示采集的数据LCD_printf(c1);/向液晶屏输出return0;六、实验结果与分析1 .ARM串口实验超级终端上显示:当输入一个字符,会在超级终端中显示出来,如下图所示。2 .ARM串口实验Debu世行显示:七、实验心得该实验展示了ARM:用行口通讯过程及控制方式,使我基本掌握了ARM的串行口工作原理、编程实现ARM的UART通讯及CP函用串口通讯的方法,对之前所学知识有了明确的理解和认识,能够在正确操作下准确做出实验现象,并在实验箱上显示出实验结果,使我收获很多。大连理工大学实验报告学院(系):电信专业:自动化班级:0804姓名:何韬学号:组:实验时间:201
4、1-11-12实验室:d108实验台:指导教师签字:成绩:实验九uC/OS-II在ARMf台的移植一、实验目的和要求见预习报告二、实验原理和内容见预习报告三、主要仪器设备硬件:AR嘏入式开发平台、用于ARM7TDM的JTAG仿真器、PCIPentium100以上、串口线。软件:PC机操作系统win98、Win2000或WinXP、ARMSDT2.51或ADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序。四、实验步骤见预习报告五、核心代码所涉及到的函数:汇编函数OSStartHighRdy()OSCtxSw()OSIntCtxSw()OSTickISR()C语言函数void*OSTask
5、StkInit(void(*task)(void*pd),void*pdata,void*ptos,INT16Uopt)voidOSTaskCreateHook(OS_TCB*ptcb)voidOSTaskDelHook(OS_TCB*ptcb)voidOSTaskSwHook(void)voidOSTaskStatHook(void)voidOSTimeTickHook(void)后5个函数为接口函数,可以不加代码cut/OS-II的启动:voidmain(void)OSInit();/初始化uC/OS-II.通过调用OSTaskCreate()或OSTaskCreateExt()创建至少一
6、个任务;.OSStart();/开始多任务调度,永不返回基于uC/OS勺应用开发:voidYourTask(void*pdata)/*用户代码*/OSTaskDel(OS_PRIO_SELF);main函数,ucos-ii初始化等定义:#include./ucos-ii/includes.h/*uC/OSinterface*/#include./ucos-ii/add/osaddition.h#include./inc/drivers.h#include./inc/sys/lib.h#include./src/gui/gui.h#include#include#pragmaimport(_us
7、e_no_semihosting_swi)/ensurenofunctionsthatusesemihosting/*任务定义*/*OS_STK SYS_Task_StackSTACKSIZE尸0, ; /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, ; /
8、test_Test_Task刷新任务堆栈堆栈堆栈void Task2(void *Id); /test_Test_Task#define Task2 Prio 15/*已经定义的。亚务*#defineSYS_Task_Prio1#defineTouch_Screen_Task_Prio9#defineMain_Task_Prio12#defineKey_Scan_Task_Prio58#defineLcd_Fresh_prio59#defineLed_Flash_Prio60*intmain(void)ARMTargetInit();/dotarget(uHALbasedARMsystem)i
9、nitialisation/OSInit();/neededbyuC/OS-II/OSInitUart();initOSFile();/#ifUSE_MINIGUI=0/initOSMessage();/initOSDC();/LoadFont();/#endif/loadsystemParam();/createthetasksinuC/OSandassignincreasing/prioritiestothemsothatTask3attheendof/thepipelinehasthehighestpriority./LCD_printf(CreatetaskonuCOS-II.n);O
10、STaskCreate(SYS_Task,(void*)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(StartinguCOS-II.n);/LCD_printf(Enteringgraph
11、moden);LCD_ChangeMode(DspGraMode);OSStart();/starttheOS/neverreached/return0;/mainvoidTask1(void*Id)for(;)printf(runtask1n);OSTimeDly(1000);voidTask2(void*Id)for(;)printf(runtask2n);OSTimeDly(3000);六、实验结果与分析超级终端上交替显示runtask1,runtask2,runtask1,runtask1,runtask1,runtask2,runtask1,runtask1,runtask1。表明由
12、于task1的优先级为12,而task2的优先级为15,所以系统在task1和task2同时就绪时总是先执行task1后执行task2.由于task2挂起时间为3秒,所以在task2挂起期间task1能执行两次,而当第三次时由于task1与task2同时处于就绪态,由优先级次序,还是先执行taskl在执行task2.然后就这样周而复始的循环下去。为验证ucos的强实时性,可以去掉task2()的“OSTimeDly(3000);”然后令taskl()中的“OSTimeDly(1000);改为“OSTimeDly(10);”。观察到的实验现象是在超级终端上显示被“runtaskl”打断的”“ru
13、ntask2,反之把taskl和task2的优先级交换则在超级终端上只显示“runtask2。这说明ucos的强实时性得到了验证,因为在任何时候只要高优先级的任务都可以打断正在执行的低优先级任务,反之低优先级任务却不可打断正在执行的高优先级的任务。七、实验心得该实验使我了解了uCOS-II内核的主要结构,对所学知识有了加深刻的理解和认识,基本掌握了将uCOS-II内核移植到ARM920TM理器上的方法,能够正确完成基本操作得出正确结果。大连理工大学实验预习报告学院(系):电信专业:自动化班级:0804姓名:何韬学号:组:实验时间:2011-11-12实验室:d108实验台:指导教师签字:成绩:
14、实验二ARM勺串行口实验一、实验目的和要求1 .掌握ARM的串行口工作原理。2 .学习编程实现ARM的UART通讯。3 .掌握CPU利用串口通讯的方法。二、实验原理和内容实验原理:1 .硬件电路图核心板电路接口硬件电路图一MAX3232:接口连线:2 .异步串行I/O异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传车版!道,因此串行I/O可以减少信号连线,最少用一对线即可进行。接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方必须协调工作。在微型计算机中大量使用异步串行I/O方式,双方使用各自
15、的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。图2-1串行通信字符格式图2-1给出异步串行通信中一个字符的传送格式。开始前,线路处于空闲状态,送出连续1”。传送开始时首先发一个()”作为起始位,然后出现在通信线上的是字符的二进制编码数据。每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为1”的位数凑成奇数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。最后是表示停止位的1”信号
16、,这个停止位可以约定持续1位、1.5位或2位的时间宽度。至此一个字符传送完毕,线路又进入空闲,持续为1”。经过一段随机的时间后,下一个字符开始传送才又发出起始位。每一个数据位的宽度等于传送波特率的倒数。微机异步串行通信中,常用的波特率为50,95, 110,150,300,600,1200,2400,4800,9600,119200等。接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误:1)奇偶错:在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。2)帧格式错:一个字符从起始位到停止位的总位数不对。3)溢出错:若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生溢出错。每
17、一种错误都会给出相应的出错信息,提示用户处理。3. ARM自带的用行口寄存器ARM自带两个串行口,各带有16字节的FIFO(先入先出寄存器),最大波特率115.2K。每个UART有7种状态:溢出错误、校验错误、帧错误、暂停态、接收缓冲区准备好、发送缓冲区空、发送移位缓冲器空,这些状态可以由相应的UTRSTATn/UERSTAT表示,并且与发送接收缓冲区相对应的有错误缓冲区。波特率的可以通过控制波特率寄存器(UBRDIVn)控制。与UART有关的寄存器主要有以下几个:(1)UART线性控制寄存器ULCONn该寄存器的第6位决定是否使用红外摸式,位53决定校验方式,位2决定停止位长度,位1和0决定
18、每帧的数据位数。参考:普通模式,无奇偶校验,1位停止位,8为数据长度。(2)UART控制寄存器UCONn该寄存器决定UART的各种摸式。UARTFIFO制寄存器UFCONnUARTMODE瞳制寄存器,分别决定UARTFIFO和MODEM勺模式。其中UFCONnW第0位决定是否启用FIFO,UMCONn勺第0位是请求发送位,对我们来说是比较重要的。参考:Tx电平触发,Rxfe沿触发,禁止接收超时中断,允许接收错误中断,发送和接受模式均为01。(3)读写状态寄存器UTRSTAT以及错误态寄存UERSTAT可以反映芯片目前的读写状态以及错误类型。FIFO状态寄存器UFSTAT和MODE毗态寄存器UM
19、STAT通过前者可以读出目前FIFO是否满以及其中的字节数;通过后者可以读出目前MODEMJCTS状态。(4)发送寄存器UTXH和接收寄存器URXH这两个寄存器存放着发送和接收的数据,当然只有一个字节8位数据。需要注意的是在发生溢出错误的时候,接收的数据必须要被读出来,否则会引发下次溢出错误。(5)最后是波特率引子寄存器UBRDIV该寄存器为十六位,算法参见上页的部分。计算公式如下:UBRDIVn=(round_off)(MCLK/(bpsx16)-1其中MCLK是系统频率,例如在40MHz的情况下,当波特率取115200时,X16)+0.5)-1=(int)(21.7+0.5)-1=22-1
20、=21注意:由于ARM工作时存在小端和大端两种工作模式,所以同样一个寄存器在不同模式时地址也不一样,需要加以区别。实验内容:学习串行通讯原理,了解串行通讯控制器,阅读ARM芯片文档,掌握ARM的UART相关寄存器的功能,熟悉ARM系统硬件的UART相关接口。编程实现ARM和计算机实现串行通讯:ARM监视串行口,将接收到的字符再发送给串口(计算机与开发平台是通过超级终端通讯的),即按PC键盘通过超级终端发送数据,开发平台将接收到的数据再返送给PG在超级终端上显示。三、实验步骤1 .新建工程,将“Exp2ARM串口实验”中的文件添加到工程中,这些是启动时所需要的文件。2 .定义与UART有关的各个
21、寄存器地址和一些特殊的位命令。主要有以下各寄存器(44b.h):/*UART的全部功能寄存器*/#definerULCON0(*(volatileunsigned*)0x1d00000)#definerULCONI(*(volatileunsigned*)0x1d04000)#definerUCONO(*(volatileunsigned*)0x1d00004)#definerUCONI(*(volatileunsigned*)0x1d04004)#definerUFCONO(*(volatileunsigned*)0x1d00008)#definerUFCONI(*(volatileunsi
22、gned*)0x1d04008)#definerUMCONO(*(volatileunsigned*)0x1d0000c)#definerUMCONI(*(volatileunsigned*)0x1d0400c)#definerUTRSTATOvolatileunsigned*)0x1d00010)#definerUTRSTAT1volatileunsigned*)0x1d04010)#definerUERSTAT0volatileunsigned*)0x1d00014)#definerUERSTAT1volatileunsigned*)0x1d04014)#definerUFSTAT0vol
23、atileunsigned*)0x1d00018)#definerUFSTAT1(*(volatileunsigned*)0x1d04018)#definerUMSTAT0(*(volatileunsigned*)0x1d0001c)#definerUMSTAT1(*(volatileunsigned*)0x1d0401c)#definerUBRDIV0volatileunsigned*)0x1d00028)#definerUBRDIV1(*(volatileunsigned*)0x1d04028)#ifdef_BIG_ENDIAN/大端摸式#definerUTXH0(*(volatileun
24、signedchar*)0x1d00023)#definerUTXH1(*(volatileunsignedchar*)0x1d04023)#definerURXH0(*(volatileunsignedchar*)0x1d00027)#definerURXH1(*(volatileunsignedchar*)0x1d04027)#defineWrUTXH0(ch)(*(volatileunsignedchar*)(0x1d00023)=(unsignedchar)(ch)#defineWrUTXH1(ch)(*(volatileunsignedchar*)(0x1d04023)=(unsig
25、nedchar)(ch)#defineRdURXH0()(*(volatileunsignedchar*)(0x1d00027)#defineRdURXH1()(*(volatileunsignedchar*)(0x1d04027)#defineUTXH0(0x1d00020+3)byte_accessaddressbyBDMA#defineUTXH1(0x1d04020+3)#defineURXH0(0x1d00024+3)#defineURXH1(0x1d04024+3)#else/小端摸式#definerUTXH0(*(volatileunsignedchar*)0x1d00020)#d
26、efinerUTXH1(*(volatileunsignedchar*)0x1d04020)#definerURXH0(*(volatileunsignedchar*)0x1d00024)#definerURXH1(*(volatileunsignedchar*)0x1d04024)#defineWrUTXH0(ch)(*(volatileunsignedchar*)0x1d00020)=(unsignedchar)(ch)#defineWrUTXH1(ch)(*(volatileunsignedchar*)0x1d04020)=(unsignedchar)(ch)#defineRdURXH0
27、()(*(volatileunsignedchar*)0x1d00024)#defineRdURXH1()(*(volatileunsignedchar*)0x1d04024)#defineUTXH0(0x1d00020)byte_accessaddressbyBDMA#defineUTXH1(0x1d04020)#defineURXH0(0x1d00024)#defineURXH1(0x1d04024)#endif3 .编写串口驱动函数(MyUart.c):图2-4为串口初始化的实现流程。图2-4用口初始化4 .在主函数中实现将从用口0接收到的数据发送到串口0(Main.c):图2-7为主函
28、数流程图。大连理工大学实验预习报告学院(系):电信专业:自动化班级:0804姓名:何韬学号:组:实验时间:2011-11-12实验室:d108实验台:指导教师签字:成绩:实验九uC/OS-II在ARMf台的移植一、实验目的和要求1 .了解uCOS-II内核的主要结构。2 .掌握将uCOS-II内核移植到ARM920TM理器上的基本方法。二、实验原理和内容实验原理:所谓移植,指的是一个操作系统可以在某个微处理器或者微控制器上运行。虽然uCOS-II的大部分源代码是用C语言写成的,仍需要用C语言和汇编语言完成一些与处理器相关的代码。比如:uCOS-II在读写处理器、寄存器时只能通过汇编语言来实现。
29、因为uCOS-II在设计的时候就已经充分考虑了可移植性,所以,uCOS-II的移植还是比较容易的。要使uCOS-II可以正常工作,处理器必须满足以下要求:1 .处理器的C编译器能产生可重入代码。可重入的代码指的是一段代码(如一个函数)可以被多个任务同时调用,而不必担心会破坏数据。也就是说,可重入型函数在任何时候都可以被中断执行,过一段时间以后又可以继续运行,而不会因为在函数中断的时候被其他的任务重新调用,影响函数中的数据。下面的两个例子可以比较可重入型函数和非可重入型函数:程序1:可重入型函数voidswap(int*x,int*y)inttemp;temp=*x;*x=*y;*y=temp;
30、程序2:非可重入型函数inttemp;voidswap(int*x,int*y)temp=*x;*x=*y;*y=temp;程序1中使用的是局部变量temp作为变量。通常的C编译器,把局部变量分配在栈中。所以,多次调用同一个函数,可以保证每次的temp互不受影响。而程序2中temp定义的是全局变量,多次调用函数的时候,必然受到影响。代码的可重入性是保证完成多任务的基础,除了在C程序中使用局部变量以外,还需要C编译器的支持。笔者使用的是ARMADS的集成开发环境,均可以生成可重入的代码。2 .在程序中可以打开或者关闭中断。在uCOS-II中,可以通过OS_ENTER_CRITICAL()者OS_
31、EXIT_CRITICAL(宏来控制系统关闭或者打开中断。这需要处理器的支持,在ARM920T勺处理器上,可以设置相应的寄存器来关闭或者打开系统的所有中断。3 .处理器支持中断,并且能产生定时中断(通常在10Hz1000Hz之间)。uCOS-II是通过处理器产生的定时器的中断来实现多任务之间的调度的。在ARM920T勺处理器上可以产生定时器中断。4 .处理器支持能够容纳一定量数据的硬件堆栈。5 .处理器有将堆栈指针和其它CPU寄存器存储和读出到堆栈(或者内存)的指令。uCOS-II进行任务调度的时候,会把当前任务的CPU寄存器存放到此任务的堆栈中,然后,再从另一个任务的堆栈中恢复原来的工作寄存
32、器,继续运行另一个任务。所以,寄存器的入栈和出栈是uCOS-II多任务调度的基础。图4-1说明了uC/OS的结构以及它与硬件的关系。ARM920说理器完全满足上述要求。接下来将介绍如何把uCOS-II移植到Samsung公司的一款ARM920T-嵌入式处理器S3c2410X上。实验内容:1 .将uC/OS-II内核移植到ARM暇处理器上。2 .创建两个任务task1、task2,分别向串口输出数据,在超级终端上显示当前正在运行那个任务。三、实验步骤1 .将uCOS-II内核移植到ARM7微处理器上。2 .编写两个简单任务,在超级终端上观察两个任务的切换来测试一下移植是否成功。为了使uCOS-II可以正常运行,除了上述必须的移植工作外,硬件初始化和配置文件也是必须的。STARTUP!录下的文件还包括中断处理,时钟,串口通信等基本功能函数。在文件main.c中给出了应用程序的基本框架,包括初始化和多任务的创建,启动等。任务创建方法如下:1)在程序开头定义任务堆栈,任务函数声明和任务优先级:OS_STKTaskName_StackSTACKSIZE尸0,;任务堆栈voidTaskName(void*Id);任务函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 陕西省安塞区高级中学2025-2026学年度第一学期期末高一地理考试(含答案)
- 2025-2026学年陕西省铜川二中九年级(上)期末数学试卷(含答案)
- 2026届高三生物二轮复习课件:专题七 热点聚焦 生态位
- 12月转债策略展望:震荡高低切或持续建议稳健配置
- 飞机附件培训
- 2026台州市水利水电勘测设计院有限公司招聘笔试备考试题及答案解析
- 2026年西北民族大学舞蹈学院专任教师招聘考试备考试题及答案解析
- 2026时代北汽(北京)新能源科技有限公司 (正式工)招聘备考考试试题及答案解析
- 2026广东广州市天河区培艺学校招聘初中英语老师1人备考考试题库及答案解析
- 2026年度烟台招远市事业单位公开招聘工作人员(47人)备考考试试题及答案解析
- 大数据驱动下的尘肺病发病趋势预测模型
- 炎德英才大联考雅礼中学2026届高三月考试卷英语(五)(含答案)
- 【道 法】期末综合复习 课件-2025-2026学年统编版道德与法治七年级上册
- 2025-2026学年仁爱科普版七年级英语上册(全册)知识点梳理归纳
- TNAHIEM 156-2025 口内数字印模设备消毒灭菌管理规范
- 顶棚保温施工组织方案
- ISO13485:2016医疗器械质量管理手册+全套程序文件+表单全套
- 学校6S管理培训
- DB15-T 4031-2025 建设项目水资源论证表编制导则
- 2025-2030国学启蒙教育传统文化复兴与商业模式探索报告
- 2025年事业单位考试(医疗卫生类E类)职业能力倾向测验试卷及答案指导
评论
0/150
提交评论