非操作系统下的实验嵌入式实验报告.docx
《非操作系统下的实验嵌入式实验报告.docx》由会员分享,可在线阅读,更多相关《非操作系统下的实验嵌入式实验报告.docx(46页珍藏版)》请在冰豆网上搜索。
非操作系统下的实验嵌入式实验报告
HarbinInstituteofTechnology
实验报告
课程名称:
嵌入式系统
院系:
电信学院
班级:
1105301
姓名:
张常乐
学号:
1110530110
指导教师:
任广辉
实验时间:
2014年12月
哈尔滨工业大学
第二章非操作系统下的实验
2.2GPIO接口实验
2.2.1实验目的
1.熟悉ADS软件的使用
2.熟悉程序的下载和调试流程
3.熟悉GPIO的操作
2.2.2实验原理
1)GPIO的原理及寄存器操作
GPIO(GeneralPurposeI/O,通用输入/输出接口)也称为并行I/O(parallelI/O),是最基本的I/O形式,由一组输入引脚、输出引脚或输入/输出引脚组成,CPU对它们能够进行存取操作。
GPIO引脚能够通过软件编程改变输入/输出方向。
S3C2440A共有130个多功能复用输入/输出端口(I/O口),分为端口A~端口J共9组。
端口A除了作为功能口外,只能够作为输出口使用,其他端口都可以为输入/输出端口。
为了满足不同系统设计的需要,每个I/O口可以很容易地通过软件对进行配置。
每个引脚的功能必须在启动主程序之前进行定义。
如果一个引脚没有使用复用功能,那么它可以配置为I/O口。
与配置I/O口相关的寄存器包括:
◆端口控制寄存器(GPACON~GPJCON)
◆端口数据寄存器(GPADAT~GPJDAT)
◆端口上拉寄存器(GPBUP~GPJUP)
以端口B为例,说明端口寄存器的配置方式,端口B的寄存器如下所示:
端口B控制寄存器:
端口B数据寄存器:
端口B上拉电阻寄存器:
2).LED硬件接口电路
LED的硬件接口电路如图2-1所示,LED与ARM的GPB端口连接,需要使用的寄存器有:
3).蜂鸣器硬件接口电路
蜂鸣器的硬件接口如图2-2所示,其与ARM的GPB端口的第0位GPB0连接,对其操作涉及的寄存器有
4)按键硬件接口电路
按键硬件接口如图2-3所示,其采用的上拉的形式,按键没有按下则管脚的电平为高电平,当按键按下后,管脚电平为低电平。
四个按键分别跟ARM的GPF口的第0、1、2和4位连接,对其操作涉及的寄存器有:
2.2.3实验仪器与设备
1.TQ2440实验平台
2.J-LINK调试器
2.2.4实验步骤
1.实现控制LED开启关闭功能
(1)单步调试例程,也可以双击程序中的某一行添加断点,则全速运行后程序会停在断点处。
并且在调试过程中观察LED的变化。
写出控制LED开启和关闭的程序语句和对应LED的状态,填入下表当中
序号
程序
现象
1
rGPFDAT=rGPFDAT&(~(1<<0));//PORTB[0]为低电平
LED0点亮
2
rGPFDAT=rGPFDAT|(1<<0);//PORTB[0]为高电平
LED0熄灭
(2)例程中实现的是对一个LED的控制,修改例程,写出一个对所有LED控制的通用函数,该函数的参数有两个:
LED的号码和LED的开关状态。
写出该函数并且写出调用该函数控制4个LED状态的语句和对应现象,填入下表中:
序号
程序
现象
1
rGPFDAT&=~((1<<0)|(1<<1)|(1<<2)|(1<<3));//PORTB[0至3]为低电平
LED0~LED3全部点亮
2
rGPFDAT|=((1<<0)|(1<<1)|(1<<2)|(1<<3));//PORTB[0至3]为高电平
LED0~LED3全部熄灭
3
rGPFDAT&=~((1<<0)|(1<<1)|(1<<2)|(1<<3));//PORTB[0至3]为低电平
delay(20);
rGPFDAT|=((1<<0)|(1<<1)|(1<<2)|(1<<3));//PORTB[0至3]为高电平
delay(20);
LED0~LED3循环点亮熄灭
2.实现流水灯功能
(1)利用上面编写的通用的LED控制函数,实现LED依次亮灭的过程(流水灯),把流水灯控制的语句填入下表中并描述LED的变化
序号
程序
现象
1
rGPFDAT&=~((1<<0));//PORTB[0]为低电平
delay(20);
rGPFDAT|=((1<<0));//PORTB[0]为高电平
delay(20);
rGPFDAT&=~((1<<1));//PORTB[1]为低电平
delay(20);
rGPFDAT|=((1<<1));//PORTB[1]为高电平
delay(20);
rGPFDAT&=~((1<<2));//PORTB[2]为低电平
delay(20);
rGPFDAT|=((1<<2));//PORTB[2]为高电平
delay(20);
rGPFDAT&=~((1<<3));//PORTB[3]为低电平
delay(20);
rGPFDAT|=((1<<3));//PORTB[3]为高电平
delay(20);
LED0~LED3循环点亮熄灭实现流水灯功能
3.实现控制蜂鸣器功能
(1)跟LED的控制类似,蜂鸣器的控制也是通过控制IO输出电平来控制的。
蜂鸣器使用的是GPB0,只需要对该端口操作即可
(2)写出控制蜂鸣器鸣叫和静音的语句,并把实验现象填入下表当中
序号
程序
现象
1
rGPBDAT=rGPBDAT&(~(1<<0));//PORTB[0]为低电平
delay(10);
rGPBDAT=rGPBDAT|(1<<0);//PORTB[0]为高电平
delay(10);
TX实验板上的蜂鸣器实现鸣叫和静音循环
4.实现按键控制LED功能
(1)写出查询按健状态函数,并根据不同的按键控制不同的LED亮
(2)按键使用的是IO口是GPF0、GPF1、GPF2和GPF4。
需要将其配置为输入的模式,然后读取数据寄存器即可
(3)把按键检测的程序段和对应的现象写入下表中
序号
程序
现象
1
For(j=0;j<4;j++)
{
If((rGPFDAT&=(1<{
rGPFDAT&=~((1<<0));
}
Else
{
rGPFDAT|=((1<<0));
}
}
程序循环监测4个按键,当按下1~4对应的按键后1~4的LED对应点亮,松开后便熄灭
2.2.5实验思考题
从程序编写的角度,比较51单片机和SC32440的IO操作的不同之处
答:
51单片机可以单独对1bit的位进行操作,而SC32440必须一次性对整个IO口进行操作。
2.3中断实验
2.3.1实验目的
1.熟悉ARM的中断操作
2.掌握按键检测的方法
2.3.2实验原理
1).中断的原理和相关寄存器
S3C2440A中的中断控制器可以从60个中断源接收中断请求。
这些中断源由内部外设提供,例如DMA控制器、UART、IIC等。
当接收来自内部外设和外部中断请求引脚的多个中断请求时,在仲裁过程后中断控制器请求ARM920T的FIR或IRQ中断。
S3C2440A中与中断相关的寄存器有:
◆中断源挂起寄存器(SRCPND)
◆中断挂起寄存器(INTPND)
◆中断模式寄存器(INTMOD)
◆中断屏蔽寄存器(INTMSK)
◆中断优先级寄存器(PRIORITY)
S3C2440A中的外部中断在上述中断寄存器的基础上增加了以下寄存器:
◆外部中断控制寄存器(EXTINT0~2)
◆外部中断滤波寄存器(EINTFLT0~3)
◆外部中断屏蔽寄存器(EINTMASK)
◆外部中断挂起寄存器(EINTPEND)
本次实验采用了外部中断EINT0、EINT1、EINT2和EINT4。
下面分析相关寄存器的意义:
中断源挂起寄存器(SRCPND)
该寄存器标志哪个中断源产生中断请求,产生中断请求但未必响应,该寄存器不受中断屏蔽和优先级的影响。
中断处理函数需要将其清零以免重复触发。
下表列出了SRCPND中部分位的意义
中断挂起寄存器(INTPND)
该寄存器标志中断源挂起寄存器(SRCPND)中非屏蔽的且优先级最高的中断,只有一位被标志,该中断将产生IRQ。
中断处理函数中应该将其清零以防止重复触发。
下表列出了INTPND中部分位的意义。
中断模式寄存器(INTMOD)
用于选择中断源属于FIQ还是IRQ,只有一个中断源能够配置为FIQ。
下表列出了INTMOD中部分位的意义。
中断屏蔽寄存器(INTMSK)
该寄存器用于用于屏蔽某些中断。
若某被屏蔽的中断产生了,中断源挂起寄存器(SRCPND)相应的位仍然会被置1,但中断挂起寄存器(INTPND)相应的位不会被置1,该中断也不会被处理。
下表列出了INTMSK中部分位的意义。
外部中断控制寄存器(EXTINT0~2)
外部中断控制寄存器(EXTINT0~2)主要用于配置外部中断的触发方式,触发方式有:
低电平触发、高电平触发、下降沿触发、上升沿触发、双边触发。
下表列出了EXTINT0的部分位的意义。
外部中断屏蔽寄存器(EINTMASK)
外部中断屏蔽寄存器(EINTMASK)用于屏蔽某些外部中断,当其中的位为1时,表示屏蔽对应的中断源。
其部分位的意义如下表所示,本实验只用到其第4位:
外部中断挂起寄存器(EINTPEND)
外部中断挂起寄存器(EINTPEND)用于标志产生中断请求的外部中断源,其各位的意义如下所示。
2.3.3实验仪器与设备
1.TQ2440实验平台
2.J-LINK调试器
2.3.4实验步骤
1.打开实验代码文件夹中的irq_test子文件夹中的工程irq_test.mcp工程
2.阅读代码,单步执行,体会voidKeyScan_Test(void)函数里面对中断相关寄存器的设置方法和意义,了解中断服务函数staticvoid__irqKey_ISR(void)中对相关寄存器的设置方法
3.注意:
要进入中断服务函数,必须全速执行程序,不能单步执行。
因此,可以在中断服务函数staticvoid__irqKey_ISR(void)添加一个断点,然后点击
全速执行程序。
当按下按键后,程序就会停在断点处
4.例程中只给出外部中断0和外部中断4的程序,只能实现对按键K2和K4的检测,仿照对外部中断0的配置,完成对按键K1和K3的检测,写出对外部中断1和2的配置代码还有对LED的控制程序,并进行调试,把代码和现象列入下表中
序号
程序
现象
1
if(rINTPND==BIT_EINT1)
{ClearPending(BIT_EINT1);
}
if(rINTPND==BIT_EINT2)
{ClearPending(BIT_EINT2);
}
检测按键中断并清除相应中断挂起位
2
if((rGPFDAT&(1<<1))==0)
{LED_Control(1,ON);
Delay(1000);
LED_Control(1,OFF);
}
LED1亮1s后熄灭
3
if((rGPFDAT&(1<<2))==0)
{LED_Control(3,ON);
Delay(1000);
LED_Control(4,OFF);
}
LED3亮1s后熄灭
2.3.5实验思考题
比较实验2.2和实验2.3,要