2011-12-21 6 views
2

다른 인터럽트 벡터 내에서 인터럽트 벡터를 호출 할 수 있습니까? 예를 들어다른 인터럽트 벡터 내에서 인터럽트 벡터 호출

, 내가 ep4inout 인터럽트 벡터의 절차를하고 있어요 동안은 :

void ep4inout interrupt 0 
{ 
    . 
    . 
    . 
    Timer1 = 1; //call interrupt for timer 1 
    . 
    . 
    . 
} 

편집

내 코드는 대략 다음과 같습니다. Timer1 = 1은 타이머 1에 대한 인터럽트 요청이 설정되었음을 의미합니다. Timer 1 ISR의 내 절차가 작동하지 않습니다. FX2LP 매뉴얼에서 타이머 1은 종점 버퍼보다 ​​우선 순위가 높습니다. 타이머 1의 우선 순위를 높게, 끝점 4를 낮게 설정하려고했습니다. 여전히 같은 결과입니다. 내 IDE로 Keil uVision2를 사용하고 내 마이크로 컨트롤러는 Cypress FX2LP (enchanced 8051 - USB 컨트롤러)입니다.

void ISR_Ep4inout(void) interrupt 0 
{ 
    . 
    . 
    . 
    Timer1Enable = 1; 
    Timer1 = 1; //call interrupt for timer 1 
    . 
    . 
    . 
} 

void TMR1_Vect(void) interrupt 2 //timer 1 interrupt 
{ 
. 
. 
. 
} 

void TMR1_Vect interrupt 0 //timer 1 interrupt 
{ 
    . 
    . 
    . 
} 

답변

0

함수가 일반 C 함수 인 경우 컴파일러는 함수가 인터럽트로 사용되었음을 알 수 없습니다. 예, 당신은 그 기능을 부를 수 있습니다.

귀하의 경우와 같이 interrupt 0 또는 다른 수단 (ISR, INTERRUPT)을 사용하여 그러한 기능을 나타내야하는 경우, 일반적으로 그렇게 할 수 없습니다.
문제는 종종 함수를 종료하는 데 사용되는 return 명령어 (어셈블러 수준에서)입니다. 인터럽트 서비스 루틴의 경우 컴파일러는 다른 리턴 명령을 사용해야합니다.

"함수 호출"에 대해 다른 방법을 지정했습니다. Timer1 = 1;이 타이머 인터럽트에 대한 인터럽트 요청 비트를 효과적으로 설정하여 인터럽트 서비스 루틴을 활성화한다고 가정합니다. 이것은 아무런 문제가되지 않아야합니다. 그러나 인터럽트가 먼저 처리되고 ISR이 인터럽트되는 경우 프로세서/컴파일러 설명서를 확인해야합니다.

자세한 내용과 세부 정보를 제공했을 수 있습니다. 모두가 "인터럽트 벡터 호출"에 대해 말한 후 "변수"가 1로 설정되었음을 보여줍니다. 당신이 임베디드 개발에 참여하고 있다고 가정합니다. 유용한 답변을 제공하는 것 이상으로 컴파일러 및/또는 프로세서와 같은 것을 나타내십시오.

+0

답장을 보내 주셔서 감사합니다. Keil uVision 2를 사용하고 마이크로 컨트롤러는 Cypress FX2LP입니다. 타이머 1에 대한 ISR 테스트가 중단되지 않으면 내 절차가 전혀 작동하지 않습니다. 타이머 1은 타이머 1에 대한 인터럽트가 호출되었음을 의미합니다. BTW, 끝점 4의 우선 순위는 무엇입니까? –

+2

@FranzMationg 원래 질문을 편집하고 거기에이 정보를 추가하면 더 좋을 것입니다. 사이트는 귀하뿐만 아니라 동일하거나 유사한 질문을하는 모든 사람에게 유용 할 것입니다. 또한 Cypress USB 컨트롤러 제품군에 익숙하지 않은 사용자를 위해 프로세서가 향상된 8051 구현임을 설명하는 것이 도움이됩니다. –