系统时钟和定时器及对策措施.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
系统时钟和定时器 S3C2410/S3C2440的时钟控制逻辑既可以外接晶振,然后通过内部电路产生时钟源;也可以直接使用外部提供的时钟源,它们通过引脚的设置来选择。 时钟控制逻辑给整个芯片提供3种时钟:FCLK用于CPU核;HCLK用于AHB总线上设备,主要用于高性能模块之间的连接,比如CPU核、寄存器控制器、中断控制器、LCD控制器、DMA和USB主机模块等;PCLK用于APB总线上的设备,主要用于低带宽的周边外设之间的连接,比如WATCHDOG、IIS、I2C、PWM定时器、MMC接口、ADC、UART、GPIO、RTC和SPI。 为了降低电磁干扰、降低板间布线的要求,S3C2410/S3C2440外接的晶振频率通常很低,开发板上一般为12MHz,需要通过时钟控制逻辑的PLL提高系统时钟。S3C2410/S3C2440有两个PLL:MPLL和UPLL。UPLL专用于USB设备,MPLL用于设置FCLK、HCLK、PCLK。 上电时,PLL没被启动,FCLK即等于外部输入的时钟,称为Fin。若要提高系统时钟,需要软件来启动PLL,可跟随FCLK的图像了解启动过程。 (1)上电几毫秒后,晶振输出稳定,FCLK=Fin(晶振频率),nRESET信号恢复高电平后,CPU开始执行指令。 (2)可以在程序开头启动MPLL,设置MPLL的几个寄存器后,需要等待一段时间(Lock Time),MPLL输出才稳定。在这段时间内,FCLK停振,CPU停止工作。Lock Time的长短由寄存器LOCKTIME设定。 (3)Lock Time之后,MPLL输出正常,CPU工作在新的FCLK下。 FCLK、HCLK和PCLK的比例是可以改变的,设置它们三者的比例,启动MPLL只需设置3个寄存器(对于S3C2440的一些时钟比例,还需要额外设置一个寄存器)。 (1)LOCKTIME寄存器:用于设置“Time Lock”的长度。 (2)MPLLCON寄存器:用于设置FCLK与Fin的倍数。 (3)CLKDIVN寄存器:用于设置FCLK、HCLK、PCLK三者的比例。对于S3C2440的一些时钟比例,还需要额外设置一个寄存器CAMDIVN。 #define S3C2410_MPLL_200MHZ ((0x5c12)|(0x044)|(0x00)) #define S3C2440_MPLL_200MHZ ((0x5c12)|(0x014)|(0x02)) /* * 对于MPLLCON寄存器,[19:12]为MDIV,[9:4]为PDIV,[1:0]为SDIV * 有如下计算公式: * S3C2410: MPLL(FCLK) = (m * Fin)/(p * 2^s) * S3C2410: MPLL(FCLK) = (2 * m * Fin)/(p * 2^s) * 其中: m = MDIV + 8, p = PDIV + 2, s = SDIV * 对于本开发板,Fin = 12MHz * 设置CLKDIVN,令分频比为:FCLK:HCLK:PCLK=1:2:4, * FCLK=200MHz,HCLK=100MHz,PCLK=50MHz */ void clock_init(void) { // LOCKTIME = 0x00ffffff; // 使用默认值即可 CLKDIVN = 0x03; // FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1 /* 如果HDIVN非0,CPU的总线模式应该从“fast bus mode”变为“asynchronous bus mode” */ __asm__( mrc p15, 0, r1, c1, c0, 0\n /* 读出控制寄存器 */ orr r1, r1, #0xc0000000\n /* 设置为“asynchronous bus mode” */ mcr p15, 0, r1, c1, c0, 0\n /* 写入控制寄存器 */ ); /* 判断是S3C2410还是S3C2440 */ if ((GSTATUS1 == 0 || (GSTATUS1 == 0) { MPLLCON = S3C2410_MPLL_200MHZ; /* 现在,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz */ } else { MPLLCON = S

文档评论(0)

***** + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档