一、接口函数
对于linux驱动来说,基本的操作函数有Open、Close、Read、Write、Ioctrl,这是在OS的驱动层对外设进行操作的一套规范化的接口。对于更底层的硬件抽象层来说,上层的Open和Close意味着对外设的初始化设置和反初始化设置(回复到未被使用前的状态)。如果外设的作用是实现一个通讯传输,那么上层的Read、Write也要同样对应外设的发送和接收。若外设不是一个传输设备,那么就要有对应的I/O control函数来控制它。同时HAL还要提供取得外设状态的接口,以及外设的中断处理函数。所以一个HAL模块的函数结构基本上是这样的:
通讯外设的接口函数
在TRANSFER这里,大部分实现通信协议的外设都可以由普通方式、中断方式、DMA方式来进行收发。普通方式和中断方式有相应的callback函数和中断处理函数,DMA方式也有相应的DMA控制函数。依据不同的通讯协议,不同的通讯外设的传输函数也会有许多区别。
CAN模块里有sleep和wakeup函数。
I2C模块分了Master、Slave和Mem三种模式,每种模式都由对应的读写函数。
SPI模块里有全双工模式下用的同时读写的函数。
非通讯外设的接口函数
非通讯外设的CONTROL部分中,不同的外设有不同的操作函数。比如 对于Rtc来说,需要能够取得当前的时