3.19号arm

1. 混合编程

所谓的混合编程就是c语言资源和汇编资源的相互调用

思想:将汇编的标签当作C语言的函数使用

           将C语言的函数当作汇编的标签使用

1.1 汇编调用c语言

1.2 C语言调用汇编

1.3 c语言内联汇编

在某一些特定的场景下需要在c语言中直接使用汇编的语法,此时需要内联汇编。内联汇编的实现需要通过asm关键字进行修饰

2. 软件编程控制硬件的原理(重点)

 

CPU可以执行的指令

数据处理指令           跳转指令         内存读写指令         状态寄存器传输指令         软中断产生指令

硬件的工作都是cpu进行控制的,软件编写的程序会保存到cpu的内存中,cpu从内存中得到硬件控制程序的指令,根据指令完成硬件控制

cpu想要控制各类硬件外设接口,必须将手伸到CPU外部,而能够让CPU将手伸到CPU外面的指令只有内存读写指令,换句话说,CPU通过对内存的读写完成对于硬件的控制

一个芯片厂商在生产一个芯片时,会在soc内部固化一段内存,这段内存占据了内存的0-4G寻址空间一部分。这段内存称为特殊功能寄存器组织。每一个外设接(GPIO\UART\IIC\DMA\TIM...) 都会在这个寄存器组织中有自己对应的寄存器组织,当CPU对特殊功能寄存器组织进行数据的读和写,就可以让对应的外设接口进行工作

3. GPIO实验

通过GPIO实验,编写GPIO控制程序,可以控制芯片的GPIO管脚输出高低电平,进而控制LED、风扇、蜂鸣器进行工作

作业

.text 
.global _start
_start: 
	@设置使能时钟  把RCCMPAHB4ENSETR寄存器的第四位设置为1
    ldr r0,=0x50000a28
    ldr r1,[r0]
    orr r1,r1,#(0x3<<4)
    str r1,[r0]
 
    @设置引脚为输出模式
    ldr r0,=0x50006000
    ldr r1,[r0]
    bic r1,r1,#(0x3<<20)
    bic r1,r1,#(0x3<<16)
    orr r1,r1,#(0x1<<20)
    orr r1,r1,#(0x1<<16)
    str r1,[r0]
 
    ldr r0,=0x50007000
    ldr r1,[r0]
    bic r1,r1,#(0x3<<20)
    orr r1,r1,#(0x1<<20)
    str r1,[r0]
 
    @设置引脚为推挽输出
    ldr r0,=0x50006004
    ldr r1,[r0]
    bic r1,r1,#(0x1<<10)
    bic r1,r1,#(0x1<<8)
    str r1,[r0]
 
    ldr r0,=0x50007004
    ldr r1,[r0]
    bic r1,r1,#(0x1<<10)
    str r1,[r0]
 
    @设置输出速度为低速输出
    ldr r0,=0x50006008
    ldr r1,[r0]
    bic r1,r1,#(0x3<<20)
    bic r1,r1,#(0x3<<16)
    str r1,[r0]
 
    ldr r0,=0x50007008
    ldr r1,[r0]
    bic r1,r1,#(0x3<<20)
    str r1,[r0]
 
    @设置是否有上拉下拉电阻
    ldr r0,=0x5000600c
    ldr r1,[r0]
    bic r1,r1,#(0x3<<20)
    bic r1,r1,#(0x3<<16)
    str r1,[r0]
 
    ldr r0,=0x5000700c
    ldr r1,[r0]
    bic r1,r1,#(0x3<<20)
    str r1,[r0]
 
loop:
    bl led1_on
    bl delay
    bl led1_off
    
    bl led2_on
    bl delay
    bl led2_off
 
    bl led3_on
    bl delay
    bl led3_off
 
 
b loop
 
 
 
 
 
 
 
 
@led1开启
led1_on:
    ldr r0,=0x50006014
    ldr r1,[r0]
    orr r1,#(0x1<<10)
    str r1,[r0]
    mov pc,lr
 
@led1关闭
led1_off:
    ldr r0,=0x50006014
    ldr r1,[r0]
    and r1,#(0x0<<10)
    str r1,[r0]
    mov pc,lr
 
@led2开启
led2_on:
    ldr r0,=0x50007014
    ldr r1,[r0]
    orr r1,#(0x1<<10)
    str r1,[r0]
    mov pc,lr
 
@led2关闭
led2_off:
    ldr r0,=0x50007014
    ldr r1,[r0]
    and r1,#(0x0<<10)
    str r1,[r0]
    mov pc,lr
 
    @led3开启
led3_on:
    ldr r0,=0x50006014
    ldr r1,[r0]
    orr r1,#(0x1<<8)
    str r1,[r0]
    mov pc,lr
 
@led3关闭
led3_off:
    ldr r0,=0x50006014
    ldr r1,[r0]
    and r1,#(0x0<<8)
    str r1,[r0]
    mov pc,lr
 
 
 
 
 
delay:
    ldr r5,=0x0f000000
mm:
    cmp r5,#0x0
    subne r5,r5,#0x1
    bne mm
    mov pc,lr

	

.end

相关推荐

  1. 3.19arm

    2024-03-21 07:08:02       18 阅读
  2. ARM CC编译错误和警告解释大全(1) 序列0-1000

    2024-03-21 07:08:02       39 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-21 07:08:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-21 07:08:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-21 07:08:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-21 07:08:02       18 阅读

热门阅读

  1. 將SqlServer表創建到hive腳本

    2024-03-21 07:08:02       20 阅读
  2. html 转pdf

    2024-03-21 07:08:02       15 阅读
  3. 【讲解Node.js常用的命令】进阶版

    2024-03-21 07:08:02       19 阅读
  4. 富格林:正视安全平台阻挠亏损

    2024-03-21 07:08:02       20 阅读
  5. Wpf-自定义状态控件

    2024-03-21 07:08:02       17 阅读
  6. vue-pdf的注意事项

    2024-03-21 07:08:02       20 阅读
  7. Codeforces Round 935 (Div.3 E F)

    2024-03-21 07:08:02       20 阅读
  8. C# SetWindowPos函数

    2024-03-21 07:08:02       15 阅读