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

📄 da.c

📁 DSP GEPE 压缩算法
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//#include <fdct_8x8.h>
#include "c6211.h"
//#include "da.h"
#include "jpeg.h"

#pragma DATA_SECTION(pData1,".BUFF1")
unsigned int pData1[361*288*2];

#pragma DATA_SECTION(pData2,".BUFF2")
unsigned int pData2[361*288*2];

#pragma DATA_SECTION(pData3,"JPEGDATA")
unsigned int pData3[15360];
 
 //#pragma DATA_SECTION(pYBuff,"PYBUFF")
 //BYTE pYBuff[360*288];

//#pragma DATA_SECTION(pUBuff,"PUBUFF")
 //BYTE pUBuff[360*288];

//#pragma DATA_SECTION(pVBuff,"PVBUFF")
// BYTE pVBuff[360*288];

#pragma DATA_SECTION(pData4,"PPYBUFF")
unsigned int pData4[25920];

#pragma DATA_SECTION(pData5,"PPUBUFF")
unsigned int pData5[25920];

#pragma DATA_SECTION(pData6,"PPVBUFF")
unsigned int pData6[25920];

#pragma DATA_SECTION(paramBuffer,".PARAMBUFF")
volatile unsigned int paramBuffer[34];

#pragma DATA_SECTION(flowBuffer,".FLOWBUFF")
volatile unsigned int flowBuffer[36];

#pragma DATA_SECTION(VLI_TAB,".VLITAB")
BYTE  VLI_TAB[4096];

volatile unsigned int *hpiBuffer=(volatile unsigned int *)0xB0A7FD88;

#define PWD 0x12345678

volatile int captureReady=0;	//EDMA数据采集标志位
volatile int captureNum=0;	//上载图片标志位
volatile int captureIf=0;
volatile int detectBuff=1;	//检测的缓冲区标号
volatile int captureBuff=0;	//采集的缓冲区标号

volatile BYTE *  pOrigin;
volatile BYTE *  pNew;

//BYTE VLI_TAB[4096];
BYTE* pVLITAB;  
BYTE YQT[64]; 
BYTE UVQT[64];  
float YQT_DCT[64];
float UVQT_DCT[64];

HUFFCODE STD_DC_Y_HT[12];
HUFFCODE STD_DC_UV_HT[12];
HUFFCODE STD_AC_Y_HT[256];
HUFFCODE STD_AC_UV_HT[256];


