MSP430程序庫SPI同步串行通信_第1頁
MSP430程序庫SPI同步串行通信_第2頁
MSP430程序庫SPI同步串行通信_第3頁
MSP430程序庫SPI同步串行通信_第4頁
MSP430程序庫SPI同步串行通信_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、MSP430程序庫五SPI同步串行通信SPI總線系統(tǒng)是一種同步禺行外設接口:是種高速的,全雙工,同步的通信總線并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳同時為PCB的布局上節(jié)省空間,提供方便,正是出于這種簡肛易用的特性.現(xiàn)在越來越鄉(xiāng)的芯片集成了這種通信協(xié)議。許多的芯片都用這種協(xié)議通信:EEPROM.Flash.實時時鐘、AD轉換器、數(shù)字信號處理器等:MSP430的CSART模塊不僅能夠實現(xiàn)異步模式(見:HSP130和序冷:X;ARTH步小I丨),而且支持同步串行通倍(tillSPI模式八其SPI支持3線、4線操作,支持主機模式和從機模式,字符長度可以7位或8位等。由于要用AD7708芯片

2、完成AD采樣,AD7708是通過SPI與其它設備通信的:木程序比較簡化,只完成了主機模式的初始化。1.硬件介紹:SPI:SPI是Motorola首先在HMC68HCXX系列處理器上定義的,它是種同步的高速申行通信協(xié)議.有關SPI協(xié)議的詳細內容,參考:SPI_S動仃科。MSP430對SPI的支持:msp430USART模塊控制器UxCTL的位SYNC置位時,USART模塊工作于同步模式.對于149即工作于SPI模式.若是169,USART0可以支持I2C,可以通過另一控制位I2C控制,I2C位0則工作于SPI。在SPI模式下,允許單片機以確定的速率發(fā)送和接收7位或8位數(shù)據(jù)。同步通借與異步通信類似

3、:同步通信和并步通信寄存濡資源一致,具體寄存器的不同位Z間的功能存在差異:具體寄存器內容參見TI提供的用戶指南。USART模塊的SPI操作可以是3線和4線,其信號如下:SIMO:從進主出,主機模式下,數(shù)據(jù)輸出:從機模式下,數(shù)據(jù)輸入。SOMI:從出主進.主機模式下,數(shù)據(jù)輸入:從機模式下,數(shù)據(jù)輸出。UCLK:USARTSPI模式時鐘.信號有主機輸出,從機輸入。STESTE:從機模式發(fā)送接收允許控制腳,用于4線模式.控制多主從系統(tǒng)中多個從機,避免發(fā)生沖突。具體方式如下(圖截自用戶指南):SlavetransmitenableUsedin4-pinmodetoallowmultiplemasterso

4、nasinglebus.Notusedin3-pinmode.4Pinmastermode:WhenSTEishigh,SIMOandUCLKoperatenormally.WhenSTEislow,SIMOandUCLKaresettotheinputdirection.4pinslavemode:WhenSTEishigh.RX/TXoperationoftheslaveisdisabledandSOMIisforcedtotheinputdirection.四線WhenSTEislow,RX/TXoperationoftheslaveisenabledandSOMIoperatesnor

5、mally.主機模式:STE為高電平,SIMO和UCLK操作正常:STE為低電平,SIMO和UCLK被置為輸入方向,主機控制權讓出。I川線從機模式:STE為高電平,從機的發(fā)送和接收無效,且把SOX1I置為輸入方向:STE為低電平,發(fā)送接收正常,SOMI也為正常輸出。USART模塊串行時鐘極性和相位設置:USART的時鐘CCLK的極性和相位由位于UxTCTL寄存器的CKPH和CKPL位控制,具體如下圖:在程序中,我分別稱Z為,時鐘模式S時鐘模式1.時鐘模式2、時鐘模式3。USART的波持率產生.SPI不同于界步通信:異步通信山UxBRll;xBROUxMCTL三個寄存器控制.以產生標準頻率:而同

6、步模式,主從設備用同一個時鐘.不再需要產生標準時鐘,故而不再用UxMCTL寄存器,設其值為0具他的,與異步通信基木一致,這里不再細說。具體參考用戶指南。2.程序實現(xiàn):陽序和界步通信方式類似:首先是初始化函數(shù),然后是讀取數(shù)抑;、寫入數(shù)據(jù)國數(shù)。此程序采用和我Z前的UART程序庫類似的結構,嗎入數(shù)據(jù)后進入低功耗等待中斷,判析標志位進行寫入數(shù)據(jù)和讀取數(shù)據(jù)。這里函數(shù)只實現(xiàn)130的主機模式,如需從機模式可以仿照我的程序.進行簡化實現(xiàn)。由于,我即將使用的SPI設備(AD7708)不是字符型設備,這里不再實現(xiàn)寫入字符串函數(shù),也不再移植primf和scanf函數(shù).如若需??梢宰约禾砑樱琾rintf和scanf的

7、移植參考:HSP430程序庫printf和scanf函數(shù)移樓初始化函數(shù):SpiMasterlnit.實現(xiàn)主機模式的初始化工作,函數(shù)內容如下:charSpiMasterlnit(longbaud,chardataBits,charmode,charclkMode)longintbrclk;/波特率發(fā)生器時鐘頻率/初始UxCTL|=SWRST;/反饋選擇位.為1,發(fā)送的數(shù)被白己接收.用于測試,正常使用時注禪掉/UxCTL|=LISTEN;UxCTL|=SYNC+MM;時鐘源設置UxTCTL&=(SSEL0+SSEL1);if(baud=16364)UxTCTL|=SSELO;brclk=32768

8、;elseUxTCTL|=SSEL1:brclk=1000000;/SPI主機模式/清除Z前的時鐘設置/ACLK.降低功耗/波特率發(fā)生器時鐘頻率=ACLK(32768)/SMCLK,保證速度/波特率發(fā)生器時鐘頻率=SMCLK(lMHz)/設迓波持率if(baud115200)/波特率超出范圍return0;/設迓波持率寄存器intfen=brclk/baud;/分頻系數(shù)if(fen2)return(0);/分頻系數(shù)必須大于2elseUxBRO=fen/256;UxBRl=fen%256;/設置數(shù)據(jù)位switch(dataBits)case7:case7:UxCTL&二CHAR;break;/7

9、位數(shù)據(jù)case8:case8”:UxCTL|=CHAR;break;/8位數(shù)據(jù)default:return(O);/參數(shù)錯誤/設迓模式switch(mode)case3:case,3,:UxTCTL|=STC;USPI30N;break;/三線模式case4:case4:UxTCTL&二STC;USPI40N;break;/以線模式default:return(0):/參數(shù)錯誤/switch(clkMode)case0:case,0?:case1:case,1:case2:case2:case3:case3:default:設迓UCLK模式UxTCTL&二、CKPH;UxTCTL&二、CKPH

10、;UxTCTL|=CKPH;UxTCTL|=CKPH;return(O);UxTCTL&二、CKPL;UxTCTL|=CKPL;UxTCTL&二、CKPL;UxTCTL|=CKPL;break;/模式0break;/模式1break;/模式2break;/模式3/參數(shù)錯誤UxME|=USPIEx;/模塊使能UCTLO&=SWRST;/InitializeUSARTstatemachineUxIE|=URXIEx十VTXIEx;/EnableUSARTORXinterruptreturn(l);設置成功程序注釋已經比較詳細.這里不再細說:如果嬰改為從機模式,把時鐘設迓和波特率設邊去掉應該就對以了

11、。發(fā)送函數(shù)和接收國數(shù):voidSpiWriteDat(charc)while(TxFlag=0)SpiLpmO;/等待上一字節(jié)發(fā)完.并休眠TxFlag=0;/UxTXBUF=c;charSpiReadDat0while(RxFlag=0)SpiLpmO;/收到一字節(jié)?RxFlag=0;return(UxRXBUF);發(fā)送和接收函數(shù)和界步通信里ifii的兒乎一樣,如果標志位為0.則等待改變?yōu)槿缓髥崛牖蜃x出:標志位在中斷函數(shù)里被更改:中斷函數(shù)如下:iJpragmavector=USARTxRX_VECTOR_interruptvoidUartRxORxFlag=l;_1ow_power_mode_

