📄 dmatest.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
extern "C"
{
// void dma_config(int (*src)[10], int (*dest)[10]);
void config(void);
void EnterResult(void);
}
int buffer1[10][40];
int dest1[10][40] = { };
int buffer2[10][40];
int dest2[10][40] = { };
int counter = 0;
void EnterResult(void)
{
int i, j;
puts("The final answer is:");
for(j=0; j<10; j++)
for(i=0; i<40; i++)
{
if(buffer2[j][i] != dest2[j][i])
goto OUT;
}
OUT:
if(j == 10)
puts("Contents equal!");
else
{
puts("Falied!");
printf("i = %d\n", i);
}
printf("The counter is: %u", counter);
exit(0);
}
// DMA Descriptor List Mode
struct dma_desc
{
unsigned long ndp; // next descriptor
unsigned long sa; // start address
unsigned short dma_cfg;
unsigned short xcnt;
unsigned short xmod;
unsigned short ycnt;
unsigned short ymod;
unsigned short dummy;
};
#define MDMA_D0_PERIPHERAL_MAP *(unsigned short*)0xffc00f2c
#define MDMA_S0_PERIPHERAL_MAP *(unsigned short*)0xffc00f6c
#define MDMAS0_CONFIG *(unsigned short*)0xffc00f48
#define MDMAD0_CONFIG *(unsigned short*)0xffc00f08
#define MDMA_D0_CURR_DESC_PTR *(struct dma_desc**)0xffc00f20
#define MDMA_S0_CURR_DESC_PTR *(struct dma_desc**)0xffc00f60
#define MDMA_D0_NEXT_DESC_PTR *(struct dma_desc**)0xffc00f00
#define MDMA_S0_NEXT_DESC_PTR *(struct dma_desc**)0xffc00f40
static struct dma_desc src_desc2 = { (unsigned long)NULL,
(unsigned long)buffer2,
0x00b9,
40,
4,
10,
4,
0
};
static struct dma_desc dest_desc2 = { (unsigned long)NULL,
(unsigned long)dest2,
0x00bb, // Stop Mode
40,
4,
10,
4,
0
};
static struct dma_desc src_desc1 = { (unsigned long)&src_desc2,
(unsigned long)buffer1,
0x79b9, // List Descriptor Mode
40,
4,
10,
4,
0
};
static struct dma_desc dest_desc1 = { (unsigned long)&dest_desc2,
(unsigned long)dest1,
0x79bb, // LIst Descriptor Mode
40,
4,
10,
4,
0
};
static void dma_config(void)
{
// MDMA_D0_PERIPHERAL_MAP = MDMA_S0_PERIPHERAL_MAP = 0x40;
MDMA_S0_CURR_DESC_PTR = 0;
MDMA_D0_CURR_DESC_PTR = 0;
// DMA List Mode
MDMA_S0_NEXT_DESC_PTR = &src_desc1;
MDMA_D0_NEXT_DESC_PTR = &dest_desc1;
MDMAS0_CONFIG = src_desc1.dma_cfg; // Start source MDMA0
MDMAD0_CONFIG = dest_desc1.dma_cfg; // Start destination MDMA0
}
int main(void)
{
for(int j=0, k=0; j<10; j++)
for(int i=0; i<40; i++)
{
buffer1[j][i] = k++;
buffer2[j][i] = buffer1[j][i];
}
printf("The dest address is: %x\n", dest1);
config();
dma_config();
while(1)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -