0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式開(kāi)發(fā)中的一些硬件設(shè)計(jì)上的坑

GReq_mcu168 ? 來(lái)源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2017-11-20 09:26 ? 次閱讀
嵌入式系統(tǒng)開(kāi)發(fā),經(jīng)常要接觸硬件。做嵌入式開(kāi)發(fā)對(duì)數(shù)字電路模擬電路要有一定的了解。這樣才能深入的研究下去。下面我們簡(jiǎn)單的介紹嵌入式開(kāi)發(fā)中的一些硬件相關(guān)的概念。

電平(Level)

在數(shù)字電路中,分為高電平和低電平,分別用1和0表示。一個(gè)數(shù)字電路的管腳,總是存在一個(gè)電平的,要么高要么低,或者說(shuō)要么1要到0(其實(shí),還有另一種狀態(tài),后面會(huì)提到)。

總線(Bus)

在嵌入式系統(tǒng)中一定會(huì)有一塊處理器芯片,此外,還有其它的芯片作為外部設(shè)備(后面簡(jiǎn)稱外設(shè)),這些芯片與處理器協(xié)作實(shí)現(xiàn)產(chǎn)品的功能。復(fù)雜的產(chǎn)品往往是由大量的芯片組成的。那么不可避免的是我們需要將所有的外設(shè)與處理器進(jìn)行相連,最為簡(jiǎn)單的是將所有的外設(shè)都采用獨(dú)立(注意是獨(dú)立)的信號(hào)線連接至處理器,這樣的好處是容易理解,但問(wèn)題是:不可行。因?yàn)樘幚砥餍酒枰鎏嗟木€了,從芯片的生產(chǎn)和產(chǎn)品的生產(chǎn)角度來(lái)看都不實(shí)際。加之,處理器(在此我們假設(shè)處理器是單核的,而不是多核的)處理事務(wù)在微觀上是串行的,也就是說(shuō)在某一時(shí)刻如果要對(duì)外設(shè)進(jìn)行讀寫操作,那只可能是對(duì)大量外設(shè)中的一個(gè)進(jìn)行,即多個(gè)外設(shè)不可能在微觀上被處理器同時(shí)訪問(wèn)。需要注意的是,這里提出了微觀這一概念,這是為了區(qū)別于宏觀。從宏觀上來(lái)講,一個(gè)處理器中可以有多個(gè)任務(wù)同時(shí)運(yùn)行,但這些任務(wù)在微觀上卻是一個(gè)一個(gè)運(yùn)行的(后面會(huì)用串行來(lái)描述這里所說(shuō)的“一個(gè)一個(gè)”),多任務(wù)的串行運(yùn)行實(shí)現(xiàn)是由操作系統(tǒng)扮演著重要的角色來(lái)實(shí)現(xiàn)的?;氐轿覀兊?a href="http://ttokpm.com/v/tag/" target="_blank">話題,即然將每個(gè)外設(shè)采用獨(dú)立的信號(hào)線連到處理器不可行,且處理器在單一時(shí)間內(nèi)只會(huì)對(duì)一個(gè)外設(shè)進(jìn)行訪問(wèn),那我們能不能采用共享的信號(hào)線將所有的芯片連在一起呢?這就是總線概念的由來(lái)。通俗的說(shuō),如果我們周圍有十個(gè)家庭,為了讓這十個(gè)家庭每?jī)蓚€(gè)之間都能往來(lái),我們并不需要為每?jī)蓚€(gè)家庭修一條單獨(dú)(注意是單獨(dú))的路(如果這樣,要修45條路),而是可以修一條大路,然后,每個(gè)家都與大路相連。

對(duì)于總線,我們往往說(shuō)總線是處理器的,而其它的外設(shè)是掛在總線上的。那有一個(gè)問(wèn)題,我們每一時(shí)間只能訪問(wèn)掛在總線上的一個(gè)外設(shè),那如何區(qū)分這些外設(shè)呢?和我們的路一樣,我們需要用地址來(lái)區(qū)分每一個(gè)家庭,在總線上,也是采用地址來(lái)進(jìn)行區(qū)分的。這樣,總線就根據(jù)其功能分為兩類了。一類是地址總線,這一總線上的數(shù)據(jù)只會(huì)是從處理器向外設(shè)“流”,是單向的。另一類則是數(shù)據(jù)總線,用來(lái)將數(shù)據(jù)從處理器傳送到外設(shè)(從處理器的角度來(lái)說(shuō)是寫操作)或者是將數(shù)據(jù)從外設(shè)傳送到處理器(從處理器的角度來(lái)說(shuō)是讀操作),顯然,數(shù)據(jù)總線是雙向的。也就是說(shuō),在我們的嵌入式系統(tǒng)中同時(shí)存在地址總線和數(shù)據(jù)總線將所有需要與處理器進(jìn)行通訊的芯片連在一起的。

