TA的每日心情 | 奋斗 2022-9-16 05:52 |
---|
签到天数: 1368 天 连续签到: 1 天 [LV.10]以坛为家III
|
本帖最后由 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)
|
评分
-
查看全部评分
|