電腦網絡轉換器接口 接口轉換器( 二 )


軟件的設計與實現3市場上常用的嵌入式ARM平臺開發環境有兩種,分別是Keil MDK和IAR 。凱爾MDK v5是一個集成開發工具,具有最佳性能的ARM系列微控制器,尤其是ARM Cortex-M系列核心微控制器 。因此,本次系統設計選擇Keil uVision5作為軟件開發環境,系統整體軟件設計分為初始化和控制兩部分 。
3.1系統初始化軟件設計
系統的初始化主要是初始化STM32和視頻芯片,調用的關鍵初始化函數如表1所示 。
表1系統初始化的關鍵功能
STM32的初始化:在Keil MDK v5建立的項目中,可以直接使用ST公司編寫的啟動代碼文件startup_ STM32f10x_md.s來初始化控制芯片 。該文件已經配置了芯片系統堆棧的初始化、中斷向量表、系統時鐘的配置等 。用戶只需要配置自己的相關模塊 。
【電腦網絡轉換器接口 接口轉換器】此次使用的STM32資源包括GPIOA、GPIOB、中斷控制、systick定時器、I2C2接口等 。首先調用NVIC_PriorityGroupConfig()函數,將系統中斷優先級設置為組4,子優先級為0和16搶占優先級 。配置systick定時器的參數,調用SysTick_Init()函數,設置中斷時間間隔為1ms,用于延時功能的計時 。
調用RCC_APB1PeriphClockCmd()和RCC_ APB2PeriphClockCmd()函數來使能外設I2C2的時鐘以及安裝在APB1和APB2總線上的GPIOA和GPIOB端口的時鐘 。然后調用KEY_Init()和LCD_Init()函數初始化按鍵和LCD顯示模塊,最后調用Hi_I2C_ Init()函數初始化控制通信接口I2C2 。
專用視頻芯片初始化:STM32通過I2C控制接口讀寫專用視頻芯片的寄存器,完成芯片的初始化配置 。有系統時鐘、鎖相環、上電復位、接口物理參數配置等 。然后調用hdmirx_ init()、lvdstx_init()和i2stx_init()三個SDK庫函數分別初始化芯片的輸入輸出端口,從而完成整個系統的初始化操作 。
3.2系統控制部分的軟件設計
系統的控制代碼包括四個模塊:端口狀態檢測、音視頻格式檢測、鍵盤檢測和輸出控制 。
1)端口狀態檢測
(1)端口狀態檢測模塊 。
系統初始化后,HDMI接口要求即插即用,系統配置要求自適應輸出,因此系統設計要求實時檢測輸入端口狀態,為后續數據處理和輸出配置提供參數 。端口檢測模塊的流程圖如圖2所示 。
圖2端口檢測流程圖
(2)端口狀態檢測方法 。
首先,當前端口輸入狀態now_port_status和先前端口輸入狀態pre_port_status都被設置為零,并且定義了端口定時變量port_status_tick 。該變量會隨著時鐘信號每1ms自動加1(由系統systick定時器中斷觸發),每200ms判斷一次端口檢測時間 。
然后調用庫函數getrx_port_status(&port_status)獲取當前端口輸入狀態,如果當前端口有信號接入,則設置now_port_ status=1,并將now_port_ status與之前的端口輸入狀態pre_port_status進行比較;如果不是,說明當前端口輸入狀態發生了變化,更新LCD上顯示的系統輸入狀態,通知主控模塊做相應處理 。
最后,將now_port_status的值賦給pre_port_status,并更新端口的port_status_tick變量,等待下一次端口狀態檢測 。所有四個輸入端口執行相同的端口狀態檢測處理 。
2)音視頻格式檢測
(1)音視頻檢測模塊 。
在實際應用中,用戶會隨機切換音視頻格式,因此需要在端口狀態檢測后同步檢測輸入音視頻格式的狀態 。音視頻格式狀態檢測涉及的庫函數見表2 。
表2音視頻狀態檢測相關庫函數
(2)音視頻格式檢測方法類似于端口檢測方法 。
首先,構建了系統視頻和系統音頻兩種結構 。system_video用于存儲輸入視頻的端口號、分辨率、采樣格式、幀率、顏色空信息 。System_audio用于存儲端口號、采樣頻率、量化位數、通道號等 。音頻 。定義了一個變量av_status_tick,隨系統時鐘信號每1ms自動加1,每200ms檢測一次音視頻格式 。
然后調用庫函數getrx_av_status (&rx_av_ status)函數獲取當前輸入的音視頻狀態rx_av_status,比較rx_av_ status 。video_format帶最后輸入的音視頻狀態變量pre _ rx _ avpre _ rx _ av _ status . video _ format 。如果它們不相等,則表明輸入的音頻和視頻狀態已經改變 。此時音視頻狀態標志變量rx_av_status_change置1,調用getRx _ video _ format((HDMI Rx _ video *)&(v form . htx))函數,獲取當前輸入的視頻格式信息,更新LCD狀態顯示 。將rx_av_status.audio_format與之前的音頻標志狀態變量pre _ rx _ av pre _ rx _ av _ status . audio _ format進行比較 。
如果它們不相等,則意味著輸入音頻狀態已經改變 。將音頻狀態標志變量rx_av_status_change設置為1,調用HDMI Rx _ get _ audio _ format((HDMI Rx _ video *)&(v form . htx))函數獲取當前輸入音頻格式信息,更新LCD狀態顯示 。接下來,將rx_av_status分配給pre_rx_av_status,并等待下一次音頻檢測 。

推薦閱讀