zoukankan      html  css  js  c++  java
  • arm-点亮led灯

    点亮指路灯:
    学习四环节:led原理图分析,芯片手册导读,思维导图设计,
    为什么要使用led:通常led是作为程序调试的重要手段。
    led原理图:led实质为发光二极管,当其两端电压一定时,即处于导通状态。
    OK6410核心板原理图-256MDDR-2g p4页找到nled所对应的引脚分别为GPM1,GPM2,GPM0,GPM3,将引脚处设为低电平,二极管即可导通。
    --------------------------------------------------------
    GPIO(general-purpose input/output ports):cpu经常需要控制许多结构简单的外部设备或者电路(通常只有开和关两种状态),使用传统的串口或者usb口就显得复杂,所以就有了GPIO(通用可编程I/O口).
    一个GPIO端口至少需要两个寄存器,一个是“控制寄存器(选择该端口是输入还是输出等)”还有一个是“数据寄存器”。
    看芯片手册S3C6410X中GPIO这一章。
    --------------------------------------------------
    思维导图设计:
    led驱动:
    1.设置GPIO的控制寄存器,将引脚设置为输出的功能。
    2.根据原理图设置GPIO数据寄存器,点亮led.
    ------------------------------------------------------
    点亮led:
    先打开底板原理图查看user led 原理图-》然后打开核心板原理图-》查看nled所对应的引脚。发现ok6410的led使用的NLED1,2,3,4-GPM0,1,2,3.打开6410的芯片手册。
    代码:
    bl light_led
    #define GPMCON 0x7F008820
    #define GPMDAT 0x7F008824
    @控制寄存器的设置
    light_led:
    ldr r0,=GPMCON //将控制寄存器地址装载到肉r0中
    ldr r1,=0x1111 //将即将改变的各个引脚状态用16进制的方式装载到r1中
    str r1,[r0] //将r1中的内容放到r0中
    @数据寄存器的设置
    ldr r0,=GPMDAT //将GPIO数据寄存器的地址装载到r0中
    mov r1,#0xf //存储即将改变的数据寄存器中各个位的值。
    str r1,[r0] //让led都不亮
    mov r1,#0x1 //同上此处可用ldr指令
    srt r1,[r0]
    mov pc,lr
    ---------------------------------------------------------
    发现u-boot烧写到开发板后不亮,然后再看看思维导图,发现6410中我们少做了一步工作,外设基地址的初始化
    翻看我们arm11的手册,搜索cp15,(summary of CP15)p150页-》
    可查看p263页
    对于这个设置主要有两个方面:第一外设的基地址:
    bl set_svc
    bl set_peripheral_port
    set_peripheral_port:
    ldr r0,=0x70000000 //6410中可搜0x70000000,发现这是寄存器的基地址。
    orr r0,r0,#0x16
    mcr p15,0,r0,c15,c2,4,
    mov pc,lr

  • 相关阅读:
    2021.4.2 Python基础及介绍
    2021.4.1 团队组队
    冲击信号
    信号卷积(线性卷积)
    数字图像处理基本概念
    计算机视觉发展及主要研究方向
    SVM 之 SMO 算法
    FP Growth 算法
    Apriori 算法
    26 实战页式内存管理 下
  • 原文地址:https://www.cnblogs.com/defen/p/4755786.html
Copyright © 2011-2022 走看看