循环体对应的就是这5句
0x00010460 <+12>: ldr r3, [sp, #4]0x00010464 <+16>: cmp r3, #290x00010468 <+20>: add r3, r3, #10x0001046c <+24>: str r3, [sp, #4]0x00010470 <+28>: bls 0x10460 <hi_spi_delay+12>
我所使用的芯片采用Cortex-A7架构,我实在没找到它的指令周期的文档,这里用Cortex-A9的替代一下,ARM官网文档如下 https://developer.arm.com/documentation/ddi0388/f/Instruction-Cycle-Timings?lang=en ,跳转指令的周期是不确定的,其他4个指令的都是单周期指令,循环中大多情况都是跳转,只有最后一次是不跳转,我们也按单周期计算好了 。由此可知,循环一次需要5个周期 , CPU的主频是900MHz,假设CPU主频固定 , 不超频,也不降频进入低功耗模式,那么循环一次耗时 1s / 900MHz * 5 = 5.55ns
, 这可以说是一个很精确的值了,同样的条件下可以算出需要的循环次数为 160 / 5.55 = 28.8
,向上取整为29次 。是不是和我目前使用的循环计数30基本一致?
好了 , 到此为止开发过程中遇到的问题还有我自己的疑惑都讲完了,有问题欢迎大家讨论 。
如果你有朋友正好在海思工作,请将本文转发给他,我不知道海思其他产品线的芯片会不会也有这个问题 。我这样写的代码多少有些随意,希望海思官方能优化一下 SPI 的速率问题 。
推荐阅读
- 基于vite3+tauri模拟QQ登录切换窗体|Tauri自定义拖拽|最小/大/关闭
- 痞子衡嵌入式:i.MXRT中FlexSPI外设不常用的读选通采样时钟源 - loopbackFromSckPad
- 基于tauri+vue3.x多开窗口|Tauri创建多窗体实践
- 提高工作效率的神器:基于前端表格实现Chrome Excel扩展插件
- 基于雪花算法的增强版ID生成器
- 基于QT和C++实现的翻金币游戏
- Mysql单表访问方法,索引合并,多表连接原理,基于规则的优化,子查询优化
- 基于tauri打造的HTTP API客户端工具-CyberAPI
- 基于纯前端类Excel表格控件实现在线损益表应用
- 知识图谱实体对齐2:基于GNN嵌入的方法