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

CC2541按键使用问题

使用自己的板子,直接配置寄存器驱动按键可以使用,但在OSAL中使用却没有反应,同样的OSAL程序在开发板中可以使用,请问可能是什么问题?按键端口都是P0.1。

YiKai Chen:

用示波器檢查一下按键端口P0.1訊號在按键時有沒有改變

Viki Shi:

看描述应该是移植到OSAL出现问题,建议根据STACK中的osal文档进行操作

user5773375:

回复 YiKai Chen:

是有高低电平变化的,按下为低电平

YiKai Chen:

回复 user5773375:

參考一下hal_key.c是怎樣設置中断服務,然後檢查一下你的設置

user5773375:

回复 YiKai Chen:

static void simpleBLECentral_HandleKeys( uint8 shift, uint8 keys ){ (void)shift; // Intentionally unreferenced parameter

//HalLcdWriteStringValue( "key = 0x", keys, 16, HAL_LCD_LINE_2 );

// smartRF开发板上的S1 对应我们源码上的HAL_KEY_SW_6 if ( keys & HAL_KEY_SW_6 ) { //HalLcdWriteString( "HAL_KEY_SW_6", HAL_LCD_LINE_3 ); HalLedSet(HAL_LED_1, HAL_LED_MODE_FLASH); // led1闪烁 HalLedSet(HAL_LED_2, HAL_LED_MODE_ON); // led2亮  }

嗯嗯,我就是用的hal_key.c上的SW_6(p0.1),来控制LED,相同的代码在开发板上是可以的,只是在我的电路上不可以,但直接配置的寄存器代码(没有OSAL)可以驱动按键

da qin zheng sheng:

使用了两种不同板子吧?对比硬件按键的不同!

Susan Yang:

回复 user5773375:

您可以看一下下面的回调函数。

/********************************************************************** @fnOnBoard_KeyCallback** @briefCallback service for keys** @paramkeys- keys that were pressed*state - shifted** @returnvoid*********************************************************************/
void OnBoard_KeyCallback ( uint8 keys, uint8 state )
{uint8 shift;(void)state;// shift key (S1) is used to generate key interrupt// applications should not use S1 when key interrupt is enabledshift = (OnboardKeyIntEnable == HAL_KEY_INTERRUPT_ENABLE) ? false : ((keys & HAL_KEY_SW_6) ? true : false);if ( OnBoard_SendKeys( keys, shift ) != SUCCESS ){// Process SW1 hereif ( keys & HAL_KEY_SW_1 )// Switch 1{}// Process SW2 hereif ( keys & HAL_KEY_SW_2 )// Switch 2{}// Process SW3 hereif ( keys & HAL_KEY_SW_3 )// Switch 3{}// Process SW4 hereif ( keys & HAL_KEY_SW_4 )// Switch 4{}// Process SW5 hereif ( keys & HAL_KEY_SW_5 )// Switch 5{}// Process SW6 hereif ( keys & HAL_KEY_SW_6 )// Switch 6{}}/* If any key is currently pressed down and interruptis still enabled, disable interrupt and switch to polling */if( keys != 0 ){if( OnboardKeyIntEnable == HAL_KEY_INTERRUPT_ENABLE ){OnboardKeyIntEnable = HAL_KEY_INTERRUPT_DISABLE;HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);}}/* If no key is currently pressed down and interruptis disabled, enable interrupt and turn off polling */else{if( OnboardKeyIntEnable == HAL_KEY_INTERRUPT_DISABLE ){OnboardKeyIntEnable = HAL_KEY_INTERRUPT_ENABLE;HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);}}
}您可以尝试在上面的函数内直接对键值进行处理。

user5773375:

回复 da qin zheng sheng:

硬件连接对比是一样的,都是按键接地,下降沿有效。

user5773375:

回复 Susan Yang:

在switch 6中处理也不行呢

赞(0)
未经允许不得转载:TI中文支持网 » CC2541按键使用问题
分享到: 更多 (0)