请教有懂的大侠们,dspic33fj128gp706 CAN环回模式 能收到自己发送的数据 但是通过DMA送到DMA RAM内存时,好像数据出错了,比如发送的数据是2222 收到的是0222 ;发送3333时 收到1333,高三位变成了000;我的DMA ram定义如下:
ECAN1MSGBUF ecan1TXmsgBuf __attribute__((space(dma),aligned(4*16)));
ECAN1MSGBUF ecan1RXmsgBuf __attribute__((space(dma),aligned(4*16)));
void dma3init(void){
DMACS0=0;
DMA3CON=0x2020;
DMA3PAD=0x0442; /* ECAN 1 (C1TXD) */
DMA3CNT=7;
DMA3REQ=0x0046; /* ECAN 1 Transmit */
// DMA3STA= __builtin_dmaoffset(ecan1TXmsgBuf);
DMA3STA= __builtin_dmaoffset(&ecan1TXmsgBuf);
DMA3CONbits.CHEN=1;
}
/* Dma Initialization for ECAN1 Reception */
void dma2init(void){
DMACS0=0;
DMA2CON=0x0000;
DMA2PAD=0x0440; /* ECAN 1 (C1RXD) */
DMA2CNT=7;
DMA2REQ=0x0022; /* ECAN 1 Receive */
// DMA2STA= __builtin_dmaoffset(ecan1RXmsgBuf);
DMA2STA= __builtin_dmaoffset(&ecan1RXmsgBuf);
DMA2CONbits.CHEN=1;
}
DMA发送按外设间接寻址模式,接收采用寄存器间接寻址!
希望有懂的大侠帮忙解答下。 |