typedef enum { wait_rising, wait_falling, ready } Tdat_state;
typedef struct
{
u8 volatile *in_reg0;
u8 pin0;
u8 volatile *in_reg1;
u8 pin1;
Tdat_state state;
u16 time;
} Tgpio_cfg;
#define NUM_DAT 20
Tgpio_cfg dat[ NUM_DAT ];
dat[ 0 ].in_reg0 = PINA;
dat[ 0 ].pin0 = (1 << PA3);
dat[ 0 ].in_reg1 = PINB;
dat[ 0 ].pin1 = (1 << PB6);
dat[ 0 ].state = wait_rising;
void timer_1ms_func( void )
{
for( u8 i = 0; i < NUM_DAT; i++ )
{
switch( dat[ i ].state )
{
case wait_rising:
if( dat[ i ].in_reg0 & dat[ i ].bit0 )
{
dat[ i ].time = 0;
dat[ i ].state = wait_falling;
}
break;
case wait_falling:
dat[ i ].time++;
if( dat[ i ].in_reg1 & dat[ i ].bit1 )
{
dat[ i ].state = ready;
}
break;
}
}
}