您好!
我需要一个 DMA 来交换。 我按如下所示设置两个 DMA 通道。
void dma_setup (void);
Uint32 dummy_1[2]={0xDEADC0DE};
uint32 dummy_2[2]={0xFAFAFAFAFAFA};
int main()
{
dma_setup();
dmaEnable();
while (1)
{
INT TIMEOUT = 0x0FFF;
dmaSetChEnable (DMA_CH0、DMA_SW);
while (timout---)
;
}
}
void dma_setup (void)
{
g_dmaCTRL g_dmaCTRLPKT ={0};
g_dmaCTRLPKT.Sadd =(uint32)&dummy_1[0];/*源地址*/
G_dmaCTRLPKT.DADD =(UINT32)&dummy_1[1];/*目标地址*/
G_dmaCTRLPKT.CHCTRL = 2;/*链接通道1 */
g_dmaCTRLPKT.FRCNT = 1;/*帧计数*/
G_dmaCTRLPKT.ELCNT = 1;/*元素计数*/
G_dmaCTRLPKT.ELDOFFSET = 4;/*元素目标偏移*/
G_dmaCTRLPKT.ELSOFFSET = 0;/*元素目标偏移*/
G_dmaCTRLPKT.FRDOFFSET = 0;/*帧目标偏移*/
G_dmaCTRLPKT.FRSOFFSET = 0;/*帧目标偏移*/
G_dmaCTRLPKT.PORTASGN = PORTA_READ_PORTA_WRITE;/* mem-to-mem */
G_dmaCTRLPKT.RDSIZE = ACCESS_32_BIT;/*读取大小*/
G_dmaCTRLPKT.WRSIZE = ACCESS_32_BIT;/*写入大小*/
g_dmaCTRLPKT.tType = FRAME_TRANSMIT;/*传输类型*/
G_dmaCTRLPKT.ADDMODERD = ADDR_FIXED;/*地址模式读取*/
G_dmaCTRLPKT.ADDMODEWR = ADDR_FIXED;/*地址模式 WRITE */
G_dmaCTRLPKT.AUTOINIT = AUTOINIT_OFF;/* autoinit */
dmaSetCtrlPacket (dma_CH0、g_dmaCTRLPKT);
g_dmaCTRL g_dmaCTRLPKT2 ={0};
g_dmaCTRLPKT2.Sadd =(uint32)&dummy_2[0];/*源地址*/
G_dmaCTRLPKT2.DADD =(uint32)&dummy_2[1];/*目标地址*/
G_dmaCTRLPKT2.CHCTRL = 0;/*链接通道1 */
g_dmaCTRLPKT2.FRCNT = 1;/*帧计数*/
G_dmaCTRLPKT2.ELCNT = 1;/*元素计数*/
G_dmaCTRLPKT2.ELDOFFSET = 4;/*元素目标偏移*/
G_dmaCTRLPKT2.ELSOFFSET = 0;/*元素目标偏移*/
G_dmaCTRLPKT2.FRDOFFSET = 0;/*帧目标偏移*/
G_dmaCTRLPKT2.FRSOFFSET = 0;/*帧目标偏移*/
G_dmaCTRLPKT2.PORTASGN = PORTA_READ_PORTA_WRITE;/* mem-to-mem */
G_dmaCTRLPKT2.RDSIZE = ACCESS_32_BIT;/*读取大小*/
G_dmaCTRLPKT2.WRSIZE = ACCESS_32_BIT;/*写入大小*/
g_dmaCTRLPKT2.tType = FRAME_TRANSMIT;/*传输类型*/
G_dmaCTRLPKT2.ADDMODERD = ADDR_FIXED;/*地址模式读取*/
G_dmaCTRLPKT2.ADDMODEWR = ADDR_FIXED;/*地址模式 WRITE */
G_dmaCTRLPKT2.AUTOINIT = AUTOINIT_OFF;/* autocinit */
dmaSetCtrlPacket (dma_CH1、g_dmaCTRLPKT2);
}
第一个 DMA 通道(DMA_CH0)正在工作、但 DMA_CH1未被 DMA_CH0触发。
可以帮帮我吗?