在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > TMS320F241型DSP的SPI口EEPROM擴(kuò)展

            TMS320F241型DSP的SPI口EEPROM擴(kuò)展

            作者: 時間:2004-12-06 來源:網(wǎng)絡(luò) 收藏
            作者email: [email protected]

            摘要:敘述了TI公司的的串行外設(shè)接口(的軟、硬件實(shí)現(xiàn)方法。
            關(guān)鍵詞 X5043

            1.引言

            是目前應(yīng)用比較廣泛的一款定點(diǎn)DSP,它具有20MIPS的指令執(zhí)行速度,強(qiáng)大的內(nèi)部事件管理器、I/O端口和其他外圍設(shè)備。其中,串行外設(shè)接口()是一個高速同步串行輸入/輸出(I/O)端口,它允許一個具有可編程長度(1到16位)的串行位流,以可編程的位傳送速率從設(shè)備移入或移出。SPI通常用于DSP控制器和外部器件或其它控制器間的通訊。

            在開發(fā)DSP系統(tǒng)時,某些情況下會讀取或者存儲一些定值,這時我們就需要。具有SPI接口的串行EEPROM均可被直接邏輯,方便易行。X5043是Xicor公司最高時鐘速率為3.3MHz帶有塊鎖保護(hù)的4Kbits的CMOS串行EEPROM。該器件內(nèi)部組織陣列是X8位,具有串行外圍接口(SPI)和軟件協(xié)議的特點(diǎn),允許在簡單的四線總線上工作;該器件利用Xicor專有的直接寫入晶片提供最小為10萬次擦寫和最少100年的數(shù)據(jù)保存期。

            2.硬件設(shè)計

            X5043與TMS320F241型DSP的連接關(guān)系如圖1所示。DSP作為主控制器,工作于主模式下,SPISIMO為DSP的數(shù)據(jù)發(fā)送端,連接到X5043的數(shù)據(jù)接收端(SI);SPISOMI為DSP的數(shù)據(jù)接收端,連接到X5043的數(shù)據(jù)發(fā)送端(SO);SPISTE配置成I/O口連接到X5043的片選端(/CS);SPICLK為SPI數(shù)據(jù)傳送的時鐘信號,連接到X5043的串行時鐘端(SCK),串行時鐘由DSP控制。DSP的數(shù)據(jù)在SPISIMO引腳上輸出并從SPISOMI上鎖存, DSP通過寫入SPIDAT寄存器的數(shù)據(jù)啟動SPICLK串行時鐘信號從而啟動數(shù)據(jù)傳送,當(dāng)8位串行位流傳送完畢后,SPICLK信號中止,傳送結(jié)束。

            3.軟件設(shè)計

            3.1工作模式的選擇

            TMS320F241的SPI接口有可選擇的四種不同的時鐘模式,如何選擇時鐘模式是它與各種擴(kuò)展SPI接口器件實(shí)現(xiàn)時鐘同步的關(guān)鍵。X5043的數(shù)據(jù)在時鐘下降沿從SO引腳上輸出并在時鐘上升沿從SI引腳上鎖存。讀操作時,在其從SI引腳輸入的最低位地址所對應(yīng)的時鐘下降沿,其SO引腳開始輸出數(shù)據(jù),如圖5所示。

            作為主器件的DSP可以選擇 ‘上升沿,無延時’和‘上升沿、有延時’兩種時鐘工作模式?!仙?,無延時’模式與X5043的工作模式一致,數(shù)據(jù)在SPICLK信號的時鐘上升邊沿(從低電平到高電平)從移位寄存器移出在SI引腳上鎖存,在時鐘下降邊沿(從高電平到低電平)從SO引腳上輸出的數(shù)據(jù)鎖存到移位寄存器中。‘上升沿,有延時’模式如圖4所示,數(shù)據(jù)在SPICLK信號上升沿前半個周期從移位寄存器移出,在緊接著的上升邊沿在SI引腳上鎖存,在時鐘下降邊沿(從高電平到低電平)從SO引腳上輸出的數(shù)據(jù)鎖存到移位寄存器中。

            3.2波特率的選擇

            SPI波特率可以由如下兩種情況計算得出:

            (1)對于SPIBRR=3~127,波特率的計算公式為:

            SPI波特率=CLKOUT/(SPIBRR+1)

            (2)對于SPIBRR=0~2,波特率的計算公式為:

            SPI波特率=CLKOUT/4

            式中,CLKOUT=器件的CPU時鐘頻率;SPIBRR=主SPI器件中的SPIBRR內(nèi)容。

            X5043最大的SPI波特率為3.3MHz,若DSP的CPU時鐘頻率CLKOUT=16MHz,則:
            最大的SPI波特率 =16106/(SPIBRR+1)≤3.3106Hz
            SPIBRR≥4+9

            3.3 DSP的數(shù)據(jù)傳輸格式

            DSP中SPI有16位的發(fā)送和接收能力,且接收和發(fā)送均是雙緩沖。所有數(shù)據(jù)寄存器都是16位寬的,而X5043的地址、數(shù)據(jù)寄存器均是8位的,將DSP中SPI傳輸字符長度設(shè)置成8位寬。要向X5043存儲數(shù)據(jù)時,DSP將一個8位字節(jié)長度的數(shù)據(jù)寫入SPIDAT或SPITXBUF的高8位上如圖2所示,在時鐘信號的作用下,以左對齊方式發(fā)送,先發(fā)送數(shù)據(jù)的最高位。DSP接收一個8位字節(jié)長度的數(shù)據(jù),是以右對齊方式接收如圖3所示,8位字節(jié)長度的數(shù)據(jù)寫入SPIDAT或SPIRXBUF 的低8位上。

            3.4各控制寄存器設(shè)置

            LDP #SPICCR>>7
            SPLK #0007h,SPICCR
            ;復(fù)位SPI, 8個字符長度
            SPLK #000Eh,SPICTL
            ;主模式,使能TALK,禁止SPI的中斷
            ;上升沿發(fā)送,下降沿接收,有延時
            SPLK #000Fh,SPIBRR
            ;設(shè)置SPI的傳輸波特率
            SPLK #0087h,SPICCR
            ;SPI準(zhǔn)備好發(fā)送或接收下一字符
            3.5程序設(shè)計
            RAM塊中的變量定義:
            .bss SPI_Xdata,1
            ;SPI數(shù)據(jù)傳輸暫存器
            .bss address1,1
            ;EEPROM存儲器地址暫存器
            .bss data1,1
            ;EEPROM存儲器數(shù)據(jù)暫存器

            X5043存儲器地址:
            WREN .set 0600h
            ;設(shè)置寫使能鎖存指令地址
            WRDI .set 0400h
            ;復(fù)位寫使能鎖存指令地址
            RSDR .set 0500h
            ;讀狀態(tài)寄存器指令地址
            WRSR .set 0100h
            ;寫狀態(tài)寄存器指令地址
            READh .set 0B00h
            READl .set 0300h
            ;讀存儲器陣列數(shù)據(jù)指令地址
            WRITEh .set 0A00h
            WRITEl .set 0200h
            ;寫存儲器陣列數(shù)據(jù)指令地址

            3.5.1 DSP的SPI數(shù)據(jù)發(fā)送、接收子程序代碼
            XMIT_VALUE:
            LDP #0
            LACC SPI_Xdata
            LDP #SPITXBUF>>7
            SACL SPITXBUF
            ;寫需發(fā)送的值到SPI傳輸緩沖器
            XMIT_RDY:
            LDP #SPISTS>>7
            BIT SPISTS,BIT6
            BCND XMIT_RDY,NTC
            ;測試SPI_INT位,如果SPI_INT=0,則重復(fù)循環(huán)
            ;等待數(shù)據(jù)發(fā)送完畢進(jìn)行下一步操作
            LDP #SPIRXBUF>>7
            LACL SPIRXBUF
            ;讀取數(shù)據(jù)清除SPI_INT標(biāo)志位
            LDP #0
            SACL SPI_Xdata
            ;將接收的值存入數(shù)據(jù)傳輸暫存器
            RET

            3.5.2 X5043內(nèi)部非易失性寫判斷子程序代碼
            RSDR_WIP:
            SPISTE_LOW
            ;置低SPISTE引腳,從而選通X5043
            LDP #0
            SPLK #RSDR,SPI_Xdata
            CALL XMIT_VALUE
            ;寫讀狀態(tài)寄存器地址,高8位
            SPISTE_HIGH
            ;置高SPISTE引腳,禁止X5043
            LDP #0
            BIT SPI_Xdata,BIT0
            BCND RSDR_WIP,TC
            ;測試狀態(tài)寄存器WIP位。如果WIP=1,正在進(jìn)行內(nèi)部寫操作。
            ;等待內(nèi)部寫操作完成進(jìn)行下一步操作
            RET

            使用上述判斷子程序能夠保證X5043完成內(nèi)部寫操作。向X5043存儲器陣列寫入數(shù)據(jù)時后面將跟隨一次非易失性寫操作。可以讀狀態(tài)寄存器檢查WIP位,若WIP為高則非易失性寫正在進(jìn)行。X5043存儲器非易失性寫周期為10mS,也可以在一個寫操作完成后作一個大于10mS的延時,以保證X5043完成內(nèi)部寫操作。

            3.5.3向X5043 EEPROM存儲器陣列中寫數(shù)據(jù)

            如圖4所示,向EEPROM存儲器陣列寫入任何數(shù)據(jù)之前,必須用WREN指令設(shè)置WEL位。首先將CS拉低,向器件輸入WREN指令,然后拉高/CS。再次拉低/CS并輸入WRITE指令,緊跟隨8位地址,然后是要寫入的數(shù)據(jù)。WRITE指令的位3是地址位A8,該位選擇陣列的高半部分或是低半部分。如果/CS在WREN和WRITE之間不變?yōu)楦?,則WRITE指令將被忽略。為了完成寫操作,在最后一個被寫入的數(shù)據(jù)字節(jié)的位0完成后/CS必須被拉高。如果它在任何其它時間被拉高,寫操作將不完成。

            寫1個字節(jié)數(shù)據(jù)的程序代碼如下:
            WRITE:
            KICK_DOG
            CALL RSDR_WIP
            ;讀狀態(tài)寄存器檢查WIP位
            ;寫WREN指令代碼段
            SPISTE_LOW
            ;置低SPISTE引腳,從而選通X5043
            LDP #0
            SPLK #WREN,SPI_Xdata
            CALL XMIT_VALUE
            SPISTE_HIGH
            ;置高SPISTE引腳,禁止X5043
            CALL RSDR_WIP
            ;讀狀態(tài)寄存器檢查WIP位
            ;寫WRITE指令/地址/數(shù)據(jù)代碼段
            SPISTE_LOW
            ;置低SPISTE引腳,從而選通X5043
            LDP #0
            SPLK #WRITEl(h),SPI_Xdata
            CALL XMIT_VALUE
            ;輸入寄存器指令
            LDP #0
            LACL address1
            SACL SPI_Xdata
            CALL XMIT_VALUE
            ;輸入寄存器地址
            LDP #0
            LACL data1
            SACL SPI_Xdata
            CALL XMIT_VALUE
            ;輸入寄存器數(shù)據(jù)
            SPISTE_HIGH
            ;置高SPISTE引腳,禁止X5043
            CALL RSDR_WIP
            ;讀狀態(tài)寄存器檢查WIP位,X5043完成內(nèi)部非易失性寫
            RET

            3.5.4從X5043 EEPROM中讀取數(shù)據(jù)

            如圖5所示,/CS只要拉低選中器件。8位READ指令送到器件,后面跟隨8位地址,就可以讀取指定地址下的EEPROM存儲器陣列中的數(shù)據(jù)。READ指令的位3選擇器件的高半部分或是低半部分。在READ指令碼和地址送出后,在選定地址的存儲在存儲器中的數(shù)據(jù)即在SO線上移出。讀操作由拉高/CS而終止。
            讀1個字節(jié)數(shù)據(jù)的程序代碼如下:
            READ:
            KICK_DOG
            CALL RSDR_WIP
            ;讀狀態(tài)寄存器檢查WIP位
            SPISTE_LOW
            ;置低SPISTE引腳,從而選通X5043
            LDP #0
            SPLK #READl(h),SPI_Xdata
            CALL XMIT_VALUE
            ;輸入寄存器指令
            LDP #0
            LACL address1
            SACL SPI_Xdata
            CALL XMIT_VALUE
            ;輸入寄存器地址
            LDP #0
            LACL data1
            SACL SPI_Xdata
            CALL XMIT_VALUE
            ;此data1無意義,使SPI口連續(xù)提供時鐘信號,使數(shù)據(jù)輸出
            ;輸出的數(shù)據(jù)存儲在SPI_Xdata中
            SPISTE_HIGH
            ;置高SPISTE引腳,禁止X5043
            RET

            由于X5043是一個半雙工器件,在WRITE子程序中從SPIRXBUF中讀出來的數(shù)據(jù)是無效的,同時,在READ子程序中寫向SPITXBUF的data1數(shù)據(jù)也是無效的,只起啟動發(fā)送時鐘的作用。

            4.結(jié)束語

            DSP可以連續(xù)的向EEPROM中寫入多至16個字節(jié)的數(shù)據(jù)。唯一的限制是16個字節(jié)必須在同一頁中。一頁地址由[X XXXX 0000]開始,由[X XXXX 1111]結(jié)束。如果字節(jié)地址達(dá)到了頁中的最后字節(jié)而時鐘仍在繼續(xù),則計數(shù)器將返轉(zhuǎn)至該頁的第一個地址并重寫前面已寫過的數(shù)據(jù)。在連續(xù)地提供時鐘脈沖的條件下儲存在存儲器地址處的數(shù)據(jù)可被連續(xù)地讀出。在每個數(shù)據(jù)字節(jié)被移出后,器件即自動將地址增加至下一個更高的地址。當(dāng)達(dá)到最高的地址時,地址計數(shù)器即翻轉(zhuǎn)到地址00H,使讀周期無限制地連續(xù)下去。上面只給出了X5043單個字節(jié)的讀寫程序代碼,對于多個字節(jié)或一頁16個字節(jié)的讀寫程序代碼可根據(jù)單個字節(jié)的讀寫程序代碼進(jìn)行擴(kuò)展給出。



            關(guān)鍵詞: 擴(kuò)展 EEPROM SPI DSP TMS320F241

            評論


            相關(guān)推薦

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

            關(guān)閉