@@ -433,9 +433,17 @@ impl EthernetPTP {
433
433
}
434
434
#[ cfg( feature = "stm32h7xx-hal" ) ]
435
435
{
436
- // SAFETY: we only modify the ethernet ptp status register.
436
+ // SAFETY: we only read the ethernet ptp status register.
437
+
437
438
let mac = unsafe { Self :: mac ( ) } ;
438
- mac. mactssr . read ( ) . tstargt0 ( ) . bit_is_set ( )
439
+
440
+ // Reading the register clears all of the bits in
441
+ // that register.
442
+ let tssr = mac. mactssr . read ( ) ;
443
+ let tstargt0 = tssr. tstargt0 ( ) . bit_is_set ( ) ;
444
+ let tstrgterr0 = tssr. tstrgterr0 ( ) . bit_is_set ( ) ;
445
+
446
+ tstargt0 || tstrgterr0
439
447
}
440
448
}
441
449
@@ -459,18 +467,18 @@ impl EthernetPTP {
459
467
460
468
#[ cfg( feature = "stm32h7xx-hal" ) ]
461
469
let is_tsint = {
462
- // SAFETY: we only write to `mactssr` (Timestamp Status register)
463
- let mactssr = unsafe { & Self :: mac ( ) . mactssr } ;
464
-
465
- // Reading the bit clears it, and deasserts the interrupt.
466
- mactssr. read ( ) . tstargt0 ( ) . bit_is_set ( )
470
+ // SAFETY: we only read from `macisr` (Interrupt status register)
471
+ let macisr = unsafe { & Self :: mac ( ) . macisr } ;
472
+ macisr. read ( ) . tsis ( ) . bit_is_set ( )
467
473
} ;
468
474
469
475
#[ cfg( feature = "async-await" ) ]
470
- if let Some ( waker) = EthernetPTP :: waker ( ) . take ( ) {
471
- waker. wake ( ) ;
472
- } else {
473
- EthernetPTP :: read_and_clear_interrupt_flag ( ) ;
476
+ if is_tsint {
477
+ if let Some ( waker) = EthernetPTP :: waker ( ) . take ( ) {
478
+ waker. wake ( ) ;
479
+ } else {
480
+ EthernetPTP :: read_and_clear_interrupt_flag ( ) ;
481
+ }
474
482
}
475
483
476
484
#[ cfg( not( feature = "async-await" ) ) ]
0 commit comments