蓝牙BLE开发之二_修改HAL层代码自适应硬件

原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: 蓝牙BLE开发之二_修改HAL层代码自适应硬件

Hal层位于协议栈的:\Components\hal目录里,common中存放的是hal层各驱动的共同部分,include是hal层外提供的函数接口,也就是头文件。在target文件夹下是与硬件相关的各平台hal驱动源码。

主要分为四个部分:

CC2540EB对应SmartRF开发板或者Keyfob开发板环境

CC2540USB对应CC2540USBdongle硬件环境

CC2541ARC对应飞鼠硬件环境,也就是BLE协议栈里的HIDAdvRemote工程

CC2541ST对应的是TI的SensorTag开发板环境

 

image

我的开发板是基于CC2540EB的,所以,在这个目录里,我们找我们需要修改的代码:

image

打开这个hal_led.c我们分析源码:

image

主要看HalLedOnOff这个函数,继续跟踪源码:

image

image

这个st宏定义的作用相当于一个大括号,将其中x代表的是所有代码,__LINE__是iar内部宏定义,表示当前的行号,应为行号不可能等于-1,所以,这个do while只会执行一次,就是执行x所表示的所有代码。而x,拿 HAL_TURN_ON_LED1()这个宏来看,代表的就是:

LED1_SBIT = LED1_POLARITY (0);

image

image

通过这么分解,HAL_TURN_ON_LED1就是P1_0=!!1,一个“!“代表逻辑非,两个”!“负负得正,直接就是P1_0 = 1,就这样,LED1被点亮了。

上面仅仅是完成了控制部分的逻辑代码,如果要真正起作用,还必须修改LED的初始化函数,只有初始化过GPIO,才能对GPIO操作。

在hal_led.c中,HalLedInit是对led进行初始化操作,如果我们新添加的gpio没有初始化,那么需要在这个地方进行初始化:

image

在上面进行完修改之后,我们便将led的gpio配置好了。

那么,从OSAL的角度来分析,我们是如何调用到这个函数呢?我们进行跟踪:

image

image

image

那么上面这个宏是从哪里来呢?这个宏是定义在编译器的选项里的:

image

这样的话,我们就完成了在HAL层的自定义的一个IO口的操作。

原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: 蓝牙BLE开发之二_修改HAL层代码自适应硬件

文章的脚注信息由WordPress的wp-posturl插件自动生成



|2|left
打赏

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: