?? 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 + -