ucos를 올리고 있는데요... 초기 환경 설정 다 하고 uart 살리고 이제 timetick을 살릴려고 하는데요
timer의 레지스터들은 다 올바른 값으로 세팅이 되는데 INTMSK값이 변경이 안됩니다.
초기 INTMSK설정은 전부 set시켜서 timer4의 interrupt만 살릴려고 했는데 레지스터 설정이 안되고 죽어버립니다.
static void StartClockTick(void)
{
INT32U ticf; // Timer input clock Freauency
INT32U temp;
Led_Display(1);
rTCFG0 &= ~(0xff<<8);// Prescaler1[15: 8]=0x00 (prescaler value=0) 설정값
rTCFG1 &= ~(0xf<<16);// MUX4[19:16]=0000b (divider value=2)
// Timer input clock Freauency = PCLK / (prescaler value+1) / divider value
ticf = PCLK / (0+1) / 2;
rTCNTB4 = ticf / OS_TICKS_PER_SEC;
Led_Display(3);
rTCON |= (1<<22) | (1<<21);
rTCON &= ~(1<<21);
// Timer4 인터럽트 벡터 설치 & 인터럽트 마스킹 해제
pISR_TIMER4 = (unsigned)OSTickISR;
Led_Display(7); <====== 여기 까지는 진행이 됨
rINTMSK &= ~(BIT_TIMER4); <======= 여기서 레지스터 설정이 안됨
temp = rINTMSK;
uprintf("nrINTMSK = %xn", temp);
Led_Display(15);
rTCON |= (1<<20); // Start for Timer4
}
여기서 LDE_display이는 어디 까지 진행 되는 가를 보기 위한 것이고요 rINTMSK에서 값을 쓸수가 없습니다. 그래서 여기서 그냥 죽습니다.
물론 #define rINTMSK (*(volatile unsigned *)0x4a000008) 주소도 확인 했구요
실뮬레이션을 돌렸을 때는 값이 똑바로 변경이 되는데 테스트 할때도 똑 바로 변경이 됐다면 다음 LED가 온이 되어야 하는데 그렇지 않습니다. INTMSK를 인에이블 할때 뭔가 잘 못 됐나요?
혹시 INTMSK를 쓸때 cpsr과의 무슨 과계가 있나요? datasheet에는 interrupt 부분에 아무 말도 없었습니다. 아~ 이틀째 이거 땜에.. 죽겠습니다. 오늘 주말인데 ㅡ,ㅡ;
보통 이런 경우는 의외로 다른데서의 버그인데.....음...
2410/2440의 경우는 큰 문제가 없는 경우거든요....
그리고, LED로 하지 마시고, 간단하게 uart로 함 해보세요...
rtos는 디버거가 쵝오인데....ㅠ.ㅠ