該系統的程序設計主要包括兩大部分,分別是USB接口部分固件程序和計算機端的CH372驅動程序。前者主要包括了單片機和CH372的初始化、讀寫接口程序和中斷服務程序;后者包括了USB設備的驅動程序和相關應用程序的編寫。這里主要介紹USB接口部分固件程序。
在本例中CH372工作在內部固件模式,通過8位并行數據總線掛接到單片機AT89C51上,并通過端點2上的上傳端點和下傳端點完成USB數據的讀寫。在本地端,CH372芯片以內置的固件程序自動處理了USB通信中的基本事務,在計算機端,提供了驅動程序的應用層調用接口,用以完成USB設備與計算機間的通信。
由于CH372支持內部固件模式,以內置的固件程序自動處理USB通信中的基本事務,所以程序設計不需要考慮USB枚舉配置過程,大大簡化了程序。
1.變量定義和基本操作函數
該部分主要包括了CH372命令、數據端口地址的定義,對操作命令碼的定義,延時函數以及CH372的數據讀寫和寫命令基本操作函數等幾部分內容。
(1)變量的定義。
該部分主要包括了對CH372命令、數據端口地址、USB數據緩沖區以及操作命令代碼的定義,其程序代碼如下:
(2)基本操作函數。
該部分是進行CH372讀寫的基本操作程序,主要包括以下幾個函數。
函數DelayMs:延時毫秒。
函數Delayus:延時微秒。
函數WR_CH372_CMD_PORT:向CH372命令端口寫命令數據。
函數WR_CH372_DAT_PORT:向CH372數據端口寫數據。
函數RD_CH372_DAT_PORT:從CH372命令端口讀數據。
①函數DelayMs:在CH372讀寫過程中需要用到毫秒延時,該函數可以滿足要求,程序代碼如下。
②函數Delayus:在讀寫命令的過程中經常要用到微秒的延時,該函數可以用來調用,其程序代碼如下。
③函數WR_CH372_CMD_PORT:用以向CH372命令端口寫命令數據,周期不小于4μs,如果太快則延時,其程序代碼如下。
④WR_CH372_DAT_PORT:用以向CH372數據端口寫數據,周期不小于1.5μs,如果太快則延時,其程序代碼如下。
⑤RD_CH372_DAT_PORT:用以從CH372命令端口讀數據,周期不小于1.5μs,如果太快則延時,其程序代碼如下。
2.系統初始化
系統初始化包括單片機的初始化和CH372的初始化。單片機的初始化主要是完成外部中斷INTO、I/O口等的初始化,程序較為簡單,在這里不做詳細介紹。CH372初始化主要用以其上電復位后,將默認的工作模式(未啟用模式)初始化為外部固件模式或內部固件模式,并檢查CH372的工作狀態是否正常,以便對錯誤進行及時處理。其流程圖如下圖所示。
CH372初始化的程序代碼如下。
3.讀寫接口函數及中斷服務函數
本例中CH372工作在內部固件模式,使用端點2的上傳端點和下傳端點。CH372芯片專門用于處理USB通信,在檢測到USB總線的狀態變化時或者命令執行完成后,CH372以中斷方式通知單片機進行處理。
該部分主要包括以下3個函數。
函數CH372_RD_EP2:CH372的讀取數據程序。
函數CH372_WR_EP2:CH372的寫數據程序。
函數CH372_lnt0:CH372中斷服務程序。
(1)CH372的讀取數據函數CH372_RD_EP2。
該函數主要用以實現從CH372端點2的上傳端點讀出上位機發來的數據,單次的最大長度為64字節,當收到上位機數據后產生USB_INT_EP2_OUT(02)中斷。其程序代碼如下。
(2)CH372的寫數據函數CH372_WR_EP2。
該函數主要實現向CH372端點2的上傳端點寫入Length長度的數據,單次最大長度為64字節,當上位機接收數據后產生USB_INT_EP2_IN(OA)中斷。其程序代碼如下。
(3)CH372的中斷服務函數CH372_1nt0。
該函數為外部中斷服務函數,主要用以響應USB接口芯片的中斷。中斷服務函數的工作步驟如下。
①單片機進入中斷服務程序時,首先執行GET_STATUS命令獲取中斷狀態。CH372在GET_STATUS命令完成后,將INT#引腳恢復為高電平,取消中斷請求。如果通過上述GET_STATUS命令獲取的中斷狀態是下傳成功,則單片機執行RD_USB_DATA命令從CH372讀取接收到的數據,CH372在RD_USB_DATA命令完成后釋放當前緩沖區,從而可以繼續USB通信。單片機退出中斷服務程序;如果通過上述GET_STATUS命令獲取的中斷狀態是上傳成功,則單片機執行WR._USB_DATA命令向CH372寫入另一組要發送的數據。如果沒有后續數據需要發送,單片機就不必執行WR_USBDATA命令。
②單片機執行UNLOCK_USB命令。
CH372在UNLOCK_USB命令完成后釋放當前緩沖區,從而可以繼續USB通信。
③單片機退出中斷服務程序。
如果單片機已經寫入了另一組要發送的數據,則CH372被動地等待USB主機在需要時取走數據,然后繼續等待CH372向單片機請求中斷,否則結束。
CH372的中斷服務函數的程序代碼如下:
注意事項
1.硬件方面
(1)在設計PCB板時應注意:退耦電容C3和C4盡量靠近CH372的相連引腳;UD+和 UD-信號線貼近平行布線,盡量在兩側提供地線或者覆銅,減少來自外界的信號干擾;盡量縮短XI和XO引腳相關信號線的長度,在相關元器件周邊環繞地線或者覆銅。
(2)為進一步地保護CH372的UD+和UD-信號線,對于需要頻繁帶電插拔USB設備的應用場所或靜電較強的環境,建議在電路中增加USB信號瞬變電壓抑制器件。
(3)對于支持睡眠功能的CH372芯片,在其睡眠期間,應該使CH372的各個I/O引腳(除RSTI引腳)處于懸空或者高電平狀態,避免產生不必要的上拉電流。
2.軟件方面
在單片機程序設計中,應注意命令的延時及讀取數據的時間間隔。主程序在檢測到USB設備連接后,等待數百毫秒再對其進行操作。
上一篇:基于PROG-100單片機讀寫24C01的應用程序
下一篇:uIP在51單片機上的移植
推薦閱讀
史海拾趣
隨著電子行業的快速發展,e2v不斷拓展其產品線,以滿足市場的多樣化需求。除了傳統的圖像傳感器產品外,公司還開發了示波器數據轉換器、高性能圖像處理器等,廣泛應用于科學、醫學、工業、汽車和電信等領域。這些產品的推出,不僅拓展了e2v的市場空間,也為其帶來了可觀的經濟效益。
在追求經濟效益的同時,淩志比高公司也積極履行社會責任。公司注重環保和可持續發展,采用環保材料和生產工藝,減少對環境的影響。此外,淩志比高還積極參與社會公益事業,為社會做出貢獻。這種負責任的態度贏得了社會各界的認可和尊重。
請注意,以上故事僅為虛構示例,并不代表任何真實公司的實際情況。如果您對淩志比高公司有進一步的了解需求,建議直接訪問其官方網站或查閱相關新聞報道以獲取準確信息。
在電動汽車領域,技術創新是企業生存和發展的關鍵。菲斯克一直致力于研發更加先進、更加環保的電動汽車技術。經過多年的努力,公司終于在某項關鍵技術上取得了重大突破。這一突破不僅提升了電動汽車的性能和續航里程,還為公司贏得了市場的廣泛認可。菲斯克憑借這一技術優勢,成功推出了一系列備受好評的電動汽車產品,進一步鞏固了其在市場中的地位。
菲斯克(FSR.US)作為一家新興的電動汽車制造商,自創立之初便面臨著巨大的挑戰。資金緊張是公司面臨的首要問題,為了維持運營和推進研發,公司不得不頻繁地尋求融資。在一次次的融資嘗試中,菲斯克展現了其堅定的決心和創新的理念,雖然過程充滿艱辛,但公司最終通過不斷努力,成功獲得了一筆重要的投資,為公司的發展奠定了堅實的基礎。
深圳瑞先德科技有限公司是北京瑞先德科技發展中心位于深圳的子公司。我公司在不斷推出各種優質普通語音芯片的同時,又新推出語音識別IC(芯片)及模塊,能與人對話的特定人整詞語音識別專用IC(芯片)及模塊和非特定人整詞語音識別專用IC(芯片)及模 ...… 查看全部問答∨ |
目前世界各國正在研究48VDC汽車用電源系統,歐共體計劃從2008年開始采用48VDC電源系統。如何在48VDC電源系統下兼容12VDC電子設備成為了一個課題。通過線性穩壓電源實現48VDC/12VDC的轉換會產生很大的功率損耗,缺點明顯。 本文提出了一種具有過載 ...… 查看全部問答∨ |
<IMG style="CURSOR: hand" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor=\'hand\'; this.alt=\'Click here to open new window\\nCTRL+Mouse wheel to zoom in/o ...… 查看全部問答∨ |
|
本帖最后由 ddllxxrr 于 2016-1-7 16:47 編輯 3.2MHz,35MHz,60MHz,100MHz,49S直插,最好一個地方能買好.幫人問的. … 查看全部問答∨ |
用SensorTag+MSP430采集環境參數,LabVIEW上位機顯示 用SensorTag+MSP430采集環境參數,LabVIEW上位機顯示 用MSP430MCU采集環境參數,傳感器包括空氣溫濕度傳感器、土壤溫濕度傳感器、光強度傳感器、人體紅外傳感器、氣敏傳感器等等,然后用SensorTag套件傳輸 ...… 查看全部問答∨ |
【曬樣片】+用于低功耗可穿戴應用的符合 Qi (WPC) 標準的無線充電器 解決方案 本帖最后由 fyaocn 于 2015-1-26 15:39 編輯 1、用于低功耗可穿戴應用的符合 Qi (WPC) 標準的無線充電器是用于設計適合低功耗可穿戴設備。其中包括符合 Qi 標準的無線接收器bq25003 和超低電流單節鋰離子線性電池充電器 (bq25100)。 ...… 查看全部問答∨ |