감사합니다.
많은 도움이 될 것 같습니다.^^
도움말 다시 한번 감사드립니다.


p8086 wrote..
: .globl OSTimerInit
: OSTimerInit:
: ldr r0, =TMR_BASE
: ldr r1, =0x00
: str r1, [r0, #TMR_OSCR]
:
: ldr r1, =36864
: str r1, [r0, #TMR_OSMR0]
:
: ldr r1, =0x01
: str r1, [r0, #TMR_OIER]
:
: ldr r1, =0x00
: str r1, [r0, #TMR_OWER]
:
: ldr r1, =0x01
: str r1, [r0, #TMR_OSSR]
:
: ldr r1, =0x02
: str r1, [r0, #TMR_OSSR]
:
: ldr r1, =0x04
: str r1, [r0, #TMR_OSSR]
:
: ldr r1, =0x08
: str r1, [r0, #TMR_OSSR]
:
: mov pc, lr
:
: .globl OSTimerIrqEnable
: OSTimerIrqEnable:
: ldr r0, =INT_BASE
: ldr r1, =0x00
: str r1, [r0, #INT_ICCR]
:
: ldr r1, =0x00
: str r1, [r0, #INT_ICLR]
:
: ldr r1, =0x04000000
: str r1, [r0, #INT_ICMR]
:
: ldr r1, =0x00
: str r1, [r0, #INT_ICIP]
:
: mov pc, lr
: 이상이 제가 사용하던 ostimer 초기화 함수와 ostimer 인터럽트 인에이블
: 함수입니다. 도움이 되었으면 좋겠습니다.
: c 언어로도 같은 방법으로 작성하면됩니다. 아마도 ezboot의 time.c와
: 비슷할 겁니다.
: 아울러 xscale도 arm이기 때문에 arm의 cpsr에 irq를 사용할수 있도록
: 바꿔줘야 할겁니다. 그리고 irq handler에서는 사용하는 레지스터에 대해
: 저장을 해야합니다. 그렇지 않으면 인터럽트 처리후 문제가 발생할 수
: 있습니다.
: 또 한 가지 irq를 처리해서 처리하는 동안에 레지스터등을 저장하기 위해서
: irq stack을 정의해 주어야 할 겁니다. 방법은 ezboot의 start.S에
: 보시면 svc 모드에서 stack을 설정하는 부분이 있습니다. 그 부분을 참고
: 하시어 irq 모드로 바꾸고 irq stack을 정의 한후 다시 svc 모드로 돌아와주
: 면 됩니다. 아마도 svc 모드로 전환하는 부분위에서 해 주면 안전할 겁니다.
: 저는 이렇게 해서 사용했습니다. uCOSII를 올릴때 사용했었거든요.
:
: 도움이 되셨으면 좋겠습니다.
: 그럼 수고하세요
:
: 궁금 wrote..
: : 안녕하세요.
: : 이번엔 ez-x5를 가지고 인터럽트 관련한 실험을 하고 있습니다.
: : 저의 목적은 PXA255의 OS Timer Interrupt를 사용하는 것인데요.
: :
: : 전체적으로 인터럽트를 사용하려면(OSTIMER나 GPIO)
: : 어떤 레지스터를 설정해주어야 하나요?
: : PXA255 데이타쉬트를 보고 있는데 잘 안되는군요.
: :
: :
: : 제 프로그램의 플로우는 다음과 같습니다.
: :
: : start.S에서 CPSR의 I비트 0으로 클리어하고 SVC모드
: : mrs r0,CPSR
: : bic r0,r0,#0x80
: : orr r0,r0,#0x13
: : msr CPSR,r0
: :
: : main으로 점프 후 c언어로 인터럽트 관련 레지스터 설정
: : ICLR = 0 (IRQ enable)
: : ICIP = 0xffffffff; (all enable)
: : ICFP = 0; (FIQ disable)
: : ICMR = 0xffffffff; (all enable)
: : ICCR = 0;
: :
: : OSCR = 0; (OS타이머 = 0으로 설정)
: : OIER = 0x01; (CHAANEL 0(=OSMR0) 설정)
: : OSMR0 = 0x7fffffff; (OSMR0 값 설정)
: :
: : 위와 같은 플로우로 진행하고
: : IRQ인터럽트 벡터에는
: : B LED_OUT
: :
: : LED_OUT:
: : some codes to turn on the leds..
: :
: : 위와 같은 코드를 넣었습니다.
: :
: : 일단 인터럽트 관련 레지스터가 맞는지 모르겠는데
: : IRQ인터럽트 루틴과 LED_OUT 루틴으로 점프를 하지
: : 않는 것 같습니다.
: :
: : 그리고 이지부트에 보면 time.c 파일이 있는데 이지부트
: : 인터럽트 벡터에는 모두 error_loop로 뛰도록 되어있는걸로
: : 알고 있습니다. time.c와 관련 헤더파일은 어떤 기능을
: : 하는 건가요?
: :
: : 긴 글 읽어주셔서 감사합니다. 답변 부탁드립니다.