博客
关于我
Exynos 4412处理器流水灯LED实现代码及过程详解
阅读量:561 次
发布时间:2019-03-09

本文共 1695 字,大约阅读时间需要 5 分钟。

pletion of the ARM开发板的实验工作。这篇文章将从芯片结构入手,解析如何通过软件控制四个LED的亮灭状态,并最终实现LED显示器的动态画面展示。

第一部分:芯片结构与接法

本次实验采用的是标准的ARM板,他们都是通过GPX2/3等芯片扩展接口进行控制。首先需要理解每个LED对应的管脚定义和驱动电路逻辑。通过观察 chipset手册,确认了:

  • LED2:GPX2_7管脚
  • LED3:GPX1_0管脚
  • LED4:GPF3_4管脚
  • LED5:GPF3_5管脚

所有管脚默认为输出低电平模式。当某些信号线设置为高电平时,会形成电位差,使LED灯泽亮。

第二部分:寄存器配置

通过对芯片手册的深入分析,可以发现每个LED对应的控制寄存器和数据寄存器的具体配置地址:

控制寄存器

  • LED2:GPX2CON位于0x1100 0c40,有效位为[31:28]
  • LED3:GPX1CON位于0x1100 0c20,有效位为[3:0]
  • LED4:GPF3ON位于0x1140 01e0,有效位为[19:16]
  • LED5:同样由GPF3ON控制,有效位为[23:20]

以上寄存器均用于设置对应管脚的驱动模式。具体操作步骤为:

  • 将对应位初始化为输入模式(如LED2的GPX2_7设置为0x0)
  • 或者直接设置为输出模式(如LED3的GPX1_0设置为0x1)
  • 这些操作需要通过DDRAM内存一次性写入/写出完成,并启用对应的数据寄存器。

    数据寄存器

    对应的数据寄存器地址分别为:

    • LED2:GPX2DAT @ 0x1100 0c44
    • LED3:GPX1DAT @ 0x1100 0c24
    • LED4/5:GPF3DAT @ 0x1140 01e4

    数据寄存器用于存储每个LED对应的电平模式:

    • 设置位为1时,输出高电平(LED开启)
    • 设置位为0时,输出低电平(LED熄灭)

    第三部分:代码实现

    在Linux系统中,通过编写start.S文件实现对LED的控制。代码主要包含以下几个部分:

    // 初始化 LED2ldr r0, =0x11000c40ldr r1, [r0]bic r1, #0xf0000000orr r1, #0x10000000str r1, [r0]// 初始化 LED3ldr r0, =0x11000c20ldr r1, [r0]bic r1, #0xforr r1, #0x1str r1, [r0]...// LED循环控制loop:ldr r0, =0x11000c44ldr r1, [r0]orr r1, #0x80str r1, [r0]bl delayldr r1, [r0]bic r1, #0x80str r1, [r0]bl delay

    这样的代码实现了对所有LED的逐个控制。同时,通过延时函数(bl delay)确保人眼能观察到LED的状态变化。

    第四部分:编译与烧录

    通过Makefile完成编译和烧录流程:

    all:    arm-none-linux-gnueabi-gcc start.S -o start.o -c -g    arm-none-linux-gnueabi-ld -Ttext 0x40008000 start.o -o start.elf    arm-none-linux-gnueabi-objcopy -O binary start.elf start.bin    cp start.bin /mnt/hgfs/Unbantu_file

    完成编译后,需要将生成的start.elf文件烧录到ARM开发板中,并将start.bin文件复制到指定路径。

    第五部分:使用与测试

    通过超级终端执行以下命令完成LED控制:

    go 40008000

    此时,开发板上的四个LED将开始按顺序轮流闪烁,形成一个动态的显示效果。整个开发过程验证了ARM平台上LED显示器的控制方法,标志着本次开发任务的圆满完成。

    这篇文章通过详细的分析和实践,展示了如何在ARM开发平台上实现基本的LED控制功能,并为后续的开发奠定了良好的基础。

    转载地址:http://gqisz.baihongyu.com/

    你可能感兴趣的文章
    PHP数据文件过大,导致PHP加速器eaccelerator在PHP5.2版本下崩溃
    查看>>
    RabbitMQ - 死信、TTL原理、延迟队列安装和配置
    查看>>
    PHP数据访问的多重查询(租房子查询)
    查看>>
    RabbitMQ - 如保证消息的可靠性?(消息确认、消息持久化、失败重试机制)
    查看>>
    RabbitMQ - 基于 SpringAMQP 带你实现五种消息队列模型
    查看>>
    php数组函数分析--array_column
    查看>>
    php数组去重复数据的小例子
    查看>>
    php数组实现:哈希 +双向链表
    查看>>
    PHP数组排序函数array_multisort()函数详解(二)
    查看>>
    php数组的几个函数和超全局变量
    查看>>
    PHP文件上传详解
    查看>>
    PHP文件锁
    查看>>
    php文本框输入制定文本,php – 当用户没有向文本框输入任何内容时...
    查看>>
    PHP时间戳和日期相互转换操作总结
    查看>>
    php时间戳知识点,php 时间戳函数总结与示例
    查看>>
    php更新数据库失败,php – 无法更新MySQL数据库
    查看>>
    php机器人聊天对话框,基于AIML的PHP聊天机器人
    查看>>
    PHP查找数组中最大值与最小值
    查看>>
    php查最大值,在PHP数组中查找最大值
    查看>>
    php标签筛选,关于PHP CodeIgniter框架中通过<a>标签和url做多条件分类筛选
    查看>>