音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

定時(shí)器的奇怪問題,請高手分析一下是什么原因,在此感謝了

作者:rben 欄目:ARM技術(shù)
定時(shí)器的奇怪問題,請高手分析一下是什么原因,在此感謝了
2214做一個(gè)系統(tǒng),用timer0作系統(tǒng)的50ms時(shí)基,同時(shí)還有外部中斷,串口中斷等,用一個(gè)LED作運(yùn)行指示燈,20個(gè)時(shí)基變化一次(即1s),運(yùn)行發(fā)現(xiàn)有時(shí)速度變快,大約快了一倍(脫機(jī)運(yùn)行上下電后均如此),有時(shí)速度變慢,慢了好幾倍,但其它功能如串口等均正常,有時(shí)源程序改一下,但不動(dòng)結(jié)構(gòu),只輸幾個(gè)空格重新編譯一下,再調(diào)試又會正常,脫機(jī)后也一直正常。以上情況一開始懷疑是JTAG作怪,用ISP寫入代碼后情況一樣.百思不得其解,實(shí)在頭痛.

將運(yùn)行燈控制直接放在定時(shí)中斷中,情況也一樣.

以下是我的部分初始化代碼,基本上是與周公的示例程序相同,有什么問題嗎?請各位技術(shù)同行分析一下,本人實(shí)在不明所以,很郁悶中
    //Timer 0 init...
    T0TC   = 0;            /* 定時(shí)器設(shè)置為0                                        */
    T0PR   = 0;            /* 時(shí)鐘不分頻                                            */
    T0MCR  = 0x03;        /* 設(shè)置T0MR0匹配后復(fù)位T0TC,并產(chǎn)生中斷標(biāo)志                */
    T0MR0  = Fpclk/20;  /* 50ms鐘定時(shí)                                            */
    T0TCR = 0x03;
    T0TCR  = 0x01;        /* 啟動(dòng)定時(shí)器0                                            */
    
    //Timer 1 init...
    T1TC   = 0;            /* 定時(shí)器設(shè)置為0                                        */
    T1PR   = 0;            /* 時(shí)鐘不分頻                                            */
    T1MCR  = 0x03;        /* 設(shè)置T0MR0匹配后復(fù)位T0TC,并產(chǎn)生中斷標(biāo)志                */
    T1MR0  = Fpclk/76000;  /* 76KHz鐘定時(shí)(近似)                                            */
    T1TCR = 0x03;
    T1TCR  = 0;         /* 暫不啟動(dòng)定時(shí)器1                                        */
    
    //16C554 init...
    TL16C554_Init();
...
    VICIntSelect = 0x00000000;            // 設(shè)置所有的通道為IRQ中斷
    VICVectCntl0 = 0x20 | 0x06;            // UART0分配到IRQ slot0,即最高優(yōu)先級
    VICVectAddr0 = (uint32)IRQ_UART0;    // 設(shè)置UART0向量地址
    
    VICVectCntl1 = 0x20 | 0x07;            // UART1分配到IRQ slot1,即最高優(yōu)先級
    VICVectAddr1 = (uint32)IRQ_UART1;    // 設(shè)置UART1向量地址
    
    VICVectCntl2 = 0x20 | 0x04;            // 設(shè)置定時(shí)器0中斷通道分配最高優(yōu)先級    
    VICVectAddr2 = (uint32)IRQ_Timer0;    // 設(shè)置中斷服務(wù)程序地址    
    
    VICVectCntl3 = 0x20 | 14;            //EINT0
    VICVectAddr3 = (uint32)IRQ_Eint0;
    
    VICVectCntl4 = 0x20 | 16;            //EINT2
    VICVectAddr4 = (uint32)IRQ_Eint2;
    
    VICVectCntl5 = 0x20 | 17;            //EINT3
    VICVectAddr5 = (uint32)IRQ_Eint3;
    
    VICVectCntl6 = 0x20 | 5;             //Timer 1
    VICVectAddr6 = (uint32)IRQ_Timer1;
    

    VICIntEnable = (1<<0x06) | (1<<0x07) | (1<<0x04) | (1<<14) | (1<<16) | (1<<17) | (1<<5) ;    //2005.12.02

...

以下是中斷處理過程
void __irq IRQ_Timer0 (void)            //Timer0 interrupt...
{   
    
    if(g_byCntLEDFlash) g_byCntLEDFlash--;

    T0IR = 0x01;                /* 清除中斷標(biāo)志                                    */
    VICVectAddr = 0x00;            /* 通知VIC中斷處理結(jié)束                            */
}

主程序循環(huán)中

main()
{
    for(;;)
    {
        if(g_byCntLEDFlash==0)
        {
            NotRunLED();
          &n
2樓: >>參與討論
rben
等等中,。。。。。。。。。。。。。。。。
 
3樓: >>參與討論
rben
等等中.........
遇到過類似問題的朋友可以告訴一下是什么原因嗎?,深恩,zlgARM ?

4樓: >>參與討論
rben
還是沒有人回答嗎?
 
5樓: >>參與討論
dbwu8280
關(guān)注ING
關(guān)注ING

6樓: >>參與討論
zlgarm
re:
可能是中斷問題引起的.因?yàn)锳RM微處理不能自動(dòng)中斷嵌套,如果外部中斷經(jīng)常發(fā)生(如果中斷引腳懸空更是如此),則定時(shí)器中斷將會響應(yīng)很慢.
另外,g_byCntLEDFlash變量最好加volatile修飾.

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
KEIL ULINK 要驅(qū)動(dòng)程序嗎?在KEIL3中如何配置?
請較ZLGARM 我想自已做一個(gè)Boot Loader我..
請教周工,LPC2132的下載問題!謝謝!
EasyARM 2104板的從JTAG問題。
axd調(diào)試問題
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號