babyos新增MCU说明
目前BabyOS已适配的MCU数量不多,这部分的完善需要所有BabyOS开发者和使用者共同完成。这里将说明新增MCU的步骤。
MCU层的介绍
举例说明:
SPIFLASH的驱动访问硬件需要SPI接口,当需要SPI发送时,调用HAL层接口bHalSpiTransfer,此时HAL层会判断是否使用硬件SPI,如果是硬件SPI则调用MCU层的bMcuSpiTransfer。
增加代码的步骤
自动生成代码
mcu目录的命名规则:mcu/厂商名/mcu型号/mcu_型号_外设.c
mcu目录有mcu.py脚本,新增mcu则运行它:
生成的C文件里也同时生成了需要实现的接口,根据实际需要自行实现即可。
细分型号配置
mcu目录里有Kconfig文件,这个文件是对mcu进行配置。
例如增加stm32f4xx,其包含了stm32f40x,stm32f42x等,假设细分型号FLASH有差异。
则Kconfig里增加细分型号的配置:
#选择ST的芯片
choice
prompt "Select ST Chip"
depends on VENDOR_ST
config STM32F40X
bool "STM32F40X"
config STM32F42X
bool "STM32F42X"
endchoice
实现适配接口时可以这么写:
int bMcuFunction()
{
#if (defined(STM32F40X))
// add code ...
#endif
#if (defined(STM32F42X))
// add code ...
#endif
}
实现MCU接口
实现MCU接口,原则是:推荐但不限制使用寄存器编程 。
对芯片寄存器比较了解则用寄存器编程的方式实现接口。
如果对寄存器不了解,则使用厂商提供的SDK去实现接口。这样方便快速使用起来。
MCU接口的扩展
目前MCU接口并没有覆盖所有的外设,也没有覆盖外设的所有操作。驱动或软件模块不断增加的过程中肯定会对HAL层进行扩展。
扩展接口的时机:用户或者开发者新增驱动或者软件模块时,当前的HAL层接口无法满足,则进行新增。
新增HAL层接口定义时也完成了对MCU层接口的定义,最后实现MCU层的接口即可。