TI中文支持网
TI专业的中文技术问题搜集分享网站

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

产品有五个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都正常。

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

Light J:

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

Yu-tsun Chen:

/* Defaults */#define HAL_LED_DEFAULT_MAX_LEDS      4

這有改成 5 嗎?

Light J:

回复 Yu-tsun Chen:

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

赞(0)
未经允许不得转载:TI中文支持网 » CC2540如何在协议栈里添加一个LED
分享到: 更多 (0)