打印
[技术问答]

NV32F100-2系统初始化说明

[复制链接]
1008|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
merry_zsp|  楼主 | 2017-5-13 17:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
merry_zsp|  楼主 | 2017-5-13 18:00 | 只看该作者
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
}

使用特权

评论回复
板凳
merry_zsp|  楼主 | 2017-5-13 18:02 | 只看该作者
1.2 头文件 NV32Config.h 的说明
#define CPU_NV32 /*NV32 的宏定义*/
#define TEST
#define TRIM_IRC /*!<定义 TRIM 值校准内部 IRC*/
#define SPI0_PINREMAP /*!<映射 SPI0 可选管脚 */
#define PRINT_SYS_LOG /*!<定义是否打印系统信息 */
/* 定义输出系统时钟 */
// 定义是否输出总线时钟, 输出管脚为 PH2, 通过宏定义的方式, 决定是否开启
// #define OUTPUT_BUSCLK
#define ICS_TRIM_VALUE 0x29 /*!< trim IRC to 37.5KHz and FLL output=48MHz */
/*!
定义所选择的时钟模式, 若选择外部时钟还需选择外接频率, 以及波特率等设置, 若没有选择, 则
默认选择 FEI 内部时钟模式
*/
// #define USE_FEI //选择内部时钟
// #define USE_FEE_OSC
#define USE_FEE //选择外部时钟
// #define USE_FBELP
// #define USE_FBE_OSC
/*! 定义外部时钟晶振的频率. */
// #define EXT_CLK_FREQ_KHZ 32 /* in KHz */
// #define EXT_CLK_FREQ_KHZ 4000 /* in KHz */
// #define EXT_CLK_FREQ_KHZ 4000 /* in KHz */
// #define EXT_CLK_FREQ_KHZ 1000 /* in KHz */
#define EXT_CLK_FREQ_KHZ 12000 /* in KHz */ //板载的晶振为 12M, 这里选择 12M
/*! define UART port # to be used */
#define TERM_PORT UART1 //NV32 的开发板默认 USB 串口为 UART1
/* 定义总线时钟 */
#if defined(USE_FEI) //选择内部时钟, 默认为 48MHZ, 若要进行其他选择, 见内部时钟管理说明
#define BUS_CLK_HZ 48000000L
#elif (EXT_CLK_FREQ_KHZ == 20000)
#define BUS_CLK_HZ 50000000L
#elif (EXT_CLK_FREQ_KHZ == 12000)
// 12M 的晶振进行 512 分频, 在进行 1280 的倍频, 得到当前 30M 系统时钟, 详细说明见内部时钟模块
#define BUS_CLK_HZ 30000000L
#elif (EXT_CLK_FREQ_KHZ == 8000)
#define BUS_CLK_HZ 24000000L
#elif (EXT_CLK_FREQ_KHZ == 4000)
#define BUS_CLK_HZ 40000000L
#elif (EXT_CLK_FREQ_KHZ == 32)
#define BUS_CLK_HZ 16777216L
#else
#define BUS_CLK_HZ 60000000L
#endif
/*! 定义 UART 的波特率 */
#define UART_PRINT_BITRATE 115200




使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

75

主题

695

帖子

2

粉丝