2016-11-13 5 views

답변

1

마이크로 컨트롤러가 인터럽트 처리기 기능을 실행하려고 할 때마다 우선 상태 레지스터 r2의 비트 인 전역 "인터럽트 활성화"플래그를 비활성화해야합니다. 이는 기본적으로 인터럽트 중첩을 효과적으로 금지합니다.

이 문제를 해결하려면 인터럽트 처리기 기능을 시작할 때 레지스터 플래그를 다시 1로 설정하여 인터럽트를 사용하도록 설정하십시오. 구문을 단순화하기 위해,이를 위해 실제로 eint 명령있다 :

asm("eint"); 

일반적으로 당신이 어셈블리 코드를 작성 피할 수 있도록 emnabe에 대한 컴파일러 특정 매크로도 있습니다. 이는 GCC 및 IAR로 모두 작동해야합니다.

__enable_interrupt(); 

(남용하지 마십시오 그것을 위해 절대적으로 필요가 없습니다 대부분의 경우 중첩 인터럽트 그것은 갈 것보다 설계를 변경하는 거의 확실하게 더 좋은 생각이다. .)