乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      DSPF28335---SPI模塊

       李乃安 2017-04-14

      DSPF28335--串行外設(shè)接口(SPI模塊

      問(wèn)題1:什么是串行外設(shè)接口(SPI)?

      答:SPISerial Peripheral Interface)接口是高速同步串行I/O接口。

      問(wèn)題2:串行通信接口(SCI)和串行外設(shè)接口(SPI)主要區(qū)別?

      答:(1)SPI采用同步通訊方式,除了發(fā)送和接受兩根線之外,還需要一根同步時(shí)鐘線;SCI采用異步通信方式,只需要發(fā)送和接收兩根線,通訊雙方微處理器使用各自的時(shí)鐘。

      (2)SPI適用于板上短距離高速通訊;SCI適用于對(duì)另外的外設(shè)長(zhǎng)距離的低速率通訊,在默認(rèn)狀態(tài)下,其最高通訊速率只相當(dāng)于SPI通訊速率的1/4。

      (3)SPI的時(shí)鐘可反映在外在的同步時(shí)鐘線上;SCI的時(shí)鐘時(shí)隱藏的。

      問(wèn)題3:TMS320F28335有幾個(gè)SPI接口模塊?

      答:有一個(gè)專門的SPI模塊, 另外兩個(gè)McBSP也可以配置為SPI接口。

      問(wèn)題4:F28335SPI接口由幾組寄存器控制?

      答:12,位于控制寄存器幀0x7040h開始的位置。

      問(wèn)題5:SPI FIFO模式下如何對(duì)傳輸和接收16級(jí)FIFO進(jìn)行操作?

      直接對(duì)SPITXBUF寄存器進(jìn)行賦值以傳輸數(shù)據(jù)。例如:SpiaRegs.SPITXBUF=sdata[i],此操作可理解為:首先使TXFIFO頭指針加1,然后把值寫入TXFIFO頭指針指向的位置。如果當(dāng)前沒有一個(gè)激活的傳輸過(guò)程時(shí),對(duì)SPITXBUF的寫入會(huì)激活一個(gè)傳輸過(guò)程。直接讀取SPIRXBUF寄存器的值以接收數(shù)據(jù)。例如:rdata[i]=SpiaRegs.SPIRXBUF,此操作可理解為:首先從RXFIFO頭指針處讀取1個(gè)字符, 然后使RXFIFO頭指針減1

      問(wèn)題6:SPI FIFO模式下傳輸和接收中斷何時(shí)產(chǎn)生?

      答:是在數(shù)據(jù)傳輸或接收結(jié)束后,再判斷傳輸和接收FIFO隊(duì)列中有多少數(shù)據(jù)(SPIFFTX.TXFFST4-0)和SPIFFRX.RXFFST4-0)的值)。對(duì)于傳輸FIFO如果FIFO中數(shù)據(jù)小于等于TXFFIL4-0(此寄存器指定臨界值)指定的值時(shí)會(huì)觸發(fā)中斷,在中斷處理過(guò)程中繼續(xù)傳輸數(shù)據(jù)。對(duì)于接收FIFO如果FIFO中的值大于等于RXFFIL(4-0)(此寄存器指定能夠容忍的最大值)中指定的值時(shí)觸發(fā)中斷,在中斷處理過(guò)程中繼續(xù)接收數(shù)據(jù)。FIFO模式下中斷觸發(fā)條件除了標(biāo)準(zhǔn)SPI模式下的數(shù)據(jù)傳輸接收完畢的條件外還要滿足FIFO中的數(shù)據(jù)小于等于TXFFIL或大于等于RXFFIL設(shè)定值的條件,在兩個(gè)條件都滿足的情況下才會(huì)觸發(fā)中斷。

      FIFO選項(xiàng)

      SPI中斷源

      中斷標(biāo)志位

      中斷使能位

      SPIFFENA

      中斷線

      SPI不使用FIFO

      接收溢出

      RECEIVER OVERRUN FLAG

      OVERRUN INT ENA

      0

      SPIRXINT

      數(shù)據(jù)接收

      SPI INT FLAG

      SPIINTENA

      0

      SPIRXINT

      數(shù)據(jù)發(fā)送(發(fā)送空)

      SPI INT FLAG

      SPIINTENA

      0

      SPIRXINT

      SPI使用FIFO

      FIFO接收

      RXFFINT Flag

      RXFFIENA

      1

      SPIRXINT

      數(shù)據(jù)發(fā)送(發(fā)送空)

      TXFFINT Flag

      TXFFIENA

      1

      SPITXINT

       問(wèn)題7:如果只接收數(shù)據(jù)不發(fā)送數(shù)據(jù)如何激活接收過(guò)程?

      答:SPI的的接收過(guò)程必須依賴傳輸過(guò)程,故即使值接收數(shù)據(jù)也必須對(duì)SPITXBUF寫入以激活一個(gè)傳輸過(guò)程來(lái)接收數(shù)據(jù)。

      SPI配置控制寄存器(SPICCR

      名稱

      位域描述

      7

      SPI SW RESET

      SPI軟件復(fù)位位:

      作用:當(dāng)用戶改變配置時(shí),用戶要清零該位,并在配置完成后置位該位。

      0:將SPI操作標(biāo)志初始化為復(fù)位條件;

      1SPI準(zhǔn)備發(fā)送和接受下一個(gè)字符。

      6

      CLOCK POLARITY

      移位時(shí)鐘極性位:

      作用:系統(tǒng)提供4種不同的時(shí)鐘方案,通常推薦第一種(系統(tǒng)默認(rèn)的時(shí)鐘方案),極性和延時(shí)全部為0.

      0:數(shù)據(jù)在上升沿輸出,下降沿輸入;

      1:數(shù)據(jù)在下降沿輸出,上升沿輸入。

      5

      保留

       

      4

      SPILBK

      SPI回路返回位:

      作用:回路返回模式允許模塊在器件的器件測(cè)試時(shí)驗(yàn)證,該模式只在SPI配置為主控制模式才有效。

      0:禁止;

      1:使能。

      3-0

      SPI CHAR

      字符長(zhǎng)度控制位:

      作用:這四位決定了一個(gè)移位序列中單個(gè)字符被移入或移除的位數(shù)(1-16)。

       

       

      SPI工作控制寄存器(SPICTL

       

      SPI操作控制寄存器SPICTL控制這數(shù)據(jù)發(fā)送,SPI產(chǎn)生中斷的能力,SPICLK相位和SPI的工作方式(主控制器模式或從控制器模式)。

      名稱

      位域描述

      7-5

      保留

       

      4

      OVERRUN INT ENA

      溢出中斷使能位:

      作用:接收器溢出標(biāo)志位(SPISTS.7)由硬件置位時(shí),該位將產(chǎn)生一個(gè)中斷。接收溢出中斷標(biāo)志位(SPISTS.7)和SPI中斷標(biāo)志位(SPISTS.6)公用一個(gè)中斷向量。

      0:禁止接收器溢出中斷標(biāo)志位(SPISTS.7)中斷;

      1:禁止接收器溢出中斷標(biāo)志位(SPISTS.7)中斷。

      3

      CLOCK HPASE

      SPI時(shí)鐘相位選擇位:

      0:無(wú)延遲;

      1SPICLK信號(hào)延遲半個(gè)周期。

      2

      MASTER/SLAVE

      SPI通訊模式選擇位:

      0SPI配置為從機(jī)模式;

      1SPI配置為主機(jī)模式;

      1

      TALK

      主機(jī)/從機(jī)發(fā)送使能位:

      作用:無(wú)論主機(jī)模式還是從機(jī)模式,要是SPI正常工作必須使能發(fā)送。

      0:禁止發(fā)送;

      1:使能發(fā)送。

      0

      SPI INT ENA

      SPI中斷使能位:

      0:禁止SPI發(fā)送和接收中斷;

      1:使能SPI發(fā)送和接收中斷。

       

       

      SPI狀態(tài)寄存器(SPISTS

       

      名稱

      位域描述

      7

      RECEIVER OVERRUN FLAG

      SPI接收器溢出中斷標(biāo)志位:

      0:無(wú)效;

      1:清除該位。

      6

      SPI INT FLAG

      SPI中斷標(biāo)志位:

      作用:SPI硬件置位該位來(lái)表示已經(jīng)完整的接收或者發(fā)送字符的最后一位,準(zhǔn)備好后續(xù)服務(wù)。該位置位的同時(shí)接收到的字符放在接收緩沖寄存器。如果SPI INT ENA被置位,該位將引起一個(gè)中斷。

      5

      TX BUF FULL FLAG

      SPI發(fā)送緩沖滿標(biāo)志位:

      當(dāng)一個(gè)字符寫入SPI發(fā)送緩沖寄存器SPITXBUF時(shí)該位被置1。當(dāng)上一個(gè)字節(jié)被全部移出,當(dāng)前字節(jié)自動(dòng)加載入SPIDAT寄存器時(shí)該位被清除。

      4-0

      保留

       

       

       

      SPI波特率控制寄存器(SPIBRR)

       

      SPI仿真緩沖器寄存器(SPIRXEMU)

       

      名稱

      位域描述

      15-0

      EPIRXEMU

      SPI仿真緩沖器寄存器:

      作用:SPIRXEUM寄存器和SPIRXBUF寄存器的功能幾乎相同,唯一的區(qū)別就是讀取SPIRXEUM寄存器不會(huì)清除SPI的中斷標(biāo)志位(SPISTS.6.其實(shí)SPIRXEUM不是一個(gè)真實(shí)的寄存器而是一個(gè)虛擬地址,從該寄存器可以讀取SPIRXBUF的內(nèi)容而不清除中斷標(biāo)志位。

       

       

      SPI串行接收緩沖器寄存器(SPIRXBUF)

       

      名稱

      位域描述

      15-0

      EPIRXBUF

      SPI串行接收緩沖器寄存器:

      作用:一旦SPIDAT寄存器接收到完整的字符,字符就會(huì)被移入SPIRXBUF寄存器。在SPIRXBUF寄存器的字符可被讀取。同時(shí)SPI中斷標(biāo)志位(SPISTS.6)被置位。由于數(shù)據(jù)首先被移位到SPI最高有效位,所以數(shù)據(jù)在該寄存器中采用右對(duì)齊方式存儲(chǔ)。接收時(shí),必須屏蔽無(wú)用的高位。

       

      SPI串行接發(fā)送沖器寄存器(SPITXBUF)

       

      名稱

      位域描述

      15-0

      EPITRXBUF

      SPI串行發(fā)送緩沖器寄存器:

      作用:當(dāng)前發(fā)送的字符已經(jīng)發(fā)送完成后,如果TX BUF FULL標(biāo)志位被置位,那么寄存器的內(nèi)容將會(huì)自動(dòng)載入SPIDAT寄存器,于此同時(shí)TX BUF FULL標(biāo)志位將被清除。數(shù)據(jù)寫EPITRXBUF寄存器入必須采用左對(duì)齊的方式。

       

      SPI串行數(shù)據(jù)寄存器(SPIDAT

      名稱

      位域描述

      15-0

      SPIDAT

      串行數(shù)據(jù):

      作用:SPIDAT實(shí)質(zhì)是一個(gè)16位的循環(huán)左移位寄存器,主機(jī)發(fā)送的數(shù)據(jù)逐次的從左邊最高位(MSB)移出,從右邊最低位(LSB)移入,移出的數(shù)據(jù)左對(duì)齊讀數(shù),而移入的數(shù)據(jù)右對(duì)齊度數(shù)。

       

       

      SPI FIFO 發(fā)送,接收和控制寄存器

       

      1SPI FIFO 發(fā)送寄存器(SPIFFTX

       

      名稱

      位域描述

      15

      SPIRST

      SPI FIFO復(fù)位位:

      0:復(fù)位FIFO發(fā)送和接受通道,SPI FIFO寄存器的配置保持不變;

      1SPI FIFO重新開始發(fā)送和接受。

      14

      SPIFFENA

      SPI FIFO模塊使能位:

      0:禁止FIFO增強(qiáng)模塊;

      1:使能FIFO增強(qiáng)模塊。

      13

      TXFIFO RESET

      發(fā)送FIFO復(fù)位位:

      0:復(fù)位FIFO指針為0,且一直處于復(fù)位;

      1:再次使能發(fā)送FIFO工作。

      12-8

      TXFFST(4-0)

      發(fā)送FIFO狀態(tài)位:(只讀:中斷檢測(cè)位

      作用:發(fā)送FIFO字符個(gè)數(shù):用于檢測(cè)發(fā)送FIFO是否有字符。

      7

      TXFFINT Flag

      發(fā)送FIFO中斷標(biāo)志位:(只讀

      0:沒有中斷發(fā)生;

      1:有中斷發(fā)生。

      6

      TXFFINT CLR

      發(fā)送FIFO中斷清除位:

      0:無(wú)效;

      1:寫1清除該位。

      5

      TXFFINNA

      發(fā)送FIFO中斷使能位:

      0:禁止;

      1:使能。

      4-0

      TXFFIL(4-0)

      發(fā)送FIFO中斷級(jí)位:

      作用:指定臨界值。當(dāng)發(fā)送FIFO狀態(tài)位和發(fā)送FIFO中斷級(jí)位匹配(小于等于)時(shí),發(fā)送FIFO將產(chǎn)生中斷,推薦默認(rèn)值位0x0000.

       

      2SPI FIFO 接收寄存器(SPIFFRX

       

      名稱

      位域描述

      15

      RXFFOVF Flag

      接收FIFO溢出標(biāo)志位:

      作用:其實(shí)接收FIFO溢出中斷和接收FIFO中斷標(biāo)差不多,說(shuō)白了:接收FIFO溢出中斷是接收FIFO中的斷級(jí)設(shè)置為0x1111接收FIFO中斷。

      0:接收FIFO沒有溢出;

      1:接收 FIFO已經(jīng)溢出。

      14

      RXFFOVF CLR

      接收FIFO溢出中斷清除位

      0:無(wú)影響;

      1:寫1清除RXFFOVF 標(biāo)志位。

      13

      RXFIFO RESET

      接收FIFO復(fù)位位:

      0:復(fù)位FIFO指針為0,且一直處于復(fù)位;

      1:再次使能接收FIFO工作。

      12-8

      RXFFST(4-0)

      接收FIFO狀態(tài)位:(只讀:中斷檢測(cè)位

      作用:接收FIFO字符個(gè)數(shù):用于檢測(cè)接收FIFO是否有字符。

      7

      RXFFINT Flag

      接收FIFO中斷標(biāo)志位:(只讀)

      0:沒有中斷發(fā)生;

      1:有中斷發(fā)生。

      6

      RXFFINT CLR

      接收FIFO中斷清除位:

      0:無(wú)效;

      1:寫1清除該位。

      5

      RXFFINNA

      接收FIFO中斷使能位:

      0:禁止;

      1:使能。

      4-0

      RXFFIL(4-0)

      接收FIFO中斷級(jí)位:

      作用:指定臨界值。當(dāng)接收FIFO狀態(tài)位和接收FIFO中斷級(jí)位匹配(大于等于)時(shí),接收FIFO將產(chǎn)生中斷,推薦默認(rèn)值位0x1111..這樣可以避免復(fù)位后的重復(fù)中斷,因此接收FIFO大多數(shù)時(shí)間位空。

       

      3SPI FIFO 控制寄存器(SPIFFCT

       

       

      名稱

      位域描述

      15-8

      保留

       

      7-0

      FFTXDLY

      FIFO發(fā)送延時(shí)位:

      一般不延時(shí)

       

       

      SPI優(yōu)先級(jí)控制寄存器(SPIPRI

       

      名稱

      位域描述

      7-6

      保留

       

      5-4

      SPI SUS POFT

      SPI SUS FREE

       

      仿真掛起位:

      仿真模式位:

      作用:這為決定了當(dāng)一個(gè)仿真掛起事件發(fā)生(例如:調(diào)試程序時(shí)遇到一個(gè)斷點(diǎn))SPI模塊的操作。

      00:掛起時(shí)立即停止;

      10:完成當(dāng)前的接收/發(fā)送序列后停止

      x1:自由運(yùn)行。無(wú)視掛起,繼續(xù)SPI操作。(推薦)

      3-0

      保留

       

       

       

      【例1該程序?yàn)?/span>SPI典型例子例程,采用內(nèi)部循環(huán)的自測(cè)模式,自發(fā)自接受,并檢查錯(cuò)誤率。在程序中沒有使用中斷。首先發(fā)送一個(gè)數(shù)據(jù)流,然后接收一個(gè)數(shù)據(jù)流,并檢查錯(cuò)誤率上述操作不斷循環(huán)進(jìn)行。

      #include "DSP28x_Project.h"     // Device Headerfile and Examples Include File

       

      //函數(shù)聲明

      void delay_loop(void);//簡(jiǎn)單延時(shí)函數(shù)

      void spi_xmit(Uint16 a); //SPI發(fā)送一個(gè)字符

      void spi_fifo_init(void);// SPI FIFO 初始化

      void spi_init(void);// SPI 初始化

      void error(void);//出錯(cuò)處理函數(shù),一旦數(shù)據(jù)傳輸有錯(cuò)誤終止仿真

       

      void main(void)

      {

         Uint16 sdata;  // 發(fā)送數(shù)據(jù)

         Uint16 rdata;  // 接收數(shù)據(jù)

        

      // Step 1. 初始化系統(tǒng)控制

         InitSysCtrl();

       

      // Step 2. 初始化SPI GPIO:

      // This function is found in DSP2833x_Spi.c

         InitSpiaGpio();

       

      // Step 3. 清楚中斷和中斷向量表

         DINT;  //禁止 CPU 中斷

       

       

         InitPieCtrl();// 初始化PIE 控制寄存器

       

       

         IER = 0x0000;  // 禁止CPU級(jí)中斷

       

         IFR = 0x0000;   // 清除CPU interrupt flags:

        

         InitPieVectTable();// 初始化中斷向量表

              

      // Step 4. 初始化 SPI外設(shè):

         spi_fifo_init();      // 初始化Spi FIFO

         spi_init();               // 初始化SPI

       

      // Step 5. 用戶代碼,設(shè)置發(fā)送數(shù)據(jù)的初始值

         sdata = 0x0000;                                                       

         for(;;)

         {   

                spi_xmit(sdata);//發(fā)送數(shù)據(jù)

       

                while(SpiaRegs.SPIFFRX.bit.RXFFST !=1) { } ;         // 等待數(shù)據(jù)接收,RXFFSTSPIFFRX寄存器的的狀態(tài)位,表示FIFO接收到的字?jǐn)?shù)。當(dāng)RXFFST=0時(shí),沒有接收到字符,等待;當(dāng)RXFFST=1時(shí),接收到一個(gè)字符,轉(zhuǎn)到下面的程序。

                        

                rdata = SpiaRegs.SPIRXBUF;                   // 檢查接收的數(shù)據(jù);

                     if(rdata != sdata) error();

                sdata++;

         }

      }      

       

       

      // Step 7. 插入所以的全局中斷服務(wù)程序(ISR      

       

      void delay_loop()

      {

          long      i;

          for (i = 0; i < 1000000; i++) {}

      }

       

       

      void error(void)

      {

          asm("     ESTOP0");                                                  // 測(cè)試失敗!! 立刻停止!

          for (;;);

      }

       

      void spi_init()

      {   

               SpiaRegs.SPICCR.all =0x000F;              // 對(duì)SPI 配置寄存器進(jìn)行配置; 

               SpiaRegs.SPICTL.all =0x0006;                   // 主控模式, 無(wú)時(shí)鐘延時(shí),

                                                       // 使能發(fā)送,  SPI 中斷禁止.

               SpiaRegs.SPIBRR =0x007F;                                                                                

          SpiaRegs.SPICCR.all =0x009F; // SPI 準(zhǔn)備接收和發(fā)送下一個(gè)子符,并且使能回送模式 

          SpiaRegs.SPIPRI.bit.FREE = 1;                // 忽略掛起

      }

       

      void spi_xmit(Uint16 a)

      {

      SpiaRegs.SPITXBUF=a;

      //是一個(gè)16位的串行發(fā)送緩沖寄存器。用于存儲(chǔ)等待發(fā)送的一個(gè)字符,如果當(dāng)前發(fā)送的字符已經(jīng)發(fā)送完成后,如果TX BUF FULL標(biāo)志位被置位,那么寄存器的內(nèi)容將會(huì)自動(dòng)載入SPIDAT寄存器,于此同時(shí)TX BUF FULL標(biāo)志位將被清除。}   

       

      void spi_fifo_init()                                                                                       

      {

          SpiaRegs.SPIFFTX.all=0xE040;

          SpiaRegs.SPIFFRX.all=0x204f;

          SpiaRegs.SPIFFCT.all=0x0;

       

      //===========================================================================

      // No more.

      //===========================================================================

       

       

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多