1.在 NV32Config.h 文件中定义 #define USE_FEE( 此时#define USE_FEI 应当被注释掉) 2.定义外部晶振的频率, 单位为 KHZ, 如开发板上的晶振为 12M, 即为 12000KHZ, 则同样在 NV32Config.h定义为 #define EXT_CLK_FREQ_KHZ 12000 3.计算出所要得到的总线时钟, 即先分频, 而后倍频( 1280 倍) , 外部时钟分频在 ICS.c 中查找到 void ICS_SetClkDivider(uint32_t u32ClkFreqKHz); 这个函数, 根据对应所选的晶振, 来配置相应的分频关系 case 12000L:/* 开发上为 12MHz 的晶振 */ ICS->C1 = (ICS->C1 & ~(ICS_C1_RDIV_MASK)) | ICS_C1_RDIV(4); break; 参考如下表格进行分频 在 syinit 函数中我们定义了, 超过 4MHZ,则将 OSC_CR[RANGE]置位, 目的就是为了能将分频后的频率限制在红色字体以内 #if (EXT_CLK_FREQ_KHZ >=4000) sICSConfig.oscConfig.bRange = 1; /* high range */ #endif 所以超过 4MHZ 的话, 选择右边的分频位, 例程中的为外接 12MHZ 晶振 *首先分频位选择 4, 即 512 分频,ICS->C1 = (ICS->C1 & ~(ICS_C1_RDIV_MASK)) | ICS_C1_RDIV(4)。再倍频 1280 得到总线时钟:BUS_CLOCK=12000000/512*1280=30MHZ得到总线频率为 30MHZ, 在 NV32Config.h 中定义 #elif (EXT_CLK_FREQ_KHZ == 12000) #define BUS_CLK_HZ 30000000L *当选择分频位为 3 时, 即 256 分频 , ICS->C1 = (ICS->C1 & ~(ICS_C1_RDIV_MASK)) | ICS_C1_RDIV(3)。再倍频 1280 得到总线时钟: BUS_CLOCK=12000000/256*1280=60MHZ 同样, 修改 BUS_CLK_HZ 值为 6000000L #elif (EXT_CLK_FREQ_KHZ == 12000) #define BUS_CLK_HZ 60000000L
|