27.点亮led的操作

发布者:Tapir最新更新时间:2024-10-29 来源: cnblogs关键字:点亮led  调试程序  Bootloader 手机看文章 扫描二维码
随时随地手机看文章

Led可以作为我调试程序的工具:在嵌入式系统软件,例如Bootloader和kernel,在开发初期,由于串口等硬件尚未被初始化,因此调试手段相当有限,这时候可以采用Led来作为调试手段。

OK6410有关led的原理图:

从上图知道,要让led发光二极管,就是从右到左导通,右边是高电平,所以左边给低电平,二极管就会导通,发光了。

 

知道原理后,看看OK6410的核心板原理图,查看NLED1-4应该接到核心板的哪些引脚:led的部分截图:

我们从上面的原理图知道,led1-4对应的是GPM0-3.对应NLED1-4.

 

 

2.GPIO

GPIO是General-Purpose Input/Output Ports:通用输入/输出端口。在嵌入式系统中,CPU经常需要控制许多结构简单的外部设备或者电路,这些设备通常只要两种状态,即是开关,对这些设备的控制,使用传统的串口或者USB口就显得复杂,所以,在嵌入式为控制器上通常提供了一种'通用的可编程的I/O端口',也就是GPIO。

下面是6410GPIO的信息:GPMCON控制寄存器,GPMDAT数据寄存器

GPMDAT数据寄存器:

点亮led的实现思路:

  1. 设置GPIO控制寄存器,把引脚设置为输出功能

  2. 根据原理图设置GPIO数据寄存器,点亮led。

实现的代码:点亮。3、4灯。

编译,生成.bin文件。这是可执行文件。当我们烧写到开发板的时候,发现开发板不亮。这是因为我们在前面的操作中没有去初始化硬件的外设接口。

 

 

在19.Bootloader框架设置的时候有提到,uboot初始化的时候,6410比2440核多了一步就是外设基地址初始化:

这里灯不亮就是前面的uboot框架设置的时候,少了这一步。

打开ARM11核的手册,搜索CP15:

进入这一章:找到c15这一组寄存器里的Peripheral Port Memory Remap这个寄存器,就是外设基地址寄存器。前面的灯不亮,就是少了通过这寄存器的设置,对外设进行初始化。

设置参数:

点击后面的页数,继续查看设置信息:

上面是核手册的信息:

下面是芯片手册的信息,有关外设基地址寄存器的设置。

set_peri_port:

    ldr r0, =0x70000000 //ldr伪指令,装载0x70000000到r0。

    orr r0, r0, #0x13 //由上面知道,256内存对应的值:b10011=0x13

    mcr p15,0,r0,c15,c2,4 //对应上面的值设置cp15.

    mov pc, lr //返回

其中上面的orr中的0x13=0b10011,是对应256M内存。

下面是把设置好的值写到cp15:mcr p15,0,r0,c15,c2,4

 

 

 

代码:

.text

.global _start

_start:

    b reset

    ldr pc, _undifined_instruction

    ldr pc, _software_interrupt

    ldr pc, _prefetch_abort

    ldr pc, _data_abort

    ldr pc, _not_used

    ldr pc, _irq

    ldr pc, _fiq

    

 

_undifined_instruction: .word undifined_instruction

_software_interrupt: .word software_interrupt

_prefetch_abort: .word prefetch_abort

_data_abort: .word data_abort

_not_used: .word not_used

_irq: .word irq

_fiq: .word reset

 

undifined_instruction:

    nop

 

software_interrupt:

    nop

    

prefetch_abort:

    nop

    

data_abort:

    nop

 

not_used:

    nop

 

irq:

    nop

 

fiq:    

    nop

    @什么是异常向量表

 

reset:

    bl set_svc

    bl set_peri_port@初始化外设接口

    bl disable_watchdog

    bl disable_interrupt

    bl disable_mmu

    bl light_led

 

set_svc:

    mrs r0,cpsr@把cpsr里的值读到r0

    bic r0,r0,#0x1f@清除r0,即cpsr的后五位为0

    orr r0,r0,#0xd3@设置r0的后五位为10011,svc的值

    msr cpsr,r0@把值写回cpsr。svc模式设置完成

 

