📄 main.c.bak
字号:
/********************************************
*
* DSP controlling code for QDMA
*
********************************************/
#include <stdio.h>
#include <c6x.h>
#include "c6713dsk.h"
#include "dsp_usb.h"
#define Uint16 unsigned int
volatile unsigned char flag_qdma=0;
void QDMA_TRANSDATA(unsigned int mySRC,unsigned int myDES,unsigned int num,unsigned char bIr,unsigned int OptCode);
unsigned short *shuzu=(unsigned short *)0x80000000;
volatile Uint16 * LEDSHOW = (Uint16 *)0xb020003c;
/* QDMA比普通EDMA效率更高
一: QDMA_TRANSDATA函数是完成内存中数据块(数组shuzu[])到外部RAM之间的数据双向传输的例子
你要自己通过看文档SPUR190D.PDF看懂其中的参数"0x29380001"每一位表示的东西,否则你还是不会DMA.
二: 数组shuzu[]实际上也是在访问外部RAM,自己看看吧
三: 要自己明白为啥写EMIF_CE0 = 0x90在C6X.C文件中.
罗嗦: 你在运行下面程序时要打开VIEW-MEMORY窗口监视结果,确认OK. 注意选择合适的地址和数据类型
最后 你自己应该能独立调通点东西,DSP很繁杂,不是谁什么都会
*/
int main()
{
int i,j;
int tmpA,tmpB;
unsigned short innerbuf[512];
Sys_Initialize();
PLL_Init();
for(i=0;i<512;i++) shuzu[i]=0; //CLEAR EXT RAM
for(i=0;i<512;i++) innerbuf[i]=i;
/*WRITE DATA TO EXT-RAM*/
QDMA_TRANSDATA((int)(&innerbuf),0x80000000,512,1,0x29380001);
//delay_msec(2);
for(i=0;i<512;i++) innerbuf[i]=0;
QDMA_TRANSDATA(0x80000000,(int)(&innerbuf),512,1,0x29380001);//READ FROM EXT-RAM
delay_msec(2);
while(1)
{
for(i=0;i<1000;i++)
for(j=0;j<1800;j++);
*LEDSHOW=0x7;
for(i=0;i<1000;i++)
for(j=0;j<1800;j++);
*LEDSHOW=0x0;
//*(char *)0xb020003c=0x0;
};
}
void QDMA_TRANSDATA(unsigned int mySRC,unsigned int myDES,unsigned int num,unsigned char bIr,unsigned int OptCode)
{
unsigned int tmp;
*(unsigned volatile int *)QDMA_SRC = mySRC;
*(unsigned volatile int *)QDMA_CNT = num;
*(unsigned volatile int *)QDMA_IDX = 0x00000000;
*(unsigned volatile int *)QDMA_DST = myDES;
*(unsigned volatile int *)QDMA_S_OPT= OptCode;
tmp=*(unsigned volatile int *)CIPR;
while(!(tmp&0x100))tmp=*(unsigned volatile int *)CIPR;
tmp=tmp&0xefff;
*(unsigned volatile int *)CIPR=tmp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -