创建并移植K10 BSP包的具体步骤和方法(二)
3. BSP包代码的修改
在C:\Freescale\Freescale_MQX_4_0\mqx\source\psp\cortex_m文件夹里的psp_cpudef.h文件中可以找到支持Kinetis K10/K20/K30/K40/K50/K60/K70等相关芯片的PSP宏定义,例如支持K10DN512的宏定义为:
#define PSP_CPU_MK10DN512Z (PSP_CPU_NUM(PSP_CPU_ARCH_ARM_CORTEX_M4, PSP_CPU_GROUP_KINETIS_K1X, 2))
同时在该文件中还可以找到所有Freescale指定PSP处理器支持包所支持内核的宏定义,如ColdFire,PPC,Cortex-A5,Cortex-A8等。
在本文中,我们创建的是针对K10DN512的BSP开发包,所以需要用上述的宏定义,将user_config.h文件中的MQX_CPU定义
#define MQX_CPU PSP_CPU_MK60DN512Z
修改为:
#define MQX_CPU PSP_CPU_MK10DN512Z
此时点击编译按钮会出现错误提示,如下图5所示。
图5. 头文件错误
出现这个错误是由于在C:\Freescale\Freescale_MQX_4_0\mqx\source\psp\cortex_m\kinetis.h中找不到头文件MK10DZ10.h,需要从以下的IAR安装目录中寻找:
C:\Program Files\IAR Systems\Embedded Workbench 6.5\arm\inc\Freescale
然后将该文件拷贝到C:\Freescale\Freescale_MQX_4_0\mqx\source\psp\cortex_m\cpu中进行编译。
编译仍有错误出现,如下图6所示。
这个错误主要是由于移植使用的是K60的BSP包,因此里面含有以太网ENET部分和USB部分的代码,而在K10芯片中是没有这些功能模块的,在IAR IDE Workspace工作台环境下,需要将外围I/O驱动(Peripheral IO Drivers)中的ENET和USB等文件夹删除,同时将K10DN512 BSP Files文件夹中的 init_usb.c和init_enet.c文件删除。另外在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 5
- 基于TLV1562的四通道高速实时数据采集系统的设计(01-09)
- 基于 TI TLK10002的 SERDES FIFO 溢出的解决方案(08-26)
- 基于TLK10002的 SERDES FIFO 溢出解决方案(08-29)
- 一种因光纤漂移引起SERDES FIFO溢出的解决方案(08-26)
- 创建并移植K10 BSP包的具体步骤和方法(五)(09-30)
- 创建并移植K10 BSP包的具体步骤和方法(四)(09-30)