set_peri_port:

    ldr r0, =0x70000000

    orr r0, r0, #0x13

    mcr p15,0,r0,c15,c2,4

    mov pc, lr

 

#define pWTCON 0x7E004000

disable_watchdog:

    ldr r0,=pWTCON@把这个常量装载到r0里面

    mov r1,#0x0@这里不能直接将pWTCON的值直接mov到寄存器里面

    @mov的对象是通用寄存器。这里需要使用str指令装载。

    str r1,[r0]@把r1存到0x7E004000

 

disable_interrupt:

    mvn r1,#0x0@往r1写入全1

    ldr r0,=0x71200014

    str r1,[r0]

 

    ldr r0,=0x71300014

    str r1,[r0]

disable_mmu:

    mcr p15,0,r0,c7,c7,0@controller

    mrc p15,0,r0,c1,c0,0

    bic r0, r0, #0x00000007@设置后三位为111,关闭cachemmu等

    mcr p15,0,r0,c1,c0,0

    mov pc, lr

 

#define lGPMCON 0x7F008820

#define lGPMDAT 0x7F008824

light_led:

    ldr r0,=lGPMCON@内部寄存器不能被直接访问

    ldr r1,=0x1111

    str r1,[r0]@设置GPM的末四位为输出引脚

 

    ldr r0,=lGPMDAT

    mov r1,#0x3@往3.4led输出低电平,亮

    str r1,[r0]

    mov pc,lr


关键字:点亮led  调试程序  Bootloader 引用地址:27.点亮led的操作

上一篇:28.时钟初始化
下一篇:26.核心初始化之关闭MMU和cache

推荐阅读最新更新时间:2026-03-20 11:52

