📄 videograph.c
字号:
#include <cdefBF533.h>
#include "videograph.h"
void Init_ADV7171_PPI(void)
{
*pPPI_CONTROL = PACK_EN | /*DMA32 | */PORT_DIR;
}
void Init_ADV7171_DMA(void)
{
*pDMA0_PERIPHERAL_MAP = 0x0000;
*pDMA0_START_ADDR = (unsigned short *)VIDEO_FRAME_BUFFER_BASE;
//*pDMA0_CONFIG = 0x0094;
*pDMA0_CONFIG = 0x1014;
*pDMA0_X_COUNT = HORIZONTAL_TOTAL_PAL >> 1;
*pDMA0_Y_COUNT = NUM_LINES_PAL;
*pDMA0_X_MODIFY = 0x0002;
*pDMA0_Y_MODIFY = 0x0002;
}
//#define BLANK_DATA 0x80108010
#define BLANK_DATA 0x10801080
#define dim(x) (sizeof(x) / sizeof(x[0]))
typedef struct _LINE_MAP {
WORD StartLine;
WORD EndLine;
DWORD ControlCode_SAV;
DWORD ControlCode_EAV;
BOOL VBlank; // Is in Vertical Blanking
} LINE_MAP;
/*
LINE_MAP PalLineMap[6] =
{
{1, 22, 0xFF0000AB, 0xFF0000B6, TRUE},
{23, 310, 0xFF000080, 0xFF00009D, FALSE},
{311, 312, 0xFF0000AB, 0xFF0000B6, TRUE},
{313, 335, 0xFF0000EC, 0xFF0000F1, TRUE},
{336, 623, 0xFF0000C7, 0xFF0000DA, FALSE},
{624, 625, 0xFF0000EC, 0xFF0000F1, TRUE},
};
LINE_MAP NtscLineMap[6] =
{
{1, 3, 0xFF0000EC, 0xFF0000F1, TRUE},
{4, 20, 0xFF0000AB, 0xFF0000B6, TRUE},
{21, 263, 0xFF000080, 0xFF00009D, FALSE},
{264, 265, 0xFF0000AB, 0xFF0000B6, TRUE},
{266, 282, 0xFF0000EC, 0xFF0000F1, TRUE},
{283, 525, 0xFF0000C7, 0xFF0000DA, FALSE},
};
DWORD ColorBarTable[8] =
{
0x80108010, // black
0xF0296E29, // blue
0x5A51F051, // red
0xCA6ADE6A, // magenta
0x36912291, // green
0xA6AA10AA, // cyan
0x10D292D2, // yellow
0x80EB80EB, // white
};
*/
LINE_MAP PalLineMap[6] =
{
{1, 22, 0xAB0000FF, 0xB60000FF, TRUE},
{23, 310, 0x800000FF, 0x9D0000FF, FALSE},
{311, 312, 0xAB0000FF, 0xB60000FF, TRUE},
{313, 335, 0xEC0000FF, 0xF10000FF, TRUE},
{336, 623, 0xC70000FF, 0xDA0000FF, FALSE},
{624, 625, 0xEC0000FF, 0xF10000FF, TRUE},
};
LINE_MAP NtscLineMap[6] =
{
{1, 3, 0xEC0000FF, 0xF10000FF, TRUE},
{4, 20, 0xAB0000FF, 0xB60000FF, TRUE},
{21, 263, 0x800000FF, 0x9D0000FF, FALSE},
{264, 265, 0xAB0000FF, 0xB60000FF, TRUE},
{266, 282, 0xEC0000FF, 0xF10000FF, TRUE},
{283, 525, 0xC70000FF, 0xDA0000FF, FALSE},
};
DWORD ColorBarTable[8] =
{
0x10801080, // black
0x296E29F0, // blue
0x51F0505A, // red
0x6ADE6ACA, // magenta
0x91229136, // green
0xAA10AAA6, // cyan
0xD292D210, // yellow
0xEB80EB80, // white
};
void PalVideoOutFrameBufferInit(void)
{
DWORD *buf = (DWORD *)VIDEO_FRAME_BUFFER_BASE;
DWORD *datas = (DWORD *)0x00;
WORD i, j, k, c;
for (i = 1; i <= NUM_LINES_PAL; i++)
{
for (j = 0; j < dim(PalLineMap); j++)
{
if (i >= PalLineMap[j].StartLine && i <= PalLineMap[j].EndLine)
{
// EAV Code
*buf++ = PalLineMap[j].ControlCode_EAV;
// Horizontal Blanking
for (k = 0; k < (HORIZONTAL_BLANKING_PAL >> 2); k++)
*buf++ = BLANK_DATA;
// SAV Code
*buf++ = PalLineMap[j].ControlCode_SAV;
if (PalLineMap[j].VBlank)
{
// Vertical Blanking+.3
for (k = 0; k < (HORIZONTAL_ACTIVE >> 2); k++)
*buf++ = BLANK_DATA;
}
else
{
// Active Video
//直条纹
for (c = 0; c < dim(ColorBarTable); c++)
{
for (k = 0; k < ((HORIZONTAL_ACTIVE >> 2) / dim(ColorBarTable)); k++)
*buf++ = ColorBarTable[c];
}
/* if(i==336)
datas=(DWORD *)0x00;
for (k=0;k<(HORIZONTAL_ACTIVE >> 2);k++)
*buf++=*datas++;*/
}
break;
}
}
}
}
/*void NtscVideoOutFrameBufferInit(void)
{
DWORD *buf = (DWORD *)VIDEO_FRAME_BUFFER_BASE;
WORD i, j, k, c;
for (i = 1; i <= NUM_LINES_NTSC; i++)
{
for (j = 0; j < dim(NtscLineMap); j++)
{
if (i >= NtscLineMap[j].StartLine && i <= NtscLineMap[j].EndLine)
{
// EAV Code
*buf++ = NtscLineMap[j].ControlCode_EAV;
// Horizontal Blanking
for (k = 0; k < (HORIZONTAL_BLANKING_NTSC >> 2); k++)
*buf++ = BLANK_DATA;
// SAV Code
*buf++ = NtscLineMap[j].ControlCode_SAV;
if (NtscLineMap[j].VBlank)
{
// Vertical Blanking
for (k = 0; k < (HORIZONTAL_ACTIVE >> 2); k++)
*buf++ = BLANK_DATA;
}
else
{
// Active Video
for (c = 0; c < dim(ColorBarTable); c++)
{
for (k = 0; k < ((HORIZONTAL_ACTIVE >> 2) / dim(ColorBarTable)); k++)
*buf++ = ColorBarTable[c];
}
}
break;
}
}
}
} */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -