zoukankan      html  css  js  c++  java
  • ARM 裸机程序学习 01 点亮LED

    开始研究ARM了,从最基础最简单的,点亮LED灯开始。  //嗯,最简单的应该是直接把LED灯接在电源上吧……
    主要学习一下汇编代码的结构,ARM GPIO口的控制。
     
    硬件环境:
    s3c2440处理器
    GPB5、GPB6、GPB8、GPB10口各接一个发光二极管,
    发光二级管正极接电源,负极接GPB口。(即低电平导通并发光)
    Code Warrior 编译 
     
    汇编代码:
     1    AREA LEDSAMPLE,CODE,READONLY
     2    ENTRY
     3 START
     4    LDR R3, =0x56000010
     5    LDR R4, =0x00DDD7FC
     6    STR R4, [R3]
     7 
     8    LDR R1, =0x56000014
     9    MOV R2, #0X0
    10    STR R2, [R1]
    11 
    12    B START
    13    END
    注解及笔记:
    01 指示一个代码段或者数据段;
       LEDSAMPLE:段名;CODE:表示这是一个代码段;READONLY:表示只读
    02 入口
    03 标号,用于跳转指令。
       另外标号需要顶格写,也就是说,其他的代码不可以顶格写
    04 LDR伪指令(不同于ARM指令LDR),将一个值(立即数0x56000010)存入寄存器R3
       0x56000010为GPB的控制寄存器地址,即GPBCON
       而ARM装载指令LDR用法一般为: LDR R1, [R2] ;读取R2寄存器所保存的值作为一个内存地址,将这个地址上所保存的数据存入R1
    05 同04
       其中,对于GPB口,01表示用于输出。GPB5,6,8,10的设置位分别为[11:10][13:12][17:16][21:20]
    06 储存指令,读取R3中保存的值作为一个内存地址,并将R4所保存的值保存到这个内存地址上
       即为GPBCON赋值,设置GPB口功能
    08 同04
       其中0x56000014为GPBDAT寄存器地址,存放IO数据。此处输出全0,即低电平。
    09 传输指令。将一个8位图立即数(0x0)送入R2
       本身主要用于寄存器之间传输数据:MOV R1, R0 ;将R0中保存的值赋给R1
    10 同06
    12 ARM跳转指令,程序跳转至标号START处
    13 结束
    /*
     * Yiling Zhou
     * Shanghai, China
     * -.-- .. .-.. .. -. --. / --.. .... --- ..-
     * ... .... .- -. --. .... .- .. --..-- / -.-. .... .. -. .-
     */
    
  • 相关阅读:
    Netty 中的内存分配浅析-数据容器
    你想了解的 HTTPS 都在这里
    加解密算法分析
    HTTP 协议详解(二)
    HTTP 协议详解
    Netty 中的内存分配浅析
    TCP / IP 精彩回顾-必看
    Netty 中的消息解析和编解码器
    Netty 中的粘包和拆包
    python 类中方法总结 --- 实例方法、类方法、静态方法
  • 原文地址:https://www.cnblogs.com/pastgift/p/2460947.html
Copyright © 2011-2022 走看看