根据《基于仿真器调试S5P4418-基础实验指导书》4.1节的要求,实验目标是控制板载的4个GPIO LED(分别连接至 GPIOC1、GPIOA30、GPIOB0、GPIOB6)实现轮流闪亮。以下给出完整的工程源码、实验步骤说明及预期结果。
实验4.1:基于 S5P4418 接口-GPIO LED 实验
1. 实验目的
- 熟悉 Eclipse 开发环境与 ARM 裸机编程。
- 掌握 S5P4418 GPIO 的输出控制方法。
2. 实验内容
编写程序控制实验箱上的 4 个 LED (D7~D10)依次循环点亮,形成流水灯效果。
3. 硬件连接与原理
-
LED与GPIO映射
LED 标号 GPIO D7 GPIOC1 GPIOC1 D8 MCU_CAM1_D0 GPIOA30 D9 MCU_CAM1_D1 GPIOB0 D10 MCU_CAM1_D4 GPIOB6 -
控制方法
- 关闭对应 GPIO 的复用功能,将其设为 GPIO 模式。
- 配置 GPIOxOUTENB 寄存器的对应位为 1,设为输出模式。
- 向 GPIOxOUT 寄存器的对应位写 1 输出高电平(LED亮),写 0 输出低电平(LED灭)。
4. 实验步骤概要
- 打开 VMware 中的 Windows 7 虚拟机,启动 Eclipse。
- 导入已有的工程
Intl_gpioleds(或新建工程,加入必要的启动文件、链接脚本等)。 - 编译工程:右键工程名 → Build Project ,生成
Intl_gpioleds.elf。 - 配置调试参数:将拨码开关 SW3 设为
001(仿真器裸机调试模式),连接仿真器,打开实验箱电源,启动 Server 并连接。 - 在 Eclipse 中进入 Debug Configurations ,选择 Zyin Embedded debug (Native),点击 Debug 按钮。
- 程序下载运行后,观察开发板上 LED 的轮流闪亮现象。
5. 完整源代码(main.c)
c
#include "s5p4418.h"
// 简易延时函数(毫秒)
void delay_ms(int ms)
{
int i, j;
while (ms--) {
for (i = 0; i < 5; i++)
for (j = 0; j < 514; j++)
;
}
}
int main(void)
{
// 1. 配置 GPIO 为输出模式
GPIOC.OUTENB |= (0x1 << 1); // GPIOC1 (LED D7)
GPIOA.OUTENB |= (0x1 << 30); // GPIOA30 (LED D8)
GPIOB.OUTENB |= (0x1 << 0); // GPIOB0 (LED D9)
GPIOB.OUTENB |= (0x1 << 6); // GPIOB6 (LED D10)
while (1) {
// 全部熄灭
GPIOC.OUT &= ~(0x1 << 1);
GPIOA.OUT &= ~(0x1 << 30);
GPIOB.OUT &= ~(0x1 << 0);
GPIOB.OUT &= ~(0x1 << 6);
delay_ms(500);
// 点亮 LED D7 (GPIOC1)
GPIOC.OUT |= (0x1 << 1);
delay_ms(500);
GPIOC.OUT &= ~(0x1 << 1);
// 点亮 LED D8 (GPIOA30)
GPIOA.OUT |= (0x1 << 30);
delay_ms(500);
GPIOA.OUT &= ~(0x1 << 30);
// 点亮 LED D9 (GPIOB0)
GPIOB.OUT |= (0x1 << 0);
delay_ms(500);
GPIOB.OUT &= ~(0x1 << 0);
// 点亮 LED D10 (GPIOB6)
GPIOB.OUT |= (0x1 << 6);
delay_ms(500);
GPIOB.OUT &= ~(0x1 << 6);
}
return 0;
}
6. 预期实验结果
- 开发板上的 LED D7、D8、D9、D10 依次循环点亮(每个亮约 500ms),形成流水灯效果。
7. 注意事项
- 实验中需确保 Jtag 仿真器已正确连接,虚拟机能识别仿真器。
- 编译前检查工程包含
start.S、s5p4418.init、map.lds、Makefile等必要文件,且Makefile中的NAME需与工程名一致。 - 每次切换工程时,先关闭当前工程再导入新工程,避免编译冲突。
通过以上步骤和代码,即可完成实验 4.1,观察到 GPIO LED 的轮流闪亮。