總線是有寬度的,正如我們的路分為“三車道”或是“四車道”,我們說(shuō)32位處理器,是指其數(shù)據(jù)總線寬度是32位,也就是“有32輛車能同時(shí)跑”,顯然,寬度越是寬我們的處理器速度就越是快,因?yàn)槲覀儚耐庠O(shè)芯片存取數(shù)據(jù)的速度會(huì)更快,這就是為什么我們的計(jì)算機(jī)向64位發(fā)展的原因。同樣的,地址總線也是有寬度的,對(duì)于32位處理器其最大寬度也就是32位。

總線的概念有了,那接下來(lái)的一個(gè)問(wèn)題是,即使是每一個(gè)外設(shè)都有一個(gè)地址,那這一地址記在哪里呢?是放在外設(shè)芯片上嗎?如果這樣的話,那就有一個(gè)問(wèn)題,每一類外設(shè)的地址必須是不能重疊的,而當(dāng)一個(gè)產(chǎn)品中需要兩塊一樣的芯片的話,兩塊芯片的地址就無(wú)法區(qū)分了,看來(lái)這樣操作存在問(wèn)題。還有,如果這樣的話每一個(gè)外設(shè)也得與(比如,32根)數(shù)據(jù)總線完全相連,并監(jiān)聽(tīng)數(shù)據(jù)線以了解處理器是不是在“叫”自己,這樣很是復(fù)雜。此外,地址也有可能因?yàn)橥庠O(shè)種類的增多而用光??偟膩?lái)說(shuō)地址不能存放在外設(shè)芯片,那如何讓外設(shè)知道,此時(shí)它是被處理器招換從而需要進(jìn)行讀寫訪問(wèn)的呢?答案就是芯片的片選(CS, chip select)信號(hào),或者又號(hào)使能(ENable)信號(hào)。

片選(CS 或EN)

片選信號(hào)對(duì)于外設(shè)芯片來(lái)講,就是一個(gè)(也是一根)通知信號(hào),告訴芯片“嘿,請(qǐng)開(kāi)門,我要放些東西進(jìn)來(lái),或是拿些東西走”,這里的東西只能是數(shù)據(jù),不可能是玉米棒什么的。那有個(gè)問(wèn)題,這個(gè)信號(hào)源從哪里來(lái)呢?顯然,只能從處理器來(lái)。那是不是也是像總線那樣,每一個(gè)芯片都共用一根線連在一起呢?如果這樣,可能處理器“一叫開(kāi)門”所有的芯片都將“門”打開(kāi)了。如果是處理器寫數(shù)據(jù),那可能所有的芯片都被寫入同樣的數(shù)據(jù)。而取數(shù)據(jù)時(shí),每個(gè)外設(shè)芯片都向外“扔”數(shù)據(jù),這一定會(huì)造成數(shù)據(jù)總線沖突,因?yàn)橛械男酒蚩偩€上“扔”1,有的則“扔”0,這種情況下處理器一定會(huì)“發(fā)瘋”的,因?yàn)樗恢缿?yīng)當(dāng)?shù)玫?還是0。

即然這樣,那顯然不能將所有的片選信號(hào)連在一起了,只能是各芯片的片選信號(hào)獨(dú)立。前面提到了地址總線,我們是采用一根地址線連一個(gè)外設(shè)芯片呢?還是采用其它的方法。如果采用一根地址線連一個(gè)外設(shè)芯片,那可能最多只能掛接32個(gè)芯片了,這顯然不行。其實(shí),在現(xiàn)實(shí)中,是采用32位的數(shù)字來(lái)表示一個(gè)外設(shè)芯片的地址的,比如1可以表示芯片A,而6534可以表示另外一個(gè)芯片B,等等。由此看來(lái),理論上我們可以表示2的32次方(4294967296)個(gè)設(shè)備,之所以說(shuō)理論上,是因?yàn)橛械脑O(shè)備要占用大量的地址。即然這樣,那還有一個(gè)問(wèn)題,如果將32位的地址總線轉(zhuǎn)換成芯片的一根片選信號(hào)呢?這需要引入譯碼(器)的概念。

譯碼(器)

