狀態寄存器中各位定義如下:
BSY:驅動器忙;
DRDY:驅動器準備好;
DWF:驅動器寫失敗;
DSC:尋道結束;
DRQ:請求服務,驅動器希望通過數據寄存器與CPU交換一字節數據;
CORR:當可以糾正的讀錯誤發生時,該位置1,數據傳輸將繼續進行;
IDX:收到綜引信號;
ERR:命令執行出錯。
在向硬盤驅動器發出命令前,必須先檢測硬盤驅動器是否忙碌(D7=1)。如果在規定時間內硬盤驅動器一直忙碌,則置超時錯;否則表示硬盤驅動器空閑,可接受命令。
如果CPU要對硬盤寫數據,首先CPU把必要的參數寫入對應的地址寄存器,等待DRDY有效;然后將操作碼寫入命令寄存器,同時驅器設置狀態寄存器的DRQ位,表示準備好接收數據,CPU通過數據寄存器將數據寫入扇區緩沖區;當扇區緩沖區填滿后,驅動器清除DRQ位,并置位BSY,驅動器將扇區緩沖區中數據寫入磁盤;當寫盤結束,清除BSY位,發中斷請求信號DNTRQ;CPU接收到中斷信號后,讀驅動器狀態寄存器,同時將中斷信號INTRQ撤除。
如果CPU要對硬盤進行讀數據操作,首先把參數寫入地址寄存器和特性寄存器(如果需要);然后把命令碼寫入命令寄存器,命令開始執行。這時驅動器置狀態寄存器中的BSY為1,同時將硬盤上指定扇區內的數據送入扇區緩沖區。當扇區緩沖區準備好數據后,置位DRQ,清BSY,發中斷請求信號INTRQ。CPU檢測到中斷后,讀取狀態寄存器,測試ERR位,若等于1則轉入出錯處理;否則DRQ位為1,CPU從扇區緩沖區讀取數據,數據讀完后,驅動器復位DRQ位,然后驅動器重新設置BSY位。
1.3 工作原理
基于IDE硬盤的大容量語音記錄儀主要由單片機,D6571E、IDE接口筆記本硬盤、A律編解碼芯片TP3057、可編程邏輯器件MAX7128S、160×32LCD模塊、鍵盤、時鐘芯片、振鈴檢測芯片TCM1520A、電話線接口和電源等部分組成,系統原理框圖如圖3所示。
單片機選用WINBOND公司的W78E52。它是整個系統的控制核心,完成對IDE硬盤、LCD等的初始化,接收D6571E壓縮后的語音數據并存儲在硬盤上,通過D6571E回放硬盤上的語音數據。W78E52是一款完全與8051兼容的8位單片機,它增加了Watchdog Timer和內部電源管理等功能,并且是目前少數可運行在最高40MHz晶振的單片機之一。本系統中的單片機W78E52運行在40MHz晶振下,以提高運行速度。
整個系統的數字邏輯部分采用一片ALTERA公司的大規模可編程邏輯器件MAX7128S,它完成單片機與IDE硬盤、D6571E、LCD顯示和鍵盤的接口邏輯控制。可編程邏輯器件MAX7128S的程序設計采用目前較為通用和流行的VHDL語言,用MAX+plus II和FPGA Express軟件編譯仿真完成。
一片D6571E完成對并聯話機狀態的監測。當D6571E監測到并聯線路上有語音信號時,判斷并聯話機有去話;當振鈴檢測芯片TCM1520A檢測到并聯線路上有振鈴時,判斷并聯話機有來話。當并聯話機存儲來話和去話時,D6571E開始記錄語音,并將壓縮的語音數據實時傳送給單片機。單片機負責將語音數據存儲在硬盤上,并附加上相關的日期時間、來去話標志、主被叫電話號碼和通話時長等索引內容,以便查詢使用。當本機需要回放語音記錄或遠程調度時,單片機將硬盤上的語音壓縮數據通過另外一片D6571E解壓轉變成語音。
160×32 LCD可顯示16×16點陣的漢字兩行,每行10個漢字。它主要用于顯示系統的日期時間、提示信息或狀態信息,方便用戶的使用。
系統中鍵盤可實現本機對語音記錄的回放選擇以及對D6571E工作的預置值進行設定,如語音壓縮率的選擇、調節音量等。
遠程調度電話線接口可實現遠程監聽和查詢等功能。系統在檢測到遠程調度電話線上的振鈴信號后,將模擬摘,同時向主叫播放語音提示。主叫可按照語音提示操作,即可監聽到硬盤上的任意一段語音記錄,甚至可以監聽到系統正在記錄的語音。
2 系統軟件設計
系統軟件包含有主程序、中斷服務程序和任務子程序等。
主程序主要完成對IDE硬盤、D6571E、LCD等的初始化,并檢測任務表是否空,若不空則執行相應任務。圖4所示為系統主程序流程圖。
中斷服務程序主要包括T0中斷服務程序、INT0中斷服務程序、INT1中斷服務程序等。T0中斷服務程序主要負責定時喂看門狗、掃描鍵盤讀鍵值等,并寫相關任務到任務表中。INT0、INT1中斷服務程序分別響應系統中2片D6571E的中斷請求,將并聯話機通話的語音壓縮任務和記錄語音的播放任務寫到任務表中,待主程序調用執行。
任務子程序主要有LCD顯示子程序、D6571E對語音的壓縮子程序、D6571E對語音的解壓子程序、讀寫IDE硬盤子程序、振鈴處理子程序等。





