@@ -1881,6 +1881,7 @@ mod asynch {
1881
1881
P : crate :: gpio:: Pin + embedded_hal_1:: digital:: ErrorType ,
1882
1882
{
1883
1883
pub fn new ( pin : & ' a mut P , event : Event ) -> Self {
1884
+ pin. clear_interrupt ( ) ;
1884
1885
pin. listen ( event) ;
1885
1886
Self { pin }
1886
1887
}
@@ -1913,27 +1914,21 @@ mod asynch {
1913
1914
type Bank0 = SingleCoreInteruptStatusRegisterAccessBank0 ;
1914
1915
#[ cfg( any( esp32, esp32s2, esp32s3) ) ]
1915
1916
type Bank1 = SingleCoreInteruptStatusRegisterAccessBank1 ;
1916
-
1917
1917
let mut intrs = Bank0 :: pro_cpu_interrupt_status_read ( ) as u64 ;
1918
1918
1919
1919
#[ cfg( any( esp32, esp32s2, esp32s3) ) ]
1920
1920
{
1921
1921
intrs |= ( Bank1 :: pro_cpu_interrupt_status_read ( ) as u64 ) << 32 ;
1922
1922
}
1923
1923
1924
- // clear interrupts
1925
- Bank0GpioRegisterAccess :: write_interrupt_status_clear ( !0 ) ;
1926
- #[ cfg( any( esp32, esp32s2, esp32s3) ) ]
1927
- Bank1GpioRegisterAccess :: write_interrupt_status_clear ( !0 ) ;
1928
-
1929
1924
while intrs != 0 {
1930
1925
let pin_nr = intrs. trailing_zeros ( ) ;
1931
1926
cfg_if:: cfg_if! {
1932
1927
if #[ cfg( any( esp32, esp32s2, esp32s3) ) ] {
1933
1928
if pin_nr < 32 {
1934
1929
Bank0GpioRegisterAccess :: set_int_enable( pin_nr as u8 , 0 , 0 , false ) ;
1935
1930
} else {
1936
- Bank1GpioRegisterAccess :: set_int_enable( pin_nr as u8 , 0 , 0 , false ) ;
1931
+ Bank1GpioRegisterAccess :: set_int_enable( ( pin_nr - 32 ) as u8 , 0 , 0 , false ) ;
1937
1932
}
1938
1933
} else {
1939
1934
Bank0GpioRegisterAccess :: set_int_enable( pin_nr as u8 , 0 , 0 , false ) ;
@@ -1942,5 +1937,10 @@ mod asynch {
1942
1937
PIN_WAKERS [ pin_nr as usize ] . wake ( ) ; // wake task
1943
1938
intrs &= !( 1 << pin_nr) ;
1944
1939
}
1940
+
1941
+ // clear interrupt bits
1942
+ Bank0GpioRegisterAccess :: write_interrupt_status_clear ( intrs as u32 ) ;
1943
+ #[ cfg( any( esp32, esp32s2, esp32s3) ) ]
1944
+ Bank1GpioRegisterAccess :: write_interrupt_status_clear ( ( intrs >> 32 ) as u32 ) ;
1945
1945
}
1946
1946
}
0 commit comments