extern void DspJpeg(volatile BYTE * inBuffer,int Q,int num);
//extern void SetQuantTable( BYTE* std_QT,BYTE* QT, int Q);
//extern void InitQTForAANDCT();
extern void BuildSTDHuffTab(BYTE* nrcodes,BYTE* stdTab,HUFFCODE* huffCode);
extern void BuildVLITable(void);
extern void Initimage(int* lpInBuff);
void main()
{
	int i;
	//BYTE *DataImage;
	int* pInitimage;
	hpiBuffer[2]=0;
	hpiBuffer[3]=0;
	hpiBuffer[4]=0;
	hpiBuffer[5]=0;
	
	//SetQuantTable(std_Y_QT,YQT, 75);         // 设置Y量化表
	//SetQuantTable(std_UV_QT,UVQT, 75);        // 设置UV量化表  
	//InitQTForAANDCT();            // 初始化AA&N需要的量化表
	pVLITAB=VLI_TAB + 2047;      // 设置VLI_TAB的别名
	BuildVLITable();            // 计算VLI表   
	
	BuildSTDHuffTab(STD_DC_Y_NRCODES,STD_DC_Y_VALUES,STD_DC_Y_HT);
	BuildSTDHuffTab(STD_AC_Y_NRCODES,STD_AC_Y_VALUES,STD_AC_Y_HT);
	BuildSTDHuffTab(STD_DC_UV_NRCODES,STD_DC_UV_VALUES,STD_DC_UV_HT);
	BuildSTDHuffTab(STD_AC_UV_NRCODES,STD_AC_UV_VALUES,STD_AC_UV_HT);
	
	
	ISTP=0x400;
	IER =1;
	*(unsigned volatile int *)EER &=0x0;
	*(unsigned volatile int *)CIER=0x20;

	for(i=0;i<361*288;i++)
		pData1[i]=0x00000000;
		
	*(unsigned volatile int *)0x01a00180=0x20350003;
	*(unsigned volatile int *)0x01a00184=0xA0000000;
	*(unsigned volatile int *)0x01a00188=0x023F0169;
	*(unsigned volatile int *)0x01a0018C=0xB00CB100;
	*(unsigned volatile int *)0x01a00190=0x05A40004;
	*(unsigned volatile int *)0x01a00194=0x00000198;
	
	*(unsigned volatile int *)0x01a00198=0x20350003;
	*(unsigned volatile int *)0x01a0019C=0xA0000000;
	*(unsigned volatile int *)0x01a001A0=0x023F0169;
	*(unsigned volatile int *)0x01a001A4=0xB0000000;
	*(unsigned volatile int *)0x01a001A8=0x05A40004;
	*(unsigned volatile int *)0x01a001AC=0x00000180;
	
	//多幀 int5 1D-1D
	*(unsigned volatile int *)(EVENT5_PARAMS+OPT)=0x20350003;
	*(unsigned volatile int *)(EVENT5_PARAMS+SRC)=0xA0000000;
	*(unsigned volatile int *)(EVENT5_PARAMS+CNT)=0x023F0169;
	*(unsigned volatile int *)(EVENT5_PARAMS+DST)=0xB0000000;
	*(unsigned volatile int *)(EVENT5_PARAMS+IDX)=0x05A40004;
	*(unsigned volatile int *)(EVENT5_PARAMS+LNK)=0x00000180;
	
	CSR=0x1;
	ICR=0x130;
	IER=0x2113;
	
	while(*(unsigned int *)0xB0A7FD88!=8)
	{
		if(captureReady==1)
		{
			captureReady=0;
			
			*(unsigned volatile int *)QDMA_SRC=0xB0000000;
			*(unsigned volatile int *)QDMA_DST=0xB0196200;
			*(unsigned volatile int *)QDMA_CNT=0x011F0169;
			*(unsigned volatile int *)QDMA_IDX=0x00000000;
			*(unsigned volatile int *)QDMA_S_OPT=0x45A00001;

			ICR=0x130;
			IER |=0x2113;
		}
	}
	 

	hpiBuffer[0]=0x87654321;

	ICR=0x30;		
	IER |=0x2113;
			
	for(;;)
	{
	
		if(captureReady==1)
		{
			captureIf=1;
			captureReady=0;
			pOrigin=(BYTE *)(0xB0000000+detectBuff*831744);
			pNew=(BYTE *)(0xB0065880+detectBuff*831744);
			captureBuff=detectBuff;
			pInitimage=( int *)0xB0658800;
			Initimage(pInitimage);
			//captureIf=1;
			if(captureIf==1)
			{
				//DataImage=(BYTE *)(0xB0000000+captureBuff*831744);
				DspJpeg(pOrigin,75,0);
				hpiBuffer[4]=1;
				//captureIf=0;
			}
						
		}		
	}
}

//幀中断
interrupt void frame_int(void)
{
		*(unsigned volatile int *)ECR=0x20;	//清除EDMA事件寄存器
		*(unsigned volatile int *)EER |=0x20;	//使能EDMA事件使能寄存器
		
		IER &=0x2103;	//屏蔽幀中断
}

//EDMA中断
interrupt void edma_int(void)
{
	*(unsigned volatile int *)CIPR=0x20;	//清CIPR中断标志位
	captureReady=1;
	if(captureIf==1)
		*(unsigned volatile int *)EER &=0x0;
		
	if(detectBuff==0)
		detectBuff=1;
	else
		detectBuff=0;	
}

//Host-DSP中断
interrupt void host_int(void)
{
	*(unsigned volatile int *)HPIC=0x02;	//清HPIC中断标志
	captureIf=0;
	hpiBuffer[4]=0;
	hpiBuffer[5]=0;	
	ICR=0x30;
	IER |=0x2113;
		
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -