TI中文支持网
TI专业的中文技术问题咨询交流网站

opt3001的中断触发问题?

下面是我的核心代码,当前的光照值大于我设置的阈值,当我把传感器遮挡的时候,可以进入中断函数,但是当我再次遮挡的时候,却进入不了中断函数,这是为什么呢?我的config配置的是0x54,0x10(配置完后读取出来config是5490)

//光照下限和上限配置

void Init_OPT3001_IN(){
Get_OPT3001_Result();
if(((TXBuf[0]<<8|TXBuf[1])&0xFFF)>=cfg_para_opt3001.lignt_limit_ths)
{
g_DoorStatus = DOOR_OPEN;
Set_OPT3001_Low_Limit( cfg_para_opt3001.lignt_limit_ths );
Get_OPT3001_Status();
}
else if(TXBuf[1]<cfg_para_opt3001.lignt_limit_ths)
{
g_DoorStatus = DOOR_CLOSE;
Set_OPT3001_High_Limit( cfg_para_opt3001.lignt_limit_ths );
Get_OPT3001_Status();
}
}

//中断函数

void OPT3001CallbackFxn(PIN_Handle handle, PIN_Id pinId) {
switch (pinId) {
case OPT3001_INT:
paomadeng_opt3001();
break;
}
}

Kevin Qiu1:

看不到回调中的具体操作,单步运行看第二次超出阈值程序能否执行到此处

user6477475:

回复 Kevin Qiu1:

中断回调中,我就简单执行了下跑马灯,是还要设置什么吗??

YiKai Chen:

回复 user6477475:

先查一下中斷是不是真的有被觸發吧

user6477475:

回复 YiKai Chen:

我用手遮挡,有触发的。我单步过

Kevin Qiu1:

回复 user6477475:

查下是否到了这一步case OPT3001_INT

user6477475:

回复 Kevin Qiu1:

单步到这一步了,我的思路是这样的,您分析下看对不对:
举个例子,当前光照值假如是80,我的阈值是50,所以给他设置个触发下限也就是Set_OPT3001_Low_Limit(50);
我用手一遮挡,光照值低于50,所以进中断,然后再中断处理里面也就是case OPT3001_INT里面再将50设置位触发上限Set_OPT3001_High_Limit(50 );这思路有问题吗???

YiKai Chen:

回复 Kevin Qiu1:

你config配置的是0x54,0x10,代表Latchfield=1, latching the interrupt reporting mechanisms until a user-controlled clearing event.那你有clear event的動作嗎?

user6477475:

回复 YiKai Chen:

clear event的動作 代码是什么呢?还有一个问题哈,我写入的0x54,0x10,读出来的0x54,0x90,这个有影响吗?

YiKai Chen:

回复 user6477475:

1. clear event的動作 代码是什么–>你要不要仔細讀一下OPT3001的datasheet啊
2. 我写入的0x54,0x10,读出来的0x54,0x90,我不認為这个有影响

user6477475:

回复 YiKai Chen:

我看过了datesheet了,clear event是清除中断的意思吗?

赞(0)
未经允许不得转载:TI中文支持网 » opt3001的中断触发问题?
分享到: 更多 (0)