LGT8F0XA系统初始化与时钟管理.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LGT8F0XA系统初始化与时钟管理

LGT8F0XA系统初始化与时钟管理 对于一般的系统而言,从上电开始,经过上电复位状态后,内核开始从初始化的程序地址读取第一条指令并执行。系统此时使用的时钟为上电默认时钟配置。大多数系统为了获得对全范围电压工作的支持,默认的系统工作时钟都会非常慢。所以对于特定的应用而言,需要在执行真正的用户程序前对时钟系统经行必要的配置,选择满足应用需要的时钟源和预分频系数。和时钟类似,系统其它模块的工作也是基于上电复位后的默认状态工作,如果默认的状态不符合应用的需求,也需要软件提前做好配置。如果用户使用C语言进行开发,编译器也需要一个可以正确工作的硬件环境,包括堆栈指针是否指向正确的初始化位置,变量区是否正确初始化,中断服务程序是否正确设置等等。下面本文将以LGT8F08A为参考设计,介绍LGT8F08A控制器的时钟设置以及系统休眠模式和相应的唤醒控制。 LGT8F08A时钟与休眠模式 3个系统时钟源和8级预分频器 5种系统睡眠模式及唤醒 硬件描述 LGT8F08A通过PC0和PC1与外部晶振连接,PC6接wakeup信号用作Power Off模式下的唤醒,PD2接外部中断ext0,PD3接外部中断ext1,PD7接外部中断ext3,PXn(PA0-PA7, PB0-PB3,PC0-PC3,PC6,PD0-PD7)接外部电平portx,均用作Sleep模式下的唤醒。 信号连接关系 Signal LGT8F08A External XTAL1 PC0 晶振 XTAL2 PC1 晶振 Wakeup PC6 唤醒Power/Off EXT0 PD2 Sleep后唤醒 EXT1 PD3 Sleep后唤醒 EXT2 PD7 Sleep后唤醒 PORTX PXn Sleep后唤醒 软件描述 系统配置工作时钟,睡眠模式及唤醒主要包括以下几个文件 DrvSys.c – 包括系统时钟的配置,睡眠模式和唤醒控制。 DrvEXINT.c – 使用外部中断模块的代码,包括外部中断的配置和中断使能控制。 DrvPCINT.c – 使用引脚电平改变中断模块的代码,包括引脚电平改变的配置和中断使能控制。 DrvRTC.c – 使用RTC模块的代码,包括RTC的配置,掉电模式和唤醒控制。 Smpl_DrvSysCfg.c – 包括主函数。 下图为软件操作的流程图 流程详细描述 SYS_Init – 初始化堆栈指针SP和片内SRAM。 Calibrate_RC – 精确调整内部振荡器。 Switch_Clk – 切换系统工作时钟,改变预分频器配置。 Enter_Sleep – 配置系统睡眠模式及唤醒源,进入睡眠模式。 Wakeup_Sleep – 从睡眠模式唤醒后的状态及处理。 Enter_PowerOff – 配置系统掉电模式及唤醒源,进入掉电模式。 Wakeup_PowerOff- 从掉电模式唤醒后的状态及处理。 详细代码示例 Calibrate_RC (see note 2) // Calibrate Internal Oscillator OSCCAL = 0x06; Switch_Clk // Enable external crystal oscillator PMCR |= (1 OSCMEN); // Wait 10ms for external crystal oscillator stable mdelay_ms(10); // Switch system clock to external crystal oscillator PMCR |= (1 EXTMSEL); // Disable internal oscillator to reduce power consumption PMCR = ~(1 RC16MEN); // Enable system clock pre‐scalar change CLKPR = (1 CLKPCE); // Config system clock pre‐scalar for divide by 16 CLKPR = (4 CLKPS0); // Config system clock pre‐scalar for divide by 2 CLKPR = (1 CLKPCE); CLKPR = (1 CLKPS0); // Switch system clock to internal oscillator PMCR |= (1 RC16MEN); mdelay_ms(1); PMCR = ~(1 EXTMSEL); PMCR = ~(1 OSCMEN); Enter_Sleep // Set external interrupt sense EICR

文档评论(0)

af60068 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档