使用CH552G接收電腦上位機發(fā)送的數(shù)據(jù)。由于要使用io發(fā)送波形,頻率達800khz,因而要關(guān)閉總中斷使能。發(fā)送的波形是125ms時間內(nèi)發(fā)送0.7ms的波形。發(fā)送完,再打開總中斷使能。而后就接收不到上位機發(fā)送的數(shù)據(jù)。用的是p2端接收數(shù)據(jù)。
可以嘗試在關(guān)閉中斷前先將端點接收應(yīng)答置為NAK,開啟中斷后再置為ACK,也可以嘗試另外增加與上位機的協(xié)議,再關(guān)閉中斷前上傳數(shù)據(jù)提前告知主機后續(xù)無法接收狀態(tài),開啟中斷后再告知主機可接收,具體可以用一些抓包工具看看數(shù)據(jù)通訊流程。
你給的方案好像不行。能使用timer作為中斷,且將timer的中斷優(yōu)先級為最高。在中斷里發(fā)波形。這個方法可以嗎?
頻率達800khz。你是想發(fā)WS2812的數(shù)據(jù)吧。
WS2812高電平期間不能中斷,但低電平可以。只要低電平延長時間少于RESET時間就行。
參考
https://wp.josh.com/2014/05/13/ws2812-neopixels-are-not-so-finicky-once-you-get-to-know-them/
另外正常情況下主機收到NAK可以等。才0.7ms不至于超時。我這邊測試禁用中斷100ms主機都可以等。你可以拿邏輯分析儀看看數(shù)據(jù)包在中斷前后有什么異常。
請問:主頻改為16mhz,對usb通信有影響嗎?
理論不會對USB造成影響,具體問題應(yīng)當具體分析