跳回0的寫法有2種
(1) asm("j _start\n\t");
跳回_start
(2) asm("li\t $r0, #0 \n\t");
asm("jr $r0 \n\t");
跳回0開始執行。
我剛才用demo-int測試過,將code加在GPIO的ISR裡,按下GPIO,
可以讓程式從頭開始執行。
下面是測試程式
Attachment:
demo-int.7z [34.35 KiB]
Downloaded 876 times
節錄程式片斷:
void HW0_ISR()
{
puts("* Enter HW0 ISR with GPIO *\n");
outw(GPIO_BASE + GPIO_IC_OFFSET, 0xFFFFFFFF);
/* This service will take 6 secs */
unsigned int period;
period = 6 * (MB_PCLK / TICK_HZ);
outw(TM2_LOAD, period);
outw(TM2_CNTR, 0);
outw(TM_CR, (inw(TM_CR) | TM_CR_TM2ENA | TM_CR_TM2UP));
while (1) {
unsigned int tm2_cntr = inw(TM2_CNTR);
if (tm2_cntr > period)
break;
}
puts("* End of HW0 ISR it takes 6 secs *\n");
/* Cindy */
asm("li\t $r0, #0 \n\t");
asm("jr $r0 \n\t");}