嵌入式系统实验指导书.doc_第1页
嵌入式系统实验指导书.doc_第2页
嵌入式系统实验指导书.doc_第3页
嵌入式系统实验指导书.doc_第4页
嵌入式系统实验指导书.doc_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式系统实验指导书 Page 38 of 40 嵌入式系统实验指导书计算机科学与技术学院实验教学中心2007-9-1目 录实验一 JediView调试环境及软件编程 3实验二 系统初始化和存储器实验 8实验三 键盘和中断实验 12实验四 S3C44B0X定时器实验 19实验五 LCD显示实验 22实验六、uclinux文件系统实验 26实验一 JediView调试环境及软件编程一、实验目的 1. 了解调试软件JediView,掌握在JediView环境中新建工程,及其编译,调试工程的方法。2. 掌握在JediView环境下arm系统中C语言编程及调试方法3. 掌握arm汇编语言编程及调试方法。二、实验内容 1.学习使用JediView集成开发环境:新建一个工程arm1_1,设置并编译该工程,通过JEDI仿真器下载已经编译好的文件到实验仪中运行。观察实验仪上的执行结果。掌握调试程序方法,为下面调试应用程序打下基础。2. 建立工程arm1_2,编写C语言程序arm1_2.c实现 1+2+3+N(arm1_2.c写在预习报告上)。3. 建立工程arm1_3,用arm汇编语言编写程序arm1_3.s,实现带参数的子程序调用(用程序跳转表实现),调用参数r0=0,做r1+r2=r0;r0=1,做r1-r2=r0(arm1_3.s写在预习报告上)。三、预备知识1.关于JediView调试环境基本使用方法。JediView具备一个标准调试软件的绝大部分功能,主要由以下模块组成: 源程序编辑器(Editor):用来完成源程序的编辑、修改等任务。编译器(Build System):把源程序(包括C,C+,汇编)编译生成机器码和可调试代码。调试器(Debugger):对编译成功的源程序进行调试,如走单步,设断点,全速运行等。项目管理器(Project Manager):管理项目设置,包括运程序路径,编译选项等。2.ARM指令系统,汇编语言编程知识。3.C语言编程能力。四、实验设备及工具(包括软件调试工具) 硬件:Micetek 44B0 实验系统,PowerProbe JTAG仿真器,PC机 Pentumn100以上 软件:PC机操作系统win98、win2000、winXP,JediView集成开发环境 五、实验步骤 1.学习使用JediView集成开发环境,建立一个工程,添加源程序、编译、下载、调试。系统配置:在桌面点击图标Configuration for ARM 打开窗口如图1所示,其中Protocol:选择与JediView连接的仿真器协议类型:如果调试软件没有与目标板连接,进行软件仿真选择Simulator通过计算机并口和Powerprobe与目标板连接,选择PowerProbe通过JDEI以太网口仿真器连接,选择JEDICpuCore:选择CPU内核类型CpuName:选择具体CPU型号Endian:选择Memory大小模式Initial_File:选择CPU初始化文件Semihosting: Semihosting功能开关SWI_Vector_Address:SWI异常向量地址Top_Memory: 当使用Semihosting功能时,设置Momeory的上限地址Cache_Memory: 如果目标CPU为ARM940T/920T,设置仿真器预留Memory空间Reset_Option: 选择是否采用硬件复位请参照图1_1所示进行配置。一旦配置好后,所有在 for ARM 环境下运行的工程都可沿用此配置,无需再重复配置。 图1_1 Configuration for ARM配置图在桌面建立一个文件夹arm1_1,将:Init.s , arm1_1.c拷贝到该文件夹中。双击桌面JediView图标,进入JediView,新建一个工程文件arm1_1,工程内包括两个源文件:Init.s , arm1_1.c。设置工程;编辑源文件,将源文件加入到工程中。编译工程。下载。 运行。观察实验仪上的运行结果。2. 按步骤1的建立工程arm1_2,用C语言编程序arm1_2.c,实现 1+2+3+N。下载后设置断点,连续或单步执行程序,参见附录1,设置观察点,调试程序。3.按步骤2建立工程arm1_3,用arm汇编语言编写程序arm1_3.s,实现带参数的子程序调用(用程序跳转表实现),调用参数r0,若r0=0,做32位加法;r0=1,则做32位减法。参见附录1,设置观察点,调试程序。六、参考程序/*arm1_1.c */#define led_Address 0x6000000void Led_Display(unsigned char data);void Main(void) int i,j; while(1) for (i=0x0a;i=0xf;i+) Led_Display(i); for (j=0;j0xc01000-0xc01003ldr r3,=0x11223344 / r2=0x0c010000str r3,r2ldr r3,=0x0 /字读ldr r3,r2,#4ldrh r3,r2 /半字读:0x0c010004-0xc010005-r3 / r2=0x0c010004 ldr r3,=0x5566 / 半字写 0x5566-0xc01004,0xc01005strh r3,r2,#2 / 后变址r2=0xc01006ldr r3,=0x7788strh r3,r2,#-2 / 半字写 0x7788-0xc01006,0xc01007 / r2=0x0c010004 ldrh r3,r2,#2 /半字读:0x0c010004-0xc010005-r3 ldrh r3,r2,#2 /半字读:0x0c010006-0xc010007-r3 ldrb r3,=0x99 strb r3,r2,#1 /字节写:0x99-0xc01008,r2=0x0c010009 ldrb r3,=0xaastrb r3,r2 /字节写:0xaa-0xc01009,r2=0x0c010009ldrb r3,r2,#-1 /字节读:0x0c010008-r3 ldrb r3,r2 /字节读:0x0c010009-r3 stop: nop b stop.end /*arm2_2.s*/.global Main.text.equ num, 20 /复制字数Main:ldr r0,=src /源数据区指针ldr r1,=dst /目的数据区指针 mov r2,#numBcopy: movsr3,r2,lsr #3 /以8个字为单位的复制次数 beq Cword /不足8个字的数据,以字为单位拷贝 stmfdsp!,r4-r11 /保护工作寄存器(SVCstack栈底0xc7ffb00,见44binit.s)Ocopy: ldmiar0!,r4-r11 /将源数据区8个字数据=目的数据区,并更新地址指针(!) stmiar1!,r4-r11 / subs r3,r3,#1 /块(8个字)复制次数减一 bne Ocopy ldmfd sp!,r4-r11 /以8个字为一块复制结束,恢复工作寄存器Cword: andsr2,r2,#7 /取余下的不足8个字的字数(=r2),为零则结束stop beqstopWcopy: ldrr3,r0,#4 /否则,每次拷贝一个字数据,直至 r2=0 str r3,r1,#4 subs r2,r2,#1 bneWcopystop: nop bstop/.datasrc: .word 1,2,3,4,5,6,7,8,9,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x010,0x011,0x012,0x013,0x014dst: .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.end 七、附录2initial.s完成的操作内容示意图见图2_1.图2_1 initial.s完成的操作内容示意图实验三 键盘和中断实验一、实验目的1. 了解ARM处理器的中断机制。2. 掌握S3C44B0X 中断的编程方法。3. 学习用中断和查询两种方式实现键盘扫描功能。二、实验内容 1. 编写程序arm3_1.c按中断方式扫描实验仪上的4*4键盘,并在实验仪数码管上显示键码。(预习:将arm3_1.c 写在预习报告上。结合教材有关S3C44B0X的中断、I/O端口的章节,阅读参考程序 keyboard.c 中的几个函数,掌握中断和键盘扫描的编程方法。main() / keyboard_ISR() /键盘中断服务(键盘扫描/译码) Port_Init() / 对 I/O 端口初始化Isr_Init() / IRQ 中断初始化Led_Display(char data) / 数码管显示)2. 编写程序arm3_2.c按查询方式扫描实验仪上的4*4键盘,并在实验仪数码管上显示键码。(将arm3_2.c 写在预习报告上)。 三、预备知识1. ARM处理器的中断机制。2. S3C44B0X的I/O控制寄存器、中断控制寄存器。3. 键盘扫描知识。4. C语言编程能力。四、实验设备及工具(包括软件调试工具) 硬件:Micetek 44B0 实验系统,PowerProbe JTAG仿真器,PC机 Pentumn100以上 软件:PC机操作系统win98、win2000、winXP,JediView集成开发环境 五、实验步骤 1. 实现按中断方式扫描实验仪上的4*4键盘,并在实验仪数码管上显示键码。 建立子目录arm3_1,将44binit.s、keyboard.c(或arm3_1.c) 复制到该目录下。建立工程arm3_1,将44init.s、keyboard.c 添加到该工程下,编译、下载、运行,运行中,按4*4键盘上的任一键,应在数码管上显示该键码。2. 编写程序arm3_2.c,实现按查询方式扫描实验仪上的4*4键盘,并在实验仪数码管上显示键码。建立子目录arm3_2,将44init.s、arm3_2.c 复制到该目录下。建立工程 arm3_2,将44init.s、arm3_2.c 添加到该工程下,编译、下载、运行,运行中,按4*4键盘上的任一键,应在数码管上显示该键码。六、键盘硬件电路及arm3_1参考程序keyboard.c1. 键盘硬件电路实验仪的键盘电路由 S3C44B0 的I/O口和外部中断构成,见图3_1 实验仪的键盘电路图, S3C44B0X 处理器G口的PG7PG4 四位作输出,F口的PF8PF5 四位作输入,构成4行4列的 4*4 键盘。无键按下时,PF8PF5 四列被上拉为高电平,按键按下将会使行、列连成通路。扫描键盘时,首先向PG7PG4 四行输出“0”,然后从PF8PF5读入,若读入的4位列值为全“1”,说明无键按下。当任一键按下时,从PF8PF5读入的列值将不是全“1”,此时可向PG7PG4逐行输出“0”,然后从PF8PF5读入列值,以判别哪一个键被按下。F口的PF8PF5位经负或门接至 外部中断 EXINT0,没有键按下时,PF8PF5被上拉至高电平;当F口的PF8PF5任一列有键按下时,将引发 EXINT0 键盘中断。图3_1实验仪键盘电路图2.参考程序/*keyboard.c*/#include #include .incoption.h#include .inc44b.h#include .inc44blib.h#include .incdef.h#include .inckb.hvoid Isr_Init(void);void HaltUndef(void);void HaltSwi(void);void HaltPabort(void); void HaltDabort(void);void Delay(int time);/void Port_Init(void);void Led_Display(unsigned char data);void keyboard_ISR(void) ;void Test_Kb(void);void main(void) rSYSCFG=SYSCFG_8KB; /(0x6) speed faster Isr_Init(); Port_Init(); pISR_EINT0=(unsigned)keyboard_ISR; rINTMSK =(BIT_GLOBAL|BIT_EINT0); while(1); void keyboard_ISR(void) char x,y,xrecord,yrecord,temp; rI_ISPC=BIT_EINT0;/clear pending_bit Delay(400);/delay 40ms if(rPDATF&0x1E0)=0x1E0) return 0;/no keyboard press,return else x=1; y=1; xrecord=(rPDATF&0x1E0)1); xrecord=xrecord4; while(xrecord!=0x1)/judge row x=x+1; xrecord=xrecord1; if(xrecord=0) rPDATG=0X0F;/ no ,return return 0; Delay(200);/delay 20ms rPDATG=0XEF; /input high while(rPDATF&0x1E0)=0x1E0) rPDATG=rPDATG4)&0x0F; while(yrecord!=0x1)/ judge line y=y+1; yrecord=yrecord1; if(yrecord=0) rPDATG=0X0F;/no board press,return return 0; Led_Display(x+(y-1)*4-1); Delay(1200);/delay 40ms rPDATG=0X0F; void Isr_Init(void) U32 i; pISR_UNDEF=(unsigned)HaltUndef; pISR_SWI =(unsigned)HaltSwi; pISR_PABORT=(unsigned)HaltPabort; pISR_DABORT=(unsigned)HaltDabort; for(i=_RAM_STARTADDRESS;i0;time-)for(i=0;idelayLoopCount;i+);/* PORTS */void Port_Init(void) /PORT A GROUP /GPA9 ADDR23 ADDR22 ADDR21 ADDR20 ADDR19 ADDR18 ADDR17 ADDR16 ADDR0 / 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 rPCONA=0x1ff; rPDATA=0x0; /PORT B GROUP /GPB10 GPB9 nGCS3 nGCS2 nGCS1 GPB5 GPB4 nSRAS nSCAS SCLK SCKE / 0, 0, 1,1, 1, 0, 0,1, 1, 1, 1 rPCONB=0x1Cf; /PORT C GROUP /IISLRCK IISD0 IISDI IISCLK VD7 VD6 VD5 VD4 nXDACK1 nXDREQ1 GPC10 GPC11 TXD1 RXD1 GPC14 GPC15 /All input / 11 11 11 11 11 11 11 11 11 11 0101 11 11 01 01 rPDATC=0x8400; rPCONC=0x5F5FFFFF; rPUPC=0x33ff;/should be enabled /PORT D GROUP /VFRAME VM VLINE VCLK VD3 VD2 VD1 VD0 / 10,10, 10,10, 10,10, 10,10 rPCOND=0xaaaa; rPUPD=0xff; /PORT E GROUP /PE0:FOUT, PE1:TxD0, PE2:RxD0, GPE3, GPE4, GPE5,GPE6,GPE7, CODECLK / 10 10, 10, 01 , 01, 01, 01, 01, 10 rPCONE=0x2552b; rPUPE=0x0; rPDATE=0X60; /PORT F GROUP /IICSCL IICSDA nWAIT nXBACK0 nXDREQ0 GPF5 GPF6 GPF7 GPF8 / 10 10 10 10 10 0 0 0 0 rPCONF=0x2A; rPUPF=0x0; /PORT G GROUP /EINT0 EINT1 EINT2 EINT3 GPG4 GPG5 GPG6 GPG7 / 0x0 / 11 11 11 11 01 01 01 01 rPDATG=0x0; rPCONG=0x55FF; rPUPG=0x0; rSPUCR=0x7; /pull-up disable rEXTINT=0x22222022; /All EINT7:0 will be falling edge triggered.void Led_Display(unsigned char data) /略,在arm1_1.c 中已给出。 七、附录3 S3C44B0X的中断机制:1.S3C44B0X的中断机制44B0的中断分两种模式:向量模式和向量模式:非向量模式: 是标准的ARM内核中断机制,不管任何中断请求,CPU首先跳转到0x18(IRQ)或00x1c(FIQ) , 然后再跳转到中断源判断和具体中断处理程序.向量模式: 是44B0特有的中断机制,在向量模式下,任何中断都有自己单独的中断向量入口,当中断到来时,程序直接跳到具体的向量表中,具体向量表的地址在0x20 -0xc0.在本实验采用非向量模式的IRQ中断,图3_3是非向量模式的IRQ中断流程图:图3_3非向量模式的IRQ中断流程示意图实验四 S3C44B0X定时器实验一、实验目的1. 学习掌握44B0X定时器查询方式工作、定时器中断方式工作原理和使用方法。2. 了解arm系统初始化的方法。二、实验内容 1. 使用定时器Timer5,设定44B0定时器Timer5工作在查询方式,在实验仪的led上依次循环显示16进制数1,2,,f,每隔1秒,更新显示一个数字(将arm4_1.c 写在预习报告上)。2. 使用定时器Timer5,设定44B0定时器Timer5工作在中断方式,在Micetek板的led上依次循环显示10进制数0,, 8, 9;每隔1秒,更新显示一个数字(将arm4_2.c 写在预习报告上)。3. 基本接口初始化及定时器实验。阅读44blib.c,了解s3c44b0x基本接口的初始化及定时器实验。三、预备知识1. 3c44b0x处理器的timer定时器工作原理及使用方法。2. 3c44b0x处理器基本接口初始化方法3. C语言编程能力。四、实验设备及工具(包括软件调试工具) 硬件:Micetek 44B0 实验系统,PowerProbe JTAG仿真器,PC机 Pentumn100以上 软件:PC机操作系统win98、win2000、winXP,JediView集成开发环境 五、实验步骤 1. 使用定时器Timer5,设定44B0定时器Timer5工作在查询方式,在实验仪的led上依次循环显示16进制数。建立子目录arm4_1,将44binit.s和arm4_1.c拷贝到该目录。在JEDIView下, 建立工程arm4_1,并加入2个源文件,编译;加载目标文件,运行。观察板上led 显示的数字、以及每个数字显示时间。修改源程序,实现每隔两秒更新一次显示、每隔0.5秒更新一次显示。2. 使用定时器Timer5,设定44B0定时器Timer5工作在中断方式,在实验仪的led上依次循环显示10进制数。建立子目录arm4_2,将44binit.s和arm4_2.c拷贝到该目录。在JEDIView下, 建立工程arm4_2 并加入2个源文件,编译,下载,复位,运行。观察实验仪上led 显示的十进制数字顺序、每个数字显示时间。3.了解板上基本接口的初始化。建立子目录arm4_3,将timer.c,test.c,44blib.c,44binit.s拷贝到该目录下。 建立工程arm4_3,将timer.c,test.c,44blib.c,44binit.s加入到该工程,编译,下载,打开超级终端,建立通信连接;复位,在test.c 中的Port_Init()处设置断点;全速执行程序,在断点处停下来后,跟踪进44blib.c的函数Port_Init(),单步跟踪执行,了解复位初始化(44binit.s)之后,对接口的初始化(Port_Init()),调用函数Port_Init()之后,再全速执行程序,观察超级终端提示及实验仪上数码管显示。六、参考程序/*arm4_1.c Timer 实验(查询方式) 在led上循环显示 0, . f,间隔时间: 1s.*/#include #include .incoption.h#include .inc44b.h#include .inc44blib.h#include .incdef.h#include .inctimer.h/*Timer5 初始化入口参数:Timing_count=定时时间常数,定时时间=定时时间常数*0.02 ms T5_int_Enable=1,T5 中断方式,T5_int_Enable=0,T5 查询方式*/ void Timer_Init(U16 timing_count,U8 T5_int_Enable)rINTMSK=BIT_GLOBAL|BIT_TIMER5; rTCFG0=0X0c70101;/prescaler=199 rTCFG0=0X010101;prescaler=1rTCFG1=0X0100000; / DIV=4 rTCNTB5=timing_count;/rTCMPB5=(timing_count/2); havnt rTCMPB5! but T0-T4 have.rTCON=0X2000000;rTCON=0X5000000;if(T5_int_Enable) rINTCON=0X05;rINTMOD=0X0;rINTMSK=(BIT_GLOBAL|BIT_TIMER5);void Led_Display(unsigned char data) /略,在arm1_1.c 中已给出。 /*在led上循环显示 0, . f,间隔时间: 1s.*/void main(void) U8 i; while(1) for(i=0; i16; i+) Timer_Init(50000,0);/定时常数=50000,查询方式,延时时间=1swhile(rTCNTO5); /查询,到 1s? 等待。Led_Display(i);/显示 i (i=0,1, . ,f.) 实验五 LCD显示实验一、实验目的1. 了解S3C44B0X处理器的LCD控制器的工作原理和使用方法。2. 通过实验掌握液晶显示程序设计方法。二、实验内容 1. 学习对LCD控制器编程方法,实现在LCD上显示图片、汉字、ASCII字符、数字、变量、常量等的方法。(预习:1.学习教材中有关S3C44B0X LCD控制器存器的工作原理,LCD控制寄存器的特殊功能寄存器各位的定义;2.读懂实验参考程序:44btest.c, 44blcd.c中的几个函数:Lcd_Init(),clrscreen(),Bmp1_320_240_C256.c, 和几个头文件lcdlib.h,44blcd.h中与之相关的定义)。 2. 独立编写程序arm5_2.c 实现在LCD上显示一幅人机交互(包含:汉字字符,英文字符,数字变量和常量)界面(将arm5_2.c写在预习报告上)。三、预备知识1.ARM处理器JEDIView 调试环境的使用方法。2.S3C44B0X 的LCD控制器工作原理,S3C44B0XD LCD控制寄存器特殊功能寄存器的定义。3.C语言编程能力。四、实验设备及工具(包括软件调试工具) 硬件:Micetek 44B0 实验系统,PowerProbe JTAG仿真器,PC机 Pentumn100以上 软件:PC机操作系统win98、win2000、winXP,JediView集成开发环境 五、实验步骤 1. 学习对LCD控制器编程方法新建目录arm5_1, 将44binit.s,44btest.c,44blib.c和44blcd.c拷贝到该目录下。建立工程arm5_1,包含该4个文件,编译、下载、运行该工程,在LCD上观察执行结果。2. 独立设计并在LCD上显示一幅人机交互界面读懂实验参考程序,在arm5_1基础上,新建工程arm5_2,实现在LCD上显示一幅自行设计的人机交互界面(包含:汉字字符,英文字母、数字变量和常量)。六、参考程序及函数参考程序见44btest.c,44blcd.c中的函数Lcd_Init(),clrscreen(),DisStr8*16(),DisStrhzk(),Bmp1_320_240_C256.c等。/* 44btest.c 中的主函数 */int main(void)char mystring200;char *p_char6;char welcome=Welcome to Hrbust LCD world!n;/*初始化*/ rSYSCFG=SYSCFG_8KB; Isr_Init(); Port_Init(); Uart_Init(0,115200); LcdInit(); /to avoid LCD damage. Uart_Select(0); rPDATB =rPDATB|0x400; / Delay(1); /calibrate Delay() while(1) Lcd_C256_Bmp( 0, 0, 320, 240, acBmp3_320_240_C256 ) ; Delay(2000); Lcd_C256_Bmp( 0, 0, 320, 240, acBmp2_320_240_C256 ) ; Delay(2000

温馨提示

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

评论

0/150

提交评论