omap4460 (cortex a9)에 베어 메탈 코드 (os 없음)를 쓰고 있는데 gptimer1을 올바르게 설정하지 못했습니다. omap4460에 gptimer1 설정
이
은 "SVC 0"이후,/* for forwarding pending interrupts from distributor to Cpu interfaces */
*(volatile unsigned int *)(GICD_BASE + GICD_CTLR) |= 0x00000001;
/* signaling interrupt by the cpu interface to the connected processor*/
*(volatile unsigned int *)(GICC_BASE + GICC_CTLR) |= 0x00000001;
/* position the timer1 handler */
irq_table_function[GPT1_IRQ] = timer1handler;
/* clocks timer1 block */
*(volatile unsigned int *)CM_WKUP_CLKSTCTRL |= 0x00000003;
*(volatile unsigned int *)CM_WKUP_GPTIMER1_CLKCTRL |= 0x01000000;
*(volatile unsigned int *)CM_WKUP_GPTIMER1_CLKCTRL |= 0x00000002;
/* enable GPTimer1 functional and interface blocks */
*(volatile unsigned int *)GPT1MS_TIOCP_CFG |= 0x00000300;
/* capture interrupt enable */
*(volatile unsigned int *)GPT_TIER |= 0x00000004;
/* enable autoreload */
*(volatile unsigned int *)GPT_TCLR |= 0x00000002;
/* prescaler equal to zero */
*(volatile unsigned int *)GPT_TCLR &= ~0x0000003C;
/* positive increment value */
*(volatile unsigned int *)GPT_TPIR = 232000;
/* negative increment value */
*(volatile int *)GPT_TNIR = -768000;
/* load value */
*(volatile unsigned int *)GPT_TLDR = 0xFFFFFFE0;
/* enable timer1 */
*(volatile unsigned int *)GPT_TIER |= 0x00000001;
내가 코드를 실행하면, 내가 결코 내 인터럽트 벡터 테이블로 이동하지, 내 인터럽트 벡터 테이블이 올바르게 설정합니다 (OMAP4460 TRM에 따라) 내 코드입니다 공장.
나는 타이머 카운터가 작동하는 것을 보지 못합니다.
제가 누락 된 부분에 대해 알려주십시오. Rony.
@Pipenbrinck이다 내가 내 대답을 참조 그에 따라 내 코드를 수정 – bonpiedlaroute