博客
关于我
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/

    你可能感兴趣的文章
    python vue3实现大文件分段续传(断点续传)--带暂停和继续功能
    查看>>
    Python WebDriver如何打印整个页面源(html)
    查看>>
    Python WebSocket自动化测试:构建高效接口测试框架
    查看>>
    Python Web开发
    查看>>
    Redis 配置文件杂项。
    查看>>
    Python web自动化测试 —— 文件上传
    查看>>
    python win32api键盘_Python win32api.keybd_event模拟键盘输入
    查看>>
    python Workbook 表格宽度
    查看>>
    python 中 dict 的另一种用法
    查看>>
    Python 中只有一个 True 和一个 False 对象吗?
    查看>>
    Python 中多线程与多处理之间的区别
    查看>>
    Python 从入门到精通:30天速成教程到底有多狠?你能坚持下来吗?
    查看>>
    Python 从数据库中存储和检索密码的最安全方法
    查看>>
    Python语言及其应用 - 知识点遍历
    查看>>
    Python 优化提速的 8 个小技巧
    查看>>
    Python 余弦相似度与皮尔逊相关系数 计算
    查看>>
    python 使用execjs 报编码错误解决办法,UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 145: il
    查看>>
    python 使用filetype校验文件
    查看>>
    Python 使用flush函数将缓冲区数据立即写磁盘
    查看>>
    python 使用in判断不准确,in不好使
    查看>>