主題:EM9170如何使用GPIO14的脈沖計數輸入功能? 共有75118人關注過本帖 |
---|
chang |
1樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
EM9170如何使用GPIO14的脈沖計數輸入功能? Post By:2013-4-17 2:34:00 [只看該作者]
請問如何進行脈沖計數,相關的API函數是什么?
脈沖達到預定數量后能否產生中斷? 謝謝
|
單帖管理 | 引用 | 回復 |
x10 |
2樓 |
Post By:2013-4-17 9:22:00 [只看該作者]
請問你的脈沖最小間隔是多長?
|
|
單帖管理 | 引用 | 回復 |
yy |
3樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2013-4-17 9:28:00 [只看該作者]
你一定要使用GPIO14來進行脈沖計數嗎?9170的IRQ1為GPIO10即CN13的11號針腳,光盤里有提供IRQ的例程,可用于脈沖計數。
|
單帖管理 | 引用 | 回復 |
chang |
4樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2013-4-18 0:38:00 [只看該作者]
脈沖間隔最小5ms.
|
單帖管理 | 引用 | 回復 |
chang |
5樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2013-4-18 0:41:00 [只看該作者]
以下是引用yy在2013-4-17 9:28:00的發言: 你一定要使用GPIO14來進行脈沖計數嗎?9170的IRQ1為GPIO10即CN13的11號針腳,光盤里有提供IRQ的例程,可用于脈沖計數。 不是我一定要用, 你們的數據手冊里寫了GPIO14是脈沖輸入啊,所以我硬件按照GPIO14來設計的。沒有相關API支持嗎? 如果用IRQ,可以用IRQ2嗎? |
單帖管理 | 引用 | 回復 |
x10 |
6樓 |
Post By:2013-4-18 9:13:00 [只看該作者]
我們一般把可以支持的功能都寫出來,根據客戶的需要來完成。EM9170的GPIO14管腳確實可以支持硬件的脈沖寬度測量,當然也可以計數。如果你的脈沖最小間隔是大于5ms(不是<5ms?)的話,采用外部中斷方式更簡單一些。脈寬測量的驅動程序我們因為還沒有客戶提出,所以還沒做。后續會盡快安排增加這個驅動的。
|
|
單帖管理 | 引用 | 回復 |
yy |
7樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2013-4-18 9:45:00 [只看該作者]
我們的數據手冊里,IRQ1是GPIO10,對應CN13的11號針腳。IRQ2是GPIO11,對應CN13的12號針腳啊。
IRQ2是可以使用的,見光盤的IRQ例程,里面有段注釋的說明,要使用IRQ2需要調用SetIRQ(1);然后重啟板子,之后就可以正常調用IRQ2了,不需要再調用SetIRQ(1);了。
|
單帖管理 | 引用 | 回復 |
chang |
8樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2013-4-19 4:36:00 [只看該作者]
我的應用中需要對脈沖進行計數,脈沖的周期在5-10ms,占空比20%-80%。我不需要測量脈寬,只是要準確計數。
我在評估板上測試了一下,用PWM1輸出占空比50%的方波,用IRQ1計數,程序使用光盤中的例程稍加修改。發現PWM頻率在10Hz以上(100ms周期)IRQ計數就跟不上了,漏了很多。 IRQ1的驅動程序究竟能有多快的響應? 另外,函數WaitForIRQ( HANDLE hIrq, DWORD dwTimeout )中的dwTimeout,按字面理解,應該是超過此預設時間之后沒有接受到中斷就退出阻塞,對吧?單位是ms嗎?我試著設了一下,沒看出效果。
|
單帖管理 | 引用 | 回復 |
x10 |
9樓 |
Post By:2013-4-19 9:00:00 [只看該作者]
我們原來的中斷計數判得太嚴格了。已修改了驅動,更新一下內核,IRQ1是完全可以勝任你要求的脈沖計數功能的。請留一個郵件地址,我們把新的內核發給你。謝謝。
|
|
單帖管理 | 引用 | 回復 |
cx |
10樓 |
Post By:2013-4-19 9:58:00 [只看該作者]
chang:新內核文件及相關資料已發您郵箱,請查收。 |
|
單帖管理 | 引用 | 回復 |
chang |
11樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2013-4-20 6:07:00 [只看該作者]
程博士,曹工,yy各位,多謝支持!我把新內核刷到板子上試了一下,似乎沒有明顯改善。
請幫忙看看究竟是哪里有問題。再次感謝!
|
單帖管理 | 引用 | 回復 |
chang |
12樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2013-4-21 19:33:00 [只看該作者]
情況更新:
我一直是用remote display顯示屏幕數據,昨天嘗試了不開remote display,直接將捕獲的中斷數量寫入一個文件再事后檢查,發現中斷數量基本正常了。 在200Hz以上明顯開始有偏差,但由于確切的脈沖數量我手頭沒有工具測量(完全依賴于板上PWM輸出頻率和時間計算),所以并不確定是中斷響應不上還是脈沖數本來就是那么多。 無論如何,從目前單個線程的情況來看應該可以滿足項目的要求了。接下來會繼續測試,也請英創的各位幫忙準確測試脈沖的捕獲響應實時性。 多謝各位!
|
單帖管理 | 引用 | 回復 |
chang |
13樓 信息 | 搜索 | 郵箱 | ||||||||||||||||||||||||||||||||
加好友 發短信 |
Post By:2013-4-21 19:35:00 [只看該作者]
結果列表:
|
||||||||||||||||||||||||||||||||
單帖管理 | 引用 | 回復 |
yy |
14樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2013-4-22 9:30:00 [只看該作者]
你的意思是你每收到一個中斷就用printf打印到屏幕上,然后通過遠程桌面查看結果嗎?
這樣是一定會有問題的,因為printf打印的命令行每次變動都會重新刷新一次屏幕,正常的屏幕刷新10幾次到20幾次,當你一秒嘗試刷新200來次是一定會導致CPU資源不夠用的。你要么降低下屏幕打印的頻率,要么用其他手段打印信息。
|
單帖管理 | 引用 | 回復 |
chang |
15樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2013-4-23 0:50:00 [只看該作者]
我是收到所有中斷后一次性打印結果,不是收一個打一個。現在發現只要不開remote display就可以。只是條件所限,我現在還不能精確測試。
|
單帖管理 | 引用 | 回復 |
yy |
16樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2013-4-23 16:33:00 [只看該作者]
遠程桌面大概會占大概50%的CPU資源,當CPU資源被全部消耗光就可能導致線程不能及時獲取中斷信息。
我們計劃添加一個方法讀取產生的中斷總數,這樣即使沒有及時處理中斷事件,依然可能通過該函數獲得期間的中斷計數。
|
單帖管理 | 引用 | 回復 |
chang |
17樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2013-4-24 3:33:00 [只看該作者]
如果能有這樣的函數就更好了,最好能提供兩個方法:一個讀取中斷總數,一個將其清零以重新計數。
|
單帖管理 | 引用 | 回復 |
yy |
18樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2013-4-24 9:36:00 [只看該作者]
最新內核已經修改了,我測試了下好的,你關注下我們網站,應該會整理下發布信息及最新下載的。
hIRQ為IRQ句柄 DWORD len; int inum; ReadFile(hIRQ, &inum, 4, &len, NULL); 就可以讀出IRQ的總計數inum,每次調用ReadFile函數,這個計數就會清0重新計數。這樣即使沒有及時調用WaitForIRQ響應中斷事件,也能記錄IRQ中斷數。 [此貼子已經被作者于2013-4-24 9:36:43編輯過]
|
單帖管理 | 引用 | 回復 |