the numerous innovative teachings of the present invention will be described with particular reference to the presently preferred exemplary embodiments . however , it should be understood that this class of embodiments provides only a few examples of the many advantageous uses and innovative teachings herein . for example , while the embodiment of the invention described herein is with respect to an iso7816 standard data interface , it is applicable to any asynchronous data interface . in general , statements made in the specification of the present application do not necessarily delimit the invention , as set forth in different aspects in the various claims appended hereto . moreover , some statements may apply to some inventive aspects , but not to others . [ 0019 ] fig2 is a timing diagram for a signal that is compliant with the iso7816 standard , with time represented on the horizontal axis . a complete character is shown in the figure , starting at time 0 and ending at time tn . the character is composed of bits , each bit being of a defined duration referred to in the iso7816 standard as an elementary time unit , or etu . at any given time the signal is at either an a state or a z state . at the beginning of a character , between time 0 and time t1 , a start bit having a value of a is sent , followed by eight data bits between time t1 and time t9 . the eight data bits are followed , between time t9 and t10 , by a parity bit . the parity bit is followed by a guard time having a variable number of etus duration , between time t10 and the end of the character , time tn . further details on this and other aspects of the iso7816 standard can be found in the iso7816 standard publication , which may be obtained from the international organization for standardization at 1 , rue de varembé , case postale 56 , ch - 1211 geneva 20 , switzerland . a basic overview of the iso7816 standard may be obtained from the smart card industry association at 191 clarksville road , princeton junction , n . j . 08550 . [ 0020 ] fig3 is a signal timing diagram like that of fig2 but also showing two glitches , at 32 and 34 , that appear in the first and sixth data bits , respectively . these glitches take the form of a signal superimposed on the transmitted signal , having a voltage opposite from that of the data bit . thus , for example , if the first data bit in fig3 has a value of z , the glitch would be a negative - going pulse that could cause a detector to see a value of a during the glitch . likewise , if such first data bit has a value of a , the glitch would be a positive - going pulse that could cause a detector to see a value of z during the glitch . glitches are typically less than 0 . 2 bits in duration . however , if the glitch exists at the time the smart card block 22 attempts to resolve the value of the bit , an erroneous detection of the bit value occurs . generally , there is seldom more than one glitch in a given character , and so a parity error is usually generated by the glitch . worse , however , if two glitches occur in a given character , no parity error is generated , since the two glitches cancel for the purposes of parity , but corrupted data is transmitted to the host unit . [ 0022 ] fig4 is a block diagram of a smart card interface subunit 40 incorporating a programmable glitch filter 41 in accordance with a preferred embedment of the present invention , a gate 29 , a smart card block 22 , a parity checker block 24 , and a control logic block 42 . the gate 29 , the smart card block 22 and the parity checker block 24 may be the same as the same numbered blocks of fig1 . the programmable glitch filter 41 and control logic block 42 may be implemented in hardware , firmware or software , as desired . in the preferred embodiment described herein the control logic block 42 is implemented as a microcontroller , such as an 8052 microcontroller , controlled by firmware , while the programmable glitch filter 41 is implemented in hardware . the programmable glitch filter ( pgf ) 41 is comprised of a glitch detector and adjustment block ( gda ) 43 and a glitch filter 44 , interconnected , and connected to logic block 42 , smart card block 22 and parity checker block 24 , as shown . the pgf 41 is generally initialized in an off state , although it may be programmed to be initialized in an on state . in the off state , the glitch filter 44 receives signals from a smart card unit , provided to the pgf 41 on line 26 , and samples those signals at a reference clock rate , for example a system clock rate at 48 mhz , to recover the smart card signals . the recovered smart card signals are sent to the smart card block 22 and to the parity checker block 24 on line 45 . as in the prior art , if the parity checker block 24 detects an error , it sends a blocking signal on line 28 to the gate 29 , and sends a signal on line 30 to the smart card unit . the parity checker block 24 also sends a signal on line 46 to control logic 42 , indicating that a parity error has been detected . this can be the same signal as that sent on line 30 , inverted if required . briefly , after the control logic 42 detects a programmable number of parity errors , it sends a signal on line 47 to the gda 43 , which enables the finding of glitches . the gda 43 is programmed to detect glitches having a width less than 0 . 2 etu . when the gda 43 detects a glitch , it provides a signal to the control logic on line 48 . once the control logic 42 receives this signal , it causes a newly calculated glitch width to be stored , and turns on the glitch filter 44 by asserting an enable bit on line 68 . the newly calculated glitch width is provided to the glitch filter 44 on line 59 , where it is used to set the sample clock at a frequency that optimizes glitch filtering , described in detail below . in this way , glitches are detected , and the width of the latest detected glitch is used to set the sample clock , thus providing advantageous adaptive glitch detection and filtering , maximizing the detecting and filtering of glitches in an environment where glitch widths may be varying over time . the operation of pgf 41 is described in detail below . [ 0026 ] fig5 shows a detailed diagram of the glitch filter 44 . a three - bit shift register is provided , comprising , for example , three latches 50 , 51 , 52 , connected in series , as shown . three two - input multiplexers 53 , 54 , 55 , are also provided in series with the multiplexers 53 , 54 , 55 , for a data hold function described in detail below . the data from a smart card on line 26 is provided to one input of multiplexer ( mux ) 53 . the output of mux 53 is provided to the data input of latch 50 . the output of latch 50 is provided to one input of mux 54 , as well as to the other input of mux 53 , and to a first input of a three - input voting unit 54 . likewise , the output of mux 54 is provided to the data input of latch 51 , and the output of latch 51 is provided to one input of mux 55 , as well as to the other input of mux 54 , and to a second input of three - input voting unit 54 . the output of mux 55 is provided to the data input of latch 52 , and the output of latch 52 is provided to the other input of mux 55 , and to a third input of three - input voting unit 54 . the output of a sampling clock generator 56 is provided to the control input of muxes 53 , 54 and 55 . each of latches 50 , 51 and 52 , of the three - bit shift register is clocked by a reference clock , which in this embodiment is a system clock , clk , e . g ., at 48 mhz . a results output of voting unit 54 is provided to the control input of a mux 58 on line 57 . the two inputs of mux 58 are held to a 0 and to a 1 , respectively . the output of mux 58 is provided to line 45 . note that while the latches 50 , 51 and 52 , are clocked by the system clock clk , the muxes 53 , 54 and 55 , are strobed by the output of sampling clock generator 56 . thus , the contents of the latches 50 , 51 and 52 , is controlled by the sampling clock generator 56 , since the contents of each latch is simply circulated , i . e ., held , unless a sample clock is asserted . the sampling clock generator 56 receives an input on line 59 from the gda 43 ( fig4 ), while the voting unit 54 receives an enable signal on line 68 from the gda 43 . the voting unit 54 is an unclocked block of logic that provides an output that is the result of a two - out - of - three “ vote ,” i . e ., according to the following table : in operation , when not enabled for glitch filtering , the sampling clock generator 56 is simply set to the clk rate . this is controlled by the filter enable signal on line 68 . thus , when the filter enable signal is not asserted ( i . e ., signaling disable ) the sampling clock generator 56 is forced to output the sampling clock at the clk rate . in this mode , as the samples are sensed by the voting unit 54 , it controls mux 58 to provide a 0 or 1 , thereby recovering the data from the signals on line 26 . any but extremely short glitches (& lt ;˜ 50 picoseconds ) will result in multiple samples , which will be sensed by the voting unit 54 and thus appear at the output of mux 58 , i . e , on line 45 in the recovered data . however , when glitch filter 46 is enabled for glitch filtering , the latest glitch width setting is provided from the gda 43 is provided on line 59 , and stored in the sampling clock generator 56 , and the enable signal is asserted on line 68 . the sampling clock generator 56 provides the sampling clock to the control input of muxes 53 , 54 and 55 , at a frequency corresponding to that stored value , as described below . the three latches 50 , 51 , 52 , continue to be clocked at the clk rate . however , as mentioned above , the muxes 53 , 54 and 55 , are strobed at the sampling clock rate , and thus shift data samples in sequence through the latches 50 , 51 , 52 , at that rate . the frequency of the sampling clock is set to optimize glitch filtering , for example corresponding to approximately the frequency of a square wave signal having a period equal to the width of the detected glitch . as a result , for glitches approximately the width of the detected glitch , or smaller , the data value represented by that glitch will appear at most in only one of the three latches 50 , 51 , 52 , while the proper data value will appear in the other two latches . the voting unit 54 outputs on line 57 a results value corresponding to the data value in at least two of the three latches 50 , 51 , 52 , as described above . thus , even if a glitch is propagated through the latches 50 , 51 , 52 , the voting unit ignores it and controls mux 58 to output the proper value . note that a larger number of latches could be provided , and a majority vote taken on their outputs , but three latches is considered preferred . if a larger number of latches is used , the number is preferably odd , to ensure an unambiguous vote . also note that the manner in which the sequential samples are stored for the voting process is a matter of design choice and is not limited to latches ; it is only necessary to store them in some way so that they can be examined simultaneously for the voting process . [ 0033 ] fig6 is a block diagram of the gda block 43 of fig4 . the gda block 43 includes a glitch detector 60 , a glitch control register block 61 , a detected glitch width register 62 , and a filtering glitch width setting register 63 . the glitch control register block 61 includes a one - bit glitch finder enable register 64 , a one - bit glitch detected register 65 , a one - bit glitch filter enable register 66 , and a one - bit update glitch width register 67 . the glitch detector 60 receives the samples on line 45 from the glitch filter 44 ( fig5 ). when glitch detector 60 detects a glitch it sets the bit in glitch detected register 65 to a 1 , using line 99 , and stores a value corresponding to the width of the detected glitch in detected glitch width register 62 . the value stored in the filtering glitch width setting register 63 is provided on line 59 , for provision to the sampling clock generator 56 in the glitch filter 44 . the glitch finder enable register 64 receives a glitch finder enable signal from control logic 42 ( fig4 ) on line 47 . the glitch detected register 65 provides the bit value stored therein to control logic 42 on line 48 . the glitch filter enable register 66 receives a glitch filter enable signal from control logic 42 on line 49 . an update glitch width signal from control logic 42 on line 50 . in operation , after the control logic 42 detects a programmable number of parity errors , it sends a signal on line 47 to the gda 43 , setting the bit in the glitch finder enable register 64 to a 1 , which enables the finding of glitches by glitch detector 60 in the signals provided on line 45 . the gda 43 is preferably programmed to detect glitches having a width less than 0 . 2 etu , although selection of the width is a matter of design choice . when the glitch detector 60 detects a glitch , it sets the bit in the glitch detected register 65 to a 1 . at the same time , it calculates the glitch width by counting the number of interface clock periods between the beginning edge and ending edge of the glitch , and stores that calculated value in the detected glitch width register 62 , overwriting any default value previously stored therein . the glitch detector 60 of fig6 can be any logic that detects pulses and determines the time between a rising and a falling edge of the pulse . fig8 shows a preferred embodiment of glitch detector 60 in which the rising and falling edges of pulses on line 45 are detected , and a count is made of interface clock periods between them . it includes flip - flops 80 - 87 , counter 88 , inverters 91 - 93 , and gates 94 - 97 , and or gate 98 , interconnected as shown . all of the flip - flops 80 - 87 are clocked by clk , i . e ., at 48 mhz , but the counter 88 counts at the interface clock rate . it will be recalled that the rate of data exchange between the smart card unit 10 and the interface controller 12 is controlled by an interface clock , which can be at one of five different clock frequencies , 4 mhz , 6 mhz , 8 mhz , 12 mhz and 20 mhz . in operation , the output of flip - flop 82 goes to 1 when the glitch detector 60 detects a falling edge , e . g ., the start of a negative glitch . on the other hand , the output of flip - flop 83 goes to a 1 when the glitch detector 60 detects a rising edge , e . g ., the start of a positive glitch . the output of flip - flop 84 goes to a 1 when the first falling or rising edge is detected . this sets the output of flip - flop 85 to a 1 , which starts the counter 88 counting interface clock periods . the output of flip - flop 86 is set to a 1 only when the end of a glitch , i . e ., the second edge , is detected . this sets the output of flip - flop 87 , i . e ., line 99 , to a 1 , which causes the counter 88 to stop counting , and sets the bit in glitch detected register 65 ( fig6 ) to a 1 . counter 88 is 15 bits wide , which is sufficient to catch the glitches it is desired to detect . the value in the counter is the value in the detected glitch width register 62 . counter 88 may serve as the detected glitch width register 62 , in which case the final count value , when line 99 goes to a 1 , is read directly from it , or a separate register may be provided as the detected glitch width register , in which case the final count is loaded into the separate register . if counter 88 counts to its highest count , e . g ., 2 15 − 1 , a signal is asserted on line 101 , which is connected to the reset input of flip - flop 85 , thus resetting flip - flop 85 . the value of the bit in glitch detected register 65 is provided to the control logic 42 on line 48 . once the control logic 42 reads the value of 1 on line 48 it clears the glitch detected register 65 . at the same time , the control logic 42 sets the bit in the update glitch width register 67 to a 1 , which causes the newly calculated glitch width to be read from glitch detected register 62 , converted into system clock periods and stored in the filtering glitch width setting register 63 . at the same time , the control logic 42 turns on the glitch filter 44 ( fig5 ) by setting the bit in the glitch filter enable register 66 to 1 . the value in the glitch filter enable register 66 is provided to the glitch filter 44 on line 68 , as described above . it will be recalled that the value in the filtering glitch width setting register 63 is provided on line 59 to the glitch filter 44 , where it is used to set the sample clock . the sample clock is derived from the system clock , and so the value stored in the filtering glitch width setting register is also in system clock periods in order to simplify the sample clock setting . to optimize glitch filtering , the frequency of the sampling clock is preferably set to the frequency of an oscillating signal having a period equal to the width of the detected glitch , i . e ., the value in the filtering glitch width setting register 63 . basically : f s ≦ 1 /( p sys · w d ), equation ( 1 ) where fs is the sampling frequency , p sys is the period of one cycle of the system clock , and w d is the value in the filtering glitch width setting register 63 , converted to system clock periods . the “ less than or equal to ” symbol is used in order to indicate that an optional guard time may be provided in setting the sampling frequency , in order to ensure that the sampling is optimized . since the embodiment described herein updates the glitch width on an ongoing basis , providing a guard time is not considered necessary . however , a designer may wish to provide such a guard time if , for example , glitch widths could be varying considerably between adjacent glitches . the guard time may be provided as follows . assuming the counter 88 counts at the interface clock frequency , this is accomplished by determining a w ds : where w ds is the glitch width in system clock periods , count is the final count value in counter 88 ( i . e ., in detected glitch width register 62 ), f sys is the system clock frequency , guard is a factor selected to provide a desired guard time and f ic is the interface clock frequency . thus , for example , say the counter 88 has a final count value of 4 , the system clock frequency is 48 mhz , the interface clock frequency is 6 mhz , and guard has a value of 1 , i . e , no extra guard time is selected . then : w d =  ( 4 · 48 · 1 ) / 6 =  32 . f s =  48   mhz / 32 =  1 . 5   mhz . now , if a guard time were desired , the sampling frequency would be decreased by the factor guard . in the above example , say the factor guard were selected to be equal to 1 . 1 , then the sampling frequency would change from 1 . 5 mhz to 1 . 37 mhz . the resulting extra time in the sampling frequency period would provide the desired guard time . preferably , an initial default value is provided in the detected glitch width register 62 , of 2 μs . this is because it is believed that most glitches that are present on signals from smart cards are less than 2 μs wide . with such an initial default value , the control logic 42 could be programmed in a first mode , for example , to enable the glitch filter 44 by simply setting the bit in the glitch filter enable register 66 to a 1 . there would then not be a need to set the bit in the glitch finder enable register 64 and then do the above - described calculations to find the glitch width . however , the control logic 42 could be programmed to switch to a second mode , in which the full operation , including glitch width calculation , all as described above , is followed , if the parity checker 24 continued to report more parity errors . after detection of the first glitch , and the steps described above are taken , the glitch detector 60 continues to monitor the signals on line 45 . operation is the same as described above , only instead of overwriting an initial default value in the detected glitch width register 62 , the previously calculated value is overwritten . also , there is no need to re - set the bit in the glitch finder enable register 64 . advantageously , a hysteresis function may be provided in implementations of the present invention , if desired . by hysteresis function it is meant that the system is adapted to prevent toggling due to glitches at the end of bits . referring now to fig7 an implementation to provide this function is shown . this figure is similar to fig5 but has an or gate 70 added , in a feedback path from the output of the mux 58 , with the other input being the output of latch 50 , and the output of or gate 70 being an input to voting unit 54 . although the present invention and its advantages have been described in detail , it should be understood that various changes , substitutions and alterations can be made herein without departing from the spirit and scope of the invention as defined by the appended claims .