一般教科書上提供的UART收發(fā)的程序往往是一段采用輪循(Polling)方式完成收發(fā)的簡單代碼。但對于高速的AVR來講,采用這種方式大大降低了 MUC的效率。在使用AVR時,應(yīng)根據(jù)芯片本身的特點(片內(nèi)大容量數(shù)據(jù)存儲器RAM,更適合采用高級語言編寫系統(tǒng)程序),編寫高效可靠的UART收發(fā)接口(低層)程序。下面是一個典型的ATmega128的軟件USART的接口程序。
// USART0 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART0 Receiver: On
// USART0 Transmitter: On
// USART0 Mode: Asynchronous
// USART0 Baud rate: 9600
UCSR0A=0x00;
UCSR0B=0xD8;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x67;
// Global enable interrupts
#asm(“sei”)
while (1)
{
// Place your code here
};
}
這段由CVAVR程序生成器產(chǎn)生的UART接口代碼是一個非常好的、高效可靠,并且值得認(rèn)真學(xué)習(xí)和體會的。其特點如下:
1. 它采用兩個8字節(jié)的接收和發(fā)送緩沖器來提高MCU的效率,如當(dāng)主程序調(diào)用Putchar()發(fā)送數(shù)據(jù)時,如果UART口不空閑,就將數(shù)據(jù)放入發(fā)送緩沖器中,MCU不必等待,可以繼續(xù)執(zhí)行其它的工作。而UART的硬件發(fā)送完一個數(shù)據(jù)后,產(chǎn)生中斷,由中斷服務(wù)程序負(fù)責(zé)將發(fā)送緩沖器中數(shù)據(jù)依次送出。
2.數(shù)據(jù)緩沖器結(jié)構(gòu)是一個線性的循環(huán)隊列,由讀、寫和隊列計數(shù)器3個指針控制,用于判斷隊列是否空、溢出,以及當(dāng)前數(shù)據(jù)在隊列中的位置。
3. 用編譯控制命令#pragma savereg-和#pragma savereg+,使得由CVAVR在生成的中斷服務(wù)程序中不進行中斷保護(CVAVR生成中斷保護會將比較多的寄存器壓入堆棧中),而在中斷中嵌入匯編,只將5個在本中斷中必須要保護的寄存器壓棧。這樣提高了UART中斷處理的速度,也意味著提高了MCU的效率。
4.由于在接口程序Putchar()、Getchar()和中斷服務(wù)程序中都要對數(shù)據(jù)緩沖器的讀、寫和隊列計數(shù)器3個指針判斷和操作,為了防止沖突,在Putchar()、Getchar()中對3個指針操作時臨時將中斷關(guān)閉,提高了程序的可靠性。
建議讀者能逐字逐句地仔細(xì)分析該段代碼,真正理解和領(lǐng)會每一句語句(包括編譯控制命令的作用)的作用,從中體會和學(xué)習(xí)如何編寫效率高,可靠性好,結(jié)構(gòu)優(yōu)良的系統(tǒng)代碼。這段程序使用的方法和技巧,對編寫SPI、I2C的串行通信接口程序都是非常好的借鑒。
作為現(xiàn)在的單片機和嵌入式系統(tǒng)的工程師,不僅要深入全面的掌握芯片和各種器件的性能,具備豐富的硬件設(shè)計能力;同時也必須提高軟件的設(shè)計能力。要學(xué)習(xí)和掌握有關(guān)數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、軟件工程、網(wǎng)絡(luò)協(xié)議等方面的知識,具有設(shè)計編寫大的復(fù)雜系統(tǒng)程序的能力。
責(zé)任編輯:gt
-
單片機
+關(guān)注
關(guān)注
6061文章
44890瀏覽量
646358 -
程序
+關(guān)注
關(guān)注
117文章
3819瀏覽量
82347 -
USART
+關(guān)注
關(guān)注
1文章
199瀏覽量
31596
發(fā)布評論請先 登錄
《ATmega128單片機入門與提高》光盤.rar
ATmega128單片機怎么學(xué)
采用ATMEGA128單片機結(jié)合CPLD 實現(xiàn)了對VGA顯示
ATmega128在開發(fā)應(yīng)用中應(yīng)注意的問題
AVR單片機Atmega128在FPGA配置中的運用
ATmega128單片機的內(nèi)部資源、工作原理和硬件電路設(shè)計的資料免費下載

AVR單片機Atmega128在FPGA配置的應(yīng)用和對EPF10K10軟硬件設(shè)計原理

使用ATmega128單片機設(shè)計數(shù)碼管秒表的程序和工程文件免費下載

DAC1230與單片機Atmega128的接口技術(shù)

ATmega128單片機](熔絲修改后無法燒錄程序情況)
](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論