应广的MCU用了两年多,因为本人比较懒,不想每次做项目的时候都要copy或重新编写各种重复的代码,于是写了一个小的驱动框架,有所心得记录于此,与大家共勉吧!

背景知识: 应广8bit台系单片机,型号丰富,支持AD、PWM、比较器、定时器、外部中断等,超低功耗(Sleep状态约1uA);支持应广MiniC(C语言简化版),比汇编友好很多,IDE稳定流畅,且价格经济,实为不可多得的低端单片机,推荐使用!

一、概述

  1. 主循环包含高、中、低速任务单元,中速单元2ms执行一次,分出4个任务case,减少CPU空转时间;Timer定时可一键配置成250us或1ms中断,以匹配不同使用场景。

  2. 驱动的层次划分为:”核心驱动”、”扩展驱动”、”项目驱动”、”用户驱动”。

    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为例说明芯片选型及相关配置。

  1. 选择”项目.pre”中的”.CHIP PMS154”。 第一章 框架一览 - 图1
  2. 选择”DriversStart.h”中的”CHIP_PMS154”,则对应芯片的核心驱动(KernelDrv)自动开启,核心驱动一般无需修改,直接使用即可。至此芯片选型完成。 第一章 框架一览 - 图2芯片配置

  3. 继续查看”DriverStart.h”,开启当前项目实际所需驱动。 第一章 框架一览 - 图3驱动配置

三、主结构说明

Main.C为项目主文件,上电初始化完成后,除中断外所有程序均在”while(1){}”循环中进行。

Main.H为项目头文件,实际项目编程专有的”IO、变量、常量、宏、函数”等均在此文件中声明,这样避免了驱动框架与项目专有定义的混和,使结构清晰明了便于后期查阅修改。

  1. 上电初始化,除RAM清零宏外所有初始化均放入Sys_Init()函数中。

注:”ClearAllRAM”宏会将包括栈在内的所有RAM清0,故不能在函数中使用。

第一章 框架一览 - 图4 图_上电初始化

  1. ”while(1){}”循环结构。其中的SppeCon_Num在定时器中断中每1ms自加1,详见”INT_Drv”驱动。下图红框部分为各种功能函数调用,配合完成项目功能。

第一章 框架一览 - 图5 图_while(1){}主循环

走到这里了,如果读者大大脑中冒出个念头“哎,我的单片机貌似也可以这样额”,那么恭喜啦,Just do it~ 其实即使是仅支持汇编的单片机同样可以形成类似的驱动框架哦,还是那句话,Just do it!