2、系统控制器配置(时钟源设置)
系统控制器主要控制三个PLL生成对应的时钟:ARMCLK、HCLK、PCLK;
目前学习使用的时钟源是12MHz的晶振。
通过S3C6410的系统控制器章节可以知道主要配置的是对应的分频系数、多路复用的时钟源选择、对应的PLL控制器等。
为了机器满载运行,这里需要生成的时钟频率为ARMCLK=667MHz(最大值),HCLK=133MHz,PCLK=66MHz;
根据S3C6410的Table 3-2可知,对应的APLL = 667MHz, MPLL=266MHz, 分频系数DIV(arm) = 0, DIV(hclkx2) = 0, DIV(hclk) = 1, DIV(pclk)=3, DIV(clkjpeg)=3, DIV(clksecur) = 3
CLKMFC使用默认值133MHz,则CLK_DIV0[31:28]为0b0001, CLK_SRC[4]=0,这里133MHz为最大值,若需要降频,则增大CLK_DIV0[31:28]的分频系数;
CLKCAM也使用最大值133MHz,根据Figure 3-7可知,该时钟由HCKX2分频得出,则CLK_DIV0[23:20]=0b0001;
时钟从12MHz切换到我们指定的稳定频率,需要一定的时间,在这段时间内需要锁定PLL,锁定的时间通过对应的XPLL_LOCK寄存器控制,这里使用默认值,则对应的XPLL_LOCK值为0xFFFF;
为了PLL生成对应的频率,需要设置对应的PLL_CON寄存器,通过P(142)的表格可知,APLL_CON推荐值为MDIV=333, PDIV=3, SDIV=1;
已知F(out) = 266, F(in)=12,查表可知MPLL_CON的推荐值为MDIV=266, PDIV=3, SDIV=2;
目前不使用EPLL,所以EPLL_CON0[31]=0;
综上:时钟配置的步骤为:
1)、确定需要的时钟频率;
2)、确定对应的分频系数;
3)、确定对应PLL的MDIV、PDIV、SDIV的值;
4)、确定切换时钟源后达到稳定频率需要的锁定时间;
5)、设置时钟源生成频率
ps:
1)、在设置寄存器的各个参数之前,需要将CPU设置为异步模式;
涉及的寄存器有:CLK_DIV0、APLL_CON、MPLL_CON、CLK_SRC
1) 时钟源选择:使用12MHz的晶振,所以OM[0] = 0
2)PLL时钟源选择寄存器:
CLK_SRC[0] = 1, CLK_SRC[1] = 1
OTHERS[6] = 0
MISC_CON[19] = 1
uart:
CLK_SRC[13] = 1
SPI0:
CLK_SRC[15:14] = ?
SPI1:
CLK_SRC[17:16] = ?
MMC:
CLK_SRC[7:0] = ?
CLK_SRC[23:18] = ?
3)分频系数设置与门控开关
设置DIV(hclkx2): CLK_DIV0[11:9] = 0
设置DIV(hclk): CLK_DIV0[8] = 1
设置DIV(pclk): CLK_DIV0[15:12] = 3
设置DIV(clkjpeg): CLK_DIV0[27:24] = 3
设置DIV(clksecur): CLK_DIV0[19:18] = 3
打开门控:HCLK_GATE = 1
PCLK_GATE = 1
SCLK_GATE = 1
uart:
设置DIV(mpll): CLK_DIV0[4] = 0
设置DIV(uart): CLK_DIV2[19:16]= ?
SPI:
设置DIV(spi): CLKDIV2[7:0] = ?
MMC:
设置DIV(mmc): CLKDIV1[11:0] = ?
4)设置PLL锁定时间与XPLL_CON寄存器
APLL_LOCK = 0xFFFF;
MPLL_LOCK = 0xFFFF;
APLL_CON[25:16] = 333
APLL_CON[13:8] = 3
APLL_CON[2:0] = 1
MPLL_CON[25:16] = 266
MPLL_CON[13:8] = 3
MPLL_CON[2:0] = 2
EPLL_CON0[31] = 0