IO接口控制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验目的
熟悉ARM芯片I/O口编程配置方法。
通过实验掌握ARM芯片的I/O口控制LED显示的方法。
二、实验原理及基本技术路线图(方框原理图)
S3C44B0X芯片上共有71个多功能的输入输出管脚,它们分为7组I/O端口。
●两个9位的输入/输出端口(端口E和F)
●两个8位的输入/输出端口(端口D和G)
●一个16位的输入/输出端口(端口C)
●一个10位的输出端口(端口A)
●一个11位的输出端口(端口B)
每组端口都可以通过软件配置寄存器来满足不同系统和设计的需要。在运行主程序之前,必须先对每一个用到的管脚的功能进行设置,如果某些管脚的复用功能没有使用,可以先将该管脚设置为I/O口。
1.S3C44B0X芯片和端口相关的寄存器有:
(1) 端口控制寄存器(PCONA-G)
在S3C44B0X里,大多数的引脚都是多功能引脚。因此,应当为每个引脚选择功能。端口控制寄存器(PCONn)决定了每一个引脚的功能。
(2) 端口数据寄存器(PDATA-G)
如果这些端口被设定为输出端口,输出数据可以被写入到PDATn的相应的位;如果被设定为输入端口,输入数据可以被读到PDATn的相应的位。
(3) 端口上拉寄存器(PUPC-G)
端口上拉寄存器控制着每一个端口组的上拉寄存器的使能端。当相应的位被设为0时,引脚接上拉电阻;当相应的位为1时,引脚不接上拉电阻。
(4) 外部中断控制寄存器(EXTINT)
8个外部中断可以用多种信号方式所请求。外部中断寄存器为外部中断设置了信号触发方法选择位,也设置了触发信号的极性选择位。外部中断请求信号触发的方法有以下几种:低电平触发、高电平触发、下降沿触发、上升沿触发、双沿触发。
8个外部中断寄存器的具体设置情况请详见I/O的特殊功能寄存器。
因为每个外部中断引脚都有一个数字滤波器,这让中断控制器能够识别长于3个时钟周期的请求信号。
在实验板上端口B的引脚PB9和PB10被设置为输出口,并且分别与LED1、LED2连接。
2.电路原理
如图3-3所示,发光二极管LED1和LED2的正极与S3C44B0X芯片的47脚VDD33连接,VDD33可以输出3.3V的电压,负极通过限流电阻R95、R96和S3C44B0X芯片的23脚(NGCS4)、24(NGCS5)脚连接。这两个管脚属于端口B,已经配置为输出口。通过向PDATB寄存器中相应的位写入0或1可以使管脚23、24输出低电平或高电平。当23、24管脚输出低电平时,LED点亮;当23、24管脚输出高电平时,LED熄灭。
三、所用仪器、材料(设备名称、型号、规格等)
Embest S3CEV40实验板
ARM软件模拟器
Microsoft XP 操作系统
PC机
四、实验方法、步骤
1. 准备实验环境。使用Embest仿真器连接目标板,使用Embest S3CEV40实验板附带的串口线连接实验板上的UART0和PC机的串口。
2. 在PC机上运行windows自带的超级终端串口通信程序(波特率115200、1个停止位、无校验位、无硬件流控制);或者使用其它串口通信程序。
3. 使用EmbestIDE通过Embest仿真器连接实验板,新建工程,编译链接通过后连接目标板,下载并运行。
4. 观察实验运行。
五、实验记录
实验源代码如下。
Main :
0x0c001a90 mov ip, sp
0x0c001a94 stmdb sp!, {fp, ip, lr, pc}
0x0c001a98 sub fp, ip, #4
0x0c001a9c bl 0xc00162c
0x0c001aa0 ldr r0, [pc, #8] ; 0xc001ab0
0x0c001aa4 bl 0xc0014c0
0x0c001aa8 bl 0xc0016bc
0x0c001aac b 0xc001aa8
0x0c001ab0 stceq 4, cr10, [r0], -#384
uhal_init_interrupts :
main :
0x0c001a70 mov ip, sp
0x0c001a74 stmdb sp!, {fp, ip, lr, pc}
0x0c001a78 sub fp, ip, #4
0x0c001a7c bl 0xc00162c
0x0c001a80 ldr r0, [pc, #8] ; 0xc001a90
0x0c001a84 bl 0xc0014c0
0x0c001a88 bl 0xc0016bc
0x0c001a8c b 0xc001a88
0x0c001a90 stceq 4, cr10, [r0], -#256
void led_test()
{
leds_off();
delay(3000);
// 1 on -> 2 on -> all on -> 2 off -> 1 off
led1_on();
led2_off();
delay(3000);
led1_off();
led2_on();
delay(3000);
led1_on();
led2_on();
delay(3000);
}
六、实验运行结果
通过观察,运行程序一,得到以下实验结果。
程序一:灯1亮→灯3亮→灯3灭→灯1亮→灯1灭
通过修改程序一,观察得到以下结果。
程序二:灯1、灯2 灭→灯1亮,灯2灭→灯1灭,灯2亮→灯1、灯2亮
七、实验体会
在本次实验中我熟悉ARM芯片I/O口编程配置方法,工程配置信息里边远程选项要用PowerIceArm7。也了解了能够通过ARM芯片的I/O口控制LED显示的方法。高低电平表示了二进制数,通过高低电平测试我们的实验结果是一个很好的办法。