您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 电子科技大学微机实验报告-实验2
实验二ARM汇编控制LED实验【实验目的】1、理解掌握通过ARM汇编控制硬件操作;2、熟练使用ARM调试软件RVDS进行硬件调试。【实验内容】1、掌握ARM处理器GPIO相关寄存器的使用;2、用ARM汇编实现控制开发LED按照一定方式点亮。【预备知识】1、ARM汇编基础2、ARM处理器通用IO口的操作【实验设备和工具】软件:Windows操作系统,RVDS软件硬件:ARM嵌入式开发板,PC机Pentium100以上,并口线,JTAG板,JTAG连接线【实验原理】1、S3C2440处理器相关寄存器介绍PORTG控制寄存器(GPGCON)PORTG数据寄存器(GPGDAT)PORTG禁止上拉寄存器(GPGUP)注:以上寄存器详细描述见实验指导书或者S3C2440芯片手册。2、开发板LED部分原理图说明GPG5接LED4,串联上拉电阻GPG6接LED5,串联上拉电阻GPG7接LED6,串联上拉电阻GPG8接LED7,串联上拉电阻所以,当IO口输出低电平时,相应的LED才能点亮。【实验步骤】(一)LED汇编实验1、通过查看S3C2440处理器G口控制寄存器,在ledtest.s文件中添加汇编代码,设置GPG5-GPG8为output。2、在ledtest.s文件中添加汇编代码,禁止GPG5-GPG8端口的上拉电阻。3、在ledtest.s文件中添加汇编代码,点亮LED6,熄灭LED5,LED7,LED8,并调用延时。4、在ledtest.s文件中添加汇编代码,点亮LED7,熄灭LED5,LED6,LED8,并调用延时。5、在ledtest.s文件中添加汇编代码,点亮LED8,熄灭LED5,LED6,LED7,并调用延时。6、在ledtest.s文件中添加汇编代码,实现LED5-LED8依次点亮。7.连接好JTAG仿真板,一口与PC的并口相连,另一口与开发板的JTAG口相连,打开开发板电源。打开H-jtag程序,检测CPU,点击RVDS中的“Debug”,打开RVD进行硬件调试(二)LEDC语言实验(选做)【实验结果和程序】(一)LED汇编实验;GPIO寄存器宏定义GPGCONEQU0x56000060GPGDATEQU0x56000064GPGUPEQU0x56000068EXPORTLEDTESTAREALEDTESTASM,CODE,READONLY;该伪指令定义了一个代码段,段名为LEDTESTASM,属性只读ENTRYLEDTEST;设置GPG5-GPG8(即LED4--LED7)为outputldrr0,=GPGCONldrr1,[r0]movr1,#0x00015400strr1,[r0];禁止GPG5-GPG8(即LED4--LED7)端口的上拉电阻ldrr0,=GPGUPldrr1,[r0]movr1,#0x01e0strr1,[r0]looptest;将数据端口G的数据寄存器的地址附给寄存器r2ldrr2,=GPGDAT;点亮LED5,熄灭LED6-LED8,并调用延时ldrr3,[r2]orrr3,r3,#0x01e0bicr3,r3,#0x0020strr3,[r2];GPG5(即LED5)output0ldrr0,=0xffffff;初始计数值bldelay;调用延迟子程序;----------点亮LED6,熄灭LED5,LED7,LED8,并调用延时----ldrr3,[r2]orrr3,r3,#0x01e0bicr3,r3,#0x0040strr3,[r2];GPG6(即LED6)output0ldrr0,=0xffffff;初始计数值bldelay;----------点亮LED7,熄灭LED5,LED6,LED8,并调用延时----ldrr3,[r2]orrr3,r3,#0x01e0bicr3,r3,#0x0080strr3,[r2];GPG7(即LED7)output0ldrr0,=0xffffff;初始计数值bldelay;----------点亮LED8,熄灭LED5,LED6,LED7,并调用延时----ldrr3,[r2]orrr3,r3,#0x01e0bicr3,r3,#0x0100strr3,[r2];GPG8(即LED8)output0ldrr0,=0xffffff;初始计数值bldelay;-------------实现LED5-LED8依次点亮-------------------blooptestdelaysubr0,r0,#1;r0=r0-1cmpr0,#0x0;将r0的值与0相比较bnedelay;比较的结果不为0(r0不为0),继续调用delay,否则执行下一条语句movpc,lr;返回END;程序结束符(二)LEDC语言实验(选做)arm汇编部分:AREA|DATA|,CODE,READONLYENTRY;ldrr13,=0x1000IMPORTmainbmainENDC语言部分://---------------SerialExperiment--------------------//-----------ThisiscodedbyUESTCHQ20101018-------/*串口通信C程序,按‘e’退出通信*/#defineULCON0(*(volatileunsigned*)0x50000000)//UART线控制寄存器#defineUCON0(*(volatileunsigned*)0x50000004)//UART控制寄存器#defineUFCON0(*(volatileunsigned*)0x50000008)//FIFO控制寄存器#defineUMCON0(*(volatileunsigned*)0x5000000C)//AFCdisable#defineUTRSTAT0(*(volatileunsigned*)0x50000010)//UART状态寄存器#defineUBRDIV0(*(volatileunsigned*)0x50000028)//波特率#defineUTXH0(*(volatileunsigned*)0x50000020)#defineURXH0(*(volatileunsigned*)0x50000024)#defineCAMDIV0(*(volatileunsigned*)0x4C000018)#defineGPHCON(*(volatileunsigned*)0x56000070)#defineGPHDAT(*(volatileunsigned*)0x56000074)#defineGPHUP(*(volatileunsigned*)0x56000078)#defineMPLLCON(*(volatileunsigned*)0x4C000004)#defineUPLLCON(*(volatileunsigned*)0x4C000008)#defineCLKDIVN(*(volatileunsigned*)0x4C000014)#defineWTCON(*(volatileunsigned*)0x53000000)voidinitpll(){MPLLCON=0x76022;//Fin=16.9344MHz,Fout=266.72MHzCLKDIVN=0x07;//00000111}voidinituart(){ULCON0=0x03;//1位起始位,8位数据位UCON0=0x0805;//串口时钟PCLK,查询方式UFCON0=0x0;UMCON0=0x0;UBRDIV0=0x17;//波特率115200UBRDIV0=44450000/(115200*16)-1=24-1=23}voidinitgpio(){GPHCON|=0xa0;//settorxdandtxdGPHUP|=0x0f;//pullupWTCON&=0xdb;}voiduart_send(char*c){for(;*c!='\0';c++){URXH0=*c;}}unsignedcharuart_get(){}intmain(){UTXH0=URXH0;returnUTXH0;charkey='';initpll();//初始化锁相环PLLinitgpio();//初始化IO口inituart();//初始化串口uart_send(Ifyouwanttoquit,pleasepress'e'\r\n);while(1){key=uart_get();if(key=='e'){}else{uart_send(\r\nyoupressed'e'andyou'llquit!\r\n);break;uart_send(&key);}}uart_send(theprogramexitedbyuser!\r\n);return0;}【思考题】1、如何实现LED0-LED7的循环点亮。答:将GPGCON端口的值改为0x0001555,GPGUP的值改为0x01ff。再仿照led4-led7的程序写出led0-led3的点亮代码,最后循环执行即可2、一般情况下,配置通用IO口的需要哪些步骤。答:读入IO口控制寄存器地址,配置IO口的状态(读或写等)。3、ledtest.s文件的汇编程序中代码ldrr0,=0xffffff的作用是什么。答:设置延迟的时间。【实验结论】本实验通过arm对Led灯的控制,了解了S3C2440处理器端口的配置
本文标题:电子科技大学微机实验报告-实验2
链接地址:https://www.777doc.com/doc-6352501 .html