摘 要:隨著電子技術(shù)的進步,發(fā)展出了很多總線接口,如USB,I2C,CAN,SPI等。它們的特點都采用了串行接口,只需一根或幾根線就可以實現(xiàn)數(shù)據(jù)的傳輸。在嵌入式設(shè)備的開發(fā)中,這些接口的應(yīng)用,使得處理器和其他外設(shè)很容易實現(xiàn)串行通信,大大的簡化電路,提高了傳輸?shù)目煽啃?。詳細介紹了以ARM7TDMI為核心的芯片AT91SAM7S64的串行外設(shè)接口SPI,同時給出了帶SPI接口的LED驅(qū)動芯片MAX7219的工作原理,并從硬件和軟件上實現(xiàn)兩芯片的SPI數(shù)據(jù)通信,最終驅(qū)動LED,得到一種穩(wěn)定、可靠、高速的顯示技術(shù)方案。
關(guān)鍵詞:串行外設(shè)接口;AT91SAM7S64;MAX7219;keil uv3 for arm
Design and Realization of SPI Communication between AT91SAM7S64 and MAX7219
MI Hongju1,2,WU Zhihong3,4,WANG Baiyan1,PENG Wenbin1,CHEN Hong1
(1.School of Electrical Information,Sichuan University,Chengdu,610064,China;2.Logistical Engineering University,Chongqing,400016,China;
3.School of Computer Science,Sichuan University,Chengdu,610064,China;
4.Key Laboratory of Fundamental Synthetic Vision Graphic and Image Science for National Defence,Chengdu,610065,China)
Abstract:With the development of electronic technology,there are a number of Bus interfaces such as USB,I2C,CAN,SPI etc.They all have a serial interface and just by a few lines they can realize the data transmission.By application of these interfaces in the embedded devices,it makes serial communication with other peripherals very easy,and simplifies circuit greatly and improves transmission reliability.This paper describes the theory of AT91SAM7S64 serial peripheral interface and LED driver chip MAX7219,and how to realize the SPI communication between AT91SAM7S64 and MAX7219.A stable,reliable and high speed display technology scheme is gained.
Keywords:serial peripheral interface;AT91SAM7S64;MAX7219;keil uv3 for arm
AT91SAM7S64是Atmel公司推出的以ARM7TDMI為核心的32位總線RISC處理器,在具有與32位ARM處理器的內(nèi)核一致,功能強大等優(yōu)點的同時不失操作和編程的方便性。它擁有64 kB的高速FLASH和16 kB的SRAM,其外設(shè)功能的應(yīng)用,如UART,SPI,PWM,TWI,USB 2.0,ADI及定時器等都極大地豐富了芯片的外圍擴展。同時,它極具競爭力的性價比進一步拓展了它在低成本、大產(chǎn)量的嵌入式產(chǎn)品中的應(yīng)用。AT91SAM7S64的SPI外設(shè)與通用I/O口通過編程實現(xiàn)芯片輸出管腳共享,這樣就達到減少輸出管腳卻不減少芯片性能的目的。而MAX7219是針對LED設(shè)計的驅(qū)動芯片,由于芯片內(nèi)集成了譯碼、驅(qū)動、鎖存的功能,大大的簡化了電路結(jié)構(gòu),并且能夠接受的數(shù)據(jù)和命令需要串行輸入,與SPI總線兼容。本文旨在利用AT91SAM7S64芯片的SPI功能,實現(xiàn)一種占用處理器較少的口線、功耗小、不開銷CPU,滿足一定實時要求的LED顯示系統(tǒng)的設(shè)計。
1 AT91SAM7S系列SPI系統(tǒng)
1.1 SPI系統(tǒng)的組成
串行外設(shè)接口(SPI)實質(zhì)是一個將串行傳輸數(shù)據(jù)位發(fā)送到其他SPI的移位寄存器。數(shù)據(jù)傳輸時,一個SPI系統(tǒng)作為主機控制數(shù)據(jù)流,其他SPI作為“從機”。不同的CPU可輪流作為“主機”且一個主機可同時將數(shù)據(jù)移入多個從機,但只允許單從機將其數(shù)據(jù)寫入主機。
SPI系統(tǒng)包括兩條數(shù)據(jù)線和兩條控制線:
主機輸出從機輸入(MOSI):該數(shù)據(jù)線將主機輸出數(shù)據(jù)作為從機輸入移入從機。
主機輸入從機輸出(MISO):該數(shù)據(jù)線將從機輸出作為主機輸入。傳輸時,只有單從機傳輸數(shù)據(jù)。
串行時鐘(SPCK):該控制線由主機驅(qū)動,用來調(diào)節(jié)數(shù)據(jù)流。主機傳輸數(shù)據(jù)波特率可變,每傳輸一位,產(chǎn)生一個SPCK周期。
從機選擇(NSS):該控制線路允許硬件開關(guān)從機。
1.2 SPI系統(tǒng)的工作方式
配置模式寄存器SPI_MR中MSTR位,可將AT91SAM7S64的SPI設(shè)置為主機或從機模式。
寫1時,SPI工作在主機模式下,引腳NPCS0到NPCS3配置為輸出,SPCK引腳被驅(qū)動,MISO線與接收器輸入連接,同時,發(fā)送器驅(qū)動MOSI作為輸出;寫0時,SPI工作在從機模式下,MISO線由發(fā)送器輸出驅(qū)動,MOSI線與接收器輸入連接,發(fā)送器驅(qū)動SPCK引腳以實現(xiàn)與接收器同步。此時,NPCS0引腳變?yōu)檩斎?,并作為從機選擇信號(NSS)使用。引腳NPCS1到NPCS3未驅(qū)動,可用于其他功能。如圖1是單主機/多從機的典型應(yīng)用框圖。
1.3 SPI系統(tǒng)的數(shù)據(jù)傳輸
AT91SAM7S64的SPI數(shù)據(jù)傳輸有四種極性與相位,時鐘極性由片選寄存器CPOL位編程得到,時鐘相位由NCPHA位編程得到。它們決定數(shù)據(jù)在哪個時鐘邊沿驅(qū)動與采樣。數(shù)據(jù)傳輸格式如圖2所示。
限于篇幅,下面以主機模式的流程,進一步說明AT91芯片SPI接口的工作過程。
當配置為主機模式,SPI工作時鐘由內(nèi)部可編程波特率發(fā)生器產(chǎn)生,因此必須要先配置PMC電源管理控制器以使能SPI時鐘。SPI有兩個保持寄存器,SPI_TDR(發(fā)送數(shù)據(jù)寄存器)和SPI_RDR(接收數(shù)據(jù)寄存器)及移位寄存器,使能SPI后,當處理器寫入SPI_TDR時,數(shù)據(jù)開始傳輸,被寫數(shù)據(jù)立即發(fā)往移位寄存器并開始在SPI總線上傳輸。當移位寄存器中數(shù)據(jù)移位到MOSI線上時,對MISO線采樣并移入移位寄存器。
若PCS域未選擇從機,當寫入發(fā)送數(shù)據(jù)寄存器時,不會啟動傳輸。若傳輸時有新數(shù)據(jù)寫入SPI_TDR,它將保持當前值到傳輸完成。接收到的數(shù)據(jù)由移位寄存器送到SPI_RDR中,SPI_TDR中數(shù)據(jù)載入移位寄存器并啟動新的傳輸。
寫在SPI_TDR中的數(shù)據(jù)送往移位寄存器由狀態(tài)寄存器的TDRE位表示;接受SPI_RDR中來自移位寄存器的數(shù)據(jù)由狀態(tài)寄存器的RDRF位來表示。
2 AT91SAM7S64芯片與MAX7219的接口設(shè)計
現(xiàn)階段,大量的新型器件如 LCD/LED模塊、FLASH/E2PROM存儲器、數(shù)據(jù)輸入/輸出設(shè)備都采用了SPI接口,這使得AT91SAM7S64芯片能十分方便的與其他外設(shè)實現(xiàn)串行通信。本文介紹一種基于ARM處理器AT91SAM7S64芯片與MAX7219模塊的SPI接口設(shè)計,以實現(xiàn)測試、手持等嵌入式設(shè)備的輸出顯示。
2.1 MAX7219引腳功能
MAX7219是美國MAXIM公司生產(chǎn)的串行輸入/輸出共陰極顯示驅(qū)動器。MAX7219可同時驅(qū)動8位共陰極數(shù)碼管或64個獨立的LED,它通過DIN,CLK,LOAD三條引線與微處理器接口,只需一個外部電阻就可設(shè)置所有LED顯示器字段電流,占用資源少且硬件簡單,允許使用者選擇每位是BCD譯碼或不譯碼,還可選擇停機模式、數(shù)字亮度控制、從1~8選擇掃描位數(shù)和對所有LED顯示器的測試模式。MAX7219采用24腳雙列直插式封裝,其引腳排列如圖3所示。
其中:
CLK:串行數(shù)據(jù)時鐘輸入端,最高頻率10 MHz。時鐘上升沿完成數(shù)據(jù)輸入,時鐘下降沿實現(xiàn)數(shù)據(jù)輸出。
LOAD:片選端,允許串行數(shù)據(jù)輸入。當為低時,接收來自DIN的數(shù)據(jù)。接收完畢,LOAD回到高電平時,接收的數(shù)據(jù)將被鎖定。
DIG0~DIG7:8位數(shù)字驅(qū)動線,輸出位選信號,從每位LED共陰極吸入電流。
SEGA~SEGG,DP:驅(qū)動顯示器7段及小數(shù)點的輸出電流,一般為40 mA左右,可軟件調(diào)整,關(guān)閉狀態(tài)時,接入GND。
DOUT:串行數(shù)據(jù)輸出端,通常直接接入下一片MAX7219的DIN端。
DATA IN:串行數(shù)據(jù)輸入端,當CLK為上升沿時,數(shù)據(jù)被載入16位內(nèi)部移位寄存器。
2.2 MAX7219片內(nèi)寄存器
片內(nèi)寄存器分為8個位寄存器和6個控制寄存器。位寄存器存放點亮LED的具體內(nèi)容;控制寄存器決定著LED的工作方式。MAX7219對14個寄存器的尋址和數(shù)據(jù)修改用一組16位的串行數(shù)來完成。該串行數(shù)據(jù)格式如圖4所示,其中D15~D12位未定義,D11~D8位尋址內(nèi)部8個靜態(tài)RAM和6個功能寄存器的地址,D7~D0位存放功能寄存器的數(shù)據(jù)和LED數(shù)碼管待顯示的數(shù)據(jù)。編程時,程序要先送控制命令字,后向數(shù)據(jù)寄存器送顯示數(shù)據(jù)。
2.3 接口設(shè)計
MAX7219芯片與AT91SAM7S64一樣,都具有SPI接口,而且AT91SAM7S64傳輸數(shù)據(jù)的格式可以通過軟件設(shè)置成16位,時序也能設(shè)置成與MAX7219相匹配的形式,這樣他們之間的通信就變得可行與簡便??刹捎萌鐖D5所示的硬件連接方式。AT91SAM7S64的PA13/PGMD1,PA14/PGMD2,PA11/PGM3分別接驅(qū)動芯片MAX7219的串行數(shù)據(jù)輸入端DIN,時鐘信號端CLK和數(shù)據(jù)裝載控制端LOAD。
在強干擾環(huán)境下,如大功率電機的起停或高壓發(fā)生過程中,干擾源可能串入顯示電路而造成顯示器的不穩(wěn)定,從而出現(xiàn)筆段跳躍、顯示不全、甚至全暗或全亮的現(xiàn)象。為此,可通過在3根信號線上對地接入一個1 000 pF的瓷片電容來有效地濾除因空間干擾而引起的尖脈沖。
3 SPI通信的軟件實現(xiàn)方法
筆者通過模塊化設(shè)計來實現(xiàn)AT91SAM7S64與MAX7219間數(shù)據(jù)通信,包括:ARM芯片SPI接口初始化、ARM芯片I/O初始化、數(shù)據(jù)傳輸(含MAX7219芯片初始化)等,其軟件流程圖如圖6所示。
3.1 ARM芯片SPI接口初始化
(1) 使能SPI時鐘:由外設(shè)時鐘使能寄存器PMC_PCER的PIDx位置1確定,其中x是相應(yīng)外設(shè)ID號,在AT91SAM7S64芯片中,SPI的外設(shè)ID為5;
(2) 主機選擇:MSTR=1;
(3) 外設(shè)選擇:PS=0(固定外設(shè)),PCSDEC=0(片選直接與外設(shè)連接);
(4) 時鐘選擇:FDIV=0(SPI時鐘為MCK);
(5) SPI時序與MAX7219讀寫數(shù)據(jù)時序匹配:由MAX7219時序圖可以擇定NCPHA=1,CPOL=0;
關(guān)鍵代碼如下:
*AT91C_PMC_PCER=(1<<5) ;
*AT91C_SPI_MR=0x1001 ;
*AT91C_SPI_CR=0x01;
AT91C_BASE_SPI->SPI_CSR[0]= (1<<0)|(0<<1)|
(1<<3)|(0<<4) |(0<<5)|(0<<6)|
(1<<7)|(0<<8)|(1<<9) |(1 <<10);
3.2 ARM芯片I/O初始化
SPI連接適用的外設(shè),是通過與PIO線復用實現(xiàn)的,所以必須要對PIO控制器編程,將PIO引腳分配給外設(shè)。
(1) PA13與PA11輸出使能:作為主機,它們是輸出的。
(2) PIO功能禁用:MOSI、SPCK對應(yīng)的PIO功能應(yīng)該禁止,以發(fā)揮其外設(shè)的功能。
(3) 外設(shè)A的選擇:該ARM芯片PIO控制器A控制32個口線。每個口線都可以分配為兩個外設(shè)功能的一個,A或B,需要編程實現(xiàn)。
關(guān)鍵代碼如下:
AT91C_BASE_PIOA->PIO_OER=AT91C_PIO_PA11 | AT91C_PA13_MOSI | AT91C_PA14_MOSI;
*AT91C_PIOA_PER = AT91C_PIO_PA11;
*AT91C_PIOA_PDR = AT91C_PA13_MOSI | AT91C_PA14_SPCK;
*AT91C_PIOA_ASR = AT91C_PA13_MOSI | AT91C_PA14_SPCK ;
3.3 ARM通過SPI與外設(shè)傳輸數(shù)據(jù)
(1) 允許指定的從器件,這一般用清零(對低電平有效的器件)和置位(對高電平有效的器件)接至該器件的允許輸出位來實現(xiàn)。
(2) 向AT91C_SPI_TDR寫入需發(fā)送的數(shù)據(jù),以啟動數(shù)據(jù)的傳送。數(shù)據(jù)包括MAX7219初始化設(shè)置和LED顯示內(nèi)容。本例我們用LED顯示“PH-6”字樣,采用B譯碼方式顯示,亮度適中,掃描個數(shù)為4個,則控制寄存器值分別為0x0911,0x0A1A,0x0B16;位控制寄存器值為:0x051E(P),0x041C(H),0x031A(-),0x0216(6)。注意,由于LOAD回到高電平時,接收的數(shù)據(jù)才能被鎖定,因此,每一次數(shù)據(jù)傳輸完后必須置位LOAD。
(3) 等待TXEMPTY位置1。
(4) 禁止從器件,即清除從器件的允許信號。
關(guān)鍵代碼如下:
AT91C_BASE_PIOA->PIO_CODR=MAX_LD;
*AT91C_SPI_TDR=data;
//DATA為MAX7219初始化設(shè)置數(shù)據(jù)和LED顯示數(shù)據(jù),由CPU傳輸給TDR
while(!(AT91C_BASE_SPI->SPI_SR AT91C_SPI_TXEMPTY))
{ }
AT91C_BASE_PIOA->PIO_SODR=MAX_LD;
4 結(jié) 語
本文詳細討論了AT91SAM7S64ARM芯片SPI接口技術(shù)的原理,在keil uv3 for arm集成環(huán)境下編譯,并與硬件連接調(diào)試,最終實現(xiàn)了對MAX7219的寫操作,該系統(tǒng)具有以下特點:
電路結(jié)構(gòu)簡單 在很多顯示系統(tǒng)中,大多利用74LS164及LED數(shù)碼管構(gòu)成串行動態(tài)顯示,該系統(tǒng)一定程度優(yōu)化了顯示輸出通道對核心控制器I/O端口的占用數(shù)量,但它仍需大量(幾個LED就占用幾條I/O口線)的I/O端口作LED片選,同時由于74LS164本身未提供輸出允許端,單片機送來的串行數(shù)據(jù)從高位LED移向低位LED的過程中,會出現(xiàn)LED本應(yīng)熄滅的筆劃發(fā)光而形成閃爍現(xiàn)象,且LED數(shù)越多閃爍現(xiàn)象越嚴重。由于本方案利用了微控制芯片的SPI接口,只需3根線,便可實現(xiàn)數(shù)據(jù)的輸入輸出,大大的節(jié)約了控制芯片的IO口資源。同時,驅(qū)動芯片MAX7219有一個8×8的SRAM存儲數(shù)碼管的顯示數(shù)據(jù),所以任一個數(shù)碼管數(shù)據(jù)更新都不會影響其他數(shù)碼管的顯示,很好地消除了一般顯示技術(shù)的閃爍問題。
傳輸可靠性較高 考慮到在實際應(yīng)用中的干擾問題,本系統(tǒng)也做了相應(yīng)的硬件抗干擾措施,同時對顯示電路單獨供電,并在MAX7219的電源(V+)與地(GND)間并接一個0.1 μF去耦電容和一個10 μF/16 V電解電容,有效提高其工作可靠性。
在實際應(yīng)用中,該顯示系統(tǒng)電路結(jié)構(gòu)簡單,傳輸效率與可靠性較高,而且其程序控制方式靈活方便,是一種在中小型實時嵌入式系統(tǒng)開發(fā)中具有一定的代表性和實用性的技術(shù)方案。
參 考 文 獻
[1]ATMEL.AT91SAM7S64 Datasheet.Atmel Corporation[S].2005.
[2]杜春雷.ARM體系結(jié)構(gòu)與編程[M].北京:清華大學出版社,2003.
[3]包建華,劉海寬.單片機系統(tǒng)中的LED顯示譯碼驅(qū)動電路[J].現(xiàn)代計算機,2007,21(15):50-53.
[4]李小亞,鮑鴻,程院蓮.MAX7219在混合顯示LED電路中的應(yīng)用[J].微型電腦應(yīng)用,2007,23(8):29-31.
[5]鄭新華,孔漢,楊存祥.MAX1463與LPC2119間SPI通信的設(shè)計與實現(xiàn)[J].鄭州輕工業(yè)學院學報,2007,22(4):58-60.
[6]陳增輝,劉西玲.使用MAX7219時應(yīng)注意的幾個問題 [J].國外電子元器件,2002(11):22-24.