MCU(RealTek)系统时钟及1ms中断设定

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

******************************************************************************* 学习内容:

1:Realtek的时钟

2:1ms 中断实现

3:volatile word time

20111027

******************************************************************************* 1:Realtek的时钟

如果把Scaler比作是一个系统的大脑,它控制着系统的各种动作行为;那么,时钟则可以比喻成是这个系统的心脏,它控制的是整个系统要以什么状态来工作,是兴奋亦或是休闲/睡眠。

时钟周期与机器周期的关系

时钟周期:指系统时钟频率,可以是直接来自外部XTAL,也可以是来自其它时钟来源,如PLL。

机器周期:指程序运行一个基本指令操作需要的时间,8051单片机需要12个时钟周期,AVR单片机只需要1个时钟周期,还有些单片的机器周期为6个时钟周期或者4个时钟周期。

Realtek的时钟周期来源可以有三个:

1:外部XTAL

2:内部时钟(Lower Power IC上才有)

3:外部XTAL经过M2PLL倍频分频后的时钟,在软体中的参数设定为:_EMCU_XTAL ,它的单位为K

以Lenovo Li2361机种为例:当XTAL使用的是27M Hz,实际系统正常跑的时钟为经过PLL倍频后的时钟:_EMCU_XTAL=33.5M Hz。

在DC OFF 或Powersaving时,时钟是以外部XTAL=27M Hz来跑。

具体设定看CMcuSelectFlashClk(bit select)这个函数:

由上可知,在正常模式下,系统使用频率比在powersaving或DC OFF时使用的时钟频率要高,相应系统的功耗会比较大。

因Lenovo_Li2361使用的这颗IC RTD2743PD并非LOW POWER 的IC,所以,它在POWER SAVING时,并未以一个更低的内部时钟来进行工作。

Realtek的嵌入式51内核的机器周期,可以是12个时钟周期,也可以是4个时钟周期,具体是以哪个机器来跑,可以参考寄存器:CKCON --8Eh,

当它设定为0x00时,表示当前的机器周期是以12个时钟周期来跑;

当它设定为0x01时,表示当前的机器周期是以4个时钟周期来跑。

在MCU初始化时,CKCON被初始化为0x00,表示系统的机器周期为12个时钟周期。

整个系统是使用哪一颗心脏在运行,就决定了这个系统在做某些行为的快与慢。

附件是之前在BenQ 机种上发生的一个BUG的视频文件,从中,我们可以看到,平常画OSD的速度是很快的,因为平常的情况下,整个系统的时钟心脏是在一个比较快的频率。

当某种条件下,系统的时钟心脏发生的突变,变成了以一个很慢的频率在动作时,连画一个OSD所需要的时候都变得很长,OSD可以认为是一点一点在慢慢的画出来。(这个BUG 目前依然无解,因为无法找到它是满足什么条件下进去了那么慢的时钟心脏,当然,会出现这么慢的情况还有另外一个可能,就是系统不断的执行中断,导致正常画OSD的动作被无限次中断给打断,导致速度变慢,我个人是倾向于是进入一个错误的时钟在跑整个系统。)

2:1ms 中断实现

软体中有设计一个功能:每隔1ms执行中断一次,用来作为系统的一些时间事件的计数使用,比如开机LOGO要2s后关闭,nosignal的OSD要6s后关闭等等。

1ms一中断的功能,Realtek的CODE是使用8051内部资源中的Timer0来实现的。

在AC一上电的时候,做CMcuInitial()时,把TMOD设定成0x11.

TMOD(定时器/计数器方式控制寄存器)介绍:

GATE:当GATE设定为0时,计时器/计数器是否能工作,取决于寄存器TRx是否为1,初始化时,TRx=0,计时器/计数器不工作,在程序往下执行时,TRx会被置成1,此时,计时器/计数器才能真正的开始工作。

C/T:选择它是作为计时器还是计数器来使用?

C/T=0:当前作为计时器使用

C/T=1:当前作为计数器使用

M1/M0:设定计时器/计数器的计数模式:

0/0: 13位定时/计数方式,最多能计到2的13次方,也就是8192次

0/1:16位定时/计数方式,最多能计到2的16次方,也就是65536次

1/0,1/1 :都是8位定时/计数方式,最多能计到2的8次方,也就是256次

由上可知,Realtek的程序中,把TMOD=0x11,让Timer0/ Timer1都工作在计时方式,且都是设定为16位的计时器。

计时器中断介绍:

计时器中断可以用以下图形来形象的描述:

计时器可以比喻成一个水桶,当以每个系统时钟的速度往水桶里进水,在不做任何设定处理的情况下,要把一个16位计时器的水桶装满水,需要65536个时钟周期。当我们需要一个比较快的速度就让它装满水,只需要往桶里预先装一些水,再以这个系统时钟的速度往桶里装水,就可以实现在我们要求的时间内就产生一个溢出中断。

Lenovo Li2361机种使用的是一颗27M的XTAL,而正常工作的时候,系统时钟

_EMCU_XTAL=33.5M Hz。

正常工作时,计时器0的预丢值如下:

_TIMER0_COUNT_HBYTE = 0xF5

_TIMER0_COUNT_LBYTE = 0x39

由计时器0,工作在16位计时器模式下,预丢值为:0Xf539,这时,产生1ms溢出中断的时间计算公式如下:

其中:

t:表示溢出时间

M:表示系统机器周期,Lenovo Li2361的软体设定系统周期为12

F:表示系统时钟,Lenovo Li2361的软体设定下,正常工作时钟周期为33.5MHZ,DC OFF / PowerSaving下时钟周期为27MHZ

n:表示当前计时器工作模式是多少位的计时器,软体中设定为16位。

X:表示计时器的预丢值,正常工作时的预丢值为0XF539=62777

把以上参数带到公式:

相关文档
最新文档