亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        串行外設(shè)接口通信的實現(xiàn)

        2021-07-02 13:33:00張小景
        裝備機械 2021年2期
        關(guān)鍵詞:發(fā)送數(shù)據(jù)參數(shù)設(shè)置空閑

        □ 張小景

        上海電氣風(fēng)電集團股份有限公司 上海 200233

        1 研究背景

        電能質(zhì)量影響著整個電力系統(tǒng)的穩(wěn)定運行。文獻[1-4]詳細介紹了電能質(zhì)量測試方法,指出電能質(zhì)量測試設(shè)備需要能夠分析非常高頻的數(shù)據(jù),并且快速地傳遞出去,通信速率也需要非常快。一般設(shè)計采用數(shù)字信號處理(DSP)+32位進階精簡指令集機器(ARM)+現(xiàn)場可編程門陣列(FPGA)的設(shè)計思想,DSP負(fù)責(zé)數(shù)據(jù)計算處理,FPGA負(fù)責(zé)信息采樣,ARM負(fù)責(zé)通信。分析10 kHz采樣的三相電壓和三相電流,通信速率需要高達960 kbit/s,如果再加上其它需要通信的數(shù)據(jù),通信速率要更高,控制器局域網(wǎng)(CAN)、串行通信接口(SCI)等都不能滿足穩(wěn)定運行要求。當(dāng)前,嵌入式處理器都配置了串行外設(shè)接口(SPI)。對于高速通信,采用SPI更合適,而且SPI的接線簡單,只有四根。筆者通過設(shè)計,實現(xiàn)了SPI的通信。

        2 SPI特點

        (1) 接線簡單。SPI只有四根通信線,包括從輸出/主輸入(SOMI)、從輸入/主輸出(SIMO)、片選、時鐘。

        (2) 兩種工作模式。SPI支持主從通信,可通過參數(shù)將設(shè)備配置為主設(shè)備或從設(shè)備。

        (3) 多速率配置。無論是DSP還是ARM,都支持多種速率設(shè)置。ARM的最高速率為主頻率的1/2,DSP的最高速率為主頻率的1/4。理論上,DSP芯片STM32F103速率可達36 Mbit/s,ARM芯片TMS320F28335速率可達37.5 Mbit/s。

        (4) 可變數(shù)據(jù)幀長度。支持8位和16位兩種數(shù)據(jù)長度配置。

        (5) 四種時鐘模式。四種時鐘模式分別由時鐘極性和時鐘相位兩個參數(shù)控制,兩個參數(shù)共有四種組合。

        (6) 同步通信。SPI作為同步串口通信,發(fā)出與接收同時進行,可以作為全雙工模式運行。另外,DSP可配置為只接收模式,ARM可配置為只發(fā)送或只接收模式。

        3 SPI工作模式

        SPI作為同步串行通信,使用一個移位寄存器實現(xiàn)數(shù)據(jù)同步發(fā)送與接收。當(dāng)主機MOSI移出一個位時,同步的從機MISO移入一個位。SPI通信原理如圖1所示。

        圖1 SPI通信原理

        設(shè)置數(shù)據(jù)長度為8位或16位,一個字節(jié)或兩個字節(jié)就可以完成一次數(shù)據(jù)交換。DSP與ARM都可以通過修改參數(shù),將設(shè)備設(shè)置為主模式運行或從模式運行。

        (1) 主模式運行。如果配置為主模式,時鐘信號和片選信號由主設(shè)備控制,從設(shè)備對這兩個信號進行只讀。當(dāng)數(shù)據(jù)存入數(shù)據(jù)寄存器或輸出緩沖寄存器時,啟動MOSI線上的數(shù)據(jù)傳送,同時通過MISO線接收一個位的數(shù)據(jù)。當(dāng)8位或16位數(shù)據(jù)傳送完成后,數(shù)據(jù)寄存器的值被放到接收緩沖寄存器中。

        片選信號控制DSP的原理與ARM有所不同。對于DSP,在主設(shè)備發(fā)送數(shù)據(jù)時信號為0,直到8位或16位數(shù)據(jù)傳送完成后,信號被置1。對于ARM,信號控制比較復(fù)雜,有硬件和軟件兩種模式,并且信號不能自動跳變,主模式運行時可以選擇軟件模式,信號作為普通輸入/輸出設(shè)置,數(shù)據(jù)發(fā)送過程中置0,數(shù)據(jù)發(fā)送完成后置1。

        (2) 從模式運行。如果配置為從模式,時鐘信號由主設(shè)備控制,從設(shè)備設(shè)置時鐘信號無效。此時,DSP和ARM都由主設(shè)備控制,只有片選信號為0時,從設(shè)備才處于正常工作狀態(tài)。ARM有軟件和硬件兩種模式,與DSP通信時,需選擇硬件模式。

        (3) 時序控制。SPI通信的時序控制通過兩個參數(shù)得到四種組合,極性參數(shù)與相位參數(shù)代表的意義對于DSP、ARM而言有所不同。

        DSP極性參數(shù)設(shè)置為1,代表下降沿輸出,上升沿鎖存,空閑狀態(tài)為高電平。DSP極性參數(shù)設(shè)置為0,代表上升沿輸出,下降沿鎖存,空閑狀態(tài)為低電平。ARM極性參數(shù)設(shè)置為1,代表下降沿輸出,上升沿鎖存,空閑狀態(tài)為高電平。ARM極性參數(shù)設(shè)置為0,代表上升沿輸出,下降沿鎖存,空閑狀態(tài)為低電平。

        DSP相位參數(shù)設(shè)置為1,數(shù)據(jù)在跳變沿前半個周期發(fā)送或接收,時鐘沿延遲半個周期。DSP相位參數(shù)設(shè)置為0,代表時鐘沿不延遲。ARM相位參數(shù)設(shè)置為0,數(shù)據(jù)在跳變沿前半個周期發(fā)送或接收,時鐘沿延遲半個周期。ARM相位參數(shù)設(shè)置為1,代表時鐘沿不延遲。

        在進行DSP與ARM的SPI通信時,一定要注意不同的微控制器參數(shù)設(shè)置意義不同。

        4 SPI接口設(shè)計

        SPI接口設(shè)計如圖2所示。

        圖2 SPI接口設(shè)計

        SPI作為板間通信,需要注意共地問題,只有板共地后才能保持電平一致,因此需要一根共地線。

        SPI作為板間通信,盡量不要將片選信號直接接地,而是選擇由主設(shè)備控制片選信號。ARM作為從機運行時,選擇硬件模式。ARM作為主機運行時,片選信號設(shè)置為普通輸入/輸出、軟件模式。

        時鐘信號由主設(shè)備控制,從設(shè)備設(shè)置時鐘信號無效,直接對接時鐘線。

        數(shù)據(jù)線MISO、MOSI各自直接對接即可。

        5 SPI算法設(shè)計

        DSP主程序如下:

        int main(void)

        {

        InitSystemCtrl();

        InitSpiGpio();

        DINT;

        spi_fifo_init();

        spi_init();

        for(;;){

        SpiaRegs.SPITXBUF=0xF00F;∥數(shù)據(jù)賦值給輸出寄存器,開始數(shù)據(jù)傳輸

        while(SpiaRegs.SPIFFRX.bit.RXFFST!=1){}

        rdata=SpiaRegs.SPIRXBUF;}∥讀接收寄存器

        }

        SPI參數(shù)設(shè)置程序如下:

        void spi_init()

        {

        SpiaRegs.SPICCR.all=0x004F;∥16位數(shù)據(jù)

        SpiaRegs.SPICTL.all=0x0006;∥主模式,時鐘信號不延遲

        SpiaRegs.SPIBRR=0x0002;∥傳輸速率設(shè)置

        SpiaRegs.SPICCR.call=0x008F;∥上升沿輸出,下降沿鎖存,空閑為低電壓

        SpiaRegs.SPIPRI.bit.FREE=1;

        }

        ARM主程序如下:

        int main(void)

        {

        RCC_Configuration();∥配置時鐘

        GPIO_Configuration();∥配置輸入/輸出

        SPI_Configuration();∥SPI 參數(shù)設(shè)置

        while(1)

        {b= SPI_ReceiveData();∥接收數(shù)據(jù)

        SPI_SendData(b);∥發(fā)送數(shù)據(jù)

        }

        }

        SPI 參數(shù)設(shè)置程序如下:

        void SPI_Configuration(void)

        {

        SPI_InitTypeDef SPI_InitStructure;

        ∥配置SPI

        SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;∥全雙工模式

        SPI_InitStructure.SPI_DataSize=SPI_DataSize_16b;∥16位數(shù)據(jù)

        SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;∥上升沿發(fā)送數(shù)據(jù)

        SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;∥時鐘不延遲

        SPI_InitStructure.SPI_NSS=SPI_NSS_Hard;∥片選信號為硬件模式

        SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_256;∥通信速率設(shè)置,從設(shè)備無效

        SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;∥高位先發(fā)送

        SPI_InitStructure.SPI_CRCPolynomial=7;

        SPI_InitStructure.SPI_Mode=SPI_Mode_Slave;∥從模式

        SPI_Init(SPI1,&SPI_InitStructure);

        SPI_Cmd(SPI1,ENABLE);

        SPI_I2S_ClearITPendingBit(SPI1,SPI_I2S_IT_RXNE);

        }

        SPI作為從機發(fā)送數(shù)據(jù)程序如下:

        void SPI_SendData(u16 byte)

        {

        while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);

        SPI_I2S_SendData(SPI1,byte);}

        SPI作為從機接收數(shù)據(jù)程序如下:

        u16 SPI_ReceiveData(void)

        { u16 data;

        while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);

        data=SPI_I2S_ReceiveData(SPI1);

        return data;}

        6 過程調(diào)試

        DSP不同極性與相位時序控制如圖3~圖6所示。

        由圖3~圖6分析可知,DSP極性參數(shù)為1,空閑時為高電平,下降沿開始發(fā)送數(shù)據(jù);DSP極性參數(shù)為0,空閑時為低電平,上升沿開始發(fā)送數(shù)據(jù);DSP相位參數(shù)為0,空閑時為低電平,數(shù)據(jù)信號與時鐘信號沒有時間差;DSP相位參數(shù)為1,空閑時為高電平,數(shù)據(jù)信號超前時鐘信號半個周期。

        圖3 DSP極性參數(shù)為0、相位參數(shù)為0時序控制

        圖4 DSP極性參數(shù)為0、相位參數(shù)為1時序控制

        圖5 DSP極性參數(shù)為1、相位參數(shù)為0時序控制

        圖6 DSP極性參數(shù)為1、相位參數(shù)為1時序控制

        ARM不同極性與相位時序控制如圖7~圖10所示。

        由圖7~圖10分析可知,ARM極性參數(shù)為1,空閑時為高電平,下降沿開始發(fā)送數(shù)據(jù);ARM極性參數(shù)為0,空閑時為低電平,上升沿開始發(fā)送數(shù)據(jù);ARM相位參數(shù)為1,空閑時為低電平,數(shù)據(jù)信號與時鐘信號沒有時間差;ARM相位參數(shù)為0,空閑時為高電平,數(shù)據(jù)信號超前時鐘信號半個周期。

        圖7 ARM極性參數(shù)為0、相位參數(shù)為0時序控制

        圖8 ARM極性參數(shù)為0、相位參數(shù)為1時序控制

        圖9 ARM極性參數(shù)為1、相位參數(shù)為0時序控制

        圖10 ARM極性參數(shù)為1、相位參數(shù)為1時序控制

        ARM與DSP沒有共地情況下的時序控制如圖11所示。

        圖11 DSP與ARM無共地時序控制

        ARM與DSP極性不一致,相位參數(shù)均為0情況下的時序控制如圖12所示。

        ARM與DSP相位不一致,極性參數(shù)均為0情況下的時序控制如圖13所示。

        圖13 DSP相位參數(shù)為0、ARM相位參數(shù)為1時序控制

        ARM與DSP極性、相位參數(shù)均為0情況下的時序控制如圖14所示。

        圖14 ARM與DSP極性參數(shù)為0、相位參數(shù)為0時序控制

        7 調(diào)試小結(jié)

        ARM相位參數(shù)為1,DSP相位參數(shù)為0的時序控制與ARM、DSP相位參數(shù)均為0的時序控制是一致的,作為兩種芯片通信時,只要極性一致,相位一致與否接收數(shù)據(jù)都沒有問題。另一方面,ARM與DSP相位不一致,沒有出現(xiàn)空閑時電壓跳變的情況,由此筆者選擇此種模式。當(dāng)然,板間通信必須共地,否則信號電壓不穩(wěn)定。

        8 結(jié)束語

        SPI作為常用的串口通信接口,接線簡單、通信速率高,非常適用于大量數(shù)據(jù)的傳輸。筆者對電能質(zhì)量測試設(shè)備開發(fā)項目中SPI通信的算法設(shè)計、接口設(shè)計、參數(shù)設(shè)置等進行了介紹,可以為其它類似工程提供技術(shù)參考。

        猜你喜歡
        發(fā)送數(shù)據(jù)參數(shù)設(shè)置空閑
        移動自組網(wǎng)中MAC層協(xié)議研究
        恩賜
        詩選刊(2023年7期)2023-07-21 07:03:38
        “鳥”字謎
        小讀者之友(2019年9期)2019-09-10 07:22:44
        基于馬爾科夫鏈的LoRaWAN網(wǎng)絡(luò)節(jié)點性能分析
        帶標(biāo)記方式的CRDSA++協(xié)議性能分析*
        彪悍的“寵”生,不需要解釋
        使用IPSec安全傳輸數(shù)據(jù)
        蟻群算法求解TSP中的參數(shù)設(shè)置
        WLAN和LTE交通規(guī)則
        CHIP新電腦(2016年3期)2016-03-10 14:09:48
        動車環(huán)境下U900異頻切換參數(shù)設(shè)置探討
        日韩av高清无码| 丁香婷婷激情视频在线播放| 国产成人精品亚洲日本在线观看| 色婷婷综合久久久久中文| 在线视频一区二区日韩国产| 国产成人激情视频在线观看| 手机av在线中文字幕| 激情综合色综合久久综合| 精品久久久久久久久免费午夜福利| 久久一区av蜜桃人妻| 一区二区三区日本伦理| 熟妇人妻久久中文字幕| 免费人成毛片乱码| 精品日本一区二区视频| 最新国产不卡在线视频| 久久亚洲精精品中文字幕早川悠里| 国产日韩精品中文字幕| 亚洲日本va中文字幕| 久久久久欧洲AV成人无码国产| 美女草逼视频免费播放| 337p日本欧洲亚洲大胆色噜噜| 中国凸偷窥xxxx自由视频妇科| 国产乱子伦精品免费女| 国产亚洲一区二区毛片| 久久精品国产99国产精品亚洲| 亚洲美国产亚洲av| 亚洲青青草视频在线播放| 亚洲一二三区免费视频| 中文字幕久久精品一二三区| 免费国产黄线在线播放| 精品国产免费一区二区久久| 中国无码人妻丰满熟妇啪啪软件| 久久国产精品波多野结衣av| av东京热一区二区三区| 国产偷国产偷亚洲高清视频| 99香蕉国产精品偷在线观看| 国产精品伦人视频免费看| 一区二区三区亚洲视频| 天堂√在线中文官网在线| 国产AV无码一区精品天堂| 伊人狼人大香线蕉手机视频|