譯碼器將一個(gè)數(shù)據(jù)轉(zhuǎn)換成一根信號(hào)線上的信號(hào),比如3/8譯碼器,可以將一個(gè)位寬是3位的數(shù)據(jù)轉(zhuǎn)換成8根(2的3次方)完全獨(dú)立的信號(hào)線,當(dāng)向數(shù)據(jù)側(cè)寫入二進(jìn)制的011時(shí),對(duì)應(yīng)的是8根線的第3根,當(dāng)輸入二進(jìn)制的111時(shí),對(duì)應(yīng)的是8根線中的最后一根。有了譯碼器,處理器的地址線就簡(jiǎn)化了,只要32根地址線加上外面的譯碼器,就可以訪問(wèn)大量的外設(shè)芯片了。外部設(shè)備的選擇問(wèn)題,我們已經(jīng)解決了,現(xiàn)在還得回頭看一看數(shù)據(jù)總線。

圖1 3/8譯碼器

在嵌入式系統(tǒng)中,所有芯片的數(shù)據(jù)總線可以理解成是直接相連的。之所以用了“可以理解”一詞,是因?yàn)闉榱颂岣呖偩€的負(fù)載能力,其中會(huì)加入總線驅(qū)動(dòng)器。為了理解,我們看一看我們生活中的自來(lái)水,比如,在北京理論上可能所有的水管是連在一起的,但中間可能為了提高水壓,存在很多小的水站用來(lái)增加供水壓力,而不可能全北京所有的自來(lái)水自接來(lái)自一個(gè)水廠。即然所有的數(shù)據(jù)總線是連在一起的,那就可能會(huì)有問(wèn)題。當(dāng)向外部設(shè)備寫數(shù)據(jù)時(shí),處理器先向地址總線輸送目標(biāo)外設(shè)的地址,地址譯碼器將其轉(zhuǎn)換成一根信號(hào)的片選信號(hào)送到了目標(biāo)外設(shè),目標(biāo)外設(shè)收到這一信號(hào)后,將“門”打開(kāi)。接下來(lái)處理器將要傳送到外設(shè)的數(shù)據(jù)往數(shù)據(jù)總線上一放,由于只有目標(biāo)外設(shè)芯片打開(kāi)了“門”,所以數(shù)據(jù)只會(huì)進(jìn)入到目標(biāo)外設(shè),而其它的外設(shè)什么也不會(huì)收到。很好!處理器向外寫數(shù)據(jù)應(yīng)當(dāng)沒(méi)有問(wèn)題,我們接下來(lái)看一看讀。讀的話,由于數(shù)據(jù)是從外設(shè)輸送到處理器的,盡管我們采用和寫一樣的方法打開(kāi)目標(biāo)外設(shè)的“門”,但此時(shí),其它的外設(shè)也在數(shù)據(jù)總線上,它們有可能處于1也可能處于0,是不是會(huì)影響處理器讀取目標(biāo)外設(shè)的數(shù)據(jù)呢?結(jié)果當(dāng)然不會(huì),但我們得引入另一個(gè)概念:高阻態(tài)。

高阻態(tài)

很顯然,當(dāng)處理器從目標(biāo)外設(shè)讀數(shù)據(jù)時(shí),我們希望其它沒(méi)有被選上的芯片的數(shù)據(jù)總線不會(huì)對(duì)目標(biāo)外設(shè)所要傳送的數(shù)據(jù)有影響,那怎么辦呢?實(shí)際上,當(dāng)芯片沒(méi)有被選中時(shí),其數(shù)據(jù)總線都處于高阻態(tài)。所謂的高阻態(tài),我們可以理解成這一管腳在外設(shè)芯片內(nèi)部是斷開(kāi)的,如此一來(lái),顯然不會(huì)對(duì)處理器從目標(biāo)外設(shè)讀取數(shù)據(jù)造成任何的影響了。我們說(shuō)當(dāng)一個(gè)芯片沒(méi)有被選中或是沒(méi)有被使能時(shí),其數(shù)據(jù)總線一定是處于高阻態(tài)的。前面用了“門”的開(kāi)和關(guān)來(lái)打比方,那“門”是指什么呢?是指外設(shè)的數(shù)據(jù)總線,片選信號(hào)的作用就是控制將外設(shè)的數(shù)據(jù)總線與處理器的數(shù)據(jù)總線相連或是斷開(kāi)。更多的關(guān)于高阻態(tài)的講解可參看前面寫的文章《高阻態(tài)和三態(tài)門》。

驅(qū)動(dòng)

總線上的數(shù)據(jù)是誰(shuí)放上去的我們就說(shuō)誰(shuí)是那一時(shí)刻的驅(qū)動(dòng)者。也就是說(shuō),當(dāng)處理器向外設(shè)寫數(shù)據(jù)時(shí),它是在驅(qū)動(dòng)數(shù)據(jù)總線的,而當(dāng)處理器從目標(biāo)外設(shè)讀取數(shù)據(jù)時(shí),目標(biāo)外設(shè)是在驅(qū)動(dòng)數(shù)據(jù)總線的。對(duì)于地址總線,因?yàn)橹豢赡軓奶幚砥飨蚰繕?biāo)外設(shè)寫,所以地址總線永遠(yuǎn)是由處理器驅(qū)動(dòng)的。當(dāng)一個(gè)芯片沒(méi)有被選中時(shí),我們說(shuō)它并不驅(qū)動(dòng)數(shù)據(jù)總線。

