Я понимаю, что вы имеете ввиду. Операция "|=" не является присваиванием, поэтому некоторые флаги она не сбросит. например ETH:
void ISR::VECTORS::ETH_IRQ()
{
if (ETH->DMASR & ETH_DMASR_RS)
{
ETH->DMASR = ETH_DMASR_RS;
}
if (ETH->DMASR & ETH_DMASR_TS)
{
ETH->DMASR = ETH_DMASR_TS;
}
ETH->DMASR = ETH_DMASR_NIS;
if(ETH->DMASR & ETH_DMASR_AIS)
{
ETH->DMASR = ETH_DMASR_AIS;
}
return;
}
За совет о мнимом чтении спасибо, не знал, что так можно.