|
|||||||||||
| 技術(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ù) |
用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 于 2005/12/5 9:12:00 發(fā)布:
等等中,。。。。。。。。。。。。。。。。 |
|
| 3樓: | >>參與討論 |
| 作者: rben 于 2005/12/5 9:19:00 發(fā)布:
等等中......... 遇到過類似問題的朋友可以告訴一下是什么原因嗎?,深恩,zlgARM ? |
|
| 4樓: | >>參與討論 |
| 作者: rben 于 2005/12/5 14:45:00 發(fā)布:
還是沒有人回答嗎? |
|
| 5樓: | >>參與討論 |
| 作者: dbwu8280 于 2005/12/7 18:35:00 發(fā)布:
關(guān)注ING 關(guān)注ING |
|
| 6樓: | >>參與討論 |
| 作者: zlgarm 于 2005/12/7 19:21:00 發(fā)布:
re: 可能是中斷問題引起的.因?yàn)锳RM微處理不能自動(dòng)中斷嵌套,如果外部中斷經(jīng)常發(fā)生(如果中斷引腳懸空更是如此),則定時(shí)器中斷將會響應(yīng)很慢. 另外,g_byCntLEDFlash變量最好加volatile修飾. |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |