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

📄 video_isr.c

📁 bf533平台图像采集程序
💻 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 + -