ARM學習之時鐘體系結構

BLSxiaopanlaile發表於2017-08-20

今天在宿舍學習的是S3C2440的系統時鐘體系,這部分的難點不是很多,所以相對來說輕鬆點,但還是把感悟記錄下來吧。

1.S3C2440的的時鐘體系有哪些?它們分別有什麼作用?
答:以前一直有個小疑問,你說,這CPU執行那麼快,外部的裝置執行的就比較慢,那它們的時鐘源怎麼匹配呢?哦,今天算是差不多弄清楚了。因為它們有不同的時鐘源。就S3C2440來說,
它有三種時鐘源:
(1)FCLK:用於CPU核。
(2)HCLK:用於AHB匯流排上的裝置,比如CPU核儲存器控制器、中斷控制器、LCD控制器、DMA和USB主機模組等高效能的裝置。
(3)PCLK:用於APB匯流排上的裝置,比如WATCHDOG、IIS、I2C、PWM定時器、MMC介面、ADC、UART、GPIO、RTC和SPI等低速裝置。
產生這些時鐘源的簡要流程可以這樣描述:
(1)系統剛上電的時候,FCLK即等於外部輸入的時鐘。一般是12M或者24M的晶振。
(2)然後用軟體的方式開啟MPLL(鎖相環電路,用於提高系統時脈頻率),把12M或者24M的時脈頻率提高到100-400M(針對於S3C2440)。
(3)再然後,通過設定一些暫存器,可以改變FCLK、HCLK、PCLk的時脈頻率比例(比如說1:2:2)
這樣,其他的兩個時鐘源也就提高了。
要明白的是,系統在執行的時候,是三個時鐘源一起在工作,分別為不同的裝置提供不同的時脈頻率。當然,有些裝置對這些頻率還不是很“滿意”、它會自己進行一些倍頻或者分頻的工作。

2.本質上,定時器的工作原理是什麼?
答:定時器的工作原理簡要說起來其實也很簡單。就是利用系統給的時鐘(一般是PCLK)進行計數,當數計滿了,就會產生一次中斷。我們想要所長時間進行一次中斷,把這個數計算好就行了。

其他:在敲程式碼的過程中,發現一個小問題。書上說:就是在CPU在轉到中斷服務的時候,LR儲存的是前一個工作模式的的即將執行的地址,就中斷而言,是當前PC+4。可是給的程式碼例程裡計算返回地址的時候用的是SUB lr,lr,#4—–是lr-4,這不又回到需要中斷的指令了。有問題。
後來,查了一些資料才知道,可能是書上寫錯了,這是我摘自一篇部落格的話:
IRQ異常發生時,因為這個異常是在指令執行時候發生的,PC的值等於當前執行指令加8,然後將這個值儲存在LR中。但是LR暫存器中儲存的是PC+8,指向的是後面的第二條指令,如果不進行減4處理,將會漏執行一條指令,所以PC恢復的時候就需要LR減4,所以正常從子程式返回的時候會使用如:
SUBS PC, LR,#4 返回到當前指令的下一條指令

相關文章