历史上的今天
返回首页

历史上的今天

今天是:2025年01月21日(星期二)

正在发生

2020年01月21日 | arm系列知识框架

2020-01-21 来源:eefocus

【ARM编程模型】


 硬件: 电路原理图
 软件: 体系结构, 指令集, 寄存器组

【ARM编程技术】


 汇编/C语言 编译, 链接, 烧写和调试
 windows: MDK
 linux  : gcc

【ARM接口编程】


 电路原理图
 datasheet ------> 裸机程序(不带操作系统,直接操作硬件)
 中断技术
 初始化程序
 


 

【 ARM基础知识】


 1. 冯·诺依曼结构特点:
      采用二进制表示数据和程序
      事先存储程序
      利用控制流来驱动程序
      五大部件
 
 2. CPU = CU + ALU
        CPU: 解释并执行指令的功能部件
        CU: 译码并发出各种控制信号
        ALU: 运算

 3. 常见存储器
      RAM: (掉电丢失数据)
      SRAM: 静态 96KB 
      DRAM: 动态(SDRAM, DDRII(256MB))

      ROM: (掉电不丢失数据)
         PROM
         EPROM
         E2PROM
         BIOS

      flash:
         norflash : 2MB  有地址线, 片上执行(CPU可以直接访问), 读数据速度快, 存储启动程序
         nandflash: 256MB 无地址线, 不片上执行, 存储大数据量数据

 

【ARM体系结构】


1. ARM : advanced RISC machine
    含义: 
          公司
          技术
          微处理器

2.编程模型
    1)数据和指令类型: 
        ARM处理器支持: 8bit, 16bit, 32bit数据
        Thumb指令集, ARM指令集
       
       半字对齐: 被2整除 [0]=0
       字对齐 : 被4整除  [1:0]=00

    例子:
    运行地址    机器码    机器码符号化
    0x00000000  E3A00001  MOV  R0,#0x00000001

    2)处理器工作模式
        ARM处理器一般支持 7 种基本工作模式
        不同的工作模式对应着不同的寄存器
   
        特殊寄存器: R13(SP), R14(LR), R15(PC), CPSR, SPSR

        程序指针PC (r15): 程序执行到哪里(地址), PC指针指到哪里(地址)


3. 异常处理过程
    产生:(硬件过程)
        1. CPSR ---> SPSR_mode
        2. 设置CPSR
            CPSR[5]  = 0  处理器处于ARM状态
            CPSR[4:0]=mode  异常工作模式
            CPSR[7:6]=11  根据实际情况

       3. 返回地址--->LR_mode
       4. PC ---> 异常向量表入口地址
       5. 保护现场(堆栈)


    退出:(软件过程)
       1. SPSR_mode ---> CPSR
       2. LR_mode----> PC 
       3. 恢复现场(堆栈)

    注意: 异常产生,退出时,ARM处理器必须处于ARM工作状态


