一種臺區(qū)智能融合終端SPI通信中不定長數(shù)據(jù)幀的接收方法
技術(shù)領(lǐng)域
[0001] 本申請屬于通信技術(shù)領(lǐng)域,尤其涉及一種臺區(qū)智能融合終端SPI通信中不定長數(shù)據(jù)幀的接收方法。
背景技術(shù)
[0002] 在臺區(qū)智能融合終端SPI(Serial?Peripheralinterface,串行外圍設(shè)備接口)通信的實(shí)際應(yīng)用中,多數(shù)為不定長的通信幀協(xié)議,接收方需要在接收時辨識出每一個完整的幀,便于進(jìn)行后續(xù)從完整幀中獲取有效數(shù)據(jù)。
[0003] 現(xiàn)有SPI不定長接收技術(shù)有兩種:
[0004] 一種是MCU(Microcontroller?Unit,微控制單元))軟件采用在SPI中斷接收程序中根據(jù)通信協(xié)議幀格式,解析出長度字段,再根據(jù)該長度繼續(xù)在SPI中斷服務(wù)函數(shù)中進(jìn)行數(shù)據(jù)接收。這種方法需要MCU軟件在SPI中斷接收程序中對每個接收到的字節(jié)都進(jìn)行幀格式解析,解析過程繁瑣,對于部分幀格式中長度字段不固定的情況,該方法無法實(shí)現(xiàn)接收完整幀。
[0005] 另一種是MCU軟件采用DMA(Direct?Memory?Access,直接存儲器訪問)技術(shù)以固定長度持續(xù)接收,該方法雖然不會造成數(shù)據(jù)丟失,但由于無法得知SPI總線的空閑狀態(tài),造成多幀堆疊在DMA緩沖區(qū)中,需要對緩沖區(qū)中的數(shù)據(jù)進(jìn)行摘取辨識,且需要半幀拼疊,過程繁瑣,在遇到MCU處理器DMA資源有限的情況時,MCU無法采用DMA方法進(jìn)行數(shù)據(jù)接收。
發(fā)明內(nèi)容
[0006] 為克服相關(guān)技術(shù)中存在的問題,本申請實(shí)施例提供了一種臺區(qū)智能融合終端SPI通信中不定長數(shù)據(jù)幀的接收方法,以解決在從板MCU處理器DMA資源有限且通信幀協(xié)議中存在長度字段不固定的情況下,無法實(shí)現(xiàn)接收完整幀的問題。
[0007] 本申請是通過如下技術(shù)方案實(shí)現(xiàn)的:
[0008] 第一方面,本申請實(shí)施例提供了臺區(qū)智能融合終端SPI通信中不定長數(shù)據(jù)幀的接收方法,包括:
[0009] 初始化從機(jī)的SPI接口,對從機(jī)的MCU的SPI寄存器進(jìn)行初始配置,并初始化SPI寄存器的接收中斷程序SPI_IRQ;
[0010] 建立SPI寄存器的接收緩沖區(qū);
[0011] 對MCU的外部中斷寄存器進(jìn)行初始配置,將CS片選信號復(fù)用為外部中斷的觸發(fā)管腳,并將觸發(fā)管腳配置為在CS片選信號上升沿觸發(fā)CS外部中斷信號;
[0012] 基于CS片選信號和接收中斷程序SPI_IRQ將接收到的單字節(jié)數(shù)據(jù)放入接收緩沖區(qū);
[0013] 基于CS片選信號和CS外部中斷信號從接收緩沖區(qū)中取出收到的一幀完整的數(shù)據(jù);
一幀完整的數(shù)據(jù)包括具有字節(jié)累計長度的單字節(jié)數(shù)據(jù)。
[0014] 在第一方面的一種可能的實(shí)施方式中,初始化MCU的SPI接口,對MCU的從機(jī)的配置寄存器進(jìn)行初始配置,包括:
[0015] 配置SPI接口的通信模式;
[0016] 配置SPI寄存器的CS片選信號控制方式為硬件片選信號NSS_Hard;硬件片選信號NSS_Hard用于使從機(jī)根據(jù)主機(jī)的SPI?接口的CS片選信號電平自動開啟接收狀態(tài)。
[0017] 在第一方面的一種可能的實(shí)施方式中,配置SPI接口的通信模式,包括:
[0018] 將MCU的?SPI接口設(shè)置為主機(jī)發(fā)送,從機(jī)接收模式,并配置SPI接口的時鐘的極性和相位與主機(jī)的時鐘的極性和相位一致。
[0019] 在第一方面的一種可能的實(shí)施方式中,初始化SPI寄存器的接收中斷程序SPI_IRQ,包括:
[0020] 配置中斷事件接收非空標(biāo)志RXNE;非空標(biāo)志RXNE用于當(dāng)MCU內(nèi)部SPI接收數(shù)據(jù)非空時,觸發(fā)接收中斷程序SPI_IRQ。
[0021] 在第一方面的一種可能的實(shí)施方式中,對MCU的外部中斷寄存器進(jìn)行初始配置,包括:
[0022] 利用MCU事件線邊沿檢測器,設(shè)置CS外部中斷處理程序,并開啟IO復(fù)用外設(shè)時鐘APB_AFIO,開啟CS片選信號的復(fù)用功能;復(fù)用功能用于將CS片選信號復(fù)用為外部中斷的觸發(fā)管腳,并將觸發(fā)管腳配置為在CS片選信號上升沿觸發(fā)CS外部中斷處理程序。
[0023] 在第一方面的一種可能的實(shí)施方式中,基于CS片選信號和接收中斷程序SPI_IRQ將接收到的單字節(jié)數(shù)據(jù)放入接收緩沖區(qū),包括:
[0024] 當(dāng)主機(jī)拉低CS片選信號,開始發(fā)送數(shù)據(jù)時,觸發(fā)從機(jī)的接收中斷程序SPI_IRQ,將接收到的單字節(jié)數(shù)據(jù)放入接收緩沖區(qū),并保存接收到的單字節(jié)數(shù)據(jù)的字節(jié)累計長度。
[0025] 在第一方面的一種可能的實(shí)施方式中,基于CS片選信號和CS外部中斷處理程序從接收緩沖區(qū)中取出收到的一幀完整的數(shù)據(jù),包括:
[0026] 當(dāng)主機(jī)拉高CS片選信號時,?CS片選信號上升沿觸發(fā)從機(jī)的CS外部中斷信號EXTI;
CS外部中斷信號EXTI由CS外部中斷處理程序控制;
[0027] 在外部中斷處理程序中,從接收緩沖區(qū)中按照字節(jié)累計長度取出收到的一幀完整的數(shù)據(jù)。