ARM学习笔记(未整理版)--day06

本文详细介绍了如何根据芯片手册进行GPIO控制的具体步骤,包括找到正确的寄存器、理解寄存器的功能(如GPC1CON、GPC1DAT、GPC1PUD等),以及如何通过ARM汇编语言编写代码实现对GPIO的控制。

芯片手册看的方法
找到对应管脚后,要找到对应的寄存器,这个就是外设的寄存器,每个外设都有很多寄存器
通过某一个寄存器来控制相应的管脚从而控制相对应的硬件
现在要明确以下三点:
1.LED的GPC1_3的寄存器是哪个寄存器;
2.向寄存器写什么数代表是什么样的操作;
3.怎么写数据(向对应的内存地址写数据);
GPIO的操作是分组的,一组寄存器控制一个管脚
GPC1寄存器组是有6个寄存器
GPC1CON:控制寄存器,表示管理的管脚的个数,和管理哪些管脚,控制这个管脚是输入/输出/等的功能
GPC1DAT:寄存器数据寄存器,这个寄存器是想里边写数据
GPC1PUD:控制上拉电阻
通过原理图找到芯片手册的管脚,这些管脚都是芯片的管脚,输入输出都是针对CPU的,而编程也是针对CPU的,所以代码中把芯片手册中的功能写输出就是CPU输出给外设
上拉电阻,电阻接电源的,就是CPU不输出的时候,默认输出1
下拉电阻,电阻接地的,就是CPU不输出的时候,默认输出0
start:
    mov r1,#(1<<12)//这个立即数给到r1
    ldr r0,=0xE0200080 //带=好是伪指令,是把0xE0200080这个值给到r0,这是把GPC1_3的控制寄存器地址给到r0
    str r1,[r0]//把r1存储到r0中

    mov r1,#(1<<12)//这个立即数给到r1
    ldr r0,=0xE0200088 //带=好是伪指令,是把0xE0200089这个值给到r0,这是把GPC1_3的上下拉电阻的地址给到r0
    str r1,[r0]//把r1存储到r0中
以上是配置,控制寄存器,与上拉电阻的配置
loop:
    mov r1,#(1<<12)//这个立即数给到r1;
    ldr r0,=0xE020008C //带=好是伪指令,是把0xE020008C这个值给到r0,这是把GPC1_3的地址给到r0
    str r1,[r0]//把r1存储到r0中
delay:    
    mov r0,#0xff000000//延时时间
    sub r0,r0,#1
    cmp r0,#0
    bne delay
    b loop
死循环    
先编成.o文件,然后加上不要启动文件,不要库的编译选项
编译加参数:-Ttext 0x20008000(运行程序,必须加),任何程序都在内存中,0x20008000是运行的地址,程序在编译的时候就确定这个地址
内存范围:0x20000000~0x400000000
动态库是与运行地址无关的???
代码修改(读出,修改,写入)
start:
    mov r1,#(1<<12)//这个立即数给到r1
    ldr r0,=0xE0200080 //带=好是伪指令,是把0xE0200080这个值给到r0,这是把GPC1_3的控制寄存器地址给到r0
    ldr r1,[r0],把0xE0200080地址上的值(立即数)读给r1上
    orr r1,r1,(1<<12)
    bic r1,r1,#(7<<13) @清0操作,把13位的三位全部清0,这么做是为了防止改变其他位的东西
    str r1,[r0,#0]//把r1存储到r0中

    mov r1,#(1<<12)//这个立即数给到r1
    ldr r0,=0xE0200088 //带=好是伪指令,是把0xE0200089这个值给到r0,这是把GPC1_3的上下拉电阻的地址给到r0
    等价于,ldr r1,[r0,#8]
    str r1,[r0]//把r1存储到r0中
以上是配置,控制寄存器,与上拉电阻的配置
loop:
    mov r1,#(1<<12)//这个立即数给到r1;
    ldr r0,=0xE020008C //带=好是伪指令,是把0xE020008C这个值给到r0,这是把GPC1_3的地址给到r0
    str r1,[r0]//把r1存储到r0中
delay:    
    mov r0,#0xff000000//延时时间
    sub r0,r0,#1
    cmp r0,#0
    bne delay
    b loop

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值