三態(tài)門

前面我們說(shuō)到外設(shè)芯片的數(shù)據(jù)總線在沒(méi)有被選中時(shí)其處于高阻態(tài),當(dāng)被選中時(shí),其電平可能是高(1)或是低(0)。如此一來(lái),我們說(shuō)外設(shè)的數(shù)據(jù)總線其芯片管腳是屬于三態(tài)門的,即存在高電平、低電平和高阻態(tài),三個(gè)狀態(tài)。更多的關(guān)于三態(tài)門的講解可參看前面寫的文章《高阻態(tài)和三態(tài)門》。

電平的有效性

前面我們了解了什么是片選信號(hào),也講到了三態(tài)門,需要指出的是片選信號(hào)通常不是三態(tài)門,其只存在兩個(gè)狀態(tài),即高電平或是低電平。前面我們也說(shuō)了,片選信號(hào)是用來(lái)“開(kāi)門”的,而片選信號(hào)又有高和低電平,那到底是高電平表示“開(kāi)門”呢?還是低電平?對(duì)于這一問(wèn)題,我們稱如果一個(gè)電平對(duì)于一個(gè)片選信號(hào)表示“開(kāi)門”那么它就是這一信號(hào)的有效電平。比如,對(duì)于一個(gè)片選信號(hào),如果低電平表示“開(kāi)門”,那么我們說(shuō)這個(gè)片選信號(hào)是低電平有效的。雖然,在這里我們用片選信號(hào)來(lái)解釋電平的有效性,但是很多信號(hào)都存在有效性的問(wèn)題,比如,后面我們將要談的讀信號(hào)和寫信號(hào)都存在有效性問(wèn)題。

時(shí)序

在前面我們說(shuō)到當(dāng)處理器要向外設(shè)芯片寫數(shù)據(jù)時(shí),需要先將所需訪問(wèn)的外設(shè)的地址放在地址總線上,然后,由譯碼器將地址總線上的數(shù)據(jù)轉(zhuǎn)換成片選信號(hào),片選信號(hào)則使能目標(biāo)外設(shè)芯片,接下來(lái)處理器寫數(shù)據(jù)到數(shù)據(jù)總線上,從而完成一個(gè)寫操作。顯然,在處理器將數(shù)據(jù)寫到數(shù)據(jù)總線之前地址線上的數(shù)據(jù)必須一直保留一段時(shí)間,否則的話譯碼器不能長(zhǎng)時(shí)間的使片選信號(hào)有效。當(dāng)完成了數(shù)據(jù)的寫操作后,處理器就不需要保證地址總線上的地址有效了。我們可以看出,這一系列的操作都有一定嚴(yán)格的時(shí)間順序的,這稱之為時(shí)序。時(shí)序描述了處理器與外部設(shè)備的交互信號(hào) “規(guī)程”,大家只有按照這一“規(guī)程”來(lái)操作,才能保證處理器與外部設(shè)備之間能正常的通訊。這好比,我們的道路上的紅綠燈,如果我們行人和車輛不按照其指示來(lái)通行的話,就會(huì)出現(xiàn)事故。通常,采用時(shí)序圖來(lái)描述芯片之間通訊的信號(hào)“規(guī)程”。

圖2 讀時(shí)序圖

圖3 讀時(shí)序圖

從圖中我們可以看出ADDRESS是表示地址總線的,DQ是表示數(shù)據(jù)總線的,CE是片選信號(hào),且是低電平有效,其寬度要保證在進(jìn)行讀操作時(shí)總是有效的。學(xué)會(huì)看時(shí)序圖對(duì)于做嵌入式系統(tǒng)開(kāi)發(fā)非常有幫助,因?yàn)槲覀儾豢杀苊獾囊c芯片打交道。在時(shí)序圖中,通常會(huì)標(biāo)識(shí)很多的時(shí)間需求信息。在寫啟動(dòng)代碼時(shí)需要初始化各地址空間的片選地址寄存器和讀寫時(shí)序,時(shí)序的配置依據(jù)就是來(lái)自于外設(shè)芯片的時(shí)間需求,這是芯片手冊(cè)很重要的一部分內(nèi)容。當(dāng)一個(gè)地址空間中存在多個(gè)外設(shè)芯片時(shí),我們需要考慮到其中最慢的外設(shè)芯片的時(shí)間需求,否則的話有的芯片就不能正常工作。

