新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > A/D轉換器CS5550與單片機的接口程序設計

        A/D轉換器CS5550與單片機的接口程序設計

        作者: 時間:2010-04-02 來源:網絡 收藏

        ATmegal6中與SPI相關的寄存器有3個: SPCR(SPI控制寄存器)、SPSR(SPI狀態寄存器)、SPDR(SPI數據寄存器)。其中,SPCR寄存器設置SPI的中斷、數據順序、主/從模式及串行時鐘的相關特性;而SPSR寄存器中包括有SPI中斷標志位(SPIF)、寫碰撞標志位和倍速模式選擇位,SPSR中的SPIF位將在SPI串行數據發送完成時置“l”,若此時用戶已使能SPI接口中斷且全局中斷被打開。則會產生SPI接口中斷。應該指出的是,在SPI接口數據接收完成時該SPIF位不會被置“1”,即沒有接收結束標志位。串行時鐘的產生由硬件自動完成;每當有新數據寫入SPDR寄存器中,SPI接口會自動產生SCK信號將SPDR中的數據發送出去,同時將讀取的數據存入SPDR的緩沖寄存器中。
        2.2軟件設計
        的所有操作都是通過讀寫ATmegal6的內部寄存器來完成的。在使用的SPI接口之前,要對其進行初始化。這里采用查詢方式來發送數據,故將SPCR中的最高位SPIE置“0”,禁止中斷。使能SPI接口(SPE=1)。因的數據傳輸為MSB首先發送,故使DORD=O。將ATmegal6選擇為主機模式(MSTR=1)。選擇SPI工作模式0(CPOL=0,CPHA=0)。配置串行時鐘設置為單片機晶振頻率的1/16(SPRl=0,SPR0=1)。綜合以上對SPCR各位的分析,應配置SPCR=Ox5l。另外還要對SPI接口相應的引腳方向進行配置:定義MOSI為輸出、MISO為輸入(SPI主機模式下由硬件自動配置為輸入),SCLK為輸出、為輸出,SPI接口初始化后就可以與通信。
        由于直接采用單片機的SPI接口讀寫CS5550,字節中每一位的發送/接收均由硬件完成,這樣可簡化控制和數據采集程序:向CS5550發送命令字節時只需將其直接寫入SPDR寄存器即可;而讀取返回數據時只需讀取SPDR寄存器即可。為使SPI通信能夠可靠、穩定地運行,這里有兩個問題需要注意:一個問題是在向SPDR寄存器寫數據之前,應首先查詢SPSR寄存器中的SPIF位,以確保發送中的數據不會被新寫入的數據所破壞。用C語言編寫程序時可以使用類似的“while(!SPSR_SPIF):”的形式等待數據發送結束;另一個問題是,由于ATmegal6單片機的SPI接口無接收結束標志位,在讀取SPDR寄存器之前應插入延時程序以確保讀回數據的完整性和準確性。該程序流程如圖2所示。

        本文引用地址:http://www.104case.com/article/173394.htm

        3 使用軟件模擬SPI接口
        在實際應用中,可能會出現所選用的單片機沒有集成SPI接口或是SPI接口被其他功能所占用而又仍然需要使用SPI協議與外圍器件通信的情況,這時就必須采用軟件模擬的方式來實現SPI通信。一般來說,可以使用單片機的任何4個I/O接口與CS5550連接。但為便于與前一種方法(使用硬件SPI接口)進行比較,這里仍采用圖1所示的電路連接方式。在編寫SPI接口程序前,要對使用到的I/O端口進行配置:PB5為輸出(MOSI),PB6為輸入(MISO),PB7為輸出(SCK),PB4為輸出()。其中PB7端口初值為“0”,PB4端口初值為“l”。為了模擬SPI數據寄存器,這里定義3個unsigned char型變量SPI_transmit_buffer、SPI_receive_buffer和trans-mit_counter分別用來存放需要發送的數據、接收到的數據和已發送數據的位數。每一位數據的發送接收必須嚴格按照CS5550數據手冊上的時序要求來編寫,否則會造成數據傳輸錯誤。CS5550的讀寫時序如圖3所示。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 出国| 大田县| 商城县| 镇原县| 泰州市| 台东县| 红原县| 丰宁| 深泽县| 日照市| 洱源县| 清水河县| 南康市| 封开县| 天峨县| 乐山市| 神农架林区| 福泉市| 广河县| 丹棱县| 栖霞市| 和林格尔县| 桦南县| 大兴区| 合山市| 岱山县| 固阳县| 夹江县| 辽源市| 西贡区| 随州市| 微博| 浏阳市| 尼勒克县| 池州市| 彭阳县| 博乐市| 南康市| 罗山县| 井研县| 昌宁县|