【Allwinner ClassA20类库分析】3.ClassA20功能及结构

经过前两节的铺垫,在语法上估计没有问题了吧,现在正式进入ClassA20类库的环节。

首先先下载文件:[https://github.com/tjCFeng/ClassA20](https://github.com/tjCFeng/ClassA20),推荐直接下载zip文件。解压...


A20.pas - 整个类库的基础,为计算映射地址的单元,不需要直接使用

Clock.pas - 打开关闭部分外设的时钟控制,不需要直接使用

GP.pas - 备份寄存器控制单元

GPIO.pas - GPIO控制单元

LRADC.pas - LRADC低精度ADC控制单元

PWM.pas - PWM控制单元

RTC.pas - 实时时钟控制单元

TWI.pas - I2C控制单元

Timer.pas - 计时器控制单元

目前实现了这几个,后续准备实现SPI、中断等。由于Linux中断不能直接被用户态程序响应,所以有些麻烦,这一点真不如WinCE好用。 



**工程建立:**

参考第一节工程的建立,保存所有文件后,将ClassA20文件夹放在工程文件夹里(便于管理)。在IDE中选择“工程”菜单中的“工程选项”,会弹出工程配置的窗体



在这个弹出的窗体中会看到好多的选项。选择“路径”后,在右边的“补充单元”可以直接输入需要引用的文件夹名称,或者点击后面的按钮,在之后的弹出窗体中选择文件夹


选择好之后,就可以在单元中引用需要的单元文件了。


小技巧:如果想打开某一个单元文件,或想查看某一函数、定义等,只要把鼠标移到上面,按住Ctrl键,鼠标就会变成手形,然后点击鼠标,可以直接打开文件并跳转到对应的位置,非常方便。如果鼠标点击后没有打开或跳转,证明没有找到该文件或书写错误。

另外,当创建一个对象后,在对象名后面输入“.”,就会弹出该对象所能调用的方法或属性,而该对象类中的私有成员则不显示,这样可以大大提高代码编写的效率。


**程序结构:**

ClassA20类库每一个单元中一般分为两部分,单例类和普通类。以LRADC.pas为例,


单例类一般用于对临界资源或统一控制资源的封装,并且没有功能的简化,可以直接操作对应的寄存器;而普通类则是对某一通道或某一端口进行的封装,常用的设置和功能被封装,可以直接调用简化操作。

例如全志的A20,两个通道的LRADC的启动和停止采集由同一组寄存器控制,所以它们被封装到了单例类中,避免对一个通道的控制时无意中影响到另一个通道的工作;而对具体某一通道进行读取数据的操作,由于可以分别操作,所以被封装到了普通类中。

请在[https://github.com/tjCFeng/ClassA20](https://github.com/tjCFeng/ClassA20)下载ClassA20类库。