12、off_on_exit();iJpragmavector=USARTxTX_VECTOR_interruptvoidUartTx()TxFlag=l;_1ow_power_mode_off_on_exit();中斷里面僅僅置標志位后.就退出低功耗:退出后即嗎入或者讀取數(shù)據(jù)。讀取或寫入函數(shù)調用的SpiLpm函數(shù):voidSpiLpmOif(UxTCTL&SSELO)LPM3;若以ACLK作時鐘.進入LPM3休I怩(僅打開ACLK)elseLPMO;若以SMCLK作時鐘.進入LPH0休眠(不關閉SMCLK)根據(jù)不同情況進入低功耗,如果單片機JI:他地方不允許進入低功耗,可以更改這個函數(shù)。程序部分就

13、這么多了。需婆的詢數(shù)在頭文件里面聲明,方便使用。3使用示例:程序使用方式和Z前的程序庫相同,加入c文件,包禽h文件,調用初始化函數(shù)后即可掉用程序廊中的函數(shù)。Sincludemsp430 xl6xh/430寄存器頭文件includeSpih/串口通訊程序庫頭文件voidmainO/StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW十WDTHOLD;ClklnitO;/主機模式.波特率25000,8位數(shù)據(jù)位.三線模式,時鐘模式0(具體見spi.c)SpiMasterlnit(25000,8,3,0);_EINT();while(l)/吊口測試Spi

14、WriteDat(0X20);chara=SpiReadDat0;這里只是一個簡譏的使用示例,詳細的便用,將會在下-篇給出,下一篇:MSP430和予咋六通過SPI操作AD7708:將會使用今入的程序庫,完成SPI的通信部分。4.注意事項:SPI是全雙工通信,每次場入(發(fā)送)8位/7位數(shù)據(jù)的同時,430的SPI主模塊都會在發(fā)送后半個時鐘周期讀取采樣的0/1信號.存入接收緩沖寄存器,所以,每次的對入,均有數(shù)據(jù)讀取但不一定是從設備發(fā)送回來的,這個地方在使用430主機模式的時候必須注意,很容易出錯(我也是在凋試AD7708的時候才注意到這個地方的八SPI的函數(shù)已經添加SpiWriteData函數(shù).這個函數(shù)會在發(fā)送的同時返回發(fā)送完成半個時鐘周期后的接收到的數(shù)據(jù),方便使用:不建議便用前面的發(fā)送和讀取函數(shù),很容易出錯:建議使用剛添加的這個函數(shù),程序庫已經更新可以重新下叔。函數(shù)SpiWriteData:charSpiWriteData(charc)SpiWriteDat(c);returnSpiReadDat();發(fā)送后讀取即可,程序比較簡社。新的示例程序:voidmainO/Stopwatchdogtimertopreventtimeoutreset

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論