查看: 5254|回复: 5

allwinner A20 - free pascal ClassLibrary

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

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2014-10-19 09:46:06 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 tjcfeng 于 2014-10-19 10:13 编辑

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

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

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

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

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

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

    例子:
    1.TGPIOGROUP

    1. uses GPIO;

    2. var PHG: TGPIOGROUP;
    3. begin
    4.   PHG:= TGPIOGROUP.Create(PH); //创建
    5.   PHG.GPIO_DAT^:= PHG.GPIO_DAT^ or ($1 shl 24); //设置寄存器的值
    6.   PHG.Free; //释放
    7. end;
    复制代码
    2.TGPIO

    1. uses GPIO;

    2. begin
    3.   with TGPIO.Create(PH, 24) do
    4.   begin
    5.     Fun:= Fun1; //设置PH24为输出
    6.     Data:= True; //设置高电平
    7.     Sleep(1000);
    8.     Reverse; //反转电平
    9.     Free; //释放
    10.   end;
    11. end;
    复制代码

    1. var PH24: TGPIO;
    2. begin
    3.   PH24:= TGPIO.Create(PH, 24);
    4.   PH24.Fun:= Fun1;
    5.   PH24.Reverse;
    6.   PH24.Free;
    7. end;
    复制代码
    3.LRADC

    1. uses LRADC;

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

    1. uses PWM;

    2. var PWM1: TPWM;
    3. begin
    4.   PWM1:= TPWM.Create(PWM_1); //创建PWM通道1
    5.   with PWM1 do
    6.   begin
    7.     Prescale:= P960; //设置预分频
    8.     Cycle:= 6000; //设置周期计数
    9.     Duty:= 1000;  //设置占空比计数
    10.     Start; //开始PWM输出
    11.     Sleep(3000);
    12.     Stop; //停止PWM输出
    13.     Free; //释放
    14.   end;
    15. end;
    复制代码
    5.Timer

    1. uses Timer;

    2. var Timer0: TTimer;
    3. begin
    4.   Timer0:= TTimer.Create(Timer_0);
    5.   with Timer0 do
    6.   begin
    7.     Prescal:= Div4;
    8.     CNT:= 6000000;
    9.     CUR:= 0;
    10.     Start;
    11.     while not Timer0.INT do ;
    12.     //执行到这里是1秒
    13.     Stop;
    14.     Free;
    15.   end;
    16. end;
    复制代码
    6.RTC

    1. uses RTC;

    2. var DT: TYMDHNSW;
    3. begin
    4.   with DT do
    5.   begin
    6.     Year:= 14;
    7.     Month:= 10;
    8.     Day:= 20;

    9.     Hour:= 9;
    10.     Minute:= 30;
    11.     Second:= 0;

    12.     Week:= Monday;
    13.   end;
    14.   TRTC.Instance.DateTime:= DT;

    15.   FillChar(DT, SizeOf(TYMDHNSW), 0);
    16.   DT:= TRTC.Instance.DateTime;
    17. end;
    复制代码
    7.General Purpose

    1. uses GP;

    2. var Data: LongWord;
    3. begin
    4.   TGP.Instance.TMR_GP[0]^:= 123456789;
    5.   Data:= TGP.Instance.TMR_GP[10]^;
    6. end;
    复制代码
    历史版本:
    2014.10.18 v0.5 增加TWI封装类,修正部分bug
    2014.10.16 v0.3 增加General Purpose封装类
    2014.10.15 v0.3 增加RTC封装类,修正部分变量位定义的bug
    2014.10.14 v0.2 增加Timer封装类
    2014.10.03 v0.1 完成GPIO、LRADC、PWM的封装类

    详细例程及代码分析后续放出。

    ClassA20_20141018_Release.zip (16.66 KB, 下载次数: 20)
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-4-18 08:38
  • 签到天数: 110 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2014-10-19 10:00:37 | 显示全部楼层
    顶一下
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.10]以坛为家III

     楼主| 发表于 2014-10-19 10:13:01 | 显示全部楼层
    霹雳之火 发表于 2014-10-19 10:00
    顶一下

    谢谢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2015-8-25 10:41
  • 签到天数: 66 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2014-10-20 09:53:07 | 显示全部楼层
    新手表示很有压力看不懂
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.10]以坛为家III

     楼主| 发表于 2014-10-20 10:24:54 | 显示全部楼层
    Ares丶ST 发表于 2014-10-20 09:53
    新手表示很有压力看不懂

    pascal而已,没什么
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-12-11 14:40
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2016-8-21 11:50:27 | 显示全部楼层
    你好,这些代码如何 编译,如何烧写。
    零基础,希望你不吝赐教。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-12-19 16:07 , Processed in 0.173979 second(s), 27 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.