📄 video_isr.c
字号:
#include <cdefBF533.h>
extern int D1, width, height;
extern char* frame_buf;
char frame_flag;
int image_line = 0;
//section("down_sample_image") char SDRAM_DOWNSAMPLE_OUT[2097152];
#define LINE_BUFFER_WIDTH (720*2)
//section("data1") char PPI_DMA_IN[LINE_BUFFER_WIDTH*4];
#pragma align 32
char PPI_DMA_IN[LINE_BUFFER_WIDTH*4];
int x = 0;
/* Defining an ISR
#pragma interrupt_reentrant
#pragma interrupt
section("L1_code") void DMA0_PPI_ISR(void)
*/
EX_INTERRUPT_HANDLER(DMA0_PPI_ISR);
EX_INTERRUPT_HANDLER(DMA0_PPI_ISR)
{
unsigned char *s, *y, *u, *v;
int y_len = width*height, u_len = y_len / 4;
//disable the interrupt request
*pDMA0_IRQ_STATUS = 0x1;
if(D1)
{
if(x == 1)
{
asm("nop;");
}
s = PPI_DMA_IN + ((image_line&0x4) >> 1) * LINE_BUFFER_WIDTH;
y = frame_buf + image_line*width;
u = frame_buf + y_len + ( (image_line+1) /2) * width /2;
v = frame_buf + y_len + u_len + ( (image_line+1) /2) * width /2;
convert2d1(s, y, v, u, width, (width)*2, LINE_BUFFER_WIDTH);
image_line += 4;
if (image_line == height)
image_line = 1; //odd field completed
if (image_line == height+1)
{//whole frame completed
image_line = 0;
frame_flag = 1;
}
x++;
}
else
{
s = PPI_DMA_IN + ((image_line&0x2) >> 1) * LINE_BUFFER_WIDTH;
y = frame_buf + image_line*width;
u = frame_buf + y_len + ( image_line/2) * width /2;
v = frame_buf + y_len + u_len + ( image_line/2) * width /2;
convert2cif(s, y, v, u, width, width, LINE_BUFFER_WIDTH);
image_line += 2;
if (image_line == height)
{//odd field completed
image_line = 0;
frame_flag = 1;
}
}
}//end DMA0_PPI_ISR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -