2014-07-16 7 views
0

부트 로더가 폴링을 사용하고 사용자 응용 프로그램이 인터럽트를 사용하는 LPC1114 부트 로더 (위치 0-0x2000) 및 사용자 응용 프로그램 (위치 0x2000-0x6000).LPC1114 리디렉션 인터럽트 처리

설명 -부트 로더는 systick 폴링을 실행하고 시스템 할당량에 따라 시간 초과되며 0x2000에서 사용자 응용 프로그램으로 건너 뜁니다 (여기서 시스템 인터럽트가 사용됩니다).

Problem-
__disable_irq()를하기 전에 부트 로더에서 호출하면 사용자 응용 프로그램 사용자 응용 프로그램에 점프 확인 (의도 한대로 인터럽트를 사용하지 않는,하지만 적어도 실행)를 실행합니다.
사용자 응용 프로그램이 건너 뛰기 전에 __disable_irq()가 없으면 사용자 응용 프로그램이 실패하고 startup_LPC11xx.s의 default_handler로 끝납니다.

추가 된 코드는 인터럽트 소스를 결정하기 -이 (아마도 모든) 코드에서 중단

+0

응용 프로그램에서 인터럽트가 정의되고 활성화 된 방법을 보여주기 위해 코드를 추가하십시오. –

답변

1

은 일부에 대한 적절한 취급이없는 나에게 보이는 하드 폴트입니다. 실제 코드를 제공하지 않고 질문에 대한 질문이있는 경우 여기에는 일반적인 권장 사항 만있을 수 있습니다.

인터럽트를 사용하도록 설정 한 후 일부 이벤트가 인터럽트를 발생시킨 후 프로그램 카운터가 아무 곳이나/임의 주소로 점프하고 시스템이 실패하는 경우를 볼 수 있습니다. 이 문제의 또 다른 이유는 잘못된 처리 일 수 있지만, 다시 말하면 제공하지 않은 분석 코드를 가져와야합니다.

문제를 줄이려면 전체 코드를 여러 부분으로 나누고 가능한 한 간단하게 만들고 최소한의 코드와 최소한 하나의 인터럽트를 사용하여 실행하는 것이 좋습니다. - 이벤트를 생성 할 수 있는지 확인하십시오. 일시 정지.

장치와 디버거가 작동 중이며 직렬 통신이 가능합니까? 이 문제에 빠지면 IRQ 상태 레지스터를 분석해야합니다. IRQ가 발생하면 바로 읽을 수 있습니다.