嵌入式系统通用驱动程序接口及其实现-IO口(视频教学时的同步输入文件)

嵌入式系统通用驱动程序接口及其实现-IO口

应用场景
  • 指示灯 输出
  • 按键识别 输入
  • 18B20 1Wire总线 IO 输入 输出 双向

  • 不同嵌入式硬件上的驱动 指示灯 O输入高电平或低电平

    • C51
      p1^1 = 1;
      p1^1 = 0;
    • LPC_ARM
      GPIOA->SET = (1 << 29);
      GPIOA->CLR = (1 << 29);
    • AVR
      PORTD |= 0x80;
      PORTD &= ~0X80;

面各对像的方式 C++ C语言 实现接口。
全部功能接口实现->精简
C++接口
class IoCtrl{ 
 public:
 //构造函数:
  IoCtrl();

  //行为
  void SetIn();  
  void SetOut();
  bool IsOut() const;

  void SetHi();
  void ClrHi();
  bool IsHi() const;

  void SetPullUp();
  void ClrPullUp();
  bool IsPullUp();

private:
  //属性:
  bool Out;
  bool Hi;
  bool PullUp;
};
  • 指示灯实现:
    class IoCtrl IoLed;
    IoLed.SetOut();
    IoLed.SetHi();
    delayMs(1000);
    IoLed.SetLow();
    *按键实现:
    class IoCtrl IoKey;
    IoKey.SetIn();
    IoKey.SetPullUp();
    bool IsHi = IoKey.IsHi();
C语言
struct _IoCtrl{
 //构造函数:
  Init();

  //行为:
  void (*SetIn)(void);  
  void (*SetOut)(void);
  bool (*IsOut)();


  void (*SetHi)(void);
  void (*ClrHi)(void);
  bool (IsHi)();
  //读IO口
  void (*SetHiLevel)(void);
  void (*ClrHiLevel)(void);
  bool (IsHiLevel)();


  void (*SetPullUp)(void);
  void (*ClrPullUp)();
  bool (*IsPullUp)();

  //属性:
  bool IsOut;
  bool IsHi;
  bool IsPullUp;
};

const struct _IoCtrl IoLed = {
    Init_Led,
    .
    .
    .

  }

IoCtrl_Avr_V100.h // AVR中实现 LedCtrler项目
.
//指示灯IO接口实现
#define Init_Led() do{DDRB |= 0X80; PORTB &= ~0X80; }while(0)
#define SetHi_Led() do{PORTB |= 0X80; }while(0)
#define ClrHi_Led() do{PORTB &= ~0X80; }while(0)

 //按键
  #define Init_Key() do{PORTB |= 0X40;DDRB &= ~0X40;}while(0)
  #define IsHiLevel_Key() (PINB & 0X40)

IoCtrl_Avr_V200.h // AVR中实现 LedCtrler项目
.
//指示灯IO接口实现
#define Init_Led() do{DDRB |= 0X40; PORTB &= ~0X40; }while(0)
#define SetHi_Led() do{PORTB |= 0X40; }while(0)
#define ClrHi_Led() do{PORTB &= ~0X40; }while(0)

 //按键
  #define Init_Key() do{PORTB |= 0X40;DDRB &= ~0X40;}while(0)
  #define IsHiLevel_Key() (PINB & 0X40)

IoCtrl_LPC_ARM.h //LPC_ARM LedCtrler项目
//按键
#define Init_Key() do{GPIOA->PULL_PU = (1 << 29); GPIOA->DDR = (1 << 29);}while(0)
#define IsHiLevel_Key() (GPIOA->PIN & (1 << 29))

???.c文件:
#inlude “IoCtrl.h”
.
.
.
IsHiLevel_Key();

“IoCtrl.h“重实现:
#ifdef SUPPPORT_AVR
#ifdef HW_VERSION_V100
#include “IoCtrl_Avr_V100.h”
#endif
#ifdef HW_VERSION_V100
#include “IoCtrl_Avr_V200.h”
#endif
#endif

#ifdef SUPPPORT_LPC_ARM
  #include "IoCtrl_LPC_ARM.h.h"
#endif
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值