首先討論一下s3c24440的時鐘和DMA部分,也是非常重要的兩個部分。 s3c2440的時鐘與電源管理模塊包括3個部分,時鐘控制,USB控制和電源控制。時鐘源如下圖有兩個,左邊的是外部晶振提供,右邊是外部時鐘提供。 由這個表可以看出來時鐘源的選擇是在引導的時候由OM[3:2]引腳決定的。 如圖,剛上電一小段時間后,FCLK=晶振時鐘,等待4個時鐘周期后,PLL鎖存有效,自動插入一段PLL Lock Time,即PLL鎖定時間,此時,FCLK停止震蕩,CPU停止工作,Lock time的長短由寄存器LOCKTIME設定。PLL Lock Time之后,MPLL輸出正常,CPU工作在新的FCLK下。 有兩個PLL,一個是MPLL,一個是UPLL。MPLL分頻得到FCLK(用于CPU),HCLK(用于AHB BUS),PCLK(用于APB BUS)。UPLL產生UCLK給USB提供48M或96M時鐘。上邊的是s3c2440a的體系結構圖,最上邊的是CPU wrapper,也就是CPU核,中間的AHB BUS相當于系統總線,APB相當于IO總線。中間的Bridge相當于康柏(Compaq)公司提出的南橋。這個Bridge的作用就是連接高速和低速總線。這種結構類似于: 通過配置MPLLCON的MDIV,PDIV,SDIV可以獲得MPLL。通過公式: Mpll = (2 * m * Fin) / (p * 2S) m = (MDIV + 8), p = (PDIV + 2), s = SDIV AHB BUS(advanced high-performance bus)上連接的是高速設備如LCD,USB Host,ExtMaster,SDRAM等。注意他們是通過控制器間接跟總線連接的。APB BUS(advanced peripherals bus)連接的就是低速的外圍設備。 DMA對s3c2440的性能非常重要。S3c2440支持位于系統總線和外圍總線之間的4個通道的控制器。每個DMA控制器通道無限地執行系統總線上的設備或外設總線上的設備之間數據搬移。 DMA有3種狀態: 狀態一:作為初始狀態,DMA等待DMA請求,一旦請求到達,進入狀態二,在此狀態,DMA ACK和INT REQ都為0。 狀態二:在此狀態,DMA ACK變成1且計數器(CURR_TC)從DCONN[19:0]裝載。注意DMA ACK直到后邊被清除一直保持1。 狀態三:在此狀態,進行DMA原子操作的子狀態機被初始化。此子狀態機從源地址讀取數據并寫入目的地址。此操作應該考慮數據大小和傳輸大小(single or burst),而在全服務模式whole service mode中,次操作一直被重復直到計數器(CURR_TC)變成1;而在單服務模式single service mode中,此操作僅被執行一次。當計數器(CURR_TC)變成0且外部中斷設置DCON[29] 寄存器被置1,主狀態機發出中斷請求信號(INT REQ)。另外,遇到以下情況,其清除DMA ACK。 (1)在全服務模式下計數器(CURR_TC)變成0 (2)在單個服務模式下計數器原子操作完成 外部DMA請求/應答模式: 有3種類型的外部DMA請求/應答協議(單服務請求,單服務握手和全服務請求模式)。 請求模式和服務模式的對比: -如果XnXDREQ 保持有效,下個傳輸馬上開始,否則它會一直等到XnXDREQ 有效。 握手模式 如果XnXDREQ 無效,DMA 在兩個周期內將XnXDACK 設無效。否則他會一直等 XnXDREQ 無效。 當需要DDMA操作的時候,外部DMA請求引腳XnXDREQ置為低電平,此時,DMA控制器向CPU發出占用總線的請求,當總線請求成功后,XnXDACK變為低電平,表示CPU已將總線使用權交給了DMA控制器,可以進行數據傳輸。當數據傳輸完成后應答信號XnXDACK置為高電平,通知CPU完成一次數據傳輸。 作者:李萬鵬 |