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

本文共 1722 字,大约阅读时间需要 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的控制。代码主要包含以下几个部分:

    // 初始化 LED2
    ldr r0, =0x11000c40
    ldr r1, [r0]
    bic r1, #0xf0000000
    orr r1, #0x10000000
    str r1, [r0]
    // 初始化 LED3
    ldr r0, =0x11000c20
    ldr r1, [r0]
    bic r1, #0xf
    orr r1, #0x1
    str r1, [r0]
    ...
    // LED循环控制
    loop:
    ldr r0, =0x11000c44
    ldr r1, [r0]
    orr r1, #0x80
    str r1, [r0]
    bl delay
    ldr r1, [r0]
    bic r1, #0x80
    str 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/

    你可能感兴趣的文章
    Vue.js 学习总结(16)—— 为什么 :deep、/deep/、>>> 样式能穿透到子组件
    查看>>
    nopcommerce商城系统--文档整理
    查看>>
    NOPI读取Excel
    查看>>
    NoSQL&MongoDB
    查看>>
    NoSQL介绍
    查看>>
    NoSQL数据库概述
    查看>>
    Notadd —— 基于 nest.js 的微服务开发框架
    查看>>
    NOTE:rfc5766-turn-server
    查看>>
    Notepad ++ 安装与配置教程(非常详细)从零基础入门到精通,看完这一篇就够了
    查看>>
    Notepad++在线和离线安装JSON格式化插件
    查看>>
    notepad++最详情汇总
    查看>>
    notepad++正则表达式替换字符串详解
    查看>>
    notepad如何自动对齐_notepad++怎么自动排版
    查看>>
    Notes on Paul Irish's "Things I learned from the jQuery source" casts
    查看>>
    Notification 使用详解(很全
    查看>>
    NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()
    查看>>
    NotImplementedError: Could not run torchvision::nms
    查看>>
    nova基于ubs机制扩展scheduler-filter
    查看>>
    Now trying to drop the old temporary tablespace, the session hangs.
    查看>>
    nowcoder—Beauty of Trees
    查看>>