国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

□ 張小景

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

1 研究背景

電能質(zhì)量影響著整個電力系統(tǒng)的穩(wěn)定運(yùn)行。文獻(xiàn)[1-4]詳細(xì)介紹了電能質(zhì)量測試方法,指出電能質(zhì)量測試設(shè)備需要能夠分析非常高頻的數(shù)據(jù),并且快速地傳遞出去,通信速率也需要非???。一般設(shè)計采用數(shù)字信號處理(DSP)+32位進(jìn)階精簡指令集機(jī)器(ARM)+現(xiàn)場可編程門陣列(FPGA)的設(shè)計思想,DSP負(fù)責(zé)數(shù)據(jù)計算處理,FPGA負(fù)責(zé)信息采樣,ARM負(fù)責(zé)通信。分析10 kHz采樣的三相電壓和三相電流,通信速率需要高達(dá)960 kbit/s,如果再加上其它需要通信的數(shù)據(jù),通信速率要更高,控制器局域網(wǎng)(CAN)、串行通信接口(SCI)等都不能滿足穩(wěn)定運(yù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速率可達(dá)36 Mbit/s,ARM芯片TMS320F28335速率可達(dá)37.5 Mbit/s。

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

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

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

3 SPI工作模式

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

圖1 SPI通信原理

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

(1) 主模式運(yùn)行。如果配置為主模式,時鐘信號和片選信號由主設(shè)備控制,從設(shè)備對這兩個信號進(jìn)行只讀。當(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ù)雜,有硬件和軟件兩種模式,并且信號不能自動跳變,主模式運(yùn)行時可以選擇軟件模式,信號作為普通輸入/輸出設(shè)置,數(shù)據(jù)發(fā)送過程中置0,數(shù)據(jù)發(fā)送完成后置1。

(2) 從模式運(yùn)行。如果配置為從模式,時鐘信號由主設(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,代表時鐘沿不延遲。

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

4 SPI接口設(shè)計

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

圖2 SPI接口設(shè)計

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

SPI作為板間通信,盡量不要將片選信號直接接地,而是選擇由主設(shè)備控制片選信號。ARM作為從機(jī)運(yùn)行時,選擇硬件模式。ARM作為主機(jī)運(yùn)行時,片選信號設(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作為從機(jī)發(fā)送數(shù)據(jù)程序如下:

void SPI_SendData(u16 byte)

{

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

SPI_I2S_SendData(SPI1,byte);}

SPI作為從機(jī)接收數(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è)置等進(jìn)行了介紹,可以為其它類似工程提供技術(shù)參考。

猜你喜歡
發(fā)送數(shù)據(jù)參數(shù)設(shè)置空閑
“鳥”字謎
西灣村采風(fēng)
一種車載自組織網(wǎng)絡(luò)的媒體接入控制協(xié)議
基于馬爾科夫鏈的LoRaWAN網(wǎng)絡(luò)節(jié)點性能分析
帶標(biāo)記方式的CRDSA++協(xié)議性能分析*
彪悍的“寵”生,不需要解釋
逃生疏散模擬軟件應(yīng)用
使用IPSec安全傳輸數(shù)據(jù)
蟻群算法求解TSP中的參數(shù)設(shè)置
WLAN和LTE交通規(guī)則
绍兴县| 临澧县| 噶尔县| 高平市| 吉木萨尔县| 定州市| 天门市| 永年县| 修武县| 汾阳市| 崇信县| 枣强县| 昆山市| 祁阳县| 阳西县| 呈贡县| 马公市| 石柱| 台北市| 昌平区| 湘西| 康乐县| 乡城县| 贺兰县| 娄底市| 安达市| 汉中市| 东阿县| 青冈县| 谢通门县| 仙居县| 盐津县| 田东县| 平山县| 济宁市| 古交市| 奉贤区| 漳州市| 双桥区| 靖西县| 武宁县|