27.点亮led的操作

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 [email protected]初始化外设接口

bl disable_watchdog

bl disable_interrupt

bl disable_mmu

bl light_led

set_svc:

mrs r0,[email protected]把cpsr里的值读到r0

bic r0,r0,#[email protected]清除r0,即cpsr的后五位为0

orr r0,r0,#[email protected]设置r0的后五位为10011,svc的值

msr cpsr,[email protected]把值写回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,[email protected]把这个常量装载到r0里面

mov r1,#[email protected]这里不能直接将pWTCON的值直接mov到寄存器里面

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

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

disable_interrupt:

mvn r1,#[email protected]往r1写入全1

ldr r0,=0x71200014

str r1,[r0]

ldr r0,=0x71300014

str r1,[r0]

disable_mmu:

mcr p15,0,r0,c7,c7,[email protected]

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

bic r0, r0, #[email protected]设置后三位为111,关闭cachemmu等

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

mov pc, lr

#define lGPMCON 0x7F008820

#define lGPMDAT 0x7F008824

light_led:

ldr r0,[email protected]内部寄存器不能被直接访问

ldr r1,=0x1111

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

ldr r0,=lGPMDAT

mov r1,#[email protected]往3.4led输出低电平,亮

str r1,[r0]

mov pc,lr

时间: 2024-10-04 00:02:44

27.点亮led的操作的相关文章

7.点亮led的操作

Led可以作为我调试程序的工具. OK6410的核心板原理图:led的部分截图: 我们从上面的原理图知道,led1-4对应的是GPM0-3. ? ? 2.GPIO GPIO是General-Purpose Input/Output Ports:通用输入/输出端口.在嵌入式系统中,CPU经常需要控制许多结构简单的外部设备或者电路,这些设备通常只要两种状态,即是开关,对这些设备的控制,使用传统的串口或者USB口就显得复杂,所以,在嵌入式为控制器上通常提供了一种"通用的可编程的I/O端口",

一步一步点亮Led

1.了解物理特性 点亮LED的关键在于电压差 2.查阅原理图了解板载LED的硬件接法 方法:可以利用PDF文档的搜索功能(搜索LED即可,在底板搜索) 可知:有4颗正极接3.3V,负极分别接SoC上面的引脚(即引脚低电平亮),另外一个开机常亮. 3个SoC引脚是知道的,另外在核心板上查看pwmtout1可知引脚为GPD0_1,如下图 GPD0表示端口号,后面的1是引脚号 3.查阅数据手册 当我们想要编程操控GPIO来操作LED时,需要通读一下数据手册关于GPIO的部分 我们要操作的硬件为LED,

STM32学习笔记——点亮LED

STM32学习笔记——点亮LED 本人学习STM32是直接通过操作stm32的寄存器,使用的开发板是野火ISO-V2版本: 先简单的介绍一下stm32的GPIO: stm32的GPIO有多种模式: 1.输入浮空 2.输入上拉 3.输入下拉 4.模拟输入 5.开漏输出 6.推挽式输出 7.推挽式复用功能 8.开漏复用功能 stm32GPIO模式设置相关寄存器设置的介绍 stm32中文参考手册中对GPIO模式设置对应寄存器的详细介绍: 下图为开发板LED的接线图: 根据上面的电路图可知,将GPIOB

第11章 GPIO输出-使用固件库点亮LED—零死角玩转STM32-F429系列

第11章 ????GPIO输出-使用固件库点亮LED 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege ? 本章参考资料:<STM32F4xx参考手册>.库帮助文档<stm32f4xx_dsp_stdperiph_lib_um.chm>. 利用库建立好的工程模板,就可以方便地使用STM32标准库编写应用程序了,可以说从这一章我们才开始迈入STM32开发的大门. LE

第11章 GPIO输出—使用固件库点亮LED

第11章     GPIO输出-使用固件库点亮LED 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 本章参考资料:<STM32F4xx参考手册>.库帮助文档<stm32f4xx_dsp_stdperiph_lib_um.chm>. 利用库建立好的工程模板,就可以方便地使用STM32标准库编写应用程序了,可以说从这一章我们才开始迈入STM32开发的大门. LED灯

嵌入式学习笔记002-点亮led

正如编写第一个程序所打印"hello world"那样,对TQ2440开发板的初次使用也是从最简单的部分入手,点亮led灯无疑是最简单的,起码只要设置几个寄存器就好,比起打印容易得多了,后续会讲到串口部分再来实现我们这句金典的对白~~~~ 板子共有4个led灯,如果能够成功点亮其中一个,那么其他几个将不是问题,故而我们的目标是先点亮第一个先,在此我们必须理清几个问题: a. led的引脚连接的相关寄存器 b. 编写的语言 c. 用什么来编译链接成可执行文件 d. 怎么download到

STM32F407第一步之点亮LED

STM32F407第一步之点亮LED. 要点亮LED,首先了解一下F4的GPIO模块.首先看一下STM32F4数据手册,GPIO模块的内部结构图 看上去有点复杂,不要怕,慢慢理解就可以了.对外引脚那里二极管就是保护的作用.通过上.下拉对应的开关配置,控制引脚默认状态的电压,开启上拉的时候引脚电压为高电平,开启下拉的时候引脚电压为低电平,这样可以消除引脚不定状态的影响.但是这个不应该用来作为外部的上拉或下拉用,如按键的拉电阻不能用这个内部来作用,如果用可能会引起按键不稳定. GPIO 具有了“推挽

【蓝牙低功耗BLE】控制GPIO来点亮LED

这节讲一下最简单的,也是最基础的东西,CC2540的IO操作,把PORT口当做GPIO来用,废话不多说,往下看. 1.硬件电路 硬件电路时最简单的,用一根GPIO去控制LED灯,由于GPIO作为output,所以也不用管GPIO的模式. 还是挺简单的,控制左边GPIO的高低来开关LED灯. 2.相关寄存器 P0SEL      P0[7:0]功能设置寄存器,默认设置为普通I/O口 P0INP P0[7:0]作为输入口时电路模式寄存器,可以设置为输入上下拉等 P0 P0[7:0]可以位寻址的I/O

点亮LED(库函数实现)

本次测试采用的芯片是STM32F103CB 我的开发板如下: 此开发板有8个led,分别为D11,D12,D13,D14,D15,D16,D17,D18.查询核心板的电路图后知道其对应芯片的控制引脚为P0.0,P0.1,P0.2,P0.3,P0.4,P0.5,P0.6,P0.7,P0.8. 现在开始测试点亮D11.主要源代码如下: 1 //main.c 2 #include "pbdata.h" 3 #include "led.h" 4 5 int main(voi