讀信號(hào)

當(dāng)處理器需要從外設(shè)芯片讀取信號(hào)時(shí),除了需要產(chǎn)生片選信號(hào)外,還需要告訴外設(shè)芯片這是一個(gè)讀操作,而不是一個(gè)寫操作,這是通過(guò)讀信號(hào)來(lái)實(shí)現(xiàn)的。

寫信號(hào)

前面講了讀信號(hào),我想對(duì)于寫信號(hào)也就不難理解了,這個(gè)信號(hào)用于告訴外設(shè)芯片,這是一個(gè)向外設(shè)芯片寫數(shù)據(jù)的操作。

I/O端口

前面提到了外設(shè)(芯片)),現(xiàn)在是對(duì)外設(shè)進(jìn)行分類的時(shí)候了。大體上外設(shè)分為兩類,一類是存儲(chǔ)器外設(shè),而另一類是非存儲(chǔ)器外設(shè),后者常被稱之為I/O設(shè)備,這里的I/O是Input/Output的簡(jiǎn)寫,即輸入、輸出??梢?jiàn),I/O外設(shè)是一個(gè)非常寬泛的概念。對(duì)于存儲(chǔ)器外設(shè),其特點(diǎn)是,它所占用的空間是連續(xù)的一片。比如,SDRAM內(nèi)存就是屬于存儲(chǔ)器外設(shè),如果其容量是8M字節(jié),那么其占用的地址空間也會(huì)是8M的。與存儲(chǔ)器外設(shè)所不同的是,I/O外設(shè)所點(diǎn)用的地址一般都很少。比如一個(gè)I/O外設(shè)可能存在多個(gè)控制寄存器,這些控制寄存器從處理器來(lái)看就是多個(gè)I/O端口(地址),向這個(gè)地址寫數(shù)據(jù)就是向外設(shè)所對(duì)應(yīng)的寄存器寫數(shù)據(jù),反之,也可以是讀。比如,一個(gè)串口芯片可能存在多個(gè)寄存器,一個(gè)用來(lái)查詢芯片的狀態(tài),一個(gè)用來(lái)設(shè)置芯片的功能,另一個(gè)用來(lái)讀取芯片從串口線所收到的數(shù)據(jù),最后,還有一個(gè)用來(lái)向芯片寫數(shù)據(jù)以向串口線上發(fā)送數(shù)據(jù)。對(duì)于這一串口芯片的寄存器,從處理器的角度來(lái)看,都是獨(dú)立的I/O端口。

I/O端口存在讀、寫性問(wèn)題,有的端口是只讀的,有的端口是只寫的,還有的端口是即可讀也可寫,其讀寫性是由外設(shè)芯片的寄存器所決定的,在芯片的數(shù)據(jù)手冊(cè)中能找到。需要指出的是,有些存儲(chǔ)器外設(shè)也存在I/O端口,以對(duì)其進(jìn)行一定的控制。從I/O端口這一名字來(lái)看,對(duì)于處理器來(lái)說(shuō),就是對(duì)從外面讀入數(shù)據(jù)或是向外面輸出數(shù)據(jù)的一個(gè)接口總稱。

中斷

中斷從硬件的角度來(lái)看就是一個(gè)能產(chǎn)生高、低電平的一根信號(hào)線,但理解它需要從處理器的角度出發(fā)。我們說(shuō)過(guò)了,處理器從微觀上看,所做的工作是按順序進(jìn)行的,其對(duì)程序的處理只能是一條指令一條指令的執(zhí)行。如果存在需要對(duì)外設(shè)芯片進(jìn)行訪問(wèn),而有可能從處理器發(fā)出讀、寫命令后,由于外設(shè)通常比處理器慢很多,所以外設(shè)芯片需要一些時(shí)間來(lái)準(zhǔn)備好所需的數(shù)據(jù)。在這種情況下,如果處理器一直等外設(shè)芯片的返回?cái)?shù)據(jù)再執(zhí)行后續(xù)的指令的話,將耗費(fèi)寶貴的時(shí)間,這些時(shí)間完全可以用來(lái)做其它的工作。別忘了,從宏觀上看來(lái)處理器常常是多任務(wù)的,任務(wù)是指操作系統(tǒng)所提供的調(diào)度單位。當(dāng)一個(gè)任務(wù)因?yàn)榈却庠O(shè)芯片的數(shù)據(jù)而阻塞時(shí),我們可以切換到另外的任務(wù),從而提高處理效率。這就有一個(gè)問(wèn)題,當(dāng)處理器去處理另一個(gè)任務(wù)時(shí),如果外設(shè)芯片的數(shù)據(jù)好了的話,如果告訴處理器呢?對(duì)了!就是通過(guò)中斷信號(hào)。中斷信號(hào)的高、低電平可以用來(lái)表示是否有中斷需要處理器注意以處理特定的事件(比如,外設(shè)數(shù)據(jù)準(zhǔn)備好了的事件)。