亮度超50000nits!天马成功点亮12英寸Micro-LED高亮车载显示屏
近日,天马新型显示技术研究院(厦门)有限公司继全球领先的108英寸和135英寸PID大屏成功点亮后,再次取得新进展——全新12英寸Micro-LED高亮车载显示屏已成功点亮。 这款显示屏专为车载全景HUD抬头显示系统打造,拥有极致的光学性能:亮度突破50000nits,对比度高达1000000:1,色域覆盖NTSC 110%,同时具备极速响应特性。 天马12英寸Micro-LED高亮车载显示屏 即便在强光直射、高低温剧烈变化等严苛车载环境下,仍能保持画面清晰无拖影、色彩真实还原,大幅提升行车信息的可读性与视觉舒适度,是高端全景HUD系统的理想显示载体。 在核心技术层面,该产品依托Micro-LED像素级独立自发光
[汽车电子]
亮度超50000nits!天马成功<font color='red'>点亮</font>12英寸Micro-<font color='red'>LED</font>高亮车载显示屏
QT210开发板学习(2): 通过DNW点亮LED
查找开发板原理图,可知 可用的LED有4个, 引脚为EINT0/1/2/3, 对应的IO口则是GPH0_0/1/2/3, 寄存器有GPH0CON,GPH0DAT,GPH0PUD,GPH0DRV GPH0CON用来设置IO模式(地址为0xE0200C00), GPH0DAT是电平状态(地址为0xE0200C04) 我们需要设置为Output模式, 并且将状态设置为高电平 新建一个led.s文件: _start: ldr r0, =0xE0200C00 //GPH0CON ldr r1, =0x11111111 str r1, ldr r0, =0xE0200C04 //GPH0D
[单片机]
QT210开发板学习(2): 通过DNW<font color='red'>点亮</font><font color='red'>LED</font>灯
DJI RM A board study —— 点亮LED
1. 测试前的准备 A、参考资料: RoboMaster开发板套件: https://www.robomaster.com/zh-CN/products/components/general/development-board RoboMaster 开发板例程:https://github.com/RoboMaster/DevelopmentBoard-Examples B、硬件: 开发板:DJI 大疆 RoboMaster 开发板A型 *1 参考链接: https://detail.tmall.com/item.htm?spm=a230r.1.14
[单片机]
STM32(2):点亮LED(下)
概述 点亮LED表面看起来貌似很简单,但是如何想要搞清楚其背后牵涉的每一行代码的具体含义,还是需要花费一些功夫的,而且,只有把LED的背后只是搞清楚了,才算嵌入式开发的基础入门。 今天我们就来研究一下LED的重头戏,RCC_Init;什么是RCC?上手册: file RCC RCC,Reset and Clock Control,重置以及时钟控制;STM32手册使用了两个章节来对其进行描述,可见它的重要性;对于RCC的初始化也是比较复杂,里面包含了STM32对于时钟的相关机制, 代码总览 void RCC_init(uint16_t PLL){ uint32_t temp=0; *((uint32_t *)RCC
[单片机]
STM32(5):轮训方式让按键点亮LED
概述 CPU和外设通信的方式有轮训和中断两种方式;所谓轮训就是主动询问某个状态,看看是否是某个值,如果是则采取行动;中断则是一旦发生了,会主动通知CPU; 本章来研究一下通过如何轮训的方式来响应按键事件。 代码概览 #include stm32f10x_gpio.h #include stm32f10x_rcc.h #include ../lib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_exti.h #include ../lib/STM32F10x_StdPeriph_Driver/inc/misc.h #include ../lib/STM32F10x_StdPeriph
[单片机]
树莓派玩转STM32开发(三)——先从点亮一个LED灯开始
在开始正式写代码之前,首先要解决一件事,那就是我们该如何去写这代码。 在树莓派搭建的Linux环境中,使用基于Xorg的桌面环境在本地开启图形化界面开发太耗费系统资源,这个方案首先不考虑。不过还剩下两种其他可行的方案,一是直接通过终端远程登陆进行开发,开发工作全部在文本模式下进行;另一种则使用Samba服务将Linux的文件系统挂载到Windows中,然后在Windows上面使用图形化界面的IDE开发。 如果你比较Geek,你可能会尝试远程登陆的方式,通过Vim或者Emacs两大神器之一进行开发。不过他们两者对新手不够友好,具体可以自己体验一下,不过网上有个段子: 问:如何生成一个随机字符串? 答:让新手退出vim. 而且在没
[单片机]
支持16位PWM调光,集成4路LED驱动, 纳芯微氛围灯驱动NSUC1500点亮座舱新体验
2024年12月16日,上海—— 纳芯微宣布其SoC产品系列NovoGenius家族迎来新成员——高集成度氛围灯驱动SoC产品NSUC1500-Q1。 该产品通过集成ARM® Cortex®-M3内核与4路高精度电流型LED驱动,支持16位独立PWM调光和6位模拟调光功能,能够实现更精准的调光混色控制,并有效补偿光衰现象。此外,NSUC1500-Q1系列也满足AEC-Q100 Grade 1和CISPR 25 Class 5 EMC标准,确保了产品的高可靠性和灵活性。 这一创新产品将助力打造更高效、更具创新性的智能座舱照明方案,为用户带来更加卓越的视觉体验。 伴随汽车个性化创新的不断推进,未来的汽车将不再仅仅是交
[汽车电子]
支持16位PWM调光,集成4路<font color='red'>LED</font>驱动,  纳芯微氛围灯驱动NSUC1500<font color='red'>点亮</font>座舱新体验
STM32CubeMx入门教程(1):点亮LED
“使用stm32cubeMX 工具进行代码生成,以LED点灯为例” 01STM32CubeMx的使用条件 1.硬件条件: (1)野火STM32F103开发板-指南者 (2)原理图 原理图可以参考官网,在stm32CubeMx入门教程的使用中会将用到的部分原理图以图片的形式贴出。 2.软件 (1)STM32CubeMX 从STM公司官网下载。 (2) STM32CubeF1 这是F1系列的HAL库,使用cubeMx进行代码初始化配置和代码生成就使用的这个库,可以根据自己的单片机系列选择下载地址。 (3) MDK 这个软件大家可以自己下载,如果使用其他的编译软件CubeMX 也是支持的。 注意: SetupSTM32C
[单片机]
STM32CubeMx入门教程(1):<font color='red'>点亮</font><font color='red'>LED</font>
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved