CC2540/CC2541/CC254x之硬件抽象层

硬件抽象层


硬件抽象层(HAL)是提供硬件服务而又不涉及太多硬件细节的层,为应用提供访问GPIO、UART、ADC等硬件的接口。




硬件抽象层文件目录


硬件抽象层文件目录包括HAL驱动和HAL相关文件的头文件,HAL文件存放在三个不同的目录下,如下图:




HAL Common文件夹


该文件夹包含协议栈、MAC和驱动中使用到的相关配置文件。其中hal_drivers.c文件包含所有驱动初始化及相关事件处理机制。主要包括以下三个函数:

1.Hal_Init() :它由osalInitTasks”函数调用,以便在OSAL中注册HAL的驱动。

2.HalDriverInit():它由main()函数调用来初始化硬件驱动。大家可以根据需要在这里添加硬件相关的初始化,所有这些初始化工作会在协议栈开始运行时完成。

3.Hal_ProcessEvent():这个函数用来处理OSAL中HAL相关的驱动事件,例如按键、LED、LCD、蜂鸣器、休眠定时等。大家也可以根据自己的需求自定义HAL事件,需要注意的是,事件的ID必须是唯一的,并且要在hal_driver.h文件中定义。



HAL Include 文件夹


该文件夹包含HAL驱动及HAL相关文件的头文件。如下表:



HAL Target文件夹


该文件夹下的Drivers包含所有HAL驱动的.c文件。可以根据需要修改.c文件中的内容来适应不同的硬件平台。



硬件抽象层驱动编译


特定的驱动在编译的时候由特定的编译选项来控制,如果某个驱动不想编译,就将控制它的编译选项设置为FALSE”,反之,设置为TRUE”。下面罗列了部分驱动及编译选项的对应关系:



以SimpleBLEPeripheral工程为例,Options->C/C++ Compiler->Preprocessor选项卡中可以看到Defined symbol,里面就是预编译内容,通过键入HAL_XXX=TRUE,可以将对应的驱动加入编译;通过键入HAL_XXX=FALSE,可以将对应的驱动取消编译。如下:






自定义驱动


HAL驱动具有很大的灵活性,大家可以根据自己的需要修改现有的驱动或者添加自定义的驱动,以适应特定的需求。


当需要修改现有驱动时,应该遵循以下规则:

1.所有的Include中的头文件要保持不变,因为这些原型被程序其他部分使用,不能随意改变。

2.每个驱动程序的内容通过修改Drivers文件夹下面的.c文件来改变。

3.驱动硬件配置需要修改hal_board_cfg.h

 

当需要添加新的驱动以适应不同的硬件平台时,应该遵循以下步骤添加:

1.在Include文件夹中增加新的头文件。

2.将新增的驱动内容添加到Drivers文件夹下面的.c文件中。

3.检查hal_board_cfg.h,查看GPIO等是否正确配置,如果管脚冲突或者不需要,可以按照前面说过的方法对不需要的驱动编出。

 

注意:在开发过程中,很多人会选取协议栈中的某个demo作为自己代码工程的起始版,比如,要做一个心率计的产品时,我们为了开发的进度和简易性,往往会选取协议栈中心率计的demo作为我们开发的软件工程的起始版。这个时候,大家一定要注意引脚的使用,除了根据自己产品的硬件设计对应相应的引脚之外,还要避免协议栈demo中对一些引脚的使用和初始化,有可能某个引脚我们用来采集数据,但是这个引脚却在按键驱动中被初始化并进行了设置,这个时候就会导致我们采集数据时出现问题。所以,在配置引脚时,最好在工程中全局搜索一下,将不符合自己硬件设计的引脚初始化及配置进行屏蔽或者删除。







  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值