首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

void interrupt Keyboard_ISR( void )

void interrupt Keyboard_ISR( void )

#if defined ( KB_INT )
/*
* Keyboard Interrupt Module Interrupt Service Routine
*/
void interrupt Keyboard_ISR( void )
{
// disable key interrupts
KBIntSetup( false );

// Allow other interrupts, assuming only other interrupt is MAC
EnableInts;

// Wait to avoid the key bouncing
osal_set_event( OnBoard_TaskID, KEYPRESS_DEBOUNCE_EVT );

// Disable interrupts before returning from ISR
DisableInts;
}
#endif // KB_INT
有什么问题?
关于处理按键过程
(1)用中断的方式
1。开按键中断
2。若有键被按下,则自动进入
#if defined ( KB_INT )
/*
* Keyboard Interrupt Module Interrupt Service Routine
*/
void interrupt Keyboard_ISR( void )
{
// disable key interrupts
KBIntSetup( false );

// Allow other interrupts, assuming only other interrupt is MAC
EnableInts;

// Wait to avoid the key bouncing
osal_set_event( OnBoard_TaskID, KEYPRESS_DEBOUNCE_EVT );
产生event,这儿DEBOUNCE怎么翻译?是按键削抖用的吗?

// Disable interrupts before returning from ISR
DisableInts;
}
#endif // KB_INT
3。进而void OnBoard_ProcessEvent( byte task_id, UINT16 events )
#if defined ( KB_INT )
if ( events & KEYPRESS_SETUP_INT_EVT )
KBIntSetup( true );

if ( events & KEYPRESS_DEBOUNCE_EVT )
osal_start_timerEx( OnBoard_TaskID, KEYPRESS_POLL_EVT, 50 );
#endif
我对osal_start_timerEx的功能不是很清楚,50ms后接下来的处理过程是哪样的呢??
(2)用查询的方式
1。关按键中断
#if defined ( KB_INT )
// This is to avoid interrupts until normal processing
osal_set_event( task_id, KEYPRESS_SETUP_INT_EVT );
#else
// Start the key polling
osal_set_event( task_id, KEYPRESS_POLL_EVT );
#endif
2。处理KEYPRESS_POLL_EVT
if ( events & KEYPRESS_POLL_EVT )
{
gb60_read_keys();

#if defined ( KB_INT )
osal_set_event( task_id, KEYPRESS_SETUP_INT_EVT );
#else
osal_start_timerEx( OnBoard_TaskID, KEYPRESS_POLL_EVT, 100 );
#endif
}
同样进入osal_start_timerEx,100ms后接下来的处理过程是哪样的呢??
我一直在这儿弄不大清楚,感觉处理按键都应按以下步骤,这儿怎么体现??
1》判断有键按下
2》判断是哪个键按下
3》消抖
4》确认键
5》判断按键释放
请斑竹指正,谢谢!!
debounce是去抖,
gb60_read_keys();就是判断哪个按键按下
gb60_read_keys();这个函数的原函数在哪个.c文件里?
cw里有没有方法能够立即找到一个函数的原函数在哪儿??
在CW中,对着函数按下右键,有go to function definition...可以跳到原函数
返回列表