Wie einige von Ihnen vielleicht wissen, bietet Atmel ein Software-Framework (hauptsächlich als Teil von Atmel Studio), das Treiber und Beispiele bereitstellt und mehr oder weniger regelmäßig aktualisiert wird.
In einem kürzlich durchgeführten Update wird ausdrücklich darauf hingewiesen, dass es wichtig ist , das Überlauf-Interrupt-Flag in der Interrupt-Rückruffunktion manuell zu löschen.
// * \subsection xmega_tc_qs_ovf_setup_code Example code
// *
// * Add a callback function that will be executed when the overflow interrupt
// * trigger.
// * \code
static void my_callback(void)
{
// User code to execute when the overflow occurs here
// THIS WAS ADDED IN LAST UPDATE
// Important to clear Interrupt Flag
tc_clear_overflow(&TCC0);
// THIS WAS ADDED IN LAST UPDATE
}
//\endcode
Laut XMEGAA-Datenblatt:
OVFIF wird automatisch gelöscht, wenn der entsprechende Interruptvektor ausgeführt wird. Das Flag kann auch gelöscht werden, indem eine Eins in die Bitposition geschrieben wird.
Gibt es ein Szenario / einen Grund, in dem das manuelle Löschen der Flagge erforderlich sein kann?
SAM4SD32C
- Die Timer-Interrupts ( TC0_Handler
usw.) werden beim Eingeben des ISR nicht gelöscht, es sei denn, ich lese ausdrücklich TC0->TC_SR
. Graben tiefer, in diesem Fall ist es , weil die Unterbrechung von der ausgelöst wird , RC
vergleichen Register Übereinstimmungsbitarraywert, und das wird nicht gelöscht , bis Sie explizit lesen TC_SR
. IOW, ich bin falsch in Bezug auf die tatsächliche Ursache (es war nicht das ISR-Bit direkt), aber das Endergebnis ist das gleiche: Sie müssen die ISR- Ursache manuell löschen , wenn nicht das ISR- Flag .