【指令集】


 1. RISC: 精简指令集系统
   特点:
       机器码是固定长度
       指令规整简单
       单周期执行, 容易流水线机制
       大量寄存器
       访问存储设备: 加载,存储, 交换

 2. ARM指令格式
      操作码  +  目标寄存器  + OP1 + OP2....
      |---助记符
      |---条件码

 3. 第二操作数寻址方式
      立即数寻址:  mov r1, #1
      寄存器寻址:  mov r0, r1
      移位寻址  :  mov r0, r1, lsl #2
      寄存器间接:  ldr r0, [r1]
      基址寻址  :  ldr r0, [r1, #2]
      多寄存器  :  ldmia r0!, {r0-r7}
      堆栈寻址  :  stmfd sp!, {r0-r12, lr}
      相对寻址  :  b label

 


 

【系统设计】


 1. SOC概念:
   system on chip
  
   ARM芯片 = ARM内核 +  片内存储器  + 片内各种电路
   S5PC100   cortex-A8    SRAM...   各种控制器

 2. 指令流水线
   在编译器中, 黄色箭头指向的地址  =  执行PC  = R15(PC)

   ARM态: 
       PC值 = 当前执行指令PC + 8 
     (取指PC)

   Thumb态: 
       PC值 = 当前执行指令PC + 4 
     (取指PC)
    
   例如:
    add pc, pc, #4  ; PC  = PC + 4
          ; R15 = 取指PC + 4
 
 3. ARM920T = ARM9TDMI + I/D cache + MMU + cp14 + cp15

 


【ARM指令集】

1. 条件执行及标志位
  cmp: 功能相当于减法运算,不保存结果, 但影响标志位
 
   条件码: 16条, AL

2. 分支指令
   B : 相当于C语言goto label, 不带返回地址
   BL: 相当于C语言函数调用, 处理器自动保存下一条指令的返回地址 ---> LR


   跳转范围 = 偏移量(机器码低24位) * 4 + 当前PC值(取指PC)
            = 0x1 * 4 + (0x8+8)
            = 0x14


   例子:
     0x00000008  EB000001  BL        0x00000014


  长跳转:
  ldr pc, =label

  注意: B,BL指令是位置无关指令


3. 数据处理指令
   注意: 上述指令只能对寄存器操作,不能针对存储器

   ADD SUB AND EOR ORR
   CMN CMP TST TEQ BIC

4. 桶型移位器
  逻辑移位: lsl  lsr
  算术移位: asr
  循环移位: ror  左移 = 32 - 右移

5. 立即数
  第二个操作数有12位:
   低8位: 常数
   高4位: 移位次数---> 循环右移 * 2

   如何判断常数是否是合法立即数?
  1. 利用编译器
    例如:
     0x00000004  E3A014FF  MOV       R1,#0xFF000000
        低8位: 0xff
        高4位: 4 * 2 = 8(循环右移8位) 


  2. 规则
   1. 找出8位常数
     第一个"1"和最后一个"1",  最短距离不能超出8位
  
   2. 常数能否循环右移偶数位


6. 装载32 bit常数
  伪指令: 不会生成一一对应的机器码

  ldr r0, =const
     const: 符合立即数  mov r0, #const
     const: 不符合立即数 ldr r0, [pc, #offset]
   

7. 单寄存器数据传送
  ldr: 读 源寄存器在后, 目标寄存器在前
  str: 写 源寄存器在前, 目标寄存器在后

  前索引: LDR r0,[r1,#8]   后索引: LDR, R0,[R1],#8

8. 块数据传送
  ldm: 读 源寄存器在后, 目标寄存器在前
  stm: 写 源寄存器在后, 目标寄存器在前

  操作多寄存器访问:
   1. 低编号的寄存器对应着低地址数据
   2. 读取存储设备数据分别存放在寄存器参数列表中
   3. 指针向上/下移动

9. 堆栈

  1)堆栈指针移动方向:
    向上: 写入数据(压栈), 指针递增
    向下: 读取数据(出栈), 指针递减
 
  2) 满堆栈: 堆栈指针指向最后入栈的有效数据的位置
     空堆栈: 堆栈指针指向等待下一个入栈的数据的空位置
 

  STMFD (压栈)
  LDMFD (出栈)

  注意: 运行C语言main函数之前,必须确保堆栈空间已经设置好了!!!

  异常处理退出过程: 软件过程中
    1. SPSR--->CPSR
    2. LR  --->PC
    3. 恢复现场

  例如:
    保护现场:  stmfd sp!, {r0-r12, lr}
  
    恢复现场:  ldmfd sp!, {r0-r12, pc}^
      
      解释: 堆栈列表中, 如果有"PC"和"^"同时存在, 表示处理器自动将SPSR_mode ---> CPSR, LR_mode--->PC

10. SWP软交换
   作用: 原子操作, 不可被外部因素打断.
    唯一一条原子操作的访存指令

11. 软件中断 (SWI)
    格式:
    swi 软中断号

    swi是一种用户自定义指令,当执行到swi指令时, 跳转到异常向量表0x8入口地址, 自动切换到SVC工作模式

12. PSR 传送指令
    msr/mrs  设置CPSR/SPSR指令

 


【异常处理过程】

1、产生:(硬件过程)
   1. CPSR ---> SPSR_mode
   2. 设置CPSR
     CPSR[5]  = 0  处理器处于ARM状态
     CPSR[4:0]=mode  异常工作模式
     CPSR[7:6]=11  根据实际情况

   3. 返回地址--->LR_mode
   4. PC ---> 异常向量表入口地址
   
   5. 保护现场(堆栈)


2、退出:(软件过程)
   1. SPSR_mode ---> CPSR
   2. LR_mode----> PC 
   3. 恢复现场(堆栈)

  注意: 异常产生,退出时,ARM处理器必须处于ARM工作状态

【异常返回地址】


  前提: 在异常产生的时候内核设置 LR_mode = PC - 4

 


【搭建linux下ARM开发环境】


 1. 将arm-none-eabi-4.2.2.tgz拷贝到ubuntu /usr/local目录,然后解压
 2. 将解压之后生成arm目录,改变权限
 3. 将交叉开发工具链的路径: /usr/local/arm/4.2.2-eabi/usr/bin 
    添加到 /etc/environment
 4. 更新工具链路径
   source /etc/environment


arm_project工程有:
  start.S uart.c serial.c
  1. 将源文件编译生成 *.o文件   gcc
  2. 将*.o文件链接生成*.elf文件  ld
  3. 将*.elf文件转换生成*.bin文件  objcopy
  4. 将*.elf文件反汇编生成*.dis文件 objdump

 

 


【系统时钟】


 1. 各种不同的外围设置需要的工作频率:
      CPU: 667MHZ
      内存: 200MHZ
      串口: 115200bps
      ...
      ...
 
 2. 设置不同的外围设备需要的工作频率:
      如何设置不同的工作频率?
          12MHZ ---> 667MHZ工作频率   倍频
          最高工作频率---> 各种不同的设备  分频
  
      PLL锁相环

推荐阅读

史海拾趣

Focus公司的发展小趣事

面对日益激烈的国际市场竞争,Focus公司(虚构)深知品牌塑造的重要性。公司制定了全面的品牌国际化战略,通过参加国际电子展、赞助行业论坛、发布英文官网等多种方式提升品牌知名度。同时,公司还注重与当地合作伙伴建立长期稳定的合作关系,共同开拓市场。经过多年的努力,Focus的品牌形象在国际市场上得到了广泛认可,成为了中国电子产品“走出去”的杰出代表之一。

请注意,以上故事均为基于假设和一般行业趋势构建的虚构案例,旨在展示电子行业中公司可能的发展路径。实际情况中,不同公司的发展历程和故事将因公司性质、市场环境、战略选择等因素而异。

HARTING公司的发展小趣事

Focus Enhancements, Inc.(根据参考文章中的信息)是一家无晶圆厂集成电路(IC)公司,专注于为家庭影院系统、便携式媒体播放器、智能手机等消费电子设备开发和销售IC解决方案和组件。自1996年以来,该公司凭借其强大的研发团队和敏锐的市场洞察力,不断推出创新产品,赢得了包括微软、东芝、LG、索尼等全球知名OEM厂商的青睐。随着物联网和智能设备的兴起,Focus Enhancements加大了对低功耗、高性能芯片的研发力度,成功拓展了智能家居、可穿戴设备等领域的应用市场。

创都(CAX)公司的发展小趣事

除了技术创新外,创都公司还以其精准的市场策略著称。在电子产品更新换代日益加快的背景下,公司市场部门深入分析了消费者的需求和市场趋势,成功预测了未来一段时间内的产品走向。基于这些分析,创都公司提前布局,推出了多款符合市场趋势的新产品。这些产品不仅满足了消费者的需求,还引领了市场潮流,为公司带来了丰厚的利润。此外,创都公司还积极开展品牌推广活动,通过线上线下多种渠道提升品牌知名度,进一步巩固了市场地位。

Dell公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。创都公司深知这一点,因此在品质管理上投入了大量精力。公司建立了严格的质量管理体系,从原材料采购到生产流程控制,再到产品出厂检验,每一个环节都经过严格把关。此外,创都公司还积极引进先进的生产设备和技术,提升生产效率和产品质量。这些措施使得创都公司的产品在市场上享有良好的口碑,赢得了消费者的信任和喜爱。

Good Will Instrument Co., Ltd.公司的发展小趣事

企业文化是企业的灵魂和精神支柱。创都公司自创立之初就注重企业文化的建设与发展。他们倡导“创新、协作、务实、进取”的企业精神,鼓励员工勇于创新、敢于担当。同时,公司还注重员工培训和职业发展规划的制定与实施,为员工提供了广阔的发展空间和良好的职业前景。这些措施不仅激发了员工的积极性和创造力还增强了企业的凝聚力和向心力使得创都公司在激烈的市场竞争中始终保持着旺盛的发展势头。

Analog Microelectronics GmbH公司的发展小趣事

企业文化是企业的灵魂和精神支柱。创都公司自创立之初就注重企业文化的建设与发展。他们倡导“创新、协作、务实、进取”的企业精神,鼓励员工勇于创新、敢于担当。同时,公司还注重员工培训和职业发展规划的制定与实施,为员工提供了广阔的发展空间和良好的职业前景。这些措施不仅激发了员工的积极性和创造力还增强了企业的凝聚力和向心力使得创都公司在激烈的市场竞争中始终保持着旺盛的发展势头。

问答坊 | AI 解惑

刚看到关于3G的投票,有感~~

联通收了网通,大家感觉有没有变化,尤其是上网和固话那块 之前发生了个小事,好在比较及时的解决了 但是当时遇到时,觉得服务太差了,后来解决问题的速度和态度还算不错,大家有没有同样的感觉?…

查看全部问答>

在这里宣泄一下我对我以后工作的忧虑和困惑

二月二十四号那天, 我心血来潮地去了一趟我签约的那家在重庆的国营企业,,想去看个究竟。 之前认识了一些比我高一届的师兄师姐们在那公司,经常在群里和他们聊天, 感觉到的气氛就是他们进入公司以后,心理落差比较大。 他们常常对我说, ...…

查看全部问答>

乐图医疗行业120急救车无线视频监控解决方案

  在现代化的城市中,医疗救援系统是城市保障体系中的重要组成部分,120急救中心承担着医疗救援指挥中心的任务,完成急救、大型社会医疗保障及“110”联动等任务,对于保护人民群众的生命安全有着不可替代的作用。随着无线监控产品的日渐成熟,越 ...…

查看全部问答>

关于gpio中断的问题

一般情况下,都是把I/O配置为输入,然后配置中断模式,我现在把I/O口配置为输出,然后配置中断模式。从内部给这个口输出高低电平,这样产生的中断有问题吗?…

查看全部问答>

香主,请教个问题---TIM的

输入捕获模式下:我现在TIM2_CH2,TIM2_CH3都是输入一个频率定期变化的PWM波。并且都可以用输入捕获方式(在中断服务程序中完成两次上升沿的捕捉,然后计算出频率),已经正确。现在有个问题,因为我的频率最高是10Hz的,因此周期为0.1ms=100us ...…

查看全部问答>

一个基本语句

想问问大家:这两个语句是不是同一个意思啊?P1DIR|=0X00和P1DIR&=~0X01…

查看全部问答>

arm linux驱动开发

要具备的能力: 1.linux基本原理和基础操作 2.C语言是基础。(指针,结构体是重点)   学习方法: 看代码——》编写驱动程序 养成好的编程习惯 思维方式的转变,把arm当成计算机来看(头脑中要用操作系统的概念)————》学习窍门 ...…

查看全部问答>

请教高手们SPI烧录器问题怎么设计才能速度最快呢

请教高手们SPI烧录器问题怎么设置速度最快呢   Post By:2012-2-27 17:44:42 请教各位高手一个问题哈, 想做个一拖八的SPI FLASH 烧录器 ,目前市面上一拖8的烧录器,都是 先拷贝一个FLASH 4K 数据,然后接着拷贝另外一个FLASH 的4K数 ...…

查看全部问答>

公司过零检测的电路,一起讨论一下!

这是公司工程助理设计的一个过零检测!求讨论!…

查看全部问答>