七、mini2440裸机程序之定时器中断(2)时钟相关寄存器配置

 

1.相关寄存器介绍

 

    1)LOCKTIME


注:

这个寄存器主要是用于设置upll和mpll 的锁紧时间计数值 ,

 一般使用默认值最保险了.

 

    2)MPLLCON和UPLLCON


注:

①Mpll = ( 2*(MDIV+8)*Fin ) / ( (PDIV+2)*(2^SDIV) )

②Upll = ((MDIV+8)*Fin ) / ( (PDIV+2)*(2^SDIV) )

③600MHz<=(2*(MDIV+8)*Fin / (PDIV+2) ) <= 1.2GHz

④200MHz<=(2*(MDIV+8)*Fin / ( (PDIV+2) * 2^SDIV) ) <= 600MHz

⑤1<=(PDIV+2)<=62  , 1<=(MDIV+8)<=248

⑥MDIV和PDIV都不能为0 .

 

手册已经帮我们准备好了一些设置值, 可以从下表来选择合适的设置值:

注:

         对于UPLL来说 : MDIV =0x38 , PDIV = 2 , SDIV = 1. 这样从UPLL倍频出来的频率就能被设置为96.00MHz.

        对于MPLL来说 因为mini2440使用的是12MHz的输入频率 , 我们选择输出频率为405MHz就行 所以 : MDIV = 0x7f ,  PDIV = 2 , SDIV = 1 .

这样从MPLL倍频出来的频率就为405MHz了 .

        综上所述 , MPLLCON和UPLLCON的配置如下:(这两个值即使使用默认值也要写入相同值)

UPLLCON = (0x38<<12)|(0x02<<4)|(0x01<<0);(这个寄存器要在设置MPLLCON前设置,并且需要间隔大约7个NOP)

MPLLCON = (0x7f<<12)|(0x02<<4)|(0x01<<0) ;

 

 

    3)CLKCON


注:

这个寄存器用来禁止和使能外设时钟和模式的选择 .

采用默认值就行

 

 

 

 

    4)CLKSLOW


注:

这个寄存器暂时不会被用到

 

    5)CLKDIVN


注:

关于FCLK:HCLK:PCLK的分频比选择         1:4:4   也就是FCLK=405MHz , HCLK=101.25MHz , PCLK=101.25MHz (在上一篇可知HDIVN=2,PDIVN=0,HCLK4_HALF/HCLK3_HALF=0/0)

因为之前选择UPLL时钟为96MHz , 所以DIVN_UPLL=1才能使UCLK为48MHz .

HDIVN = 10b , PDIVN = 0b

 

综上所述 , CLKDIVN的配置如下:

CLKDIVN  =(1<<3)|(2<<1)|(0<<0)

 

   6)CAMDIVN


注:

这里只要把HCLK4_HALF/HCLK3_HALF=0/0就行了.

CANDIVN &= ~(0x03<<8);

 

     7)假如HDIVN不是0 , CPU总线模式必须从高速总线模式改变为异步总线模式通过使用下面指令(S3C2440不支持同步总线模式):


关于这部分,主要涉及到arm920t里面的协处理器的寄存器1 :control register的第30~31位 , 如下所示:

 

所以里面第二句指令应该为:

Orr r0 ,  r0 , #0xC0000000


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
看门狗(Watchdog)是一种硬件定时器,用于监视系统是否正常运行。如果系统正常运行,那么看门狗会在设定的时间间隔内被定期喂狗;如果系统出现异常,看门狗就会在时间间隔到达后触发中断或复位操作,以恢复系统的正常运行。 在Mini2440上,看门狗的控制寄存器位于WTDAT、WTCON和WTCNT中。其中,WTDAT用于设置看门狗的计数器初始值,WTCON用于配置看门狗的工作模式和计数器时钟源,WTCNT则是看门狗的计数器。 下面是一个简单的示例代码,用于启动看门狗并设置其定时时间为5秒钟: ```c #include "s3c2440_soc.h" void delay(int count) { while(count--); } int main() { /* 设置看门狗定时时间为5秒钟 */ WTCON = (0x1 << 5) | (0x3 << 3) | (0x1 << 0); /* 启动看门狗 */ WTCNT = 0x10000; while(1) { /* 喂狗 */ WTCNT = 0x10000; delay(100000); /* 业务处理 */ // ... } return 0; } ``` 在上述代码中,我们首先设置了看门狗的定时时间为5秒钟。然后在主循环中,我们每隔一段时间就喂狗一次,以保证看门狗不会触发中断或复位操作。同时,我们还可以在喂狗的时间间隔内进行业务处理。 需要注意的是,在实际应用中,我们通常不会像上述代码一样简单地启动一个看门狗并喂狗。实际上,我们需要在系统正常运行时定期喂狗,以确保看门狗不会触发中断或复位操作;同时,我们还需要在系统出现异常时及时处理异常并复位系统,以防止系统陷入死循环或其他错误状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值