查看: 6279|回复: 7

Lazarus(free pascal) 底层类库封装

[复制链接]
  • TA的每日心情
    奋斗
    2022-9-16 05:52
  • 签到天数: 1368 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2014-10-8 16:41:12 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 tjcfeng 于 2014-10-14 12:57 编辑

    对全志A20处理器底层操作的一些封装,采用free pascal,封装类。
    使用方法:在工程中添加该类所在的文件夹路径即可。

    一般每一个外设功能分为两部分封装,一种是直接对某一Pin或通道的操作类,实现对常用功能的封装;另一种是对该类型外设的寄存器操作类,用来对前者没有封装到的功能进行设置。

    目前实现了对GPIO、LRADC、PWM的封装,后续功能陆续完成,并且正在尝试增加对中断的响应功能。

    该类可用在控制台、有界面或无界面程序中均可,并且根据编译器的不同,也可用在不同的操作系统,只需很少的代码改动,如引用不同的单元等。

    全志其他系列的处理器也可使用该类,如A10等,只需要根据差异的部分进行改动,或者继承重新实现。

    作者:tjCFeng
    邮箱:tjCFeng@163.com

    例子:
    1.TGPIOGROUP
    var PHG: TGPIOGROUP;
    begin
      PHG:= TGPIOGROUP.Create(PH); //创建
      PHG.GPIO_DAT^:= PHG.GPIO_DAT^ or ($1 shl 24); //设置寄存器的值
      PHG.Free; //释放
    end;

    2.TGPIO
    begin
      with TGPIO.Create(PH, 24) do
      begin
        Fun:= Fun1; //设置PH24为输出
        Data:= True; //设置高电平
        Sleep(1000);
        Reverse; //反转电平
        Free; //释放
      end;
    end;

    var PH24: TGPIO;
    begin
      PH24:= TGPIO.Create(PH, 24);
            PH24.Fun:= Fun1;
            PH24.Reverse;
            PH24.Free;
    end;

    3.LRADC
    var ADC0: TLRADC; Data: Byte;
    begin
      ADC0:= TLRADC.Create(LRADC_0); //创建LRADC通道0
      TLRADCGROUP.Instance.ClearAllPending; //清除所有未决中断,单例中的功能
      ADC0.INTs:= [ADCDATA, KEYDOWN, KEYUP]; //设置需要响应的中断类型
      TLRADCGROUP.Instance.Start; //开启LRADC,单例中的功能
      Data:= ADC0.Data; //获取LRADC通道0的值0~64
      TLRADCGROUP.Instance.Stop; //停止LRADC,单例中的功能
      ADC0.Free; //释放
    end;

    4.PWM
    var PWM1: TPWM;
    begin
      PWM1:= TPWM.Create(PWM_1); //创建PWM通道1
      with PWM1 do
      begin
        Prescale:= P960; //设置预分频
        Cycle:= 6000; //设置周期计数
        Duty:= 1000;  //设置占空比计数
        Start; //开始PWM输出
        Sleep(3000);
        Stop; //停止PWM输出
        Free; //释放
      end;
    end;

    5.Timer
    var Timer0: TTimer;
    begin
      Timer0:= TTimer.Create(Timer_0);
      with Timer0 do
      begin
        Prescal:= Div4;
        CNT:= 6000000;
        CUR:= 0;
        Start;
        while not Timer0.INT do ;
        //执行到这里是1秒
        Stop;
        Free;
      end;
    end;

    历史版本:
    2014.10.14 v0.2 增加Timer封装类
    2014.10.03 v0.1 完成GPIO、LRADC、PWM的封装类

    ClassA20_0.2.zip (7.8 KB, 下载次数: 14)

    评分

    参与人数 2声望 +6 与非币 +11 收起 理由
    brucehelen + 1 + 1 很给力!
    shaoziyang + 5 + 10 赞一个!

    查看全部评分

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-12-1 10:07
  • 签到天数: 1617 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2014-10-8 16:50:05 | 显示全部楼层
    终于看到有人用Free Pascal了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-9-16 05:52
  • 签到天数: 1368 天

    连续签到: 1 天

    [LV.10]以坛为家III

     楼主| 发表于 2014-10-8 17:18:57 | 显示全部楼层
    shaoziyang 发表于 2014-10-8 16:50
    终于看到有人用Free Pascal了。

    用了十多年的Delphi,感觉太好用了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    16 分钟前
  • 签到天数: 1668 天

    连续签到: 9 天

    [LV.Master]伴坛终老

    发表于 2014-10-9 10:18:52 | 显示全部楼层
    haoa














    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-10-11 20:06:46 | 显示全部楼层
    这是好东西
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2015-6-27 08:10
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2014-10-16 08:06:50 | 显示全部楼层
    在linux下吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-9-16 05:52
  • 签到天数: 1368 天

    连续签到: 1 天

    [LV.10]以坛为家III

     楼主| 发表于 2014-10-16 08:53:10 | 显示全部楼层
    foxmail-364565 发表于 2014-10-16 08:06
    在linux下吗?

    当然,arm linux
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-10-27 11:55:42 | 显示全部楼层
    不错,值得学习。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-6-12 10:01 , Processed in 0.179155 second(s), 33 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.