📄 da.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 + -