主題:關于ETR100的定時器 共有40418人關注過本帖 |
---|
百步笑五十步 |
1樓 |
關于ETR100的定時器 Post By:2005-7-29 4:15:00 [只看該作者]
在ISRDemo中,安裝完IRQ11后,通過NB_Delay(500)來檢查500毫秒內IRQ11的中斷次數,發現無論SetTMR2函數中參數為什么,中斷次數都為4835,為什么?檢查過程如下
cnt1 = IRQ11cnt; NB_Delay(500); cnt2 = IRQ11cnt; if( cnt2 > cnt1 )    cnt3 = cnt2-cnt1; else    cnt3 = 65536+cnt2-cnt1; printf( "num is %u", cnt3 ); |
|
單帖管理 | 引用 | 回復 |
x10 |
2樓 |
Post By:2005-7-29 10:31:00 [只看該作者]
我測試了,是正常的呀。對unsigned int你上面的cnt3計算有誤。
我把我測試的代碼貼在下面,供參考: #include <stdio.h> #include <stdlib.h> #include <conio.h> #include "etr100.h" #include "isr.h" #define   TMR2 0x42 #define   TMRCTRL 0x43 #define   IRQ11 0x73 int main( int argc, char** argv ) {    int i;    unsigned int cnt1, cnt2;    printf( "ETR100 TMR2 DEMO\n" );    /*//////////////////////////////////////////////////    // (0) timer2<|>s input clock = 1.14MHz    // (1) generate 10ms square wave output    // (2) timer2<|>s output is pending to IRQ11    //////////////////////////////////////////////////*/    if( argc > 1 ) i = atoi( argv[1] );    else           i = 10;    if( i <= 0 )   i = 10;    SetTMR2( 1140*i );    // clearup keyboard buffer    while( kbhit( ) )  { getch( ); }    // install interrupt service routines    i = InstallISR( IRQ11 );    for(  )       {       cnt1 = IRQ11cnt;       NB_Delay( 1000 );       cnt2 = IRQ11cnt;       if( cnt2 >= cnt1 )  {  printf( "diff=%u\r", cnt2-cnt1 );  }       else  {  printf( "diff=%u\r", 65536 - (cnt1-cnt2) );  }       /*       if( (cnt11 != IRQ11cnt) )  {  printf( "I11=%u\r", IRQ11cnt );  cnt11 = IRQ11cnt;  }       */       if( kbhit( ) ) { getch( ); break; }       }    i = UninstallISR( IRQ11 );    return 0; } |
|
單帖管理 | 引用 | 回復 |
百步笑五十步 |
3樓 |
Post By:2005-7-29 12:37:00 [只看該作者]
收到,謝謝
|
|
單帖管理 | 引用 | 回復 |
百步笑五十步 |
4樓 |
Post By:2005-7-30 14:56:00 [只看該作者]
我用你的程序測試了,我取i=5,10,20,diff的值始終是8768左右,不隨i變化,和以前的一樣
|
|
單帖管理 | 引用 | 回復 |
x10 |
5樓 |
Post By:2005-7-31 21:24:00 [只看該作者]
這就怪了,建議把板子寄回,我們來檢查,如果有問題,會立即給你寄一片好的給你。
|
|
單帖管理 | 引用 | 回復 |