會員登陸
帳號:

密碼:

記住我



忘記密碼?

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


正在流覽:   1 名訪客



(1) 2 »


PIC24FJ128GC010透過DMA傳送RS232資料問題
資深會員
註冊日期:
2004/07/12 13:55
所屬群組:
註冊會員
文章: 252
等級: 14; EXP: 84
HP : 0 / 346
MP : 84 / 13781
離線
要一次傳64位元組,但結果只傳5位元組就停,電腦接收到的資料數值為1,2,3,4,5請高手指導錯誤.
程式主要如下

unsigned char Array2[100];
int i;

for (i=0;i<100;i++)
Array2[i]=i+1;

U2MODE=0x8000;
U2STA=0x0400;
U2BRG=51; //16000000/19200/16-1

DMACONbits.DMAEN=1;
DMACONbits.PRSSEL=1;
DMAH=0x5000; //set lower and upper address limit
DMAL=0x850;
DMASRC0=(unsigned int) & Array2;
DMADST0=(unsigned int) & U2TXREG;
DMACNT0=64;

DMACH0=0;
DMACH0bits.SIZE=1;
DMACH0bits.SAMODE=1;
DMACH0bits.DAMODE=0;
DMACH0bits.TRMODE=2; //Transfer mode Continous
DMACH0bits.CHEN=1; //Channel enable
IFS0bits.DMA0IF=0;
DMACH0bits.CHREQ=1;
while(!IFS0bits.DMA0IF);

Nop();

.........

2015/11/04 07:58
轉換PDF檔 列印


Re: PIC24FJ128GC010透過DMA傳送RS232資料問題
資深會員
註冊日期:
2014/04/12 20:35
所屬群組:
註冊會員
文章: 209
等級: 13; EXP: 48
HP : 0 / 312
MP : 69 / 3534
離線
一般微控制器的接收和傳送Fifo內建只有5個 如dspic30F

你必須自己設計軟體Fifo暫存器處理你的陣列

2015/11/04 08:10
轉換PDF檔 列印


Re: PIC24FJ128GC010透過DMA傳送RS232資料問題
資深會員
註冊日期:
2004/07/12 13:55
所屬群組:
註冊會員
文章: 252
等級: 14; EXP: 84
HP : 0 / 346
MP : 84 / 13781
離線
如果DMA傳送時,還要CPU介入,那就失去DMA的功用吧?!
我有使用過dspic33系列,DMA透過RS232傳24位元組,沒有失敗過.

2015/11/04 09:28
轉換PDF檔 列印


Re: PIC24FJ128GC010透過DMA傳送RS232資料問題
資深會員
註冊日期:
2010/06/30 16:18
來自 CAE, Microchip Technology Inc.
所屬群組:
站務管理者
註冊會員
文章: 1565
等級: 33; EXP: 59
HP : 162 / 814
MP : 521 / 18236
離線
OMG! 這作法完全有問題阿..

這種暴力硬送的方式, 難怪UART或吃不消,
UART的傳送緩衝器有限, DMA要送資料,
也要等UART有空間讓你塞才可以,

一般做法, 會採用觸發方式處理,
由DMA等待TXIF的中斷,
再透過DMA搬取適當數量的資料到UART的緩衝區中,

另外, TXIF的觸發時機, 也需要設定,
可以設定成有"空"就觸發, 還是"半空", "全空",
這模式會影響你一次可以搬的資料量.

2015/11/04 10:27
轉換PDF檔 列印


Re: PIC24FJ128GC010透過DMA傳送RS232資料問題
資深會員
註冊日期:
2004/07/12 13:55
所屬群組:
註冊會員
文章: 252
等級: 14; EXP: 84
HP : 0 / 346
MP : 84 / 13781
離線
我也想過這問題,但是使用dspic33fj64mc804這一顆MCU,也沒出現你所說的需要注意TXIF的觸發時機,也沒要設定成"空"就觸發,還是"半空","全空".
我會再回頭看看當初如何使用dspic33晶片.

2015/11/04 11:01
轉換PDF檔 列印


