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