应广的MCU用了两年多,因为本人比较懒,不想每次做项目的时候都要copy或重新编写各种重复的代码,于是写了一个小的驱动框架,有所心得记录于此,与大家共勉吧!
背景知识: 应广8bit台系单片机,型号丰富,支持AD、PWM、比较器、定时器、外部中断等,超低功耗(Sleep状态约1uA);支持应广MiniC(C语言简化版),比汇编友好很多,IDE稳定流畅,且价格经济,实为不可多得的低端单片机,推荐使用!
一、概述
主循环包含高、中、低速任务单元,中速单元2ms执行一次,分出4个任务case,减少CPU空转时间;Timer定时可一键配置成250us或1ms中断,以匹配不同使用场景。
驱动的层次划分为:”核心驱动”、”扩展驱动”、”项目驱动”、”用户驱动”。
1.核心驱动:以宏或函数的形式为每款MCU编写API,包含PMS131、PMS132、PMS150、PM154等芯片。 2.扩展驱动:常用驱动模块,如按键、LED、红外、IIC、Moter、Sleep、Math以及特定芯片的驱动,如24C0x、XN297等。同样是以宏和函数的形式编写了API。 3.项目驱动:针对常用项目规划,如2.4G固码跳频、2.4G自动对码等。
注:所有驱动均以”XXX.C及XXX.H”的形式成对给出。
二、项目配置
源码中使用Driver_Start.h文件来控制编译,可选择项目所用芯片及所需驱动。
下面以PMS154为例说明芯片选型及相关配置。
- 选择”项目.pre”中的”.CHIP PMS154”。
选择”DriversStart.h”中的”CHIP_PMS154”,则对应芯片的核心驱动(KernelDrv)自动开启,核心驱动一般无需修改,直接使用即可。至此芯片选型完成。 图芯片配置
继续查看”DriverStart.h”,开启当前项目实际所需驱动。 图驱动配置
三、主结构说明
Main.C为项目主文件,上电初始化完成后,除中断外所有程序均在”while(1){}”循环中进行。
Main.H为项目头文件,实际项目编程专有的”IO、变量、常量、宏、函数”等均在此文件中声明,这样避免了驱动框架与项目专有定义的混和,使结构清晰明了便于后期查阅修改。
- 上电初始化,除RAM清零宏外所有初始化均放入Sys_Init()函数中。
注:”ClearAllRAM”宏会将包括栈在内的所有RAM清0,故不能在函数中使用。
图_上电初始化
- ”while(1){}”循环结构。其中的SppeCon_Num在定时器中断中每1ms自加1,详见”INT_Drv”驱动。下图红框部分为各种功能函数调用,配合完成项目功能。
图_while(1){}主循环
走到这里了,如果读者大大脑中冒出个念头“哎,我的单片机貌似也可以这样额”,那么恭喜啦,Just do it~ 其实即使是仅支持汇编的单片机同样可以形成类似的驱动框架哦,还是那句话,Just do it!