程序是参考HALCOGEN的spiDMA的例子写的,SCI初始化已经设置了TX_DMA_EN,和multiBuffer 模式,未设置发送中断(设置了也试过),Debug查看DMA的Pend寄存器发现为0,感觉没有DMA的请求产生,我查看DataSheet上面说只要TXRDY为1或实际发送字节数达到设置的字节数就可以产生DMA请求,debug下查看TXRDY已为1。单独向ScilinREG->TDx[0]赋值可以引发发送操作.
main
{
dmaEnable();
dmaReqAssign(0,0);
dmaConfigCtrlPacket((uint32)(TX_DATA),(uint32)(&(ScilinREG->TDx[0],D_SIZE);
dmaSetCtrlPacket(DMA_CH0,g_dmaCTRLPKT);
dmaSetChEnable(DMA_CH0,DMA_HW);
sciInit();
}
void dmaConfigCtrlPacket(uint32 sadd,uint32 dadd,uint32 dszie)
{
dmaCTRLPKT.SADD=sadd;
dmaCTRLPKT.DADD=dadd;
dmaCTRLPKT.FRCNT=1;
dmaCTRLPKT.ELCNT=sadd;
dmaCTRLPKT.ELDOFFSET=0;
dmaCTRLPKT.ELSOFFSET=0;
dmaCTRLPKT.FRDOFFSET=0;
dmaCTRLPKT.FRSOFFSET=0;
dmaCTRLPKT.PORTASGN=4;
dmaCTRLPKT.RDSIZE=ACCESS_8BIT;
dmaCTRLPKT.WRSIZE=ACCESS_8BIT;
dmaCTRLPKT.TYPE=FRAME_TRANSFER;
dmaCTRLPKT.ADDMODERD=ADDR_FIXED;
dmaCTRLPKT.ADDMODEWR=ADDR_FIXED;
dmaCTRLPKT.AUTOINIT=AUTOINIT_ON;
}
}