Skip to content

tjCFeng/ClassA20

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

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

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

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

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

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

例子:
1.TGPIOGROUP

[code]
uses GPIO;

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

2.TGPIO

[code]
uses GPIO;

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

或

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

3.LRADC

[code]
uses 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;
[/code]

4.PWM

[code]
uses 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;
[/code]

5.Timer

[code]
uses 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;
[/code]

6.RTC

[code]
uses RTC;

var DT: TYMDHNSW;
begin
  with DT do
  begin
    Year:= 14;
    Month:= 10;
    Day:= 20;

    Hour:= 9;
    Minute:= 30;
    Second:= 0;

    Week:= Monday;
  end;
  TRTC.Instance.DateTime:= DT;

  FillChar(DT, SizeOf(TYMDHNSW), 0);
  DT:= TRTC.Instance.DateTime;
end;
[/code]

7.General Purpose

[code]
uses GP;

var Data: LongWord;
begin
  TGP.Instance.TMR_GP[0]^:= 123456789;
  Data:= TGP.Instance.TMR_GP[10]^;
end;
[/code]

8.TWI
[code]
uses TWI;

var TWI0: TTWI; Data: Byte;
begin
  TWI0:= TTWI.Create(TWI_0);
  TWI0.Write($34, $35, $83);
  TWI0.Read($34, $35, Data);
  TWI0.Free;
end;
[/code]

9.WatchDog
[code]
uses WatchDog;
begin
  TWDOG.Instance.Interval:= S16; //16秒间隔
  TWDOG.Instance.ForceRestart:= True; //未喂狗重启
  TWDOG.Instance.Start;
  TWDOG.Instance.Reset; //喂狗
  TWDOG.InstanceStop;
end;
[/code]

10.Temperature
[code]
uses TP;

var T: Double;
begin
  T:= TTemperature.Instance.Temperature;
end;
[/code]

历史版本:
2014.12.06 v0.8 增加Temperature封装类,修正所有的TGOURP类型为TGROUP,抱歉,手误拼写错误
2014.10.21 v0.7 增加WatchDog封装类
2014.10.20 v0.6 增加GP封装类
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的封装类

About

Allwinner A20 free pascal Library Class

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages