ok6410時鐘 筆記

來源:互聯網
上載者:User

下面這張圖,就是6410的系統時鐘原理圖:

    6410的時鐘頻率決定公式:FOUT
= MDIV * FIN / (PDIV * 2^SDIV)   其中這幾個值(MDIV,PDIV,SDIV)都在APLL_CON和MPLL_CON中。   FIN就是我們系統輸入時鐘,ok6410是12Mhz。

   要得到最後的輸出時鐘都要設定  DIV分頻器
   ARMCLK = DOUTAPLL / (ARM_RADIO + 1)

     CLK_DIV0 mainly controls the system clocks and special
clocks of multimedia IP s. The output frequencies of 
APLL and MPLL are divided by ARM_RATIO and MPLL_RATIO. HCLKX2 clock is the base clock of other 
operating system clocks and divided by HCLKX2_RATIO. There is operating frequency limitation. The maximum 
operating frequency of HCLKX2, HCLK, and PCLK are 266MHz, 133MHz, and 66MHz, respectively. NAND, 
SECUR, JPEG operating clock cannot exceed 66MHz. MFC and CAM operating clock cannot exceed 133MHz. 
This operating clock condition must be met through CLK_DIV0 configuration.

   這是手冊上的一段話,也就是HCLK*2的頻率不能超過266Mhz。jpeg,cam頻率都有限制。

APLL給ARM
CPU使用
  MPLL給主裝置、HCLK(記憶體,DDR),PCLK(外設片上模組)
  EPLL給其它模組

 非同步模式: OTHERS寄存器設定為非同步模式
  讀入OTHERS記憶體的值,並bic清0xc0
  當arm時鐘和Hclk不一樣的時候使,要設定成非同步 

  迴圈判斷,等待設定完成

 分頻設定:要使我們的時鐘正常工作,還要設定相應的分頻參數,具體如下:

  分頻參數主要在CLK_DIV0裡面設定。

 
設定CLK_DVIO
  設定ARM_RATIO 0 主核分頻為1分頻
  設定HCLCKX2_RATIO 1 將輸入的時鐘進行2分頻
  設定HCLK_RATIO 1 再將輸入的時鐘2分頻,能供記憶體使用量
  設定PCLK_RATIO 3 其他RATIO的設定


設定流程:

 
                                                           

/*************************************************************************//*名稱:系統時鐘設定                                                     *//*參數:ARM_CLK=532 HCLK=133 HCLKX2=266 PCLK=66.5                        *//*************************************************************************/#define rAPLL_LOCK     (*((volatile unsigned long *)0x7E00F000))#define rMPLL_LOCK     (*((volatile unsigned long *)0x7E00F004))#define rEPLL_LOCK     (*((volatile unsigned long *)0x7E00F008))#define rAPLL_CON      (*((volatile unsigned long *)0x7E00F00C))#define rMPLL_CON      (*((volatile unsigned long *)0x7E00F010))#define rCLK_SRC       (*((volatile unsigned long *)0x7E00F01C))#define rCLK_DIV0      (*((volatile unsigned long *)0x7E00F020))#define rCLK_DIV1      (*((volatile unsigned long *)0x7E00F024))#define rCLK_DIV2      (*((volatile unsigned long *)0x7E00F028))#define rOTHERS        (*((volatile unsigned long *)0x7E00F900))#define ARM_RATIO     0   /* ARMCLK = DOUTAPLL / (ARM_RATIO + 1)    */#define HCLKX2_RATIO  1   /* HCLKX2 = HCLKX2IN / (HCLKX2_RATIO + 1) */#define HCLK_RATIO    1   /* HCLK = HCLKX2 / (HCLK_RATIO + 1)       */#define PCLK_RATIO    3   /* PCLK   = HCLKX2 / (PCLK_RATIO + 1)     */#define MPLL_RATIO    0   /* DOUTMPLL = MOUTMPLL / (MPLL_RATIO + 1)     */#define SDIV    1#define PDIV    3#define MDIV    266#define EN    1         //使能PLLvoid Clock_Init(){rAPLL_LOCK = 0x0000ffff;rMPLL_LOCK = 0x0000ffff;rEPLL_LOCK = 0x0000ffff; //時鐘鎖存時間設定rOTHERS &= ~( 3 << 6); //將時鐘設定成非同步模式while( (rOTHERS & 0xf00) != 0 );//等待進入非同步模式rCLK_DIV0 = ARM_RATIO | (MPLL_RATIO << 4) | (HCLK_RATIO << 8) | (HCLKX2_RATIO << 9) | (PCLK_RATIO << 12);//設定CLK_DIV0的分頻參數rAPLL_CON = SDIV | (PDIV << 8) | (MDIV << 16) | (EN << 31);//設定FOUT=532MrMPLL_CON = SDIV | (PDIV << 8) | (MDIV << 16) | (EN << 31);//設定FOUT=532MrCLK_SRC = 0x03;//時鐘源選擇}

在彙編啟動代碼中,在跳轉到main函數之前,加上一下一句,即可設定時鐘
   bl clock_init

    main函數,我就按照韋東山老師的視頻教學上說的,寫流水燈代碼,可以看到如果延時不夠,則流水燈跑得非常快。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.