forked from tjCFeng/ClassA20
-
Notifications
You must be signed in to change notification settings - Fork 0
wsdragon/ClassA20
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
全志A20处理器底层操作的一些封装,采用free pascal,封装类。 使用方法:在工程中添加该类所在的文件夹路径即可。 一般每一个外设功能分为两部分封装,一种是直接对某一Pin或通道的操作类,实现对常用功能的封装;另一种是对该类型外设的寄存器操作类,用来对前者没有封装到的功能进行设置。 目前实现了对GPIO、LRADC、PWM的封装,后续功能陆续完成,并且正在尝试增加对中断的响应功能。 该类可用在控制台、有界面或无界面程序中均可,并且根据编译器的不同,也可用在不同的操作系统,只需很少的代码改动,如引用不同的单元等。 全志其他系列的处理器也可使用该类,如A10等,只需要根据差异的部分进行改动,或者继承重新实现。 作者:tjCFeng 邮箱:[email protected] 例子: 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 0
No packages published
Languages
- Pascal 100.0%