상태 레지스터에서.. 인터럽트가 disable 되었는지 확인해 보시길...(슈퍼바
이져 모드에서)

mrs r0, cpsr
bic r0, r0, #0x80
msr cpsr_c, r0




삽질맨 wrote..
: 이지부트에 인터럽트 핸들러를 추가해보고 있거든요.
:
: 즉, start.S를 빌려서 제가 만든 어플리케이션으로 뛰도록 만들었습니다.
:
: 그리고 나서 인터럽트를 받을수 있도록 고치는중인데요...
:
: 이지부트의 컴파일과 링크단위가 디렉토리이고, 제가 만든 인터럽트 핸들 러
: 는 제 어플리케이션 디렉토리에 있는고로, start.S에서 직접 어드레스로 뛰 도
: 럭 만들었어요.
:
: _start: b Reset
:
: b =0xC0F00400
: b =0xC0F00414
: b =0xC0F00428
: b =0xC0F0043C
: b =0xC0F00450
: b =0xC0F00454
: b =0xC0F00468
:
: 그리고,, 인터럽트 인에블 시키고, 레벨 셋팅하는 루틴 추가하고..
:
: // unmask all interrupt
: ldr r0, =SA1110_REG_BASE_INTERRUPT
: mov r1, #0xff
: str r1, [r0,
: #SA1110_REG_OFFSET_ICMR]
:
: // interrupt control level setup -
: currently set up as IRQ
: ldr r0, =SA1110_REG_BASE_INTERRUPT
: mov r1, #0x00
: str r1, [r0,
: #SA1110_REG_OFFSET_ICLR]
:
:
: // jump to init function
: // init function is just after
: exception vectors
: ldr r0, =EZ_M01_APP_ENTRY (제 어플
: 리케이션 엔트리)
: mov pc, r0
:
:
: 그리고,
: entry.S 를
:
: ...초략
: // 0xC0F0044F + 0x4 = 0xC0F00454
: IRQ_handler_asm:
: ldmia sp!, {r8}
: stmfd sp!, {r0-r12,lr}
: bl IRQ_handler_app
: ldmfd sp!, {r0-r12, lr}
: subs pc,r14,#4
:
: //0xC0F00453 + 0x14 = 0xC0F00468
: FIQ_handler_asm:
: ldmia sp!, {r8}
: stmfd sp!, {r0-r12,lr}
: bl FIQ_handler_app
: ldmfd sp!, {r0-r12, lr}
: subs pc,r14,#4
:
: // 0xC0F0047C
: bl init // 제 어플리케이션.
: b _ram_entry
:
:
: 제 어플리케이션에서
: // baud rate divisior(BRD) = 1 when baud rate is 115200
: *(UTCR1) = 0x0;
: *(UTCR2) = 0x1;
:
: // all clear UTCR3
: *(UTCR3) = 0x0;
:
: // parity disable
: *(UTCR0) &= ~PARITY_ENABLE;
:
: // data bit 8 bit
: *(UTCR0) |= EIGHT_BIT_DATA;
:
: // stop bit 1 bit
: *(UTCR0) &= ~TWO_STOP_BIT;
:
: *(UTCR3) &= ~UTCR3_LBM;
:
: // enable interrupt
: *(UTCR3) |= TX_ENABLE;
: *(UTCR3) |= RX_ENBALE;
:
: // temporary for interrupt test
: *(UTCR3) |= UTCR3_RIE;
:
: 이렇게 UART인터럽트 인에블 시키고,
:
: 제가 열심히 자판을 두드리면, 인터럽트가 걸려서, 제가 만든 인터럽트 핸 들
: 러로 오도록