我正在尝试使用软件触发器将 DMA 从 RAM 传输到 RAM。 但是、我无法看到 DMA 开始工作、因为目标中没有数据。 我不确定我的代码的问题在哪里、我也不知道如何调试这种情况。
这是我的参考代码。 期待您的回复。
#define DMA_TEST_SRC_ADDRESS (uint32_t)(0x0807D200) //源数据地址
#define DMA_TEST_DEST_ADDRESS (uint32_t)(0x0807D400) //目标数据地址
#define DMA_TEST_DATA_SIZE (uint32_t)(0x100) // DMA 传输的数据大小
void dma_Test_src_Data_Init (uint8_t STEP)
{
uint32_t i = 0;
uint8_t * srcPtr =(uint8_t *) dma_test_SRC_address;
对于(i=0;i< dma_test_data_size;i++)
*(srcPtr++)= i + step;
返回;
}
void DMA_Test (void)
{
静态 uint8_t seqDMATest = 0;
uint8 u8PotStringBuf[64];
g_dmaCTRL g_dmaCTRLPKT1;
G_dmaCTRLPKT1.Sadd =(uint32) dma_test_SRC_address; //源地址 *
G_dmaCTRLPKT1.DADD =(uint32) dma_test_dest_address; //目标 地址 *
G_dmaCTRLPKT1.CHCTTRL = 0; /*通道控制 *
G_dmaCTRLPKT1.FRCNT = 1; /*帧计数 */
G_dmaCTRLPKT1.ELCNT = DMA_TEST_DATA_SIZE; /*元素计数 *
G_dmaCTRLPKT1.ELDOFFSET = 4; /*元素目标偏移量*/
G_dmaCTRLPKT1.ELSOFFSET = 4; /*元素目标偏移量*
G_dmaCTRLPKT1.FRDOFFSET = 0; /*帧目标偏移 *
G_dmaCTRLPKT1.FRSOFFSET = 0; /*帧目标偏移 *
G_dmaCTRLPKT1.PORTASGN = PORTA_READ_PORTA_WRITE;
G_dmaCTRLPKT1.RDSIZE = ACCESS_8_BIT; /*读取大小 *
G_dmaCTRLPKT1.WRSIZE = ACCESS_8_BIT; /*写入大小 *
G_dmaCTRLPKT1.tType = frame_transfer; /* transfer type *
G_dmaCTRLPKT1.ADDMODERD = ADDR_INC1; /*地址模式读取 *
G_dmaCTRLPKT1.ADDMODEWR = ADDR_INC1; /*地址模式写入 *
G_dmaCTRLPKT1.AUTOINIT = AUTOINIT_OFF; /*自动初始 化*/
//设置通道0的控制数据包
dmaSetCtrlPacket (dma_test_CH、g_dmaCTRLPKT1);
//准备用于 DMA 传输的数据
DMA_Test_src_Data_Init (seqDMATest);
//将 DMA 通道0设置为在软件请求时触发
dmaSetChEnable (DMA_TEST_CH、DMA_SW);
//启用 DMA
dmaEnable();
while (dmaGetInterruptStatus (dma_test_CH、BTC)!= true);
sprintf (u8PotStringBuf、"[Passed]-[Seq#%d]-DMA 测试。 \r\n"、seqDMATest);
sciDisplayText (UART_Msg、u8PotStringBuf);
返回;
}
该函数在每15秒循环一次的同时在主函数中调用。