📄 main.c
字号:
/* ======================================================================== */
/* TEXAS INSTRUMENTS, INC. */
/* */
/* PROJECT NAME */
/* wave_horz -- TMS320C6000 Cache User's Guide */
/* */
/* PLATFORM */
/* C621x/C671x */
/* */
/* DESCRIPTION */
/* Example code for section "Processing Chain with DMA Buffering" */
/* (requires C62x IMGLIB to be installed). */
/* */
/* ------------------------------------------------------------------------ */
/* Copyright (c) 2003 Texas Instruments, Incorporated. */
/* All Rights Reserved. */
/* ======================================================================== */
#include <stdlib.h>
#include <csl.h>
#include <csl_dat.h>
#include "IMG_pix_expand.h"
#include "IMG_wave_horz.h"
#include "IMG_pix_sat.h"
#define CACHE_L1D_LINESIZE 32
#pragma DATA_ALIGN(qmf, 4);
#pragma DATA_ALIGN(mqmf, 4);
#pragma DATA_ALIGN(InBuffA, 4);
#pragma DATA_ALIGN(InBuffB, 4);
#define COLS 256 /* 256 cols in image */
#define ROWS 256 /* 256 rows in image */
#define IMSIZE 65536 /* Image size */
/* ------------------------------------------------------------------------ */
/* Input image */
/* ------------------------------------------------------------------------ */
extern unsigned char in_image_ext[IMSIZE];
/* ------------------------------------------------------------------------ */
/* Final output image */
/* ------------------------------------------------------------------------ */
#pragma DATA_SECTION(out_image_ext,".external")
unsigned char out_image_ext[IMSIZE];
/* ------------------------------------------------------------------------ */
/* Buffers to be kept in L1D */
/* 512 pixels x (4 char buffers + 2 short buffers) = cache size */
/* ------------------------------------------------------------------------ */
#define PIXELS 256
#pragma DATA_SECTION(InBuffA, ".buffers")
#pragma DATA_SECTION(InBuffB, ".buffers")
#pragma DATA_SECTION(pix_expand_out,".buffers")
#pragma DATA_SECTION(wave_horz_out, ".buffers")
#pragma DATA_SECTION(OutBuffA, ".buffers")
#pragma DATA_SECTION(OutBuffB, ".buffers")
#pragma DATA_ALIGN(InBuffA, CACHE_L1D_LINESIZE);
#pragma DATA_ALIGN(pix_expand_out, 4);
#pragma DATA_ALIGN(OutBuffA, 4);
#pragma DATA_ALIGN(OutBuffB, 4);
unsigned char InBuffA [PIXELS];
unsigned char OutBuffA [PIXELS];
unsigned char InBuffB [PIXELS];
unsigned char OutBuffB [PIXELS];
short pix_expand_out[PIXELS];
short wave_horz_out [PIXELS];
/* ------------------------------------------------------------------------ */
/* Daubechies-4 filter coefficients (Q.15) */
/* ------------------------------------------------------------------------ */
short qmf [8] = {-347, 1078, 1009, -6128, -918, 20673, 23423, 7550};
short mqmf[8] = {-7550, 23423, -20673, -918, 6128, 1009, -1078, -347};
void main()
{
/* -------------------------------------------------------------------- */
/* DMA Transfer IDs */
/* -------------------------------------------------------------------- */
Uint32 id_InBuffA = DAT_XFRID_WAITNONE,
id_InBuffB = DAT_XFRID_WAITNONE,
id_OutBuffA = DAT_XFRID_WAITNONE,
id_OutBuffB = DAT_XFRID_WAITNONE;
int i;
/* -------------------------------------------------------------------- */
/* Initialize Chip Support Library */
/* -------------------------------------------------------------------- */
CSL_init();
/* -------------------------------------------------------------------- */
/* Open DAT module using any DMA channel */
/* -------------------------------------------------------------------- */
DAT_open(DAT_CHAANY, DAT_PRI_HIGH, 0);
/* -------------------------------------------------------------------- */
/* Initially, fill buffer InBuffA and InBuffB. */
/* -------------------------------------------------------------------- */
// id_InBuffA = DAT_copy(in_image_ext, InBuffA, PIXELS);
// id_InBuffB = DAT_copy(in_image_ext+PIXELS, InBuffB, PIXELS);
for (i=0; i< ROWS ; i+=1)
{
/* ----------------------------------------------------------------- */
/* Wait for A buffers */
/* ----------------------------------------------------------------- */
id_InBuffA = DAT_copy(in_image_ext+(i*PIXELS), InBuffA, PIXELS);
DAT_wait(id_InBuffA);
// DAT_wait(id_OutBuffA);
/* ----------------------------------------------------------------- */
/* 1. Expand pixels to 16-bit */
/* 2. Perform horizontal wavelet */
/* 3. Saturate 16-bit output to 8-bit pixel. */
/* ----------------------------------------------------------------- */
IMG_pix_expand(PIXELS, InBuffA, pix_expand_out);
IMG_wave_horz (pix_expand_out, qmf, mqmf, wave_horz_out, COLS);
// IMG_wave_horz (pix_expand_out+COLS, qmf, mqmf, wave_horz_out+COLS, COLS);
IMG_pix_sat (PIXELS, wave_horz_out, InBuffA);
// IMG_pix_sat (PIXELS, pix_expand_out, OutBuffA);
/* ----------------------------------------------------------------- */
/* Transfer OutBuffA to out_image_ext. Transfer new image data to */
/* InBuffA. */
/* ----------------------------------------------------------------- */
id_InBuffA = DAT_copy(InBuffA, out_image_ext+(i*PIXELS), PIXELS);
DAT_wait(id_InBuffA);
// id_InBuffA = DAT_copy(in_image_ext+((i+2)*PIXELS), InBuffA, PIXELS);
// DAT_wait(id_InBuffA);
/* ----------------------------------------------------------------- */
/* Now the same for the B buffers */
/* ----------------------------------------------------------------- */
// DAT_wait(id_InBuffB);
// DAT_wait(id_OutBuffB);
// IMG_pix_expand(PIXELS, InBuffB, pix_expand_out);
// IMG_wave_horz (pix_expand_out, qmf, mqmf, wave_horz_out, COLS);
// IMG_wave_horz (pix_expand_out+COLS, qmf, mqmf, wave_horz_out+COLS, COLS);
// IMG_pix_sat (PIXELS, wave_horz_out, OutBuffB);
// IMG_pix_sat (PIXELS, pix_expand_out, OutBuffB);
// id_OutBuffB = DAT_copy(OutBuffB, out_image_ext+((i+1)*PIXELS), PIXELS);
// id_InBuffB = DAT_copy(in_image_ext+((i+3)*PIXELS), InBuffA, PIXELS);
}
/* -------------------------------------------------------------------- */
/* Complete the last two buffers without copying new data into InBuffA */
/* and InBuffB. */
/* -------------------------------------------------------------------- */
// DAT_wait(id_InBuffA);
// DAT_wait(id_OutBuffA);
// IMG_wave_horz (pix_expand_out, qmf, mqmf, wave_horz_out, COLS);
// IMG_wave_horz (pix_expand_out+COLS, qmf, mqmf, wave_horz_out+COLS, COLS);
// IMG_pix_sat (PIXELS, wave_horz_out, OutBuffA);
// id_OutBuffA = DAT_copy(OutBuffA, out_image_ext+(i*PIXELS), PIXELS);
// DAT_wait(id_InBuffB);
// DAT_wait(id_OutBuffB);
// IMG_pix_expand(PIXELS, InBuffB, pix_expand_out);
// IMG_wave_horz (pix_expand_out, qmf, mqmf, wave_horz_out, COLS);
// IMG_wave_horz (pix_expand_out+COLS, qmf, mqmf, wave_horz_out+COLS, COLS);
// IMG_pix_sat (PIXELS, wave_horz_out, OutBuffB);
// id_OutBuffB = DAT_copy(OutBuffB, out_image_ext+((i+1)*PIXELS), PIXELS);
DAT_close();
exit(0);
}
/*-------Image Graph Options-----------------------------*
Display type => Image
Color Space => RGB
Interleaved Data Sources => Yes
Start Address -R Source => out_image
Lines Per Display => 256
Pixels Per Line => 256
Byte Packing to fill 32 Bits => No
Bits Per Pixel => 8 (256 Color Palette)
Palette Option => Gray Scale of 256 Colors
Image Origin => Top Left
Status Bar Display => On
Cursor Mode => Data Cursor
------------------------------------------------------ */
/* ======================================================================== */
/* Copyright (c) 2003 Texas Instruments, Incorporated. */
/* All Rights Reserved. */
/* ======================================================================== */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -