I want to send data from DCAN3 with DMA
The following is my code ,but it have not interrupt at DMA. I use DMA chanel 4 , mailbox 1.
How to start sending data with DMA?
Is it "canREG3->IF1NO = (uint8) canMESSAGE_BOX1;"?
void dmaGroupANotification(dmaInterrupt_t inttype, sint32 channel)
{
switch(channel)
{
case DMA_CH4:
DMA_Comp_Flag = 0x5555AAAA;
break;
}
DMA_Comp_Flag = 0x5555AAAA;
}
_enable_interrupt_();
canInit();
canREG3->CTL |= (1U << 18U); /***enable IF1 for translate***/
dmaEnable();
dmaEnableInterrupt(DMA_CH4, FTC); /*tx*/
dmaReqAssign(DMA_CH4,17); /*tx,DCAN3IF1*/
dmaConfigCtrlTxPacket((uint32)(&(TX_DATA1)),
(uint32)(&canREG3->IF1DATx[0]),
1);
dmaSetCtrlPacket(DMA_CH4,g_dmaCTRLPKT);
dmaSetChEnable(DMA_CH4, DMA_HW);
canREG3->IF1STAT |= 0x40; /**DMA active*/
canREG3->IF1NO = (uint8) canMESSAGE_BOX1; /*send can*/
void dmaConfigCtrlTxPacket(uint32 sadd,uint32 dadd,uint32 dsize)
{
g_dmaCTRLPKT.SADD = sadd; /* source address */
g_dmaCTRLPKT.DADD = dadd; /* destination address */
g_dmaCTRLPKT.CHCTRL = 0; /* channel control */
g_dmaCTRLPKT.FRCNT = 1; /* frame count */
g_dmaCTRLPKT.ELCNT = dsize; /* element count */
g_dmaCTRLPKT.ELDOFFSET = 0; /* element destination offset */
g_dmaCTRLPKT.ELSOFFSET = 0; /* element source offset */
g_dmaCTRLPKT.FRDOFFSET = 0; /* frame destination offset */
g_dmaCTRLPKT.FRSOFFSET = 0; /* frame source offset */
g_dmaCTRLPKT.PORTASGN = 4; /* port b */
g_dmaCTRLPKT.RDSIZE = ACCESS_64_BIT; /* read size */
g_dmaCTRLPKT.WRSIZE = ACCESS_64_BIT; /* write size */
g_dmaCTRLPKT.TTYPE = FRAME_TRANSFER ; /* transfer type */
g_dmaCTRLPKT.ADDMODERD = ADDR_FIXED; /* address mode read */
g_dmaCTRLPKT.ADDMODEWR = ADDR_FIXED; /* address mode write */
g_dmaCTRLPKT.AUTOINIT = AUTOINIT_ON; /* autoinit */
}