999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2021-07-02 13:33:00張小景
裝備機(jī)械 2021年2期
關(guān)鍵詞:信號(hào)

□ 張小景

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

1 研究背景

電能質(zhì)量影響著整個(gè)電力系統(tǒng)的穩(wěn)定運(yùn)行。文獻(xiàn)[1-4]詳細(xì)介紹了電能質(zhì)量測(cè)試方法,指出電能質(zhì)量測(cè)試設(shè)備需要能夠分析非常高頻的數(shù)據(jù),并且快速地傳遞出去,通信速率也需要非常快。一般設(shè)計(jì)采用數(shù)字信號(hào)處理(DSP)+32位進(jìn)階精簡(jiǎn)指令集機(jī)器(ARM)+現(xiàn)場(chǎng)可編程門陣列(FPGA)的設(shè)計(jì)思想,DSP負(fù)責(zé)數(shù)據(jù)計(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)。對(duì)于高速通信,采用SPI更合適,而且SPI的接線簡(jiǎn)單,只有四根。筆者通過設(shè)計(jì),實(shí)現(xiàn)了SPI的通信。

2 SPI特點(diǎn)

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

(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ù)幀長(zhǎng)度。支持8位和16位兩種數(shù)據(jù)長(zhǎng)度配置。

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

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

3 SPI工作模式

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

圖1 SPI通信原理

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

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

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

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

(3) 時(shí)序控制。SPI通信的時(shí)序控制通過兩個(gè)參數(shù)得到四種組合,極性參數(shù)與相位參數(shù)代表的意義對(duì)于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ù)在跳變沿前半個(gè)周期發(fā)送或接收,時(shí)鐘沿延遲半個(gè)周期。DSP相位參數(shù)設(shè)置為0,代表時(shí)鐘沿不延遲。ARM相位參數(shù)設(shè)置為0,數(shù)據(jù)在跳變沿前半個(gè)周期發(fā)送或接收,時(shí)鐘沿延遲半個(gè)周期。ARM相位參數(shù)設(shè)置為1,代表時(shí)鐘沿不延遲。

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

4 SPI接口設(shè)計(jì)

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

圖2 SPI接口設(shè)計(jì)

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

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

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

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

5 SPI算法設(shè)計(jì)

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;∥主模式,時(shí)鐘信號(hào)不延遲

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

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

SpiaRegs.SPIPRI.bit.FREE=1;

}

ARM主程序如下:

int main(void)

{

RCC_Configuration();∥配置時(shí)鐘

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;∥時(shí)鐘不延遲

SPI_InitStructure.SPI_NSS=SPI_NSS_Hard;∥片選信號(hào)為硬件模式

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不同極性與相位時(shí)序控制如圖3~圖6所示。

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

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

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

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

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

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

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

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

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

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

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

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

圖11 DSP與ARM無共地時(shí)序控制

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

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

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

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

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

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

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

8 結(jié)束語(yǔ)

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

猜你喜歡
信號(hào)
信號(hào)
鴨綠江(2021年35期)2021-04-19 12:24:18
完形填空二則
7個(gè)信號(hào),警惕寶寶要感冒
媽媽寶寶(2019年10期)2019-10-26 02:45:34
孩子停止長(zhǎng)個(gè)的信號(hào)
《鐵道通信信號(hào)》訂閱單
基于FPGA的多功能信號(hào)發(fā)生器的設(shè)計(jì)
電子制作(2018年11期)2018-08-04 03:25:42
基于Arduino的聯(lián)鎖信號(hào)控制接口研究
《鐵道通信信號(hào)》訂閱單
基于LabVIEW的力加載信號(hào)采集與PID控制
Kisspeptin/GPR54信號(hào)通路促使性早熟形成的作用觀察
主站蜘蛛池模板: 极品私人尤物在线精品首页 | 99无码熟妇丰满人妻啪啪| 婷婷丁香色| 国产高清无码麻豆精品| 国产va免费精品观看| 天天综合网亚洲网站| 热re99久久精品国99热| 精品国产欧美精品v| 欧美在线网| 欧洲亚洲一区| 日韩视频福利| 白浆免费视频国产精品视频| 狠狠色成人综合首页| 一级做a爰片久久免费| 91精品伊人久久大香线蕉| 激情视频综合网| 国产精品亚洲一区二区三区在线观看| 国产日韩精品欧美一区灰| 成人在线观看不卡| 国产精品部在线观看| 免费女人18毛片a级毛片视频| 一本大道无码日韩精品影视| а∨天堂一区中文字幕| 三上悠亚在线精品二区| 亚洲Va中文字幕久久一区 | 国产爽妇精品| 欧美一区二区三区欧美日韩亚洲| 国产无码高清视频不卡| 国内熟女少妇一线天| 91精品国产一区| 亚洲无线一二三四区男男| 香蕉eeww99国产在线观看| 日韩高清一区 | 国产精品永久久久久| 91视频首页| 色综合久久综合网| 亚洲自拍另类| 国产精品亚洲专区一区| 女人18毛片一级毛片在线 | 国产精品亚洲一区二区三区z| 欧美激情一区二区三区成人| 丁香五月婷婷激情基地| 99热线精品大全在线观看| 国产成人精品在线| 又大又硬又爽免费视频| 手机精品视频在线观看免费| 国产亚洲现在一区二区中文| Jizz国产色系免费| 亚洲a免费| 极品尤物av美乳在线观看| 人妻无码AⅤ中文字| 思思热精品在线8| 最新精品久久精品| 玖玖精品在线| 人妻精品全国免费视频| 毛片视频网址| 国产精品网址你懂的| 91福利一区二区三区| 精品无码日韩国产不卡av| 国产黄在线免费观看| 欧美成人亚洲综合精品欧美激情| 日本91视频| 美女视频黄又黄又免费高清| 免费在线色| 不卡视频国产| 国产精品成人一区二区不卡| 午夜色综合| 91青青草视频在线观看的| 多人乱p欧美在线观看| 国产精品亚欧美一区二区| 欧美一级一级做性视频| 国产97视频在线观看| 久久亚洲中文字幕精品一区| 国产黄视频网站| 香蕉久久永久视频| 成人福利在线看| 91在线激情在线观看| 午夜成人在线视频| 日本一区高清| 毛片大全免费观看| 一区二区三区四区在线| 亚洲AV无码乱码在线观看代蜜桃 |