主題:關(guān)于串口中斷的問題 共有37576人關(guān)注過本帖 |
---|
shtupc |
1樓 |
關(guān)于串口中斷的問題 Post By:2008-1-6 7:57:00 [只看該作者]
在 ETR100.cpp文件中,有一個NB_Delay函數(shù),里面調(diào)用了ReadTimer0( )函數(shù),而ReadTimer0( )函數(shù)中有一句cli關(guān)中斷的指令,我想問一下,在關(guān)中斷這段短暫的時間里,如果外部設(shè)備通過串口發(fā)送過來數(shù)據(jù),會不會因為中斷系統(tǒng)是關(guān)閉的而丟掉,如何解決,謝謝!
下面是這兩個函數(shù)的程序: void NB_Delay( unsigned int milliseconds ) {    unsigned long stop;    unsigned cur, prev;    prev = ReadTimer0( );    stop = prev + (milliseconds * MULTIPLIER);    cur = ReadTimer0( );    while( cur < stop )       {       if(cur < prev)     /* Check for timer wraparound */  {  if (stop < TMR0SIZE) break;  stop -= TMR0SIZE;  }       prev = cur;       cur = ReadTimer0( );       } } unsigned int ReadTimer0( ) {   asm pushf                    /* Save interrupt flag         */   asm cli                      /* Disable interrupts          */   asm mov  al,0h               /* Latch timer 0               */   asm out  43h,al       dummy();                 /* Waste some time             */   asm in   al,40h              /* Counter --> bx              */   asm mov  bl,al               /* LSB in BL                   */       dummy();                 /* Waste some time */   asm in   al,40h   asm mov  bh,al               /* MSB in BH                   */   asm mov  ax, 0f533h          /* */   asm sub  ax, bx   asm mov  bx, ax         /* Need ascending counter      */   asm popf                     /* Restore interrupt flag      */   return( _BX ); } |
|
單帖管理 | 引用 | 回復(fù) |
x10 |
2樓 |
Post By:2008-1-6 9:53:00 [只看該作者]
不會,ICU會保持中斷請求,一旦系統(tǒng)enable()或sti,就會響應(yīng)中斷。可以在ReadTimer0()最后加一條sti:
unsigned int ReadTimer0( ) { asm pushf /* Save interrupt flag */ asm cli /* Disable interrupts */ asm mov al,0h /* Latch timer 0 */ asm out 43h,al dummy(); /* Waste some time */ asm in al,40h /* Counter --> bx */ asm mov bl,al /* LSB in BL */ dummy(); /* Waste some time */ asm in al,40h asm mov bh,al /* MSB in BH */ asm mov ax, 0f533h /* */ asm sub ax, bx asm mov bx, ax /* Need ascending counter */ asm popf /* Restore interrupt flag */ asm sti  /* enable sti */ return( _BX ); } |
|
單帖管理 | 引用 | 回復(fù) |
shtupc |
3樓 |
Post By:2008-1-7 7:50:00 [只看該作者]
謝謝了!
順便再問一句,如果在ReadTimer0()最后沒有加sti的話,系統(tǒng)會不會一直關(guān)中斷啊? |
|
單帖管理 | 引用 | 回復(fù) |
x10 |
4樓 |
Post By:2008-1-7 9:26:00 [只看該作者]
不會,很多系統(tǒng)函數(shù)都會打開中斷。
|
|
單帖管理 | 引用 | 回復(fù) |