电脑做网站软件,南充房管局网站查询房产,我想做个网站怎么弄,建设工程信息服务平台官网一 默认配置
在启动文件中#xff0c;已经对时钟进行了初始化#xff0c;默认按外部8M晶振#xff0c;配置系统时钟为48MHZ#xff0c;APB为系统时钟的2分频#xff0c;为24MHZ。在system_ac780x.c文件中#xff0c;可以找到下面这个系统初始化函数#xff0c;里面有Se…一 默认配置
在启动文件中已经对时钟进行了初始化默认按外部8M晶振配置系统时钟为48MHZAPB为系统时钟的2分频为24MHZ。在system_ac780x.c文件中可以找到下面这个系统初始化函数里面有SetSysClock()函数对时钟进行了初始化。
void SystemInit (void)
{
#if defined (__VTOR_PRESENT) (__VTOR_PRESENT 1U)SCB-VTOR (uint32_t) __Vectors;
#endifSystemCoreClock SYSTEM_CLOCK;SetEflashClock();SetSysClock();CKGEN_SetAPBClockDivider(APBCLK_DIV);//SPM_EnableLVD(DISABLE); //disable LVD if need
}
如果需要配置不一样的时钟可以通过系统文件里的宏定义修改但并不建议在系统文件上修改可以自己写配置函数。
二 时钟模块简介
1.时钟源 高速内部时钟HSI内部 RC 振荡器提供 8MHz 时钟源 外部高速时钟HSE外部 OSC 提供 4MHZ ~30MHz 晶振 低速内部时钟LSI 内部低速 RC OSC 提供 32KHz 时钟源 系统时钟 (SYSPLL) 提供高达 48MHz 的高速时钟
2.系统时钟框图
手册中的框图可以帮助我们更好的理解时钟的每个配置步骤。 输入频率支持4~30MHZ VCO 输入频率 * FBKDIV / PREDIV 系统时钟 VCO / POSDIV / SYSCLKDIV
同时手册中也提供了典型的配置参数供参考。因为有些点的频率值是有限制的比如VCO的频率范围是0.5GHZ~1.5GHZ那么直接参考典型配置参考表就肯定不会有问题找到合适的参数即可。 三 自定义时钟
以AC7801的开发板做测试板子上外部晶振为8MHZ。这里以配置系统时钟为48MHZAPB时钟为24MHZ为例。根据上面的参考表可选择PREDIV 1FBKDIV 96POSDIV16VOC 8*96/16 48M。相关寄存器如下图可知SYSPLL1_PREDIV为0SYSPLL1_POSDIV为8SYSPLL1_FBKDIV为96。 为了直观的测试时钟的频率用一个定时器定时产生中断在中断中翻转一个I/O电平以此来测时钟频率。定时器初始化如下定时器的时钟源为APB时钟24M配置定时器装载值为24000000则1S产生一次中断。
void TIMER_Config(void)
{TIMER_ConfigType config; memset(config, 0, sizeof(config));config.periodValue 24000000; /*! TIMER channel period value */config.linkModeEn DISABLE ; /*! TIMER channel linkmode enable */config.interruptEn ENABLE ; /*! TIMER channel interrupt enable */config.callBack TIM_CallBack; /*! TIMER channel callback pointer */config.timerEn ENABLE; /*! TIMER channel enable/disable */TIMER_Init(TIMER_CHANNEL0, config); //TIMER0初始化配置
}
1. 中断处理
void TIM_CallBack(void *device, uint32_t wpara, uint32_t lpara)
{if (wpara TIMER_CHANNEL_TF_T**_Msk){GPIOC-ODR ^ (17);}
}
2.外部时钟配置——库函数
void SYS_CLOCK_HSE(void)
{/* check if xosc enable success? */if (SPM_EnableXOSC(ENABLE) SUCCESS){CKGEN_SetPLLReference(PLL_REF_EXTERNAL_OSC);//PLL参考时钟选择外部振荡器}else /* if xosc enable fail, */{}/* set system clock divider */CKGEN_SetSysclkDiv(0);//系统时钟1分频/* check if pll enable success? */if (SPM_EnablePLL(ENABLE) SUCCESS)/使能SYSPLL{CKGEN_SetPllPrevDiv(0);//PREDIVCKGEN_SetPllPostDiv(8);//PLL_POSDIVCKGEN_SetPllFeedbackDiv(96);//PLL_FBKDIVCKGEN_SetSysclkSrc(SYSCLK_SRC_PLL_OUTPUT);//系统时钟源选择PLL时钟}else /* pll enable fail */{}CKGEN_SetAPBClockDivider(APBCLK_DIVIDER_2);//APB时钟为系统时钟2分频
}
3.外部时钟配置——寄存器
外部时钟的使能以及就绪标志PLL使能以及就绪标志等在第6章系统电源管理SPM模块下的SPM_PWR_MGR_CFG1寄存器里。 配置过程比较常规使能时钟——等待时钟就绪——PLL时钟源选择——时钟分频及倍频配置——系统时钟源选择
void SYS_CLOCK_HSE_REG(void)
{SPM-PWR_MGR_CFG1 | 129;//外部高速时钟XOSC使能while((SPM-PWR_MGR_CFG1 (0X80000000))0)//等待XOSC就绪{}SPM-PWR_MGR_CFG1 | (127);//SYSPLL使能while((SPM-PWR_MGR_CFG1 (0X40000000))0)//等待PLL时钟就绪{}CKGEN-CTRL | (120);//PLL参考时钟选择外部振荡器CKGEN-SYSPLL1_CFG0 ((CKGEN-SYSPLL1_CFG0 (~(uint32_t)(0x330)))|(030)); //PREDIVCKGEN-SYSPLL1_CFG0 ((CKGEN-SYSPLL1_CFG0 (~(uint32_t)(0x1f25)))|(825)); //POSDIVCKGEN-SYSPLL1_CFG0 ((CKGEN-SYSPLL1_CFG0 (~(uint32_t)(0xff15)))|(9615)); //FBKDIVCKGEN-CTRL | ((CKGEN-CTRL (~(34)))|(04)); //系统时钟分频为1CKGEN-CTRL | (10);//系统时钟源选择PLL时钟CKGEN-CTRL | (18);//APB为系统时钟2分频
}4.内部时钟配置——库函数
采用内部高速8M时钟源做配置
void SYS_CLOCK_HSI(void)
{CKGEN_SetPLLReference(PLL_REF_INTERAL_OSC);//PLL参考时钟选择内部振荡器CKGEN_SetPllPrevDiv(0); //PREDIVCKGEN_SetPllPostDiv(8); //POSDIVCKGEN_SetPllFeedbackDiv(96); //FBKDIVCKGEN_SetSysclkDiv(0); //系统时钟1分频/* check if pll enable success? */if (SPM_EnablePLL(ENABLE) SUCCESS){/* pll enable success,use pll output as system clock src */CKGEN_SetSysclkSrc(SYSCLK_SRC_PLL_OUTPUT);//系统时钟源选择PLL时钟}else{/* pll enable fail */}CKGEN_SetAPBClockDivider(APBCLK_DIVIDER_2);//APB为系统时钟2分频
}
5.内部时钟配置——寄存器
void SYS_CLOCK_HSI_REG(void)
{CKGEN-CTRL ~(120);//PLL参考时钟选择内部振荡器SPM-PWR_MGR_CFG1 | (127);//SYSPLL使能while((SPM-PWR_MGR_CFG1 (0X40000000))0)//等待PLL时钟就绪{} CKGEN-SYSPLL1_CFG0 ((CKGEN-SYSPLL1_CFG0 (~(uint32_t)(0x330)))|(030)); //PREDIVCKGEN-SYSPLL1_CFG0 ((CKGEN-SYSPLL1_CFG0 (~(uint32_t)(0x1f25)))|(825)); //POSDIVCKGEN-SYSPLL1_CFG0 ((CKGEN-SYSPLL1_CFG0 (~(uint32_t)(0xff15)))|(9615)); //FBKDIVCKGEN-CTRL | ((CKGEN-CTRL (~(34)))|(04)); //SYSCLK_DIV系统时钟1分频CKGEN-CTRL | (10);//系统时钟源选择PLL时钟CKGEN-CTRL | (18);//APB为系统时钟2分频
}
6.主函数
主函数中调用时钟初始化函数并对TIMER0配置同时需要对使用到的I/O进行配置。
int main(void)
{//SYS_CLOCK_HSE();SYS_CLOCK_HSE_REG();//SYS_CLOCK_HSI();//SYS_CLOCK_HSI_REG();TIMER_Config();GPIO_SetFunc(GPIOC, GPIO_PIN7, GPIO_FUN0);/*功能复用选择*/GPIO_SetDir(GPIOC, GPIO_PIN7, GPIO_OUT);GPIO_SetPinLevel(GPIOC, GPIO_PIN7, GPIO_LEVEL_HIGH);while(1){}
}