Re: PIC24FJ128GC010透過DMA傳送RS232資料問題
資深會員
註冊日期:
2004/07/12 13:55
所屬群組:
註冊會員
文章: 252
等級: 14; EXP: 84
HP : 0 / 346
MP : 84 / 13781
離線
如果要檢查TXIF值,我測試得每傳一筆就會中斷一次,所以傳1,2,3,4,5,已中斷5次,若如此就不要DMA了,直接傳送就好.
如果有興趣,看一下Microchip文件,DS70215C的Page38-36,官方文件範列透過DMA傳RS232,傳8位元組資料,也沒有需要注意TXIF,只傳完後進入DMA中斷處理.只不過此範例只適用於dspic33f及pic24h,對pic24f沒用而已.

2015/11/04 11:20
轉換PDF檔 列印


Re: PIC24FJ128GC010透過DMA傳送RS232資料問題
資深會員
註冊日期:
2010/06/30 16:18
來自 CAE, Microchip Technology Inc.
所屬群組:
站務管理者
註冊會員
文章: 1565
等級: 33; EXP: 59
HP : 162 / 814
MP : 521 / 18236
離線
DS70215C的Page38-36中的程式 Example 38-10
傳送的部分,
是以One-Shot Mode, 傳送8 Bytes給UART2,
也是透過U2IF來觸發, 在程式中可以看到以下片段,

DMA0REQ = 0x001F;

/* 0011111 = UART2 Transmitter (UART2TX) */


不知道您是參閱哪個版本的文件...


另外, DMA的作用是降低CPU的負擔, 但並非跳脫原有的程序,
就以UART為例, Buffer確實有限, 不可能無限制塞資料給UART.
所以DMA必須定下來等Flag, 確定UART有空間後, 才可以再傳資料.

再者, DMA去等待U2TX, 不代表必須進入中斷.
程式是可以完全不進入中斷, 由DMA全權負責資料搬運的.
建議您再研究下, Interrupt Flag 與 Interrupt Enable間的關係.

有關UART傳送旗標的設定, 可以參考UART章節,
UTXISEL

附加檔案:



jpg  未命名.jpg (128.12 KB)
7103_5639a9e5ab0e1.jpg 1031X427 px

jpg  未命名1.jpg (186.60 KB)
7103_5639ae9933f37.jpg 957X565 px

2015/11/04 14:47

AdamSyu 於 2015年11月04日 15:08:34
轉換PDF檔 列印


Re: PIC24FJ128GC010透過DMA傳送RS232資料問題
資深會員
註冊日期:
2004/07/12 13:55
所屬群組:
註冊會員
文章: 252
等級: 14; EXP: 84
HP : 0 / 346
MP : 84 / 13781
離線
你說傳送8 Bytes給UART2,也是透過U2IF來觸發,可能有點道理,不知道在DMA資料那裡提到此點.我使用dspic33傳24位元組時,UTXISEL0及UTXISEL1都設為0,DMA1REQ=0x000C,而起動送出RS232的指令為DMA1REQbits.FORCE=1;
PIC24F中沒有DMA1REQ,但有DMAINT0bits.CHSEL,我亦有測試過DMAINT0bits.CHSEL=0b100000;//UART2 Transmit,但沒用,仍只輸出5位元組.

2015/11/04 16:24
轉換PDF檔 列印


Re: PIC24FJ128GC010透過DMA傳送RS232資料問題
資深會員
註冊日期:
2010/06/30 16:18
來自 CAE, Microchip Technology Inc.
所屬群組:
站務管理者
註冊會員
文章: 1565
等級: 33; EXP: 59
HP : 162 / 814
MP : 521 / 18236
離線
您要不要先確認下,
您 dsPIC 程式裡 DMAXCNT 的設定?
還有 UART 的 FIFO 深度 ?

2015/11/04 18:31
轉換PDF檔 列印


Re: PIC24FJ128GC010透過DMA傳送RS232資料問題
資深會員
註冊日期:
2004/07/12 13:55
所屬群組:
註冊會員
文章: 252
等級: 14; EXP: 84
HP : 0 / 346
MP : 84 / 13781
離線
程式裡 DMAXCNT=23;
dspic33fj64mc804的UART的FIFO深度=4
附帶一提,我是使用one-shot模式操作的.
而在DS70215C文件的page 38-16中提到,在DMA中使用UART時,UTXISEL0 and UTXISEL1, must be set to ‘0’ in the UxSTA register

2015/11/04 21:04
轉換PDF檔 列印



(1) 2 »



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

[進階搜尋]


搜尋
Microchip連結

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