高速誤碼測試系統(tǒng)中的C8051F005運用
2.2 下位機軟件設計
下位機采用中斷方式實現(xiàn)與上位機的通信,單片機用SPI與VSC8228誤碼測試模塊的通信。每當串行口接收或發(fā)送完一組串行數(shù)據(jù)時,就產生一個中斷請求。串行中斷請求在單片機芯片內部自動由硬件置位發(fā)生,具有實時性高的特點。圖3是單片機的控制程序流程。
對單片機進行程序初始化,包括看門狗、系統(tǒng)時鐘、I/O口、SPI寄存器、UART口等。C8051F005單片機具有看門狗,但是看門狗到一定時間,將重啟單片機,為防止這種現(xiàn)象的產生,初始化里禁止了看門狗。SPI的初始化主要是對啟動SPI的相關控制寄存器進行配置。UART的初始化主要是對串口的控制字進行設置。I/O口的初始化通過設置交叉開關來啟動SPI與UART口,并將有關輸出設置為推挽輸出。
系統(tǒng)時鐘初始化模塊,由于是選擇外部晶振作為時鐘源,根據(jù)C8051F005的要求,在通過外部振蕩器控制寄存器OSCXCN選擇了外部晶振后,需等待至少1ms后再查詢等待OSCXCN寄存器中的D7位,即XTLVLD位變?yōu)?,表明外部晶振正在運行并已工作穩(wěn)定,然后才能通過內部振蕩器控制寄存器OSCICN的D3位,即CLKSL置1來選擇外部晶振。
C8051F005使用4個特殊功能寄存器來實現(xiàn)對SPI的控制和訪問。這4個寄存器分別是控制寄存器(SPI0CN)、數(shù)據(jù)寄存器(SPI0DAT)、配置寄存器(SPIOCFG)和時鐘頻率寄存器(SPI0CKR)。當以C8051F005為主器件時,應將主允許標志(MSTEN,SPI0CN.1)置1,同時將SPI使能SPIEN(SPI0CN.0)置1。通過CKPHA(SPI0CFG.7)和CKPOL(SPI0CFG.6)可選擇SPI相位與極性,從而實現(xiàn)SPI通信的四種模式,但因為VSC8228只支持一種方式,所以將它們同時置為0,則空閑時SCK為低,此時的系統(tǒng)將在上升沿發(fā)送數(shù)據(jù),下降沿接收數(shù)據(jù)(時序圖見圖2)。由于在MCU中,SCK的頻率可從系統(tǒng)時鐘分頻得到,因此該頻率可由下式給出:
其中fsysclk是系統(tǒng)時鐘頻率,SPI0CKR是SPI0CKR寄存器中的8位值。
為了防止上次測試對本次的影響,在程序的初始化之后,對VSC8228寫入重肩命令,這樣每次運行程序都將VSC8228的寄存器恢復為默認值。界面發(fā)送的數(shù)據(jù)為16位,其中8位地址,8位數(shù)據(jù),而且每個數(shù)據(jù)是一個字符。為讓單片機識別控制命令已發(fā)完,最后一個16位數(shù)據(jù)設為FFFF。另外,每16位數(shù)據(jù)之間加入了100 ms的延時,這樣Spcomm控件就會把每16位數(shù)據(jù)當成1幀,單片機也能夠正確地接收所有數(shù)據(jù)。
單片機用中斷的方法來接收界面?zhèn)鬟^來的數(shù)據(jù)。每接到一個數(shù)據(jù),即一個字符,就執(zhí)行中斷子程序,將接收到的數(shù)據(jù)的最低位存人數(shù)組。串口中斷子程序流程如圖4所示。當接收到16個,就接收完1幀,轉入執(zhí)行主程序去對收到的16位進行處理。處理過程就是將收到的16個數(shù)據(jù)(存放在數(shù)組中),通過移位跟“或”運算,綜合成16位的數(shù)據(jù)。然后,通過移位運算,取高8位作為地址,低8位作為數(shù)據(jù)。對于接收的16位數(shù)據(jù),如果不是FFFF,則將提取出來的8位數(shù)據(jù),發(fā)送給提取出來的8位地址對應的寄存器;如果接收的16位數(shù)據(jù)為FFFF,表示所有的控制命令已經發(fā)完,這時VSC8228的全部寄存器設置完畢,VSC8228的碼型產生模塊以及檢測模塊開始工作。此時,單片機每秒掃描一次所有寄存器的值,并將其值通過串口傳給界面,界面對串口傳送過來的數(shù)據(jù)進行處理。
本設計中,SPI的數(shù)據(jù)傳輸過程如下:
評論