|
各位好心并且帅气的高手、大虾、牛人们,小弟弟我在调试PIC24HJ64gp506的ECAN1通信,用环回模式,定义了DMA RAM缓冲区:<br /><br />typedef u_Word_Char ECAN1MSGBUF [4][8];<br /><br />extern ECAN1MSGBUF ecan1msgBuf __attribute__((space(dma)));<br />ECAN1MSGBUF ecan1msgBuf __attribute__((space(dma),aligned(ECAN1_MSG_BUF_LENGTH*16)));<br /><br />4*8的数组形式。<br />设置为:0,1区用于发,2,3区用于接。<br /><br />DMA设置如下:<br /><br />/* Dma Initialization for ECAN1 Transmission */<br />void dma0init(void)<br />{<br /><br /> DMACS0=0;<br /> DMA0CON=0x2020;<br /> DMA0PAD=0x0442; /* ECAN 1 (C1TXD's Reg Add) */<br /> DMA0CNT=0x0007;<br /> DMA0REQ=0x0046; /* ECAN 1 Transmit's TX IV */<br /> DMA0STA= __builtin_dmaoffset(ecan1msgBuf); <br /> DMA0CONbits.CHEN=1;<br />}<br />/* Dma Initialization for ECAN1 Reception */<br />void dma1init(void)<br />{<br /> DMACS0=0;<br /> DMA1CON=0x0020;<br /> DMA1PAD=0x0440; /* ECAN 1 (C1RXD's Reg Add) */<br /> DMA1CNT=0x0007;<br /> DMA1REQ=0x0022; /* ECAN 1 Receive's RX IV */<br /> DMA1STA= __builtin_dmaoffset(ecan1msgBuf); <br /> IEC0bits.DMA1IE = 1;<br /> IPC3bits.DMA1IP = 0b010;<br /> DMA1CONbits.CHEN=1;<br />}<br /><br />在请求发送后,C1INTF的“发送中断标志”和“接收中断标志”都已经置1,而且C1RXFUL1的“接收缓冲区3满标志”也置1。<br /><br />1.但是观察接收缓冲区,却始终没有接收到数据。也不知道有没有正常发出。<br /><br />2.而且接收数组的第一个元素:ecan1msgBufRX[0][0],在请求发送的时候,发送的一瞬间,会变为“0x0100”,不知道为什么?<br /><br />请各位好心并且帅气的高手、大虾、牛人们不吝赐教!<br /> |
|