TQ210的系统时钟配置和串口配置非常简单,本文从TQ210的系统时钟配置开始讨论。
TQ210的时钟配置跟2440/6410的时钟配置差不多,只是锁相环的个数略有不同,配置步骤是一样的。配置系统时钟,无非要经过以下几个步骤:
(1)设置系统PLL锁定时间
(2)配置PLL
(3)配置各模块分频系数
(4)切换到PLL时钟
简单的看着四步似乎没有头绪,但是看到手册中的“S5PV210时钟生成线路图”就可以理解了,现在截图如下:
上图中无非就三种模块,PLL、MUX和DIV,MUX控制时钟源选择,PLL负责生成PLL时钟,DIV负责分频。
为了系统稳定,在设计电路时我们一般不会使用太高频率的晶振(避免高频线间/层间干扰),但是,S5PV210的内核需要的工作频率很高(最高可以达到1G),这中情况下,我们通常是通过锁相环(英文简称PLL)来对外部时钟源进行倍频,然后供内核使用(在TQ210开发板上采用的是12M晶振),因此,S5PV210提供了4个PLL(具体四个PLL的用途可以自己阅读手册),分别是APLL、MPLL、EPLL和VPLL,通过配置S5PV210提供的锁相环控制寄存可以设置锁相环的倍频系数,使内核工作频率达到800M或者1G。需要注意的是PLL设置完成之后并不能立刻稳定的工作,需要一个起振过程,在这段时间内PLL的输出频率很不稳定,因此,内核的工作也是很不稳定的,为了解决这个问题,S5PV210提供LOCK_TIME(锁定时间)模块(通过设置相应的LOCK_TIME寄存器可以设定锁定的时间长度),当锁相环控制寄存器的值发生改变时,系统会锁定内核,锁定内核时CPU不工作,此时锁定模块会根据LOCK_TIME设定的值进行计时,计时完成后CPU才会使用PLL提供的时钟信号工作。
默认状态下内核使用外部时钟源提供的时钟,配置好PLL后需要设置相应的MUX,使内核在PLL提供的时钟信号下工作。从上面的时钟生成线路图中还可以看到很多MUX,我们可以根据实际要求进行配置。注意,选通PLL的MUX应该在设置完分频之后配置。
内核可以工作在1G的时钟信号下,而其他设备工作频率较低,因此,需要根据实际要求进行分频,分频的值并不是随意的,应该根据手册上提供的参考值进行配置,以下是各模块的最高工作频率:
这样,配置完PLL和分频之后选通PLL,使CPU在高频模式下工作。
以上S5PV210的系统时钟配置逻辑,可能说了这么多您也很难理解,这时,您应该参考代码、手册和本文进行理解。S5PV210系统时钟配置的代码很多,这里我就不贴出来了,下面,我们讨论一下S5PV210的串口部分。
S5PV210的串口配置比起系统时钟来讲更为简单。学习串口应该先了解下串口的工作原理,认识一下串口,具体的工作原理可以阅读手册的串口部分,需要知道串口的相关配置参数,如波特率、数据位、停止位、校验位等,流控制相关的也可以看看,理解后自行配置一下,我们这里只讨论下串口的配置,为了简单起见,我们以非FIFO模式为例进行讨论。
直接阅读手册的寄存器控制部分,第一个寄存器便是ULCON。ULCON可以配置数据位长度、停止位长度、教研模式和红外模式,如果需要设置为8N1,非红外模式则可以将ULCON配置为0x3。
第二个寄存器是UCON,我们只配置一下传输/接收模式和时钟源即可,其他的采用默认方式,为了简单,我们选择“中断或查询模式”,以PCLK为时钟源,因此,可以配置UCON为0x5|(1<<10)。
我们使用非FIFO模式,可以不设置UFCON寄存器。
UMCON是流控制相关的,我们也不作配置。
接下来的四个STAT寄存器是表征串口工作状态的,无需配置。
接下来的UTXH是发送缓冲区寄存器和URXH是接收缓冲区寄存器。
UBRDIV和UDIVSLOT是配置串口波特率的,算法也比较简单,手册上提供了三个约束公式:
DIV_VAL = UBRDIVn + (num of 1's UDIVSLOTn)/16
DIV_VAL = (PCLK/(bps X 16))-1
或者
DIV_VAL = (SCLK_UART / (bps X 16)) - 1
我们选择PCLK作为串口工作时钟源,PCLK的频率为66.5M,如果我们要设置串口波特率为115200则可以如下计算:
DIV_VAL = (66.5 X 10^6 / (115200 X 16)) - 1 = 35.07,故UBRDIV应该设置为35,
另外,0.07*16 + 1 = 2,所以UDIVSLOT中应该有两个1,故可以设置为0x3,当然也可以是0x88等,只要有两个1位就可以。
到这里,串口就配置好了,还是比较简单的,您配置完后还可以自己配置下FIFO和流控制,学完中断和DMA之后还可以配置为中断或者DMA模式,这里就不多说了。代码比较简单,网上的例子也比较多,我就不上传了。