• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

    □ 張小景

    上海電氣風電集團股份有限公司 上海 200233

    1 研究背景

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

    2 SPI特點

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

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

    (3) 多速率配置。無論是DSP還是ARM,都支持多種速率設置。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ā)送與接收。當主機MOSI移出一個位時,同步的從機MISO移入一個位。SPI通信原理如圖1所示。

    圖1 SPI通信原理

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

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

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

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

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

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

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

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

    4 SPI接口設計

    SPI接口設計如圖2所示。

    圖2 SPI接口設計

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

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

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

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

    5 SPI算法設計

    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ù)設置程序如下:

    void spi_init()

    {

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

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

    SpiaRegs.SPIBRR=0x0002;∥傳輸速率設置

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

    SpiaRegs.SPIPRI.bit.FREE=1;

    }

    ARM主程序如下:

    int main(void)

    {

    RCC_Configuration();∥配置時鐘

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

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

    while(1)

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

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

    }

    }

    SPI 參數(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;∥通信速率設置,從設備無效

    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)空閑時電壓跳變的情況,由此筆者選擇此種模式。當然,板間通信必須共地,否則信號電壓不穩(wěn)定。

    8 結(jié)束語

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

    猜你喜歡
    發(fā)送數(shù)據(jù)參數(shù)設置空閑
    移動自組網(wǎng)中MAC層協(xié)議研究
    恩賜
    詩選刊(2023年7期)2023-07-21 07:03:38
    “鳥”字謎
    小讀者之友(2019年9期)2019-09-10 07:22:44
    基于馬爾科夫鏈的LoRaWAN網(wǎng)絡節(jié)點性能分析
    帶標記方式的CRDSA++協(xié)議性能分析*
    彪悍的“寵”生,不需要解釋
    使用IPSec安全傳輸數(shù)據(jù)
    蟻群算法求解TSP中的參數(shù)設置
    WLAN和LTE交通規(guī)則
    CHIP新電腦(2016年3期)2016-03-10 14:09:48
    動車環(huán)境下U900異頻切換參數(shù)設置探討
    申扎县| 仪征市| 兴仁县| 大石桥市| 土默特右旗| 墨玉县| 潼南县| 江源县| 抚宁县| SHOW| 论坛| 海伦市| 永清县| 屏南县| 察隅县| 齐齐哈尔市| 扎赉特旗| 图木舒克市| 本溪| 保德县| 武胜县| 岳池县| 桐梓县| 罗源县| 铁岭县| 南江县| 台湾省| 晋江市| 甘孜县| 武穴市| 中牟县| 鄂伦春自治旗| 巩留县| 灵石县| 清水河县| 龙游县| 荣成市| 成都市| 拉萨市| 聂荣县| 金坛市|