在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 3C2440A的中斷控制器和定時(shí)器

            3C2440A的中斷控制器和定時(shí)器

            作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò) 收藏
            看了開(kāi)發(fā)板配套光盤(pán)中的非操作系統(tǒng)示例代碼,試著進(jìn)行簡(jiǎn)化,只留下最核心的啟動(dòng)代碼,然后自己編寫(xiě)makefile進(jìn)行編譯,燒錄到開(kāi)發(fā)板中進(jìn)行實(shí)驗(yàn),總算成功了。第一個(gè)程序運(yùn)行后只是簡(jiǎn)單地讓4個(gè)LED輪流開(kāi)啟關(guān)閉,雖然沒(méi)有看懂是怎么做到控制LED的,但看懂了系統(tǒng)啟動(dòng)部分,而且把有點(diǎn)亂的代碼整理得整齊了些;第二個(gè)程序運(yùn)行后可以從串口輸出文本,這對(duì)以后的進(jìn)一步學(xué)習(xí)很重要,因?yàn)榇谳敵鍪呛苤匾恼{(diào)試手段(從顯示屏輸出文本太復(fù)雜,不是初學(xué)者可以容易搞定的)。此外,看了《基于ARM的嵌入式系統(tǒng)開(kāi)發(fā)與實(shí)例》,雖然第4章,第5章看得很暈,因?yàn)榇鎯?chǔ)器控制器比較復(fù)雜,書(shū)中講了好多硬件連接以及操作時(shí)序的問(wèn)題,以前完全沒(méi)接觸過(guò),基礎(chǔ)不夠,看不懂。但第6章和第7章講的中斷控制器和PWM定時(shí)器,看門(mén)狗定時(shí)器還是比較好懂的,然后結(jié)合S3C2440A用戶手冊(cè),了解了S3C2440A與書(shū)中講的S3C44B0X的區(qū)別。把書(shū)中的例子改成可以在自己的開(kāi)發(fā)板上運(yùn)行的程序,燒錄進(jìn)去,運(yùn)行得與預(yù)期效果一致。

            0 說(shuō)明

            本文引用地址:http://www.biyoush.com/article/201611/318885.htm

            我用的開(kāi)發(fā)板是mini2440,它采用的處理器是基于ARM920T的S3C2440A;而看的教材《基于ARM的嵌入式系統(tǒng)開(kāi)發(fā)與實(shí)例》是以基于ARM7TDMI的S3C44B0X為例進(jìn)行講解的。

            1 中斷控制器

            S3C2440A可以接受60個(gè)來(lái)自內(nèi)部外設(shè)或者外部中斷引腳的中斷請(qǐng)求,多個(gè)中斷請(qǐng)求經(jīng)過(guò)仲裁判優(yōu)后向ARM920T核心發(fā)出IRQ或者FIQ請(qǐng)求。S3C2440A與S3C44B0X有幾處不同:

            (1) 有些中斷請(qǐng)求是帶子寄存器的。這些請(qǐng)求先對(duì)子源中斷請(qǐng)求寄存器(SUBSRCPND)相應(yīng)位置1,再通過(guò)子中斷屏蔽寄存器(INTSUBMASK),然后才能進(jìn)入到源中斷寄存器(SRCPND)中,最后通過(guò)中斷屏蔽寄存器(INTMASK),再進(jìn)行模式(INTMOD)和優(yōu)先級(jí)(PRIORITY)判斷。在處理通過(guò)子中斷寄存器的中斷時(shí),要記得清除SUBSRCPND的相應(yīng)位。

            (2)從用戶手冊(cè)上看,S3C2440A是沒(méi)有像S3C44B0X那樣的中斷控制寄存器的,不能選擇是使用向量中斷還是非向量中斷。書(shū)中講的IRQ向量模式寄存器應(yīng)該是對(duì)應(yīng)S3C2440A的中斷優(yōu)先級(jí)寄存器,S3C2440A的優(yōu)先級(jí)輪轉(zhuǎn)也比較好理解;至于中斷請(qǐng)求清除寄存器,S3C2440A好像是沒(méi)有對(duì)應(yīng)的寄存器的。在這上面,S3C44B0X似乎復(fù)雜一些。

            下面是來(lái)自S3C2440A用戶手冊(cè)的中斷處理過(guò)程圖:

            2 PWM定時(shí)器

            這方面S3C2440A與S3C44B0X沒(méi)有太大的不同,書(shū)中講的基本原理與定時(shí)器特性適用于S3C2440A。

            3 看門(mén)狗定時(shí)器

            除主時(shí)鐘輸入頻率不同外,S3C2440A與S3C44B0X沒(méi)有大的差別。

            4 源代碼

            (1)PWM定時(shí)器處理代碼

            static int int_count;

            static __irq void Timer0_Int(void)
            {
            Uart_Printf("nTimer 0 interrupt %d times",++int_count);
            rSRCPND = BIT_TIMER0;
            rINTPND = BIT_TIMER0;
            }

            void Timer0_Start(void)
            {
            int i;

            rTCFG0 = 0xFF;// 定時(shí)器0,1的預(yù)分頻值為255
            rTCFG1 = 0x2; // 定時(shí)器0的時(shí)鐘分割器采用1/8分頻
            rTCNTB0 = 25600;
            rTCON = 0x06;
            for(i=0;i<1000;i++);
            rTCON = 0x09;
            pISR_TIMER0 = (unsigned int)Timer0_Int;
            rINTMSK &= (~BIT_TIMER0);
            }

            (2)看門(mén)狗定時(shí)器處理代碼

            static int int_count;

            #define SUB_BIT_WDT (0x01 << 13)

            static __irq void Watchdog_Int(void)
            {
            Uart_Printf("nWatchdog interrupt %d times",++int_count);
            rSUBSRCPND = SUB_BIT_WDT;
            rSRCPND = BIT_WDT_AC97;
            rINTPND = BIT_WDT_AC97;
            }

            void Watchdog_Start(void)
            {

            rWTCNT = 16000;
            rWTDAT = 16000;
            pISR_WDT_AC97 = (unsigned int)Watchdog_Int;
            rINTMSK &= (~BIT_WDT_AC97);
            rINTSUBMSK &= (~SUB_BIT_WDT);
            // 0xFF3C=不產(chǎn)生復(fù)位信號(hào) 0xFF3D=產(chǎn)生復(fù)位信號(hào),約10秒后系統(tǒng)復(fù)位
            rWTCON = 0xFF3C;
            }

            (3)說(shuō)明

            主函數(shù)中執(zhí)行下列代碼:

            Timer0_Start();
            Watchdog_Start();
            while(1);

            會(huì)看到串口約1秒輸出一次定時(shí)器中斷處理消息,約10秒輸出一次看門(mén)狗中斷處理消息。如果設(shè)置看門(mén)狗定時(shí)器控制寄存器的值為0xFF3D,則看門(mén)狗定時(shí)器超時(shí)時(shí),會(huì)發(fā)出復(fù)位信號(hào),即大約每隔10秒,系統(tǒng)會(huì)復(fù)位一次。

            主程序在運(yùn)行死循環(huán),但串口輸出還是可以進(jìn)行的,這就是中斷的功能了:中斷程序的執(zhí)行,處理其他事務(wù)。以前學(xué)微機(jī)原理的時(shí)候,講中斷只是抽象的概念,不好理解,這里就看得比較清楚了。

            中斷處理函數(shù)中,應(yīng)該清除相應(yīng)的中斷請(qǐng)求位。對(duì)于看門(mén)狗中斷,由于是通過(guò)子中斷寄存器的,所以還要清除子中斷源請(qǐng)求寄存器。如果不進(jìn)行清除動(dòng)作,則中斷請(qǐng)求一直保持,相當(dāng)于不停地發(fā)生中斷,無(wú)法返回到主程序中。

            armcc擴(kuò)展了C語(yǔ)言,提供__irq關(guān)鍵字用以定義中斷處理函數(shù)。曾試著不使用__irq,但無(wú)論是用C語(yǔ)言還是匯編語(yǔ)言編程,都無(wú)法正確實(shí)現(xiàn)中斷處理,還是對(duì)中斷處理中應(yīng)該進(jìn)行的保存恢復(fù)寄存器,以及返回到主程序的操作不熟悉,等以后熟悉了再試著不用這個(gè)關(guān)鍵字吧。

            5 兩個(gè)術(shù)語(yǔ)

            PWM:Pulse Width Modulation,脈寬調(diào)制。

            脈寬調(diào)制(PWM:(Pulse Width Modulation)是利用微處理器的數(shù)字輸出來(lái)對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù),廣泛應(yīng)用在從測(cè)量、通信到功率控制與變換的許多領(lǐng)域中。

              簡(jiǎn)而言之,PWM是一種對(duì)模擬信號(hào)電平進(jìn)行數(shù)字編碼的方法。通過(guò)高分辨率計(jì)數(shù)器的使用,方波的占空比被調(diào)制用來(lái)對(duì)一個(gè)具體模擬信號(hào)的電平進(jìn)行編碼。PWM信號(hào)仍然是數(shù)字的,因?yàn)樵诮o定的任何時(shí)刻,滿幅值的直流供電要么完全有(ON),要么完全無(wú)(OFF)。電壓或電流源是以一種通(ON)或斷(OFF)的重復(fù)脈沖序列被加到模擬負(fù)載上去的。通的時(shí)候即是直流供電被加到負(fù)載上的時(shí)候,斷的時(shí)候即是供電被斷開(kāi)的時(shí)候。只要帶寬足夠,任何模擬值都可以使用PWM進(jìn)行編碼。

            看門(mén)狗:Watchdog

            在由單片機(jī)構(gòu)成的微型計(jì)算機(jī)系統(tǒng)中,由于單片機(jī)的工作常常會(huì)受到來(lái)自外界電磁場(chǎng)的干擾,造成程序的跑飛,而陷入死循環(huán),程序的正常運(yùn)行被打斷,由單片機(jī)控制的系統(tǒng)無(wú)法繼續(xù)工作,會(huì)造成整個(gè)系統(tǒng)的陷入停滯狀態(tài),發(fā)生不可預(yù)料的后果,所以出于對(duì)單片機(jī)運(yùn)行狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)測(cè)的考慮,便產(chǎn)生了一種專門(mén)用于監(jiān)測(cè)單片機(jī)程序運(yùn)行狀態(tài)的芯片,俗稱“看門(mén)狗”。

              看門(mén)狗電路電路的應(yīng)用,使單片機(jī)可以在無(wú)人狀態(tài)下實(shí)現(xiàn)連續(xù)工作,其工作原理是:看門(mén)狗芯片和單片機(jī)的一個(gè)I/O引腳相連,該I/O引腳通過(guò)程序控制它定時(shí)地往看門(mén)狗的這個(gè)引腳上送入高電平(或低電平),這一程序語(yǔ)句是分散地放在單片機(jī)其他控制語(yǔ)句中間的,一旦單片機(jī)由于干擾造成程序跑飛后而陷入某一程序段進(jìn)入死循環(huán)狀態(tài)時(shí),寫(xiě)看門(mén)狗引腳的程序便不能被執(zhí)行,這個(gè)時(shí)候,看門(mén)狗電路就會(huì)由于得不到單片機(jī)送來(lái)的信號(hào),便在它和單片機(jī)復(fù)位引腳相連的引腳上送出一個(gè)復(fù)位信號(hào),使單片機(jī)發(fā)生復(fù)位,即程序從程序存儲(chǔ)器的起始位置開(kāi)始執(zhí)行,這樣便實(shí)現(xiàn)了單片機(jī)的自動(dòng)復(fù)位。

              看門(mén)狗,又叫 watchdog timer,是一個(gè)定時(shí)器電路, 一般有一個(gè)輸入,叫喂狗,一個(gè)輸出到MCU的RST端,MCU正常工作的時(shí)候,每隔一端時(shí)間輸出一個(gè)信號(hào)到喂狗端,給 WDT 清零,如果超過(guò)規(guī)定的時(shí)間不喂狗,(一般在程序跑飛時(shí)),WDT 定時(shí)超過(guò),就回給出一個(gè)復(fù)位信號(hào)到MCU,是MCU復(fù)位. 防止MCU死機(jī). 看門(mén)狗的作用就是防止程序發(fā)生死循環(huán),或者說(shuō)程序跑飛。(



            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