ARM简单了解

 1 为什么要学习底层课程?   
    1 解释应用层
    2 为我们的职业发展更长远做准备

2 为什么要学习ARM?
    1 学习一款硬件平台,一款主流的嵌入式平台
    2 为后边底层课程做铺垫

3 ARM课程学什么?

    汇编语言(arm指令集)+裸机编程

1 ARM介绍 
    1.1嵌入式系统:嵌入式软件+嵌入式硬件

    1.2 原理图
        flash: nor flash-->存放数据+运行程序
               nand flash-->存放数据 

    1.3arm系统结构介绍

        编程模型
        ARM 采用的是32位架构:32位指的是CPU一次处理指令的能力是32位。    
        cpu的工作就是周期性去处理指令。
        周期性:看CPU的主频,2.4GHz,该CPU在1S中内取2.4G条指令来处理。
                周期=1/2.4G  S

       arm内核的状态和工作模式
            ARM内核有两种工作状态:ARM态--》默认状态--》使用ARM指令集(32bits)
                                            thumb态-->使用Thumb指令集(16bits)
            当ARM内核处于ARM态时,该内核有8种工作模式:
            User : 非特权模式,大部分任务执行在这种模式
            FIQ :   当一个高优先级(fast) 中断产生时将会进入这种模式
            IRQ :   当一个低优先级(normal) 中断产生时将会进入这种模式
            Supervisor :当复位或软中断指令执行时将会进入这种模式 svc
            Abort : 当存取异常时将会进入这种模式
            Undef : 当执行未定义指令时会进入这种模式
            System : 使用和User模式相同寄存器集的特权模式
            Cortex-A特有模式:
            Monitor : 是为了安全而扩展出的用于执行安全监控代码的模式;
                        也是一种特权模式

2、汇编指令

       cmp:比较指令,会自动影响CPSR的标志位

       指令机器码:每一条ARM指令都对应唯一的一条指令机器码(32bit)

       数据处理指令
              算术指令:        ADD     ADC     SUB     SBC     RSB     RSC
              逻辑指令:        AND     ORR     EOR     BIC
              比较指令:        CMP     CMN     TST     TEQ
              数据搬移:        MOV     MVN

      合法立即数
              立即数:汇编指令中操作数是一个小于等于32bit位的数为立即数
              合法立即数:是可以被mov指令装在到寄存器中的立即数,该数中最多只有8bit是
                                   有效位,其他位为0。

       ldr伪指令      
       ldr rd,=<const>  可以被编译器编译成以下三种指令: mov   mvn  ldr汇编指令  

      移位指令
      lsl  lsr asr ror rrx

      分支指令
      b  bl
      用法:b/bl  标号(地址)

      单字或单字节传送指令
            ldr  ldrh  ldrb: 内存---》寄存器
            str   strh  strb:寄存器---》内存    

      块传送指令
             是指一次可以传送多个寄存器的内容到一片内存,或者将一片内存的内容传送
        到多个寄存器中。
        ldm:将多个内存单元的内容传送到多寄存器中去。 内存---》寄存器
        stm:将多个寄存器的内容传送到多个内存单元中去。寄存器---》内存 

        swp--》软交换指令  寄存器《-----》内存
        swp(b)  r1,r1,[r0]

       操作psr-->mrs msr
        可以操作cpsr spsr
        处理器模式切换:SVC--->usr
        mrs r0,cpsr
        bic r0,#0x1F
        orr r0,#0x10
        msr cpsr,r0

       软中断
              中断 :是一个过程,是指CPU在执行当前程序的过程中插入了
                         另外一段程序的执行过程。
              中断的类型:1 软件中断--》由程序发起的中断,是预先设计好的,是可控的
                                    2 硬件中断--》因为硬件故障导致的中断,硬件中断不可控。

3、汇编文件

      1 汇编文件
            1 异常向量表
            2 reset
               irq_hander-->保存现场 bl do_irq  恢复现场
            
      2  C文件   1  initkey()-->9步
                       2  do_irq()-->第三阶段
                       3 main()
                          while(1);

4、看门狗:是一个定时器电路,一般有一个输入端叫喂狗端,一个输出端连接到mcu
                的reset端,MCU正常工作时,每隔一段时间会输出一个信号到喂狗端,
                看门狗电路里的递减计数器(递增计数器)的值会更新,如果超过一定时间
                不喂狗(一般是程序跑飞或死机或死循环),递减计数器的值会递减到0,
                看门狗电路会给MCU一个复位信号,使MCU复位。

      目标:5S实现开发板重启
      分析:1 给WTDAT放多大的值,让他递减到0可以耗时5S?        
                    t_watchdog = 1/(PCLK/(Prescaler value + 1)/Division_factor)
                                        =1/(100M/250/128)=1/3125(s)
                    每隔1/3125(s)给看门狗一个输入信号,每来一个输入信号,递减计数器减1

            看门狗电路的原始时钟脉冲是100Mhz,假设一级分频是250,二级分频是128
            经过两级分频后:100M/250/128=3125hz
            3125hz:1秒钟给看门狗发送了3125个脉冲
                (每隔1/3125 S给看门狗发送一个脉冲信号)
            每隔1/3125 S给看门狗发送一个脉冲信号,那么需要发送多少个脉冲信号
            才能耗时5S?   5/(1/3125)=5*3125=15625个
            每给看门狗一个信号,WTDAT的值就会递减1(1/3125),那么需要给WTDAT多大的值
            才能耗时5S? 5/(1/3125)=5*3125=15625次

            24.1.1.1 WTCON   0x10060000  (8-15)  249   (3-4) 0x3  (5)1   (0)1
            26.4.1.3 WTCNT  0x10060008   (0-15)15625       

5、 pwm:脉冲宽度调制器
      作用:用来调制时钟脉冲的样式  100Mhz--->1Mhz
      占空比:高电平时间/时钟周期   
      目标:PWM驱动蜂鸣器响
      已知:人耳能够听到声音频率的范围为20~20000hz,假设400hz
                pclk=100Mhz
                  假设一级分频:25
                    二级分频:4
                100M/25/4=1Mhz
                将1Mhz的脉冲输入到逻辑控制器,逻辑控制器将它降频成400hz
                TCNTB0--->存放用多少个输入波形产 生一个输出波形--》2500
                TCMPB0-->存放高电平持续时间  1/2 *2500=1250
      1 接线  BZ1(BUZZER)-->CON2--->CON1--->U1A(GPD0_0)-->pwm输出

      配置:
            1 设置GPD0_0为PWM输出模式
                6.2.2.31 GPD0CON  0x114000A0  (0-3)0x2
            2 一级分频  25   TCFG0
                24.5.1.1 TCFG0  0x139D0000  (0-7)24
            3 二级分频  4     TCFG1
                24.5.1.2 TCFG1  0x139D0004   (0-3)0x2
            4 TCNTB0:输入波形的个数2500
                24.5.1.4 TCNTB0  0x139D000C  (0-31) 2500
            5 TCMPB0:高电平持续时间2500*1/2
                24.5.1.5 TCMPB0 0x139D0010   (0-31)2500/2
            6 TCON:更新规则
                24.5.1.3 TCON  0x139D0008  
                (3)1:表示输出波形个数从2500减到0,再给TCNTB0=2500,然后继续
                        减到0,循环给TCNTB0
                (1)1:表示立马修改寄存器TCNTB0和TCMPB0的值为新值
                (1)0:表示不立即修改寄存器的值,而是等到本次TCNTB0的值一致减到
                            0后,在修改TCNTB0和TCMPB0.
                (0)1:使能输出端口

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值