84 lines
2.4 KiB
C
84 lines
2.4 KiB
C
/**********************************************************************
|
||
*
|
||
* 实验名称:MCU时钟模式切换实验
|
||
* 实验平台:NV32开发板
|
||
* 板载芯片:NV32F100FL64E
|
||
* 实验效果:MCU的时钟模式由当前的FEE模式切换到FEI模式
|
||
*
|
||
************************************************************************/
|
||
|
||
#include "common.h"
|
||
#include "ics.h"
|
||
#include "rtc.h"
|
||
#include "uart.h"
|
||
#include "sysinit.h"
|
||
|
||
|
||
int main (void);
|
||
void RTC_Task(void);
|
||
|
||
/********************************************************************/
|
||
int main (void)
|
||
{
|
||
uint8_t u8Ch;
|
||
ICS_ConfigType sICSConfig;
|
||
RTC_ConfigType sRTCConfig;
|
||
RTC_ConfigType *pRTCConfig = &sRTCConfig;
|
||
UART_ConfigType sConfig;
|
||
|
||
/*系统初始化*/
|
||
sysinit();
|
||
|
||
printf("\nRunning the platinum project.\r\n");
|
||
LED0_Init();
|
||
LED2_Init();
|
||
|
||
/*初始化RTC模块,每隔1s产生一次中断*/
|
||
pRTCConfig->u16ModuloValue = 9;
|
||
pRTCConfig->bInterruptEn = RTC_INTERRUPT_ENABLE; /*使能中断 */
|
||
pRTCConfig->bClockSource = RTC_CLKSRC_1KHZ; /*时钟源1KHz*/
|
||
pRTCConfig->bClockPresaler = RTC_CLK_PRESCALER_100; /*时钟分频系数100*/
|
||
|
||
RTC_SetCallback(RTC_Task);
|
||
RTC_Init(pRTCConfig);
|
||
|
||
printf("\nIt is in FEE mode now.\r\n");
|
||
UART_WaitTxComplete(TERM_PORT);
|
||
|
||
/*将时钟模式由FEI模式切换到FEE模式*/
|
||
sICSConfig.oscConfig.bGain = 1; /* 使能高增益 */
|
||
sICSConfig.oscConfig.bRange = 1; /* 使能高范围 */
|
||
sICSConfig.oscConfig.bEnable = 1; /* 使能 OSC */
|
||
sICSConfig.oscConfig.bIsCryst = 1; /* OSC的输出选择选择振动器时钟源 */
|
||
sICSConfig.oscConfig.bWaitInit = 1; /* 等待振荡器初始化化完成 */
|
||
sICSConfig.u32ClkFreq = 10000; /* 板载为10M晶振*/
|
||
ICS_SwitchMode(FEI,FEE, &sICSConfig);
|
||
ICS_SetBusDivider(1); //总线时钟不得高于40M主频,所以10M晶振256分频再1280倍频后为50M,需要经过BDIV二分频为25M
|
||
/* 由于时钟模式转变,总线时钟发生变化从新初始化UART模块*/
|
||
sConfig.u32SysClkHz = 25000000L;
|
||
sConfig.u32Baudrate = UART_PRINT_BITRATE;
|
||
|
||
UART_Init (TERM_PORT, &sConfig);
|
||
|
||
printf("switch to FEE mode.\r\n");
|
||
|
||
while(1);
|
||
}
|
||
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief RTC模块回调函数
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
|
||
void RTC_Task(void)
|
||
{
|
||
/*切换LED0状态 */
|
||
LED0_Toggle();
|
||
}
|
||
/********************************************************************/
|