由此看來(lái),中斷的引入能大大的提高處理器的運(yùn)用效率。為了使用處理器上的中斷,一開(kāi)始我們需要初始化好處理器的中斷控制器,比如安裝好所需的中斷服務(wù)程序或稱之為ISR(Interrupt Service Routine),然后,打開(kāi)中斷屏蔽位。中斷服務(wù)程序中需要做如下的操作:

從外設(shè)讀入或向外設(shè)寫數(shù)據(jù)。讀還是寫通常需要讀取外設(shè)的中斷狀態(tài)寄存器來(lái)決定。

清除外設(shè)的中斷信號(hào)。我們知道,中斷信號(hào)是由外設(shè)芯片驅(qū)動(dòng)的,為了告訴外設(shè)芯片,處理器已經(jīng)處理完了所需做的工作,那么處理器需要通過(guò)一定的方式通知外設(shè)芯片。這種方式就是向外設(shè)芯片的寄存器中的某一位寫入一個(gè)數(shù)據(jù),比如,可能是寫入1表示清中斷,也可能是寫入0表示清中斷,這通常在外設(shè)的數(shù)據(jù)手冊(cè)中能查到。當(dāng)外設(shè)收到了處理器的清中斷請(qǐng)求后,其就會(huì)驅(qū)動(dòng)中斷線使其無(wú)效。比如,一個(gè)外設(shè)的中斷線是當(dāng)其為低電平表示有中斷,將其從低電平變?yōu)楦唠娖骄褪球?qū)動(dòng)為無(wú)效。

清除處理器的中斷信號(hào)標(biāo)識(shí)。處理器中往往也會(huì)保存外部中斷信號(hào)是否發(fā)生過(guò),當(dāng)我們處理完了外設(shè)芯片的中斷時(shí),我們也需要清除處理器上的標(biāo)識(shí),從而為下一次中斷做準(zhǔn)備。需要注意的是,清外設(shè)的中斷必須發(fā)生在請(qǐng)?zhí)幚砥髦袛鄻?biāo)識(shí)之前!

中斷還存在一個(gè)觸發(fā)方式問(wèn)題。有兩種觸發(fā)方式 ,一種是電平觸發(fā),另一種是沿觸發(fā)。電平觸發(fā)是指電平的高低表示外設(shè)是否有中斷,而沿觸發(fā)則是能過(guò)中斷線上的電平的升或降來(lái)表示的,顯然,存在兩種沿觸發(fā)方式。一種是中斷線從低電平變?yōu)楦唠娖剑覀兎Q之為上升沿觸發(fā),另一處是中斷線從高電平轉(zhuǎn)換為低電平,我們稱之為下降沿觸發(fā)??偟膩?lái)說(shuō)中斷的觸發(fā)方式有電平觸發(fā)、上升沿觸發(fā)和下降沿觸發(fā)。電平觸發(fā)方式中處理中中斷設(shè)置很重要的一個(gè)步驟。

萬(wàn)用表

萬(wàn)用表通常是用來(lái)查看電平的高低、電阻的大小等的,是常用且必不可少的工具之一。在嵌入式系統(tǒng)開(kāi)發(fā)中,我們常用的是數(shù)字萬(wàn)用表。

示波器

在嵌入式系統(tǒng)開(kāi)發(fā)中,我們不可避免的要與外設(shè)芯片打交道。調(diào)試驅(qū)動(dòng)程序時(shí),除了需要完全看明白芯片的數(shù)據(jù)手冊(cè),且在軟件高度的過(guò)程中,還需要看我們所期望的信號(hào)電平是否發(fā)生在芯片上。比如,我們?cè)趯戲?qū)動(dòng)程序時(shí),需要通過(guò)寫I/O端口來(lái)對(duì)外設(shè)芯片進(jìn)行操作,當(dāng)寫相應(yīng)的I/O端口時(shí),我們知道所對(duì)應(yīng)芯片的片選信號(hào)應(yīng)當(dāng)有效,有時(shí),我們需要驗(yàn)證是否按預(yù)期發(fā)生了,這就需要用到示波器。一般的示波器是能同時(shí)觀測(cè)兩個(gè)信號(hào)線的信號(hào)狀態(tài)的。示波器都提供一定的功能,比如設(shè)置信號(hào)撲捉的方式等等。示波器很重要的一個(gè)參數(shù)據(jù)是其采集頻率,根據(jù)Nyquist采集定理,如果我們想用示波器查看頻率是100M赫茲的信號(hào),那么其采樣頻率必須至少是其兩倍,即200M赫茲。有人可能會(huì)問(wèn):為什么不用萬(wàn)用表來(lái)看呢?因?yàn)槿f(wàn)用表的采集頻率很底,無(wú)法采集到很快的信號(hào)變化。

