Vấn đề Interrupt trên STM32

TNT_RD

Học sinh phổ thông
#1
Hi all
Điều gì xảy ra khi chương trình ngắt nhận USART trên STM32 đang thực thi thì lại có một ngắt nhận nữa lại xảy ra trên USART đó?
Mình đang làm phần nhận dữ liệu qua USART. Khi dữ liệu đã chuyển từ thanh ghi dịch vào bộ đệm dữ liệu nhận (RDR) , mình đọc thanh ghi dữ liệu nhận, dẫn đến cờ RXNE=0 , sau đó xử lý dữ liệu này trong hàm ngắt, tuy nhiên do phần xử lý hơi dài nên trong thời gian xử lý dữ liệu này bộ USART lại nhận được một gói dữ liệu khác chuyển vào, khi đó lại phát sinh một ngắt nhận nữa. Trường hợp này MCU sẽ xử lý hết phần đang thực hiện trong hàm ngắt hay xóa hết phần đang xử lý và chạy lại hàm ngắt từ đầu theo ngắt mới?
Bác nào gặp tình huống như mình cho ý kiến với ạ
 

TNT_RD

Học sinh phổ thông
#2
Câu trả lời là hàm ngắt sẽ tiếp tục thực thi chương trình ngắt, sau khi xử lý xong mới xử lý tiếp ngắt mới
 

huunho

Thạc sỹ
#3
Mình gặp trường hợp của bạn rồi, chíp mình xài là stm32f103c8t6, ngắt chồng ngắt như vậy có vài trường hợp chíp bị treo. bạn phải viết hàm ngắt càng ngắn càng tốt, khi vào ngắt thì chỉ lấy dữ liệu uart ra thôi chứ ko xử lý trong hàm ngắt
 

TNT_RD

Học sinh phổ thông
#4
Cảm ơn bạn, mình đã phải ngồi đọc Programming Manual, trong đó có nói khá chi tiết. Hơi mất thời gian, hì. Hàm ngắt của mình có một số phần cần xử lý real time nên không cho vào while đc
 

Quảng cáo Google