基于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 的速率問題 。

推薦閱讀