Như một số bạn có thể biết, Atmel cung cấp một khung phần mềm (chủ yếu là một phần của Atmel Studio) cung cấp trình điều khiển và ví dụ và được cập nhật thường xuyên hơn hoặc ít hơn.
Trong một bản cập nhật gần đây, họ chỉ ra một cách rõ ràng rằng điều quan trọng là phải xóa thủ công cờ ngắt trong chức năng gọi lại ngắt.
// * \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
Theo bảng dữ liệu XMEGAA:
OVFIF sẽ tự động bị xóa khi vectơ ngắt tương ứng được thực thi. Cờ cũng có thể được xóa bằng cách viết một đến vị trí bit của nó.
Có một kịch bản / lý do mà việc xóa cờ thủ công có thể được yêu cầu không?
SAM4SD32C
- Bộ ngắt thời gian ( TC0_Handler
, v.v ...) không bị xóa khi nhập ISR trừ khi tôi đọc rõ ràng TC0->TC_SR
. Đào sâu hơn, trong trường hợp này, đó là do ngắt được kích hoạt từ RC
bit khớp thanh ghi so sánh và điều đó không bị xóa cho đến khi bạn đọc rõ ràng TC_SR
. IOW, tôi không chính xác về nguyên nhân thực tế (nó không phải là chút ISR trực tiếp), nhưng kết quả cuối cùng là như nhau: Bạn phải tự xóa các ISR nguyên nhân , nếu không phải là ISR cờ .