會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





[dspic33ep512mu810] DMA USART接收問題
中級會員
註冊日期:
2004/05/14 17:09
所屬群組:
註冊會員
文章: 64
等級: 6; EXP: 89
HP : 0 / 147
MP : 21 / 5644
離線
各位前輩大家好:

小弟用DMA 接收電腦傳來的資料, 共12bytes, 目前有個問題, 如果有一次接收到的資料亂掉的話, (例如多一個bytes 或少一個bytes), 整個就會亂掉, 因為它收到12bytes 就中斷, 每次的格式都不一樣, 請問要如何讓DMA重新重頭開始接收呢?

我有試過把它重設(先把 CHEN關掉, 然後將相關暫存器重設後再打開) 也是無效, 請問有什麼方法能解決呢?? 謝謝!!

1月23日 13:06:56
轉換PDF檔 列印


Re: [dspic33ep512mu810] DMA USART接收問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 13980
等級: 72; EXP: 24
HP : 1068 / 1781
MP : 4660 / 68448
離線
UART 建議以封包格式傳輸。因為 UART 採用非同步方式,如果連續不間斷的連續傳輸資料會造成位元的累計誤差變大,導致資料取樣點偏掉了所以資料就錯了。

要避免連續不間斷的傳輸方式,建議使用封包的方式。每隔封包間隔一個 Byte 的時間讓接收端能夠修正 Stert Bit 的偵測充新將取樣的累積誤差歸零,這樣就不會發生一錯就連序錯誤的問題。

以上是個人的經應。

1月24日 11:46:06
轉換PDF檔 列印


Re: [dspic33ep512mu810] DMA USART接收問題
中級會員
註冊日期:
2004/05/14 17:09
所屬群組:
註冊會員
文章: 64
等級: 6; EXP: 89
HP : 0 / 147
MP : 21 / 5644
離線
感謝回答!
我會試著用usart的interrupt來一個bytes一個bytes處理, 但我還是想知道, 要怎麼把dma重置, 讓裡面的東西清掉重來呢??

1月24日 22:19:30
轉換PDF檔 列印


Re: [dspic33ep512mu810] DMA USART接收問題
資深會員
註冊日期:
2007/11/05 08:29
所屬群組:
註冊會員
文章: 203
等級: 13; EXP: 28
HP : 0 / 307
MP : 67 / 8649
離線
引用:

我有試過把它重設(先把 CHEN關掉, 然後將相關暫存器重設後再打開) 也是無效

所謂的<無效>是指甚麼?

不曉得是不是 UART 的問題 因為 如果 UART 有錯 要先清掉 Error Flags 才能再動作

1月25日 09:24:22
轉換PDF檔 列印


Re: [dspic33ep512mu810] DMA USART接收問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 13980
等級: 72; EXP: 24
HP : 1068 / 1781
MP : 4660 / 68448
離線
DMA 的儲存空間也是內部的 RAM,要清除它只能用 RAM 清除的方式來做。因為你知道 DMA 的起始位址也知道 DAM 的 size,所以就用傳統的軟體方式來清除。

無需改用 "usart的interrupt來一個bytes一個bytes處理" 我所建議的是封包型式的傳輸,自己定一格是假設一個封包的資料長度為 10 ~ 20 Bytes 的資料。我是說當傳完這一個封包後,發送端暫停一下後(約10-bit的時間) 讓接收腳電位維持在 Hi 再傳送下一個封包。

1月25日 12:21:02
轉換PDF檔 列印


Re: [dspic33ep512mu810] DMA USART接收問題
中級會員
註冊日期:
2004/05/14 17:09
所屬群組:
註冊會員
文章: 64
等級: 6; EXP: 89
HP : 0 / 147
MP : 21 / 5644
離線
我的意思是:
如果dma要接收一個封包 12個bytes 產生中斷. 但可能機器開的是時候, 剛好收到第5個byte, 這樣一來, dma 接收到12個bytes時, 封包就不正確. 請問我要怎麼把它調整回來?

謝謝!!!

3月06日 21:31:43
轉換PDF檔 列印


Re: [dspic33ep512mu810] DMA USART接收問題
資深會員
註冊日期:
2007/11/05 08:29
所屬群組:
註冊會員
文章: 203
等級: 13; EXP: 28
HP : 0 / 307
MP : 67 / 8649
離線
假如你有某特定字元不會出現在資料中 你可拿來當起始碼 先用 UART ISR 來偵測 起始碼 偵測到後再開啟 DMA

如果原始數據沒辦法更改 可能就得根據資料的特性 利用timer來幫助決定何時啟動 DMA

3月07日 17:17:58
轉換PDF檔 列印


Re: [dspic33ep512mu810] DMA USART接收問題
中級會員
註冊日期:
2004/05/14 17:09
所屬群組:
註冊會員
文章: 64
等級: 6; EXP: 89
HP : 0 / 147
MP : 21 / 5644
離線
謝謝回答:
請問如果DMA己經起動後, 才出現問題, 要如何重啟DMA呢??

3月07日 21:08:23
轉換PDF檔 列印


Re: [dspic33ep512mu810] DMA USART接收問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 13980
等級: 72; EXP: 24
HP : 1068 / 1781
MP : 4660 / 68448
離線
建議看一下 dsPIC33FJ Family reference manual 的 Sec26 Development Tool Support 70200B.pdf.

看你的 UART 是用何種 DMA Mode 傳輸: One Short Mode, Continues Mode 或 Ping-Pong Mode。DMA 和 UART 都是可以重新啟動的。以 DMA0 為例可以重新關閉 DMA0 後再重新啟動:

以 One-Short Mode 為例:
DMA0CONbits.CHEN = 1; // Enable DMA0 Channel
DMA0REQbits.FORCE = 1; // Manual mode: Kick-start the 1st transfer

3月08日 15:16:45
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
線上教學影片
網頁捷徑
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project