⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c.bak

📁 dsp tms320c6713 中断测试程序
💻 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 + -