邏輯分析儀

簡(jiǎn)單的說(shuō)邏輯分析器就是具有很多信號(hào)通道的示波器。通過(guò)邏輯分析儀,我們可以看到地址總線和數(shù)據(jù)總線上的數(shù)據(jù)。邏輯分析儀都提供一定的編程能力,用于編程什么時(shí)候開(kāi)始對(duì)總線上的數(shù)據(jù)進(jìn)行采集。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5059

    文章

    18973

    瀏覽量

    302032
  • 智能硬件
    +關(guān)注

    關(guān)注

    205

    文章

    2327

    瀏覽量

    107383

原文標(biāo)題:淺顯易懂的理解嵌入式開(kāi)發(fā)中的硬件知識(shí)

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    零基礎(chǔ)嵌入式開(kāi)發(fā)學(xué)習(xí)路線

    的數(shù)據(jù)結(jié)構(gòu)與算法能夠提升運(yùn)行效率,同樣不好的數(shù)據(jù)結(jié)構(gòu)與算法也會(huì)造成空間的浪費(fèi)。對(duì)于嵌入式開(kāi)發(fā)來(lái)說(shuō),掌握一些比較基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)還是非常有必要的。比如線性結(jié)構(gòu)如鏈表、棧、隊(duì)列、樹(shù)、圖等??梢酝ㄟ^(guò)這些邏輯
    發(fā)表于 10-25 15:55

    嵌入式開(kāi)發(fā)常見(jiàn)問(wèn)題排查

    歸結(jié)為相對(duì)簡(jiǎn)單的小問(wèn)題。接下來(lái),我們將討論一些嵌入式開(kāi)發(fā)中常見(jiàn)的問(wèn)題及其解決方法。、問(wèn)題復(fù)現(xiàn)要有效解決問(wèn)題,首先需要能夠穩(wěn)定地復(fù)現(xiàn)它。般來(lái)說(shuō),容易復(fù)現(xiàn)的問(wèn)題也相對(duì)
    的頭像 發(fā)表于 09-22 08:04 ?240次閱讀
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>常見(jiàn)問(wèn)題排查

    聚焦嵌入式開(kāi)發(fā)的合規(guī)性工具、項(xiàng)目管理工具、版本迭代工具應(yīng)用

    ,就嵌入式開(kāi)發(fā)與管理領(lǐng)域的最新趨勢(shì)、工具選擇以及DevSecOps實(shí)踐應(yīng)用等方面展開(kāi)了深入探討。 本期對(duì)話龍智資深DevSecOps顧問(wèn)徐晨暉, 分享嵌入式開(kāi)發(fā)的合規(guī)性工具、項(xiàng)目管理和版本管理的工具選擇,以及DevSecOps
    的頭像 發(fā)表于 07-29 15:15 ?434次閱讀

    嵌入式開(kāi)發(fā)前景怎么樣?

    嵌入式開(kāi)發(fā)前景非常廣闊,這主要得益于物聯(lián)網(wǎng)、人工智能、大數(shù)據(jù)等技術(shù)的快速發(fā)展,以及嵌入式系統(tǒng)在各個(gè)領(lǐng)域的廣泛應(yīng)用。以下是對(duì)嵌入式開(kāi)發(fā)前景的詳細(xì)分析
    的頭像 發(fā)表于 07-10 09:00 ?2352次閱讀
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>前景怎么樣?

    嵌入式開(kāi)發(fā)者的未來(lái)

    嵌入式系統(tǒng)的就業(yè)方向非常廣泛,涵蓋了許多不同的行業(yè)和領(lǐng)域。以下是一些常見(jiàn)的嵌入式系統(tǒng)就業(yè)方向:消費(fèi)電子產(chǎn)品:這包括智能手機(jī)、平板電腦、智能電視、智能家居設(shè)備等。嵌入式系統(tǒng)工程師可以參與
    的頭像 發(fā)表于 06-23 08:10 ?312次閱讀
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>者的未來(lái)

    嵌入式開(kāi)發(fā)就業(yè)前景怎么樣?

    ,嵌入式開(kāi)發(fā)的主要工作是開(kāi)發(fā)各種醫(yī)療設(shè)備和系統(tǒng),如醫(yī)療影像、醫(yī)療機(jī)器人、遠(yuǎn)程診療等。嵌入式開(kāi)發(fā)人員需要掌握相關(guān)的硬件和軟件技術(shù),如處理器、傳感器、通信技術(shù)、醫(yī)療數(shù)據(jù)處理等,同時(shí)也需要具
    發(fā)表于 06-07 14:51

    fpga是嵌入式開(kāi)發(fā)

    FPGA(現(xiàn)場(chǎng)可編程門陣列)與嵌入式開(kāi)發(fā)之間確實(shí)存在定的關(guān)聯(lián),但它們?cè)诒举|(zhì)是兩個(gè)不同的領(lǐng)域。
    的頭像 發(fā)表于 03-15 14:18 ?941次閱讀

    嵌入式軟件開(kāi)發(fā)和軟件開(kāi)發(fā)的區(qū)別

    嵌入式軟件開(kāi)發(fā)和軟件開(kāi)發(fā)是兩個(gè)不同的概念,它們?cè)?b class='flag-5'>一些關(guān)鍵方面有著明顯的區(qū)別。嵌入式軟件開(kāi)發(fā)是指
    的頭像 發(fā)表于 01-22 15:27 ?2125次閱讀

    嵌入式開(kāi)發(fā)的交叉編譯詳解

    嵌入式開(kāi)發(fā),經(jīng)常會(huì)遇到目標(biāo)平臺(tái)資源貧乏,無(wú)法運(yùn)行需要的編譯器。亦或是目標(biāo)平臺(tái)上不允許或不能夠安裝需要的編譯器。這時(shí)候就需要使用交叉編譯了。
    的頭像 發(fā)表于 12-01 13:24 ?1110次閱讀
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b><b class='flag-5'>中</b>的交叉編譯詳解

    嵌入式開(kāi)發(fā)測(cè)試秘訣

    嵌入式軟件開(kāi)發(fā)過(guò)程中,花在測(cè)試和花在編碼的時(shí)間比通常在3:1左右(實(shí)際可能更多)。這個(gè)比例會(huì)隨著工程師編程、測(cè)試水平的提高而不斷下降,但無(wú)論如何,軟件測(cè)試都是嵌入式軟件
    的頭像 發(fā)表于 11-24 16:18 ?483次閱讀

    c語(yǔ)言嵌入式開(kāi)發(fā)

    電子發(fā)燒友網(wǎng)站提供《c語(yǔ)言嵌入式開(kāi)發(fā).zip》資料免費(fèi)下載
    發(fā)表于 11-17 14:11 ?2次下載
    c語(yǔ)言<b class='flag-5'>嵌入式開(kāi)發(fā)</b>

    嵌入式開(kāi)發(fā)系統(tǒng)基礎(chǔ)知識(shí)

    電子發(fā)燒友網(wǎng)站提供《嵌入式開(kāi)發(fā)系統(tǒng)基礎(chǔ)知識(shí).pdf》資料免費(fèi)下載
    發(fā)表于 11-17 10:59 ?11次下載
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>系統(tǒng)基礎(chǔ)知識(shí)

    嵌入式開(kāi)發(fā)學(xué)習(xí)路線

    電子發(fā)燒友網(wǎng)站提供《嵌入式開(kāi)發(fā)學(xué)習(xí)路線.doc》資料免費(fèi)下載
    發(fā)表于 11-17 10:13 ?13次下載
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>學(xué)習(xí)路線

    嵌入式開(kāi)發(fā)學(xué)習(xí)路線分享

    的實(shí)際應(yīng)用范疇,可以說(shuō)目前市場(chǎng)上對(duì)嵌入式開(kāi)發(fā)人才的需求越來(lái)越大,很多小伙伴都想通過(guò)培訓(xùn)學(xué)習(xí)的方式走向嵌入式開(kāi)發(fā)相關(guān)的崗位。下面,小編就給各位小伙伴介紹個(gè)簡(jiǎn)單易懂的學(xué)
    的頭像 發(fā)表于 11-15 11:51 ?1276次閱讀
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>學(xué)習(xí)路線分享

    列舉一些嵌入式Linux應(yīng)用開(kāi)發(fā)里經(jīng)常使用的技巧和套路

    本篇文章,我們基于ELF 1S這開(kāi)發(fā)板,來(lái)列舉一些嵌入式Linux應(yīng)用開(kāi)發(fā)里面,經(jīng)常使用到的開(kāi)發(fā)
    的頭像 發(fā)表于 11-14 10:44 ?440次閱讀
    列舉<b class='flag-5'>一些</b><b class='flag-5'>嵌入式</b>Linux應(yīng)用<b class='flag-5'>開(kāi)發(fā)</b>里經(jīng)常使用的技巧和套路