Seperti yang mungkin Anda ketahui, Atmel menyediakan kerangka kerja perangkat lunak (terutama sebagai bagian dari Atmel Studio) yang menyediakan driver dan contoh dan diperbarui secara berkala.
Dalam pembaruan baru-baru ini mereka menunjukkan secara eksplisit , bahwa penting untuk secara manual menghapus flag interupsi melimpah dalam fungsi interupsi panggilan balik.
// * \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
Menurut lembar data XMEGAA:
OVFIF secara otomatis dihapus ketika vektor interupsi yang sesuai dijalankan. Bendera juga dapat dihapus dengan menulis satu ke lokasi bitnya.
Apakah ada skenario / alasan di mana membersihkan bendera secara manual mungkin diperlukan?
SAM4SD32C
- Pengatur waktu menyela ( TC0_Handler
, dll ...) tidak dihapus saat memasuki ISR kecuali saya secara eksplisit membaca TC0->TC_SR
. Menggali lebih dalam, dalam hal ini, itu karena interupsi dipicu dari RC
bit pertandingan register perbandingan, dan itu tidak dihapus sampai Anda secara eksplisit membaca TC_SR
. TKI, saya salah tentang penyebab sebenarnya (itu bukan bit ISR langsung), tetapi hasil akhirnya sama: Anda harus menghapus secara manual penyebab ISR , jika bukan bendera ISR .