基于PL022 SPI 控制器 海思3516系列芯片SPI速率慢问题深入分析与优化( 四 )

循环体对应的就是这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 的速率问题 。

推荐阅读