【正文】
子程序。 D S P 初始化時(shí)鐘初始化中斷初始化模式選擇初始化存儲(chǔ)器空間初始化S P I 通信子程序開始圖 33 DSP 部分軟件總體設(shè)計(jì)在完成以上兩個(gè)部分的總體設(shè)計(jì)后,經(jīng)行軟件實(shí)現(xiàn)流程圖的整體設(shè)計(jì),在本文中軟件的整體實(shí)現(xiàn)先從 C8051F340 上電開始,依次完成看門狗的處理、 USB總線的處理、C8051F340 單片機(jī)的初始化、DSP 初始化等準(zhǔn)備工作,隨后根據(jù)INT0 的具體請(qǐng)求經(jīng)行處理是否自舉等,軟件部分具體實(shí)現(xiàn)流行如圖 34:西安工程大學(xué)本科畢業(yè)設(shè)計(jì)(論文)27 C 8 0 5 1 F 3 4 0 上電程序開始 禁止看門狗初始化 U S B 總線時(shí)鐘C 8 0 5 1 F 3 4 0 初始化使能 A P I 中斷S P I 端口初始化復(fù)位 D S P I N T 0 中斷觸發(fā) ?從 F L A S H 提取一組數(shù)據(jù)數(shù)據(jù) A S C Ⅱ 轉(zhuǎn)換數(shù)據(jù)寫入 D S P數(shù)據(jù)發(fā)送完成 ?數(shù)據(jù)是否寫完 ?結(jié)束Y E SY E SY E SN ON ON O圖:34 下位機(jī) C8051F340 程序流程圖西安工程大學(xué)本科畢業(yè)設(shè)計(jì)(論文)28 軟件詳細(xì)設(shè)計(jì)軟件設(shè)計(jì)是本次設(shè)計(jì)整個(gè)系統(tǒng)設(shè)計(jì)中非常重要的環(huán)節(jié),軟件設(shè)計(jì)的功能決定這系統(tǒng)功能的實(shí)現(xiàn),軟件設(shè)計(jì)的效果也關(guān)系這系統(tǒng)功能的能否實(shí)現(xiàn)。本文的軟件總體設(shè)計(jì)分為兩部分:上位機(jī) LabVIEW 程序設(shè)計(jì)和下位機(jī) C8051F340 程序設(shè)計(jì)。 上位機(jī) LabVIEW 詳細(xì)程序設(shè)計(jì)上位機(jī)的程序設(shè)計(jì)包括前面板的程序設(shè)計(jì)和后面板的程序設(shè)計(jì),下面將依次對(duì)其經(jīng)行介紹。 上位機(jī)前面板詳細(xì)程序設(shè)計(jì)LabVIEW 開發(fā)的程序一般由一個(gè)或多個(gè) VI 組成,所有 VI 都可分為前面板和框圖兩部分。前面板是 VI 的交互界面,用戶輸入數(shù)據(jù)通過(guò)前面板傳遞給框圖,計(jì)算和分析結(jié)果也在前面板上以不同方式顯示出來(lái)。圖 35 是本系統(tǒng)的前面板設(shè)計(jì)。該前面板中,通過(guò)設(shè)置路徑將文件信息傳遞給框圖進(jìn)行處理,同時(shí)顯示具體的執(zhí)行信息。USB 的連接狀況也可以通過(guò)面板上的指示燈顯示。圖 35 上位機(jī) LabVIEW 前面板設(shè)計(jì)圖西安工程大學(xué)本科畢業(yè)設(shè)計(jì)(論文)29 上位機(jī)后面板詳細(xì)程序設(shè)計(jì)借助 USBXpress 提供的 USB 主機(jī) API,即 USBXpress 安裝目錄下的 SiU ,可以簡(jiǎn)便的實(shí)現(xiàn)在 PC 機(jī)上通過(guò) LabVIEW 軟件編寫的 GUI 程序與作為 USB 器件的 C8051F 340 單片機(jī)的 USB 通信。USBXpress 提供了 10 個(gè) USB主機(jī) API 函數(shù),通過(guò) LabVIEW 中的 CLF(調(diào)用庫(kù)函數(shù)節(jié)點(diǎn))調(diào)用 USBXpress提供的 USB 主機(jī) API 函數(shù),便可訪問(wèn) USB 底層硬件。圖 36 為本文 LabVIEW上位機(jī)程序調(diào)用 API 的設(shè)計(jì)圖。圖 36 上位機(jī) LabVIEW 調(diào)用 USB 主機(jī) API 設(shè)計(jì)圖LabVIEW 程序在通過(guò)成功調(diào)用 SI_Open()函數(shù)打開 USB 器件,通過(guò)“file path ”函數(shù)獲取待轉(zhuǎn)換文件的具體路徑之后,跳入主循環(huán)。主循環(huán)主要在順序結(jié)構(gòu)中完成文格式的轉(zhuǎn)換和向 USB 寫數(shù)據(jù):首先通過(guò)“”函數(shù)調(diào)用 軟件(與自舉文件位于同一個(gè)目錄) 代碼文件轉(zhuǎn)換為.hex 格式; 格式轉(zhuǎn)換為 .dat 格式;最終在文件轉(zhuǎn)換完畢之后將代碼提取并轉(zhuǎn)換為數(shù)組,并在循環(huán)中調(diào)用 SI_Open()函數(shù)以每次 512 字節(jié)的速度將數(shù)據(jù)寫入 USB 器件。詳細(xì)程序設(shè)計(jì)如圖 37 所示。西安工程大學(xué)本科畢業(yè)設(shè)計(jì)(論文)30圖 37 上位機(jī) LabVIEW 主函數(shù)設(shè)計(jì)圖 下位機(jī) C8051F340 詳細(xì)程序設(shè)計(jì)本小節(jié)將從通信協(xié)議的制定、DSP 部分程序設(shè)計(jì)和單片機(jī)部分程序設(shè)計(jì)三方面詳細(xì)介紹畢業(yè)設(shè)計(jì)中的軟件設(shè)計(jì)。 主程序設(shè)計(jì)主程序的下位機(jī)軟件設(shè)計(jì)的基礎(chǔ),在下位機(jī)軟件設(shè)計(jì)中主程序有著非常重要的地位。在本次主程序設(shè)計(jì)部分主要包括禁止看門狗、USB 初始化、初始化單片機(jī) C8051F3調(diào)用執(zhí)行自舉程序 和 FLASH 擦寫。程序執(zhí)行流程如圖 38:西安工程大學(xué)本科畢業(yè)設(shè)計(jì)(論文)31 開始禁止看門狗初始化 U S B 總線初始化單片機(jī) C 8 0 5 1 F 4 3 0使能 A P I 中斷執(zhí)行自舉程序 ( b o o t l o a d e r )B o o t F L A G = 0B o o t F L A G 是否為 1Y E SN OB 圖 38 主函數(shù)流程圖在主函數(shù)設(shè)計(jì)中,各部分具體程序代碼及相關(guān)解釋如下: 禁止看門狗部分為了使程序順利執(zhí)行,在程序開始部分禁止看門狗,禁止看么狗相對(duì)簡(jiǎn)單,代碼如下:PCA0MD amp。= ~0x40。 USB 初始化部分USB 初始化部分主要是調(diào)用一些庫(kù)函數(shù)對(duì) USB 總線的處理,在處理過(guò)程西安工程大學(xué)本科畢業(yè)設(shè)計(jì)(論文)32中調(diào)用 AN169USB 通信庫(kù)函數(shù) USB_Clock_Start()。完成初始化 USB 總線時(shí)鐘,調(diào)用 AN169USB 通信庫(kù)函數(shù) USB_Init()完成 USB 總線使能,調(diào)用 AN169USB 通信庫(kù)函數(shù) USB_Int_Enable()。完成 API 中斷使能。具體代碼如下:USB_Clock_Start()。USB_Init(USB_VID,USB_PID,USB_MfrStr,USB_ProductStr,USB_SerialStr,USB_MaxPower,USB_PwAttributes,USB_bcdDevice)。 USB_Int_Enable()。 初始化單片機(jī) C8051F340 部分單片機(jī) C8051F340 初始化包括對(duì)端口 0 和端口 1 的配置和端口 I/O 交叉開關(guān)的配置,具體程序代碼如下:Port_Init{P0MDOUT = 0x0D。 P1MDOUT = 0x0F。P0SKIP = 0x8F。P1SKIP = 0x0F。XBR1 = 0x40。 } 自舉程序自舉程序是用來(lái)實(shí)現(xiàn)自舉功能,在編寫過(guò)程中,編寫了自舉子程序bootloader()。用來(lái)實(shí)現(xiàn)自舉功能,自舉子程序 bootloader()。的具體實(shí)現(xiàn)過(guò)程將在后面自舉程序詳細(xì)設(shè)計(jì)中介紹。 初始化程序設(shè)計(jì) 初始化時(shí)程序正常運(yùn)行的前提,也是程序執(zhí)行過(guò)程的第一步。在該模塊中初始化部分包括對(duì)單片機(jī) C8051F340 的初始化、USB 總線的初始化和對(duì) SPI 端口的初始化。單片機(jī) C8051F340 的初始化單片機(jī) C8051F340 的初始化是為整個(gè)模塊的運(yùn)行做準(zhǔn)備,以至自舉過(guò)程的西安工程大學(xué)本科畢業(yè)設(shè)計(jì)(論文)33正常順利執(zhí)行。單片機(jī)的初始化包括初始化時(shí)鐘以及端口的配置等,其中對(duì)端口 0 和端口 1 的配置和端口 I/O 交叉開關(guān)的配置通過(guò)調(diào)用 Port_Init()子函數(shù)來(lái)完成。具體的初始化代碼如下:() CLKSEL |= 0x02。 RSTSRC |= 0x02。 Port_Init{P0MDOUT = 0x0D。 P1MDOUT = 0x0F。P0SKIP = 0x8F。P1SKIP = 0x0F。XBR1 = 0x40。 } USB 總線的初始化USB 總線的初始化是為上位機(jī)與下位機(jī)的通信提供保障,使得上位機(jī)轉(zhuǎn)換后的程序代碼能夠正常存儲(chǔ)到下位機(jī)單片機(jī) C8051F340 的 FLASH 中,通過(guò)調(diào)用AN169USB 通信庫(kù)函數(shù) USB_Clock_Start()完成初始化 USB 總線時(shí)鐘;調(diào)用AN169USB 通信庫(kù)函數(shù) USB_Init()完成 USB 總線使能;調(diào)用 AN169USB通信庫(kù)函數(shù) USB_Int_Enable()完成 API 中斷使能。SPI 端口的初始化SPI 端口的初始化是為了實(shí)現(xiàn)該模塊與測(cè)試模塊的通信,通過(guò)通信來(lái)實(shí)現(xiàn)自舉結(jié)果的測(cè)試。初始化過(guò)程比較簡(jiǎn)單,初始化用以下程序代碼完成:RS=1。BFSR0=0。 BCLKR0=0。 通信程序設(shè)計(jì) 通信時(shí)該模塊的一個(gè)主要部分,在該模塊中有關(guān)下位機(jī)利用 API 實(shí)現(xiàn) USB西安工程大學(xué)本科畢業(yè)設(shè)計(jì)(論文)34通信的具體流程圖如圖 39 所示:C 8 0 5 1 F 3 4 0 上電復(fù)位程序開始程序結(jié)束C 8 0 5 1 F 3 4 0 初始化調(diào)用用戶上層程序是否進(jìn)行U S B 通信初始化 U S B 總線時(shí)鐘使能 U S B 總線使能 A P I 中斷向 U S B 主機(jī)寫數(shù)據(jù)塊或讀取 U S B 主機(jī)數(shù)據(jù)塊U S B 通信是否完成掛起 U S B 中斷關(guān)閉 U S B 接口YYNN圖 39 下位機(jī)利用 API 實(shí)現(xiàn) USB 通信流程圖流程圖中的部分代碼及注釋如下: 初始化 USB 總線時(shí)鐘初始化 USB 總線時(shí)鐘通過(guò)調(diào)用 AN169USB 通信庫(kù)函數(shù) USB_Clock_Start()完成,程序代碼如下:USB_Clock_Start()。 使能 API 中斷使能 API 中斷通過(guò)調(diào)用 AN169USB 通信庫(kù)函數(shù) USB_Int_Enable()完成,具體代碼如下:USB_Int_Enable()。 使能 USB 總線西安工程大學(xué)本科畢業(yè)設(shè)計(jì)(論文)35使能 USB 總線通過(guò)調(diào)用 AN169USB 通信庫(kù)函數(shù) USB_Init()完成,具體代碼如下:USB_Init()。 向 USB 主機(jī)寫數(shù)據(jù)塊或向 USB 主機(jī)讀數(shù)據(jù)塊程序通過(guò)調(diào)用 Block_Write()子函數(shù)完成向 USB 主機(jī)寫數(shù)據(jù)塊,調(diào)用 Block_Read()子函數(shù)完成讀取 USB 主機(jī)數(shù)據(jù)塊,代碼如下:Block_Write()。 Block_Read()。 掛起 USB 中斷掛起 USB 中斷通過(guò)調(diào)用 AN169USB 通信庫(kù)函數(shù) USB_Suspend()完成,具體代碼如下:USB_Suspend()。 關(guān)閉 USB 接口關(guān)閉 USB 接口通過(guò)調(diào)用 AN169USB 通信庫(kù)函數(shù) USB_Disable()完成,具體代碼如下:USB_Disable()。 自舉程序設(shè)計(jì) 對(duì)于 TMS320C54x DSP 芯片來(lái)說(shuō),一般都在芯片內(nèi)設(shè)置有自啟動(dòng)(BOOT)程序。BOOT 程序的主要作用是在開機(jī)時(shí)將用戶程序從外部裝入到程序存儲(chǔ)器ROM 中,即 TMS320VC5416 片內(nèi) 4KROM 掩膜設(shè)計(jì)的程序中包含自舉程序。在我們?cè)O(shè)計(jì)的自舉程序 bootloader()主要完成 SPI 端口的初始化、復(fù)位 DSP,在自舉程序開始后完成從 FLASH 中提取數(shù)據(jù)、數(shù)據(jù)的 ASCII 轉(zhuǎn)換和將數(shù)據(jù)寫入DSP 中。自舉程序流程如圖 310:西安工程大學(xué)本科畢業(yè)設(shè)計(jì)(論文)36開始S P I 端口初始化復(fù)位 D S P數(shù)據(jù) A S C I I 碼轉(zhuǎn)換自舉開始 , 從 F L A S H中提取一組數(shù)據(jù)I N T 0 中斷觸發(fā)數(shù)據(jù)寫入 D S P結(jié)束YN 圖 310 自舉函數(shù)流程圖在自舉程序 bootloader()中各部分主要代碼和相關(guān)解釋如下:SPI 端口的初始化程序代碼RS=1。BFSR0=0。BCLKR0=0。 復(fù)位 DSP 程序代碼在復(fù)位 DSP 部分首先完成 DSP 的復(fù)位,然后等待 DSP 的 XF 引腳觸發(fā)INT0 中斷。 RS=0。 Delayms(1000)。 INT0_FLAG=1。 RS=1。 do { }while(INT0_FLAG)。 發(fā)送數(shù)據(jù)程序代碼 for(i=0。i16。i++) {西安工程大學(xué)本科畢業(yè)設(shè)計(jì)(論文)37 BDR0= (w amp。 (0x8000 i)) 0。 BCLKR0=1。 BFSR0=0。 delayus(20)。 BCLKR0=0。 delayus(20)。 }數(shù)據(jù) ASCII 轉(zhuǎn)換部分編寫一個(gè)子函數(shù) ASCII_Transform()用于將loader_ARRA 中存放的直接從 FLASH 文件中讀取的 ASCII 字符數(shù)據(jù)轉(zhuǎn)換為相應(yīng)16 進(jìn)制數(shù),轉(zhuǎn)換過(guò)程中每四個(gè) ASCII 字符轉(zhuǎn)換為一個(gè) 16bit 字。 DSP 測(cè)試程序設(shè)計(jì)在 SPI 通信過(guò)程中將 DSP 系統(tǒng)設(shè)置為主機(jī),所以 DSP 運(yùn)行 SPI 主機(jī)程序。此程序設(shè)計(jì)中先對(duì) DSP 進(jìn)行初始化,包括 DSP 的 MCBSP0 的初始化,接下來(lái)便是 SPI 通信的主程序,在通信的過(guò)程中,從機(jī)(單片機(jī))先給主機(jī)(DSP)發(fā)數(shù)據(jù),在發(fā)數(shù)據(jù)之前,主機(jī)做好接受的準(zhǔn)備,在 DSP 接收數(shù)據(jù)完成后,將接受的