微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2540如何在协议栈里添加一个LED

CC2540如何在协议栈里添加一个LED

时间:10-02 整理:3721RD 点击:

产品有五个LED,并且都需独立控制,包括亮灭,不同次数的闪烁。LED的驱动实在太过精妙复杂,研究了很长时间不得要领。

BLE协议栈定义了四个,我照着添加了一个,但是没有用,以下是修改的地方:

void HalLedInit (void)

{

....

LED5_DDR |= LED5_BV;

...

}

void HalLedOnOff (uint8 leds, uint8 mode)

{

...

if (leds & HAL_LED_5)
{
if (mode == HAL_LED_MODE_ON)
{
HAL_TURN_ON_LED5();
}
else
{
HAL_TURN_OFF_LED5();
}
}

...

}

头文件中:

#define LED5_BV    BV(1)
#define LED5_SBIT   P1_1
#define LED5_DDR    P1DIR
#define LED5_POLARITY    ACTIVE_LOW

#define HAL_LED_5   0x10
#define HAL_LED_ALL    (HAL_LED_1 | HAL_LED_2 | HAL_LED_3 | HAL_LED_4 | HAL_LED_5)

还有一些开关宏如#define HAL_TURN_ON_LED5()        st( LED5_SBIT = LED5_POLARITY (1); )都添加了

调试发现新添加的LED不起作用,比如调用HalLedBlink(HAL_LED_5,3,50,1000);  HAL_LED_5的值没有传递到HalLedOnOff();而前4个LED都正常。

求道友指点,还有什么地方遗漏了

也曾想过在应用层自己进行控制,但由于五个LED相互独立,情况复杂,要么事件数量暴增,要么在同一事件中通过较短的时基和标志位进行管理,但这样功耗又难以控制,还是希望能够将LED的工作放在hal任务中。


/* Defaults */
#define HAL_LED_DEFAULT_MAX_LEDS      4

這有改成 5 嗎?

谢谢回复,确实是这个原因,申请的结构体空间不够,控制LED_5时匿名访问了栈空间的某个不为0的值,条件不满足导致无法执行开关宏。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top