[RE] vxWorks의 intConnect에 대해
Reg. Date: October 30, 2001 By 김현
저도 한동안 VxWorks인터럽트 땜에 아주 골치를 썩은적이 있습니다.
VxWorks는 이론적으로 10msec내의 빠른 인터럽트 응답을 보이고 있다고
하는데요..대부분 제 경우의 문제점은 HW의 문제점이었습니다.
IRQ1을 쓴다고 하셨지요?
제경우는 IRQ3을 사용해서 모듈탈실장을 처리한 경험이 있습니다.
님의 코드중 intConnect()의 맨 마지막 인자가 0 이 아니라 1 아닌가요?
이렇게 해서도 안되면 다음과 같은 순서로 해보시지요..
1. HW의 인터럽트 핀에서 인터럽트가 출력되는지 계측기로 확인한다.
2. intConnect()는 해당 인터럽트 함수가 인터럽트 백터테이블에 제대로
등록이 되지 않으면 ERROR을 리턴합니다. ERORR가 리턴되는지 SUCCESS가
리턴되는지 확인하시면 어떨까요.
3. 등록이 제대로 되었다면 interrupt handler함수에서 무엇인가가 잘못된것
같습니다. 우선 interrupt handler함수는 인자로 인터럽트 number를 가집니다.
따라서 switch구문으로 처리할때
case interrut number(님의 경우엔 1이 되겠지요):
코딩~~~
break;
이런 식이 되겠지요..그리고 위 case문 안에서도 해당 MPC860 SIMASK를
disable시키고 break문 전에 enable해주는 루틴이 필요하며 SIPEND레지스터
도 1로 write해서 clear해주셔야 합니다.
너무 주절 주절 썼나요? 만약 시도해 보시고 안되면 제가 실험으로 검증되었던
간단한 소스를 보내드리도록 하겠습니다. 그럼 건투를
>저는 지금 MPC860을 사용하고 있습니다.
>근데 외부인터럽트를 사용하려고 하는데 잘 않되는군요
>사용하려는 인터럽트는 IRQ1입니다.
>
>intDisable(0x02);
>intConnect (IV_IRQ1, (VOIDFUNCPTR)IntHandler, 0); /* IV_IRQ1 */
>*SIEL (regBase) |= SIEL_ED1;
>*SIMASK (regBase) |= SIMASK_IRM1;
>intEnable (0x02);
>
>이렇게 coding하고 외부에 스위치를 달아서 스위치를 누를 때 마다
>인터럽트가 발생하도록 만들었고 IntHandler 함수에
>logMsg("Interrupt Test \n", 0,0,0,0,0,0);를 써서
>화면에 출력이 되는지 보려고 했는데 출력이 않돼네요
>혹시 제가 뭐 잘못한 거라두 있나요?
>좀 도와 주세요
>아! 그리고 혹시 IRQ0를 일반 외부 인터럽트처럼 쓸 수 있는 방법을 알고 계신 분 계시면 좀 알려 주시면 고맙겠습니다.