mirror of https://github.com/joan2937/pigpio
Fix issue #353, initialising glitch filter
This commit is contained in:
parent
bea536389f
commit
b9e57f6047
28
pigpio.c
28
pigpio.c
|
@ -950,6 +950,7 @@ typedef struct
|
||||||
uint32_t nfRBitV;
|
uint32_t nfRBitV;
|
||||||
|
|
||||||
uint32_t gfSteadyUs;
|
uint32_t gfSteadyUs;
|
||||||
|
uint8_t gfInitialised;
|
||||||
uint32_t gfTick;
|
uint32_t gfTick;
|
||||||
uint32_t gfLBitV;
|
uint32_t gfLBitV;
|
||||||
uint32_t gfRBitV;
|
uint32_t gfRBitV;
|
||||||
|
@ -5685,7 +5686,7 @@ unsigned alert_delays[]=
|
||||||
static void alertGlitchFilter(gpioSample_t *sample, int numSamples)
|
static void alertGlitchFilter(gpioSample_t *sample, int numSamples)
|
||||||
{
|
{
|
||||||
int i, j, diff;
|
int i, j, diff;
|
||||||
uint32_t steadyUs, changedTick, RBitV, LBitV;
|
uint32_t steadyUs, changedTick, RBitV, LBitV, initialised;
|
||||||
uint32_t bit, bitV;
|
uint32_t bit, bitV;
|
||||||
|
|
||||||
for (i=0; i<=PI_MAX_USER_GPIO; i++)
|
for (i=0; i<=PI_MAX_USER_GPIO; i++)
|
||||||
|
@ -5694,6 +5695,17 @@ static void alertGlitchFilter(gpioSample_t *sample, int numSamples)
|
||||||
|
|
||||||
if (monitorBits & bit & gFilterBits)
|
if (monitorBits & bit & gFilterBits)
|
||||||
{
|
{
|
||||||
|
initialised = gpioAlert[i].gfInitialised;
|
||||||
|
if (!initialised && numSamples > 0)
|
||||||
|
{
|
||||||
|
/* Initialise filter with first sample */
|
||||||
|
bitV = sample[0].level & bit;
|
||||||
|
gpioAlert[i].gfRBitV = bitV;
|
||||||
|
gpioAlert[i].gfLBitV = bitV;
|
||||||
|
gpioAlert[i].gfTick = sample[0].tick;
|
||||||
|
gpioAlert[i].gfInitialised = 1;
|
||||||
|
}
|
||||||
|
|
||||||
steadyUs = gpioAlert[i].gfSteadyUs;
|
steadyUs = gpioAlert[i].gfSteadyUs;
|
||||||
RBitV = gpioAlert[i].gfRBitV;
|
RBitV = gpioAlert[i].gfRBitV;
|
||||||
LBitV = gpioAlert[i].gfLBitV;
|
LBitV = gpioAlert[i].gfLBitV;
|
||||||
|
@ -12335,18 +12347,8 @@ int gpioGlitchFilter(unsigned gpio, unsigned steady)
|
||||||
|
|
||||||
if (steady)
|
if (steady)
|
||||||
{
|
{
|
||||||
gpioAlert[gpio].gfTick = systReg[SYST_CLO];
|
/* Initialise values next time we process alerts */
|
||||||
|
gpioAlert[gpio].gfInitialised = 0;
|
||||||
if (gpioRead_Bits_0_31() & (1<<gpio))
|
|
||||||
{
|
|
||||||
gpioAlert[gpio].gfLBitV = (1<<gpio);
|
|
||||||
gpioAlert[gpio].gfRBitV = 0 ;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gpioAlert[gpio].gfLBitV = 0 ;
|
|
||||||
gpioAlert[gpio].gfRBitV = (1<<gpio);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gpioAlert[gpio].gfSteadyUs = steady;
|
gpioAlert[gpio].gfSteadyUs = steady;
|
||||||
|
|
Loading…
Reference in New Issue