1.NV32 系统初始化流程及相应配置
1.1 NV32 系统初始化函数-Sysinit
/*******************************************************************************//*!
* *
@NV32 的系统初始化函数, 配置 FLASH 等待周期, 管脚复用, 时钟选择等。
* *
********************************************************************************/
void sysinit (void)
{
SIM_ConfigType sSIMConfig = {{0},0};
ICS_ConfigType sICSConfig = {0};
global_pass_count = 0;
global_fail_count = 0;
EFMCR &=0xFFFF0001; // 设置 FLASH 等待周期, 注: 在部分 PDK 包中, 此处需修正
#if defined(TRIM_IRC)
ICS_Trim(ICS_TRIM_VALUE);//TRIM 值校准, 校准内部 IRC 时钟
#endif
/*
定义一些功能管脚的设置, 比如禁用复位脚 RESET,以及 SWD 调试, 通过宏定义的方式
注: 要考虑到这些管脚复用的问题, 在 Sysinit 函数中, 必须一开始就要禁用
*/
#if defined(DISABLE_RST)
sSIMConfig.sBits.bDisableRESET = 1;//禁用 RESET 脚
#endif
#if defined(DISABLE_SWD)
sSIMConfig.sBits.bDisableSWD = 1;//禁用 SWD 调试, 注: 慎用, 考虑后面的调试方式
#endif
#if defined(SPI0_PINREMAP)
sSIMConfig.u32PinSel |= SIM_PINSEL_SPI0PS_MASK;
#endif
/* 输出总线时钟, 定义为管脚 PH2 输出, 这也就是为什么有时候没有初始化 LED, 但是板载的绿灯还是
会亮, 在 NV32Config.h 文件中注释掉 #define OUTPUT_BUSCLK 即可 */
#if defined(OUTPUT_BUSCLK)
sSIMConfig.sBits.bEnableCLKOUT = 1;
#endif
#if defined(DISABLE_NMI)
sSIMConfig.sBits.bDisableNMI = 1;//禁用不可屏蔽中断的管脚, 具体查看 NV32 管脚分配图
#endif
/* 使能部分模块的时钟信号 */
sSIMConfig.u32SCGC|=SIM_SCGC_SWD_MASK|SIM_SCGC_FLASH_MASK|
SIM_SCGC_UART0_MASK | SIM_SCGC_UART1_MASK | SIM_SCGC_UART2_MASK;
/*初始化 SIM 模块*/
SIM_Init(&sSIMConfig);
#if defined(XOSC_STOP_ENABLE)
sICSConfig.oscConfig.bStopEnable = 1;
#endif
#if defined(CRYST_HIGH_GAIN)
sICSConfig.oscConfig.bGain = 1;
#endif
#if (EXT_CLK_FREQ_KHZ >=4000)
sICSConfig.oscConfig.bRange = 1; //OSC_CR[RANGE]置位
#endif
sICSConfig.oscConfig.bEnable = 1; //使能 OSC
sICSConfig.u32ClkFreq = EXT_CLK_FREQ_KHZ;
#if defined(USE_FEE) //选择外部晶振时钟, 常用的两种时钟模式为 FEE 和 FEI
sICSConfig.u8ClkMode = ICS_CLK_MODE_FEE;
#elif defined(USE_FBE_OSC)
sICSConfig.u8ClkMode = ICS_CLK_MODE_FBE_OSC;
#elif defined(USE_FEE_OSC)
sICSConfig.u8ClkMode = ICS_CLK_MODE_FEE_OSC;
#elif defined(USE_FBILP)
sICSConfig.u8ClkMode = ICS_CLK_MODE_FBILP;
#elif defined(USE_FBELP)
sICSConfig.u8ClkMode = ICS_CLK_MODE_FBELP;
#endif
/*初始化 ICS 模块 */
ICS_Init(&sICSConfig);
/* 初始化 UART 打印串口输出 */
UART_InitPrint();
#if defined(PRINT_SYS_LOG)
print_sys_log(); //打印系统相关的信息
#endif
}
|