天嵌 ARM开发社区

 找回密码
 注册
查看: 2062|回复: 1

wince6.0 中断

[复制链接]
ztt725 发表于 2012-11-20 18:56:05 | 显示全部楼层 |阅读模式
因为当时看定时器的时候,理解中断用了很长的时间,所以我把中断和定时器分开了。
中断的确是个好东西。
定时器可以进行定时,可以每隔多长时间发出一个脉冲,这个脉冲可以在tout引脚用示波器检测到。而如果我想隔一段时间做一件或多件其他的事情(不再单单发出脉冲),就要用到中断了。
将定时器设置工作在中断方式,然后在这个中断信号来临的时候do something。
wince6.0的中断方式有特定的模式,如下:
void IntProcess()
{
UINT32 IRQ;//作为中断号
HANDLE IntEvent;用这个事件和中断号联系起来,如此中断产生,则激活事件
IntEvent = CreateEvent(NULL, FALSE, FALSE, NULL);   
        if (!IntEvent)
        {
                RETAILMSG(1, (TEXT("ERROR: kEYBD: Failed to create event.\r\n")));
                return FALSE;
        }

        IRQ = 10; //IRQ_TIMER0;
        if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &IRQ, sizeof(UINT32), &g_KeySysIntr, sizeof(UINT32), NULL))
        {
                RETAILMSG(1, (TEXT("ERROR: kEYBD: Failed to request sysintr value.\r\n")));
                return FALSE;
        }


        if (!InterruptInitialize(g_KeySysIntr, IntEvent, NULL, 0))
        {
                RETAILMSG(1,(TEXT("Fail to initialize userkey interrupt event\r\n")));
                return FALSE;
        }
while(1)
        {
                dwStatus=WaitForSingleObject(IntEvent, INFINITE);//在无限的时间里等待事件,时间来临则返回WAIT_OBJECT_0,当然还有其他的返回值,可以参考其他资料

                if(dwStatus==WAIT_OBJECT_0)
                {
                        yourthings……
                }
                InterruptDone(g_KeySysIntr);//中断结束,可以相应下次中断
        }
}

实验报告:
一开始进入中断,但是中断频率变小,原因是使用了RETAILMSG函数来打印串口信息。调试的时候用此函数可以清晰的看出返回值,但是它耗费的时间太长,导致下次中断来临,却执行不到InterruptDone,导致遗失中断信号。
注意中断程序执行时间,避免遗失中断信号。
2012.11.16
embedsky_lhh 发表于 2012-11-21 09:26:23 | 显示全部楼层
:):):):):):):):):):):):):)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-4-24 13:15 , Processed in 1.046875 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表