MCU设计开发小Tips:创建并移植K10 BSP包的具体步骤和方法
除。另外在K10DN512 BSP Files中,由于在MQX安装目录C:\Freescale\Freescale_MQX_4_0\mqx\source\bsp\K10DN512 文件下的init_gpio.c和bsp.h中初始化了ent和usb部分的,需要打开这两个文件,找到_bsp_ent_io_init和bsp_usb_io_init的代码部分,然后直接进行删除。此时再进行编译,则应该没有错误出现了。
图6以太网及USB相关的文件编译错误
下一步需要修改的,是系统的时钟设置。针对K60DN512, MQX默认的外部时钟是50MHz。 对于K20系列MQX默认的外部时钟是8MHz,如果目标板的时钟和默认的外部时钟不一样,则需要重新配置。例如,如果这里选择25MHz的无源晶体作为外接时钟,那么就需要修改bsp_cm.h中的时钟设置,将CPU_XTAL_CLK_HZ的时钟修改为25MHz。当然根据实际项目设计有时也需要配置不同的总线时钟频率,内核时钟频率等,可以参照如下的代码对bsp_cm.h中的宏定义进行相应的修改:
#define CPU_BUS_CLK_HZ 48000000U /*初始化总线时钟频率为48MHz*/
修改为
#define CPU_BUS_CLK_HZ 50000000U /*初始化总线时钟频率为50MHz*/
#define CPU_CORE_CLK_HZ 96000000U /* 初始化内核、系统时钟频率为96MHz */
修改为
#define CPU_CORE_CLK_HZ 100000000U /* 初始化内核、系统时钟频率为100MHz */
#define CPU_CLOCK_CONFIG_NUMBER 0x03U /* 定义时钟配置的个数,时钟配置有0,1和2,共3种可以选择*/
#define CPU_BUS_CLK_HZ_CLOCK_CONFIG0 48000000U /*在时钟配置0中的总线时钟频率为48MHz */
修改为
#define CPU_BUS_CLK_HZ_CLOCK_CONFIG0 50000000U /*在时钟配置0中的总线时钟频率为50MHz */
#define CPU_CORE_CLK_HZ_CLOCK_CONFIG0 96000000U /* 在时钟配置0中的内核、系统时钟频率为96MHz*/
修改为
#define CPU_CORE_CLK_HZ_CLOCK_CONFIG0 100000000U /* 在时钟配置0中的内核、系统时钟频率为100MHz*/
#define CPU_XTAL_CLK_HZ 50000000U /* 外部晶体或者振荡器的时钟频率为50MHz*/
修改为
#define CPU_XTAL_CLK_HZ 25000000U /* 外部晶体或者振荡器的时钟频率为25MHz*/
相应的,对于使用的时钟配置0或者1或者2也需要修改,如果目标配置使用的是时钟配置0,可以参照如下代码修改。如果不使用时钟配置1或者2,则不需要做修改。
/* 在时钟配置0中的CPU时钟频率 */
#define CPU_CLOCK_CONFIG_0 0x00U /* 时钟配置0的定义 */
修改内核时钟频率,默认的是96MHz,改为100MHz。
#define CPU_CORE_CLK_HZ_CONFIG_0 100000000UL /* 内核时钟频率为100MHz*/
修改总线时钟频率,默认是48MHz,修改为50MHz。
#define CPU_BUS_CLK_HZ_CONFIG_0 50000000UL /* 总线时钟频率为50MHz*/
修改Flash时钟频率,默认是24MHz,修改为25MHz。
#define CPU_FLASH_CLK_HZ_CONFIG_0 25000000UL /* FLASH时钟频率为25MHz*/
#define CPU_PLL_FLL_CLK_HZ_CONFIG_0 100000000UL /* PLL/FLL时钟频率为100MHz*/
#define CPU_OSCER_CLK_HZ_CONFIG_0 50000000UL
/*在时钟配置0中的系统OSC 外部参考时钟 */
手工书写代码相对繁琐,更方便的方法是使用Freescale的Processor Expert 工具,根据硬件的需要来设置时钟,生成的如下的代码。通过PE工具来对CPU和各种外设进行设置,只需了解它的原理和用法,而不用把精力花在了解寄存器的具体细节上。打开PE后,参照图7的配置进行设置,点击Project-》Generator Processor Expert Code即可生成代码。记住重新修改配置后需要点击Project-》Clean,清掉上次生成的代码,然后再执行生成代码的操作。
void __pe_initialize_hardware(void)
{
_bsp_watchdog_disable();
/* 关闭 WDOG 模块 */
WDOG_UNLOCK = WDOG_UNLOCK_WDOGUNLOCK(0xC520);
WDOG_UNLOCK = WDOG_UNLOCK_WDOGUNLOCK(0xD928);
WDOG_STCTRLH = WDOG_STCTRLH_STNDBYEN_MASK | WDOG_STCTRLH_WAITEN_MASK | WDOG_STCTRLH_STOPEN_MASK | WDOG_STCTRLH_ALLOWUPDATE_MASK | WDOG_STCTRLH_CLKSRC_MASK;
/* 系统时钟初始化 */
/* SIM_SCGC5: PORTA=1 */
SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK
SIM_CLKdiv1 = SIM_CLKdiv1_OUTdiv2(0x01) | SIM_CLKdiv1_OUTdiv3(0x03) |
SIM_CLKdiv1_OUTdiv4(0x03); /* 更新系统预分频器 */
SIM_SOPT1 &= (uint32_t)~(uint32_t)(SIM_SOPT1_OSC32KSEL_MASK);
PORTA_PCR18 &= (uint32_t)~(uint32_t)((PORT_PCR_ISF_MASK | PORT_PCR_MUX(0x07)));
Kinetis 操作系统 以太网 飞思卡尔 MCU 相关文章:
- 智能新趋势 飞思卡尔MCU引领嵌入式应用(03-01)
- 飞思卡尔固定式ePOS终端设计方案(09-23)
- Kinetis 平台的电容式触摸键盘设计(07-30)
- Kinetis M微控制器:面向计量方案的攻城利器(06-15)
- 时钟模式配置以及在MCU应用(09-12)
- 物联网操作系统Ruff 开发无人机项目体验分享(05-02)