基于dsPIC33FJ128MC506的CAN通信(07-100)
DMA2通道初始化為ECAN1接收:
本文引用地址:http://www.ex-cimer.com/article/92042.htmvoid dma2init(void)
{
DMACS0=0; //清DMA控制器狀態(tài)位
DMA2CON=0x0020; //DM為外設(shè)間接尋址模式,支持從DMA寫,并讀到外設(shè)
DMA2PAD=0x0440; //DMA0PAD下載為ECAN1接收寄存器的地址
DMA2CNT=0x0007; //傳輸計數(shù)寄存器為8
DMA2REQ=0x0022; //DMA外設(shè)REQ編號選擇位
DMA2STA= __builtin_dmaoffset(&ecan1msgBuf[2][0]); //DMA起始地址位
DMA2CONbits.CHEN=1;
}
上面程序中的“DMA0STA= __builtin_dmaoffset(ecan1msgBuf);”和“ DMA2STA= __builtin_dmaoffset(&ecan1msgBuf[2][0]); ”分別指明了DMA的起始地址位為ecan1msgBuf和(&ecan1msgBuf[2][0],ecan1msgBuf是一個兩維數(shù)組,在相關(guān)頭文件中定義,其語句為:
ECAN1緩沖器的設(shè)置:
#define ECAN1_MSG_BUF_LENGTH 4 //長度為4個字
//緩沖區(qū)為二維數(shù)據(jù)
typedef unsigned int ECAN1MSGBUF [ECAN1_MSG_BUF_LENGTH][8];
//數(shù)組位于DMA空間
extern ECAN1MSGBUF ecan1msgBuf __attribute__((space(dma)));
評論