写了两个任务,进入中断后程序有时到未定义指令,有时取数据中止。不知道什么原因,望大虾赐教。<br />一般开中断就会到数据中止。<br />中断句柄也添加了。<br />void Task0(void *pdata)<br />{<br /> pdata = pdata;<br /> <br /> TargetInit ();<br /> Sem0 = OSSemCreate(0);<br /> <br /> PINSEL0 = 0x20000000;<br /> PINSEL1 = 0x00000000;<br /> PINSEL2 = PINSEL2 & (~0x08);<br /> <br /> EXTMODE = EXTMODE | 0x00;<br /> EXTPOLAR = EXTPOLAR & 0x0D;<br /> <br /> IO0DIR |= ((SLEEP)|(SC1)|(SC2)|(SDATA)|(DRDY));<br /> IO1DIR |= CAL;<br /> <br /> IO0SET = SLEEP;<br /> IO0CLR = (SC1|SC2);<br /> IO1CLR = CAL;<br /> IO0DIR |= (SCLK|CS);<br /> <br /> OSTaskCreate (Task1,(void *)0, &Task1Stk[Task1StkSize - 1], 3); <br /> <br /> OSTaskDel(OS_PRIO_SELF);<br />}<br /><br /><br />void Task1(void *pdata)<br />{<br /> uint8 err;<br /> pdata = pdata;<br /> OSSemPend(Sem0, 0, &err);<br /> OS_ENTER_CRITICAL(); <br /> AD();<br /> OS_EXIT_CRITICAL(); <br /> OSTimeDly(OS_TICKS_PER_SEC); <br />}<br /><br /> void AD()<br /> { <br /> uint8 i; <br /> { <br /> IO0CLR = CS;<br /> IO0CLR = SCLK;<br /> for(i=0;i<20;i++)<br /> {<br /> IO0SET = SCLK;<br /> da = (IO0PIN>>3)&0x01;<br /> data = data|(da<<(19-i));<br /> IO0CLR = SCLK;<br /> }<br /> IO0SET = CS;<br /> } <br /> }<br /><br /><br />void EINT1_Exception(void)<br />{<br /> OS_ENTER_CRITICAL();<br /> <br /> EXTINT = 0x02;<br /> VICVectAddr = 0; // 通知中断控制器中断结束<br /> OS_EXIT_CRITICAL();<br /> OSSemPost(Sem0); /* 通知采样任务 */<br />}<br /> |
|