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

    你可能感兴趣的文章
    Mysql InnoDB存储引擎中的checkpoint技术
    查看>>
    Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
    查看>>
    MySQL InnoDB引擎的锁机制详解
    查看>>
    Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
    查看>>
    mysql InnoDB数据存储引擎 的B+树索引原理
    查看>>
    mysql innodb通过使用mvcc来实现可重复读
    查看>>
    mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目...
    查看>>
    mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
    查看>>
    Mysql join原理
    查看>>
    MySQL Join算法与调优白皮书(二)
    查看>>
    Mysql order by与limit混用陷阱
    查看>>
    Mysql order by与limit混用陷阱
    查看>>
    mysql order by多个字段排序
    查看>>
    MySQL Order By实现原理分析和Filesort优化
    查看>>
    mysql problems
    查看>>
    mysql replace first,MySQL中处理各种重复的一些方法
    查看>>
    MySQL replace函数替换字符串语句的用法(mysql字符串替换)
    查看>>
    mysql replace用法
    查看>>
    Mysql Row_Format 参数讲解
    查看>>
    mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
    查看>>