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





