实验四 LED跑马灯

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四
一、实验目的: 实验目的:
LED 跑 马 灯 实 验
1、掌握 S3C2410 处理器与 LED 指示灯的电路原理。

2、掌握 linux 驱动对 S3C2410 GPIO 的控制原理及使用方法。


二、实验设备: 实验设备:
FS2410 开发板、学生自带笔记本、USB 转串口线、电源、网线。


三、 实验地点及时间 实验地点及时间 地点:A2-303a 地点: 时间:教学周第八周 时间:教学周第八 四、实验内容: 实验内容:
1、在 ARM 开发板上面,在驱动程序中利用 linux 定义的 GPIO F 口编写对应管脚电平 控制程序,并进行测试验证所学内容。

2、在 ARM 开发板上面,在上面程序的基础上采用动态 IO 映射的方法,编写程序,并 进行测试验证所学内容。

3、在 ARM 开发板上面,在驱动程序中利用内核定时器,编写程序,并进行测试验证 insmod module 后 LED 跑 2 圈的结果。

4、在 ARM 开发板上面,利用 2 的驱动程序,编写应用程序测试验证 LED 跑马灯的结 果。


五、实验原理: 实验原理:
1、GPIO 端口原理 端口原理
S3C2410X 有 117 个输入/输出端口,这些端口都具有多功能,通过引脚配置寄存器, 可以将其设置为所需要的功能,如:I/O 功能、中断功能等等。

大多数采用 S3C2410 的典型 LED 指示灯电路设计基本都使用 F 口(GPF 共 8 个输入/输出口)作为其控制端口。

端口寄存器及引脚配置 每一个端口都有 4 个寄存器,它们是:引脚配置寄存器、数据寄存器、引脚上拉寄存 器等。




Register GPXCON GPXDAT GPXUP RESERVED
Address 0x560000x0 0x560000x4 0x560000x8 0x560000xC
R/W R/W R/W R/W R/W
Description 端口 X 配置寄存器 端口 X 数据寄存器 端口 X 上拉寄存器 端口 X 保留寄存器
Reset Value X X X -
端口 F 引脚配置寄存器 GPFCON 0x56000050 位 位号 位 名 00 15,14 13,12 11,10 9,8 7,6 5,4 3,2 1,0 GPF7 GPF6 GPF5 GPF4 GPF3 GPF2 GPF1 GPF0 输入 输入 输入 输入 输入 输入 输入 输入 01 输出 输出 输出 输出 输出 输出 输出 输出 10 EINT7 EINT6 EINT5 EINT4 EINT3 EINT2 EINT1 EINT0 11 保留 保留 保留 保留 保留 保留 保留 保留 值
端口 F 数据寄存器 GPFDAT 0x56000054 为准备输出或输入的数据,其值为 8 位[7:0]。

端口 F 上拉寄存器 GPFUP 0x56000058 端口 F 上拉寄存器,位[7:0]有意义。

0:对应引脚设置为上拉 1:无上拉功能
初始化时,各个引脚都有上拉功能。




2、LED 指示灯电路原理图
从上述原理图可以清楚地看出, 通过控制 GPF4—GPF7 管脚的电平就可以点亮或熄灭对 应发光二极管。


3、linux 驱动 GPIO 原理
动态映射(map_desc)方式 态映射 方式
对 I/O 内存的操作需按如下步骤完成: i. 申请
struct resource *request_mem_region(unsigned long start, unsigned long len, char *name) ii. 映射
void *ioremap(unsigned long phys_addr, unsigned long size) iii. 访问
unsigned ioread8(void *addr) void iowrite8(u8 value, void *addr) iv. 释放
void iounmap(void * addr)


example: 定义 #define S3C2410_PA_IIS 映射 our_card->regs = ioremap(S3C2410_PA_IIS, 0x100); 访问 readl(our_card->regs ) writel(value, our_card->regs) (0x55000000)
静态映射(map_desc)方式 方式—linux 内核已经定义好了 (讲解的例子就是采 静态映射 方式 用这种方式) 用这种方式)
通过 map_desc 结构体静态创建 I/O 资源映射表 动态映射, 内核或驱动中访问该 I/O 资源时则无需再进行 ioreamp 动态映射,可以直接通过映射 虚拟地址去访问. 后的 I/O 虚拟地址去访问 /* include/asm-arm/mach/map.h */
struct map_desc { unsigned long virtual; /* 映射后的虚拟地址 */ unsigned long pfn; /* I/O 资源物理地址所在的页帧号 */ unsigned long length; /* I/O 资源长度 */ unsigned int type; /* I/O 资源类型 */
};
static struct map_desc s3c2410_iodesc[ ] __initdata = { { .virtual = (unsigned long)(S3C24XX_VA_ LCD), .pfn = __phys_to_pfn(S3C24XX_PA_ LCD), .length = S3C24XX_SZ_ LCD, .type = MT_DEVICE }, …… };
在这里 map_desc 结构体的 virtual 成员被初始化为 S3C24XX_VA_ LCD,pfn 成员值通过 __phys_to_pfn 内核函数计算,只需要传递给它该 I/O 资源的物理地址就行。

Length 为映射 资源的大小。

MT_DEVICE 为 I/O 类型,通常定义为 MT_DEVICE。

这里最重要的即 virtual 成员的值 S3C24XX_VA_ LCD,这个值即该 I/O 资源映射后的内核虚 拟地址, 创建映射表成功后, 便可以在内核或驱动中直接通过该虚拟地址访问这个 I/O 资源。




六、实验步骤(根据实验内容 4 部分) 实验步骤( 部分) 编写带有解决管脚电平输出功能模块驱动及相应 makefile 文件,下载到开发板 编写带有解决管脚电平输出功能模块驱动及相应 带有解决管脚电平输出功能模块驱动 文件, 运行。

运行。

编写带有解决跑马灯功能应用验证程序文件,下载到开发板运行。

编写带有解决跑马灯功能应用验证程序文件,下载到开发板运行。

带有解决跑马灯功能应用验证程序文件 七、实验结果 将实验代码及过程中结果写到实验报告上面《详见实验报告模板》。

将实验代码及过程中结果写到实验报告上面《详见实验报告模板》。













相关文档
最新文档