UWORD *uwIoNewStatus[XINPUT_PORT_NUM] = {&BXBrkL, &BXBrkR, &BXBrk1, &BXBrk2, &BXBKShotEr, &BXBRY, &BXBKVHST, &BXBKSTYPE};
/***************************************************************
Function: voIOinputFilter;
Description: IOinput filter
Call by: voIOinput 1ms;
Input Variables: filter CNT (0~255)
Output/Return Variables: N/A
Subroutine Call: ...;
Reference: N/A
****************************************************************/
void voIOinputFilter(UBYTE filtercnt)
{
UWORD i = 0;
ulIoBufStatusTemp = (BKSTYPE<<7) | (BKVH<<6) | (BRY<<5) | (GNDERR<<4) | (BKY2<<3) | (BKY1<<2) | (BK2<<1) | BK1;
for(i = 0; i < XINPUT_PORT_NUM; i++)
{
uwIoBufStatus[i] = (ulIoBufStatusTemp>>i)&0x0001;
}
for(i = 0; i < XINPUT_PORT_NUM; i++)
{
if(uwIoBufStatus[i] != uwIoOldStatus[i])
{
uwIoOldStatus[i] = uwIoBufStatus[i];
uwFiltercnt[i] = 0;
}
else
{
if(uwFiltercnt[i] >= filtercnt)//(filtercnt+1)ms
{
*uwIoNewStatus[i] = uwIoOldStatus[i];
uwFiltercnt[i] = 0;
}
else
uwFiltercnt[i]++;
}
}
}
通过J-scope观察滤波效果(filtercnt设为4),在第五毫秒输出