新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 用于ATmega128的軟件UART范例程序

用于ATmega128的軟件UART范例程序

作者: 時(shí)間:2012-10-29 來(lái)源:網(wǎng)絡(luò) 收藏

這段由CVAVR生成器產(chǎn)生的接口代碼是一個(gè)非常好的、高效可靠,并且值得認(rèn)真學(xué)習(xí)和體會(huì)的。其特點(diǎn)如下:

l. 它采用兩個(gè)8字節(jié)的接收和發(fā)送緩沖器來(lái)提高M(jìn)CU的效率,如當(dāng)主調(diào)用Putchar()發(fā)送數(shù)據(jù)時(shí),如果口不空閑,就將數(shù)據(jù)放入發(fā)送緩沖器中,MCU不必等待,可以繼續(xù)執(zhí)行其它的工作。而的硬件發(fā)送完一個(gè)數(shù)據(jù)后,產(chǎn)生中斷,由中斷服務(wù)負(fù)責(zé)將發(fā)送緩沖器中數(shù)據(jù)依次送出。

2.數(shù)據(jù)緩沖器結(jié)構(gòu)是一個(gè)線性的循環(huán)隊(duì)列,由讀、寫(xiě)和隊(duì)列計(jì)數(shù)器3個(gè)指針控制,判斷隊(duì)列是否空、溢出,以及當(dāng)前數(shù)據(jù)在隊(duì)列中的位置。

3. 用編譯控制命令#pragma savereg-和#pragma savereg+,使得由CVAVR在生成的中斷服務(wù)程序中不進(jìn)行中斷保護(hù)(CVAVR生成中斷保護(hù)會(huì)將比較多的寄存器壓入堆棧中),而在中斷中嵌入?yún)R編,只將5個(gè)在本中斷中必須要保護(hù)的寄存器壓棧。這樣提高了UART中斷處理的速度,也意味著提高了MCU的效率。

4.由于在接口程序Putchar()、Getchar()和中斷服務(wù)程序中都要對(duì)數(shù)據(jù)緩沖器的讀、寫(xiě)和隊(duì)列計(jì)數(shù)器3個(gè)指針判斷和操作,為了防止沖突,在Putchar()、Getchar()中對(duì)3個(gè)指針操作時(shí)臨時(shí)將中斷關(guān)閉,提高了程序的可靠性。

建議讀者能逐字逐句地仔細(xì)分析該段代碼,真正理解和領(lǐng)會(huì)每一句語(yǔ)句(包括編譯控制命令的作用)的作用,從中體會(huì)和學(xué)習(xí)如何編寫(xiě)效率高,可靠性好,結(jié)構(gòu)優(yōu)良的系統(tǒng)代碼。這段程序使用的方法和技巧,對(duì)編寫(xiě)SPI、I2C的串行通信接口程序都是非常好的借鑒。

作為現(xiàn)在的單片機(jī)和嵌入式系統(tǒng)的工程師,不僅要深入全面的掌握芯片和各種器件的性能,具備豐富的硬件設(shè)計(jì)能力;同時(shí)也必須提高的設(shè)計(jì)能力。要學(xué)習(xí)和掌握有關(guān)數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、工程、網(wǎng)絡(luò)協(xié)議等方面的知識(shí),具有設(shè)計(jì)編寫(xiě)大的復(fù)雜系統(tǒng)程序的能力。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 范例 程序 UART 軟件 ATmega128 用于

評(píng)論


相關(guān)推薦

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

關(guān)閉