zoukankan      html  css  js  c++  java
  • arm基础

    gpio 的配置:寄存器的配置。
    主要内用点亮第一个led.
    .s文件是汇编源文件

    arm体系结构和汇编。
    硬件裸机驱动: 时钟,内存,flash,串口,芯片手册,电路原理,

    arm bootloader :bos boot,把操作系统,加载到内存系统,
    U-BOOT
    arm 中断编程: 软件中断,硬件中断。
    核心数据分析: VFS虚拟文件系统(file,kobject),数据结构(双向链表,红黑树,队列)。

    linux驱动介绍: 字符设备,块设备,网络设备,USB设备。

    Linux串口的驱动: Linux中断编程。字符设备。

    arm是一个cpu内核。
    cpu的核心: 寄存器,ALU运算单元,预取器,控制器。
    外设控制器:Cortex A8 sspv210
    机器指令: 32bit 长度定常
    cpu: load-->store
    常用的:80% X86 %80的不常用的。

    arm : 手机,平板,智能电视。arm处理器。

    指令集:ARM7TDMI MP3芯片。体系结构: V3
    最终控制cpu运行的是机器语言。
    向后兼容。

    arm Cortex-M A7 指令集。
    寄存器,工作模式。X86: 7中工作模式:System&User FIQ Supervistor Abort IRQ Undefined

    R13/SP : 栈指针寄存器。exp 记录站定地址。R14/LR: 连接返回地址。
    R15/PC:保存取值地址,程序计数器。
    CPSR 当前程序状态。
    内核空间,用户空间:为什么不能访问内核空间。
    X85: RAIN0: 最高权限kernel,RAIN3:最低权限user
    物理内存--->mmu 4G内存空间。 栈堆,bss,data,text。

    3G空间的起始地址: 0xC0000000
    *((unsigned int*)0xcfff0000) = 0x123445

    mmu设置kernal为RAIN0权限。系统调用称为:软终端。系统跳到kernal权限。
    arm两个级别,7种模式。普通中断模式,快速中断模式,系统模式,管理模式,abt停止模式,未定义指令模式。

    共用寄存器: 37个寄存器

    流水线3级: 同时处理指令数。
    预取:译码器 ADD R0 R1 R2 加法: 用R0保存结果。存放到寄存器,R15/pc

    时钟周期 = 1秒/频率 1Ghz 10的9次方
    总开关: 算术逻辑累加单元。加法,减法,移位。


    ALU 只做加法运算。
    Z:置零。N: 符号为,V 溢出位。C: 进位

    汇编指令: 长度固定4个字节32位

    cond opt 分分类码 s Rd Rn 立即数

    MOV R0 #0X1 把0x放入 R0
    MOVS RO R1 把R1 放入R0

    条件码: 操作码 分类码 s 目的寄存器 原寄存器 立即数
    4bit 1bit 4bit 4bit 8bit

    add r0, r1 #0x55 意思: r1+0x55 =>r0
    S码: 1bit 指令运行结果,去影响和修改CPSR寄存器的相关标志位。(NZCV)

    指令执行前; 判断条件码是否成立
    指令执行后: 根据S码的设置,影响CPSR相关标志位


    arm-linux-gcc

    file a.out 可以查看可执行文件可运行的平台 arm-linux-objdump -dSsx arm.a.out 查看反汇编文件

    mov 数据传输指令
    mcp工程文件

    AREA asm1test, CODE(数据段),READONLY(只读)
    ENTRY
    CODE32 32位
    START 标号
    MOV R0,#0X1

    END
    如何修改cpsr:
    1 把cpsr寄存器的值放入R0 2 修改R0最低5位位1000
    3 把R0 放入cpsr
    修改位usr模式
    MRS R0 CPSR 把状态寄存器的值取出给普通寄存器
    BIC R0 R0 #0XF
    MSR R0 CPSR 把普通寄存器的存入状态寄存器

    串口: 两根线一收一发


    bootloader bos 界面;
    分析数据手册,电路原理图。

    每秒传输115200位

    mw 0xe02002280 操作地址

    gpio 有个寄存器: 配置模式寄存器有个0X1111 数据寄存器:

    LED_TEST 标号
    LDR R0,=0XE0200280 //把内存地址加载到R0 寄存器

    LDR R1,=0X1111 配置输出模式
    STR R1,[R0] 把值存入地址

    LDR R0,=0XE20200284
    LDR R1,=0X0
    STR R1,[R0] 把值存入地址
    B LED_TEST
    END

    loads 下载二进制文件
    go kermit协议

    第一步: 写可执行文件
    第二步: 采用超级终端,连接ARM loadb
    第三步: 发送文件
    第四部: go 地址
    BCM2835,ARMv7

    delay1
    MOV R4,#0XFFFFFFF
    LOOP
    SUBS R4,R4 ,#0X1
    BNE LOOP 如果不为零跳转Loop

    LDR R0, 0XE0200284
    LDR R1,=0XF
    STR R0,[R1] 把值写入地址

    c语言混合编程: ATPCS协议。
    调用函数

    arm37个寄存器。

    EXPORT 导出汇编函数
    __main 启动代码

  • 相关阅读:
    (DDD)仓储的思考
    js模块化
    elasticsearch 集群
    多线程和多进程模型
    WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作)
    WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制
    jekyll博客安装
    bootstrap+jQuery.validate
    cygwin的163镜像(转)
    ExecutorService invokeAll 实例(转)
  • 原文地址:https://www.cnblogs.com/countryboy666/p/11831700.html
Copyright © 2011-2022 走看看