亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? pxa_camera-hzh.c

?? 基于intel xscale下的linux系統(tǒng)camera驅(qū)動(dòng)程序
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
	if (parity_check) {		value |= CI_CICR0_PAR_EN;	}	else {		value &= ~CI_CICR0_PAR_EN;	}	CICR0 = value;   	return; }//嵌串void ci_configure_es(int parity_check){	// the operationi is same as Embedded-Parallel	ci_configure_ep(parity_check);}//設(shè)置mclk頻率和mclk及pclk是否由CPU產(chǎn)生(ciclk=104M,mclk=24M由CPU產(chǎn)生,pclk由sensor產(chǎn)生)void ci_set_clock(unsigned int clk_regs_base, int pclk_enable, int mclk_enable, unsigned int mclk_khz){	unsigned int ciclk = 0,  value, div, cccr_l;	// determine the LCLK frequency programmed into the CCCR.	cccr_l = (CCCR & 0x0000001F);        if (cccr_l < 8) // L = [2 - 7]                ciclk = (13 * cccr_l) * 100;        else if (cccr_l < 17) // L = [8 - 16]               ciclk = ((13 * cccr_l) * 100) >> 1;        else if (cccr_l < 32) // L = [17 - 31]               ciclk = ((13 * cccr_l) * 100) >> 2;        // want a divisor that gives us a clock rate as close to, but not more than the given mclk.        div = (ciclk / (2 * mclk_khz));	div = div - 1;	// write cicr4	value = CICR4;	value &= ~(CI_CICR4_PCLK_EN | CI_CICR4_MCLK_EN | CI_CICR4_DIV_SMASK<<CI_CICR4_DIV_SHIFT);	value |= (pclk_enable) ? CI_CICR4_PCLK_EN : 0;	value |= (mclk_enable) ? CI_CICR4_MCLK_EN : 0;	value |= div << CI_CICR4_DIV_SHIFT;	CICR4 = value;   	return; }//設(shè)置采樣有效邊緣和同步信號(hào)有效極性void ci_set_polarity(int pclk_sample_falling, int hsync_active_low, int vsync_active_low){	unsigned int value;		// write cicr4	value = CICR4;	value &= ~(CI_CICR4_PCP | CI_CICR4_HSP | CI_CICR4_VSP);	value |= (pclk_sample_falling)? CI_CICR4_PCP : 0;	value |= (hsync_active_low) ? CI_CICR4_HSP : 0;	value |= (vsync_active_low) ? CI_CICR4_VSP : 0;	CICR4 = value;   	return; }//設(shè)置超時(shí)參數(shù)和FIFO啟動(dòng)DMA的閥值和使能/禁止FIFO1,FIFO2(FIFO現(xiàn)已可自動(dòng)使能)void ci_set_fifo(unsigned int timeout, CI_FIFO_THRESHOLD threshold, int fifo1_enable,               int fifo2_enable){	unsigned int value;	// write citor	CITOR = timeout; 		// write cifr: always enable fifo 0! also reset input fifo 	value = CIFR;	value &= ~(CI_CIFR_FEN0 | CI_CIFR_FEN1 | CI_CIFR_FEN2 | CI_CIFR_RESETF | 	CI_CIFR_THL_0_SMASK<<CI_CIFR_THL_0_SHIFT);	value |= (unsigned int)threshold << CI_CIFR_THL_0_SHIFT;	value |= (fifo1_enable) ? CI_CIFR_FEN1 : 0;	value |= (fifo2_enable) ? CI_CIFR_FEN2 : 0;	value |= CI_CIFR_RESETF | CI_CIFR_FEN0;	CIFR = value;	return; }void ci_reset_fifo(void){	unsigned int value;	value = CIFR;	value |= CI_CIFR_RESETF;	CIFR = value;}//設(shè)置中斷掩碼void ci_set_int_mask(unsigned int mask){	unsigned int value;	// write mask in cicr0  	value = CICR0;	value &= ~CI_CICR0_INTERRUPT_MASK;	value |= (mask & CI_CICR0_INTERRUPT_MASK);	CICR0 = value;   	return; }//獲取中斷掩碼unsigned int ci_get_int_mask(void){	unsigned int value;	// write mask in cicr0  	value = CICR0;	return (value & CI_CICR0_INTERRUPT_MASK);}//清除中斷void ci_clear_int_status(unsigned int status){	// write 1 to clear	CISR = status;}//讀中斷狀態(tài)unsigned int ci_get_int_status(void){	int value;	value = CISR;	return  value;}//寫(xiě)和讀camera控制寄存器void ci_set_reg_value(unsigned int reg_offset, unsigned int value){	CI_REG((u32)(ci_regs_base) + reg_offset) = value;}int ci_get_reg_value(unsigned int reg_offset){	int value;	value = CI_REG((u32)(ci_regs_base) + reg_offset);	return value;}//-------------------------------------------------------------------------------------------------------//  Control APIs//-------------------------------------------------------------------------------------------------------int ci_init(void){	int cken_val;	(unsigned long*)ci_regs_base = (unsigned long*)ioremap(CI_REGS_PHYS, CI_REG_SIZE);	if(!ci_regs_base) {		printk ("ci regs base apply failed \n");		return -1;	}	// clear all CI registers	CICR0 = 0x3FF;   // disable all interrupts	CICR1 = 0;	CICR2 = 0;	CICR3 = 0;	CICR4 = 0;	CISR  = ~0;	CIFR  = 0;	CITOR = 0;		// enable CI clock	cken_val = CKEN;	cken_val |= CKEN24_CAMERA;	CKEN = cken_val;	return 0;}void ci_deinit(){	// disable CI clock	CKEN &= ~CKEN24_CAMERA;}void ci_enable(int dma_en){	unsigned int value;	// write mask in cicr0  	value = CICR0;	value |= CI_CICR0_ENB;	if (dma_en) {		value |= CI_CICR0_DMA_EN;	}	CICR0 = value;   	return; }//關(guān)閉camera,有快速和等待當(dāng)前禎采樣完畢兩種模式int ci_disable(int quick){	volatile unsigned int value, mask;	int retry;	// write control bit in cicr0   	value = CICR0;	if (quick) {		value &= ~CI_CICR0_ENB;		mask = CI_CISR_CQD;	}	else {		value |= CI_CICR0_DIS;		mask = CI_CISR_CDD;	}	CICR0 = value;   		// wait shutdown complete	retry = 50;	while ( retry-- > 0 ) {		value = CISR;		if ( value & mask ) {			CISR = mask;			return 0;		}		mdelay(10);	}	return -1; }void ci_slave_capture_enable(){	unsigned int value;	// write mask in cicr0  	value = CICR0;	value |= CI_CICR0_SL_CAP_EN;	CICR0 = value;   	return; }void ci_slave_capture_disable(){	unsigned int value;		// write mask in cicr0  	value = CICR0;	value &= ~CI_CICR0_SL_CAP_EN;	CICR0 = value;   	return; }//DMA中斷處理程序,只在Y通道結(jié)束才做具體操作void pxa_ci_dma_irq_y(int channel, void *data, struct pt_regs *regs){	int dcsr;	static int dma_repeated=0;	camera_context_t  *cam_ctx = g_camera_context;	dcsr = DCSR(channel);	DCSR(channel) = dcsr & ~DCSR_STOPIRQEN;	if (still_image_mode == 1) {		if (task_waiting == 1) {			wake_up_interruptible (&camera_wait_q);			task_waiting = 0;		}		else {			still_image_rdy = 1;		}	} 	//當(dāng)尾塊索引(讀取數(shù)據(jù)時(shí)修改)與頭塊索引(DMA結(jié)束時(shí)修改)只差1時(shí),在尾塊前一塊重復(fù)DMA以防止覆蓋數(shù)據(jù)	else 	if (dma_repeated == 0 		&& (cam_ctx->block_tail == ((cam_ctx->block_header + 2) % cam_ctx->block_number)))  {		dma_repeated = 1;		pxa_dma_repeat(cam_ctx);		cam_ctx->block_header = (cam_ctx->block_header + 1) % cam_ctx->block_number;	}	//如前面有重復(fù)一塊DMA操作,在條件滿(mǎn)足時(shí)(數(shù)據(jù)已被讀出,尾塊已變)恢復(fù)DMA循環(huán)操作	else if (dma_repeated == 1 && 			(cam_ctx->block_tail != ((cam_ctx->block_header + 1) % cam_ctx->block_number))			&& (cam_ctx->block_tail != ((cam_ctx->block_header + 2) % cam_ctx->block_number)))  {			pxa_dma_continue(cam_ctx);			dma_repeated = 0;	}	else if (dma_repeated == 0) {		cam_ctx->block_header = (cam_ctx->block_header + 1) % cam_ctx->block_number;	}	if (task_waiting == 1 && !(cam_ctx->block_header == cam_ctx->block_tail)) {			wake_up_interruptible (&camera_wait_q);		task_waiting = 0;	}	return;}void pxa_ci_dma_irq_cb(int channel, void *data, struct pt_regs *regs){	return;}void pxa_ci_dma_irq_cr(int channel, void *data, struct pt_regs *regs){	return;}                                                                                                                     inline static void pxa_ci_dma_stop(camera_context_t  *cam_ctx){        int ch0, ch1, ch2;                ch0 = cam_ctx->dma_channels[0];        ch1 = cam_ctx->dma_channels[1];        ch2 = cam_ctx->dma_channels[2];        DCSR(ch0) &= ~DCSR_RUN;        DCSR(ch1) &= ~DCSR_RUN;        DCSR(ch2) &= ~DCSR_RUN;}                                                                                                                             //填充DMA目的地址并啟動(dòng)DMA操作void pxa_dma_start(camera_context_t  *cam_ctx){        unsigned char cnt_blk;        pxa_dma_desc   *cnt_desc;	cam_ctx->block_header = (cam_ctx->block_header + 1) % cam_ctx->block_number;        cnt_blk = (unsigned char)cam_ctx->block_header;	        cnt_desc = (pxa_dma_desc *)cam_ctx->fifo0_descriptors_physical + cnt_blk * cam_ctx->fifo0_num_descriptors;        DDADR(cam_ctx->dma_channels[0]) = (int) cnt_desc;        DCSR(cam_ctx->dma_channels[0]) |= DCSR_RUN;        if (cam_ctx->fifo1_num_descriptors) {                cnt_desc = (pxa_dma_desc *)cam_ctx->fifo1_descriptors_physical + cnt_blk * cam_ctx->fifo1_num_descriptors;                 DDADR(cam_ctx->dma_channels[1]) = (int) cnt_desc;                DCSR(cam_ctx->dma_channels[1]) |= DCSR_RUN;        }        if (cam_ctx->fifo2_num_descriptors) {                cnt_desc = (pxa_dma_desc *)cam_ctx->fifo2_descriptors_physical + cnt_blk * cam_ctx->fifo2_num_descriptors;                 DDADR(cam_ctx->dma_channels[2]) = (int) cnt_desc;                DCSR(cam_ctx->dma_channels[2]) |= DCSR_RUN;        }		return;}irqreturn_t pxa_camera_irq(int irq, void *dev_id, struct pt_regs *regs)	{        int cisr;        static int dma_started=0;	disable_irq(IRQ_CAMERA);        cisr = CISR;        if (cisr & CI_CISR_SOF) {		if (dma_started == 0) {			dma_started = 1;		}                CISR |= CI_CISR_SOF;        }        if (cisr & CI_CISR_EOF) {                CISR |= CI_CISR_EOF;        }	enable_irq(IRQ_CAMERA);	return IRQ_HANDLED;	}void pxa_dma_repeat(camera_context_t  *cam_ctx){	pxa_dma_desc *cnt_head, *cnt_tail; 	int cnt_block;	cnt_block = (cam_ctx->block_header + 1) % cam_ctx->block_number;// FIFO0	(pxa_dma_desc *)cnt_head = (pxa_dma_desc *)cam_ctx->fifo0_descriptors_virtual + cnt_block * cam_ctx->fifo0_num_descriptors;	cnt_tail = cnt_head + cam_ctx->fifo0_num_descriptors - 1;	cnt_tail->ddadr = cnt_head->ddadr - sizeof(pxa_dma_desc);// FIFO1	if (cam_ctx->fifo1_transfer_size) {		cnt_head = (pxa_dma_desc *)cam_ctx->fifo1_descriptors_virtual + cnt_block * cam_ctx->fifo1_num_descriptors;		cnt_tail = cnt_head + cam_ctx->fifo1_num_descriptors - 1;		cnt_tail->ddadr = cnt_head->ddadr - sizeof(pxa_dma_desc);	}// FIFO2	if (cam_ctx->fifo2_transfer_size) {		cnt_head = (pxa_dma_desc *)cam_ctx->fifo2_descriptors_virtual + cnt_block * cam_ctx->fifo2_num_descriptors;		cnt_tail = cnt_head + cam_ctx->fifo2_num_descriptors - 1;		cnt_tail->ddadr = cnt_head->ddadr - sizeof(pxa_dma_desc);	}	return;}void pxa_dma_continue(camera_context_t *cam_ctx){	pxa_dma_desc *cnt_head, *cnt_tail; 	pxa_dma_desc *next_head;	int cnt_block, next_block;		cnt_block = cam_ctx->block_header;	next_block = (cnt_block + 1) % cam_ctx->block_number;// FIFO0		cnt_head = (pxa_dma_desc *)cam_ctx->fifo0_descriptors_virtual + cnt_block * cam_ctx->fifo0_num_descriptors;	cnt_tail = cnt_head + cam_ctx->fifo0_num_descriptors - 1;	next_head = (pxa_dma_desc *)cam_ctx->fifo0_descriptors_virtual + next_block * cam_ctx->fifo0_num_descriptors;	cnt_tail->ddadr = next_head->ddadr - sizeof(pxa_dma_desc);// FIFO1	if (cam_ctx->fifo1_transfer_size) {		cnt_head = (pxa_dma_desc *)cam_ctx->fifo1_descriptors_virtual + cnt_block * cam_ctx->fifo1_num_descriptors;		cnt_tail = cnt_head + cam_ctx->fifo1_num_descriptors - 1;		next_head = (pxa_dma_desc *)cam_ctx->fifo1_descriptors_virtual + next_block * cam_ctx->fifo1_num_descriptors;		cnt_tail->ddadr = next_head->ddadr - sizeof(pxa_dma_desc);	}// FIFO2	if (cam_ctx->fifo2_transfer_size) {		cnt_head = (pxa_dma_desc *)cam_ctx->fifo2_descriptors_virtual + cnt_block * cam_ctx->fifo2_num_descriptors;		cnt_tail = cnt_head + cam_ctx->fifo2_num_descriptors - 1;		next_head = (pxa_dma_desc *)cam_ctx->fifo2_descriptors_virtual + next_block * cam_ctx->fifo2_num_descriptors;		cnt_tail->ddadr = next_head->ddadr - sizeof(pxa_dma_desc);	}	return;}module_init(pxa_camera_init);module_exit(pxa_camera_exit);MODULE_DESCRIPTION("Bulverde Camera Interface driver");MODULE_LICENSE("GPL");

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美在线高清| 欧美精品日韩一区| 韩国中文字幕2020精品| 青青草原综合久久大伊人精品| 亚洲嫩草精品久久| 自拍偷拍亚洲激情| 136国产福利精品导航| 美女视频网站黄色亚洲| 狠狠色狠狠色综合日日91app| 亚洲第一电影网| 精品捆绑美女sm三区| 久久av资源站| 久久精品水蜜桃av综合天堂| 成人av免费在线观看| 成人sese在线| 国产不卡视频在线播放| 男人的j进女人的j一区| 国产精品美女久久久久av爽李琼| 6080午夜不卡| 91久久久免费一区二区| 在线区一区二视频| 欧美日本一区二区三区| 欧美日韩一区二区在线观看| 欧美人体做爰大胆视频| 日韩欧美专区在线| 久久综合狠狠综合久久激情| 久久久久成人黄色影片| 国产女人水真多18毛片18精品视频| 国产精品私房写真福利视频| 亚洲精品久久久久久国产精华液| 亚洲一区二区四区蜜桃| 日韩电影免费一区| 久久久久久99久久久精品网站| 精品欧美乱码久久久久久1区2区 | 色婷婷亚洲婷婷| 91丨porny丨蝌蚪视频| 在线观看视频一区| 欧美网站大全在线观看| 91精品国产色综合久久ai换脸 | 亚洲欧洲色图综合| 亚洲毛片av在线| 亚洲欧洲av另类| 中文字幕免费在线观看视频一区| 中文字幕+乱码+中文字幕一区| 国产精品久久午夜夜伦鲁鲁| 玉米视频成人免费看| 偷拍亚洲欧洲综合| 国产成人小视频| 99精品久久只有精品| 日韩一区二区高清| 国产亚洲精品7777| 亚洲福利视频一区二区| 国产精品一二三在| 日韩视频免费观看高清完整版| 中文字幕日韩欧美一区二区三区| 欧美成人vps| 亚洲日本青草视频在线怡红院| 日本中文字幕一区二区有限公司| 成人在线视频一区| 欧美日韩成人在线一区| www国产成人| 一区二区三区四区蜜桃 | 91在线视频免费91| 日韩三级在线免费观看| 亚洲天堂成人网| 激情图片小说一区| 欧美亚洲国产bt| 国产精品婷婷午夜在线观看| 日韩不卡一区二区| 91麻豆视频网站| 精品国产亚洲在线| 午夜国产精品影院在线观看| 成人av免费观看| 精品国产一区二区三区忘忧草| 一区二区三区四区不卡视频| 国产69精品一区二区亚洲孕妇 | 亚洲精品一卡二卡| 国产精品一区免费视频| 欧美一区二区三区男人的天堂| 亚洲日本一区二区| 成人精品免费视频| 精品国产三级a在线观看| 亚洲bt欧美bt精品777| 91在线观看美女| 国产精品丝袜黑色高跟| 国内精品久久久久影院色| 在线不卡a资源高清| 亚洲综合区在线| 91亚洲国产成人精品一区二区三| 久久九九久久九九| 精品一区二区免费| 日韩三级精品电影久久久| 五月婷婷激情综合网| 91福利在线看| 亚洲欧洲日韩在线| 99精品久久久久久| 中文字幕一区免费在线观看| 成人综合婷婷国产精品久久蜜臀| 精品国内二区三区| 国内精品伊人久久久久影院对白| 日韩欧美激情四射| 免费人成精品欧美精品| 日韩一区二区三| 日韩精品色哟哟| 91精品国产综合久久福利软件 | 欧美日韩在线不卡| 亚洲精品videosex极品| 91在线小视频| 一区二区三区加勒比av| 日本高清不卡在线观看| 亚洲综合色自拍一区| 欧美日韩视频在线观看一区二区三区| 亚洲另类色综合网站| 欧美性受极品xxxx喷水| 亚洲韩国一区二区三区| 欧美日韩国产片| 日本在线不卡视频| 日韩精品一区二区三区中文精品| 美女网站色91| 久久精品视频在线看| 成人永久aaa| 亚洲欧美激情在线| 欧美日韩在线不卡| 麻豆视频一区二区| 久久精品亚洲精品国产欧美| 波多野结衣中文一区| 亚洲天天做日日做天天谢日日欢| 欧洲一区二区av| 奇米综合一区二区三区精品视频| 久久色.com| fc2成人免费人成在线观看播放| 亚洲码国产岛国毛片在线| 欧美色精品在线视频| 麻豆成人在线观看| 欧美激情一区不卡| 91久久国产综合久久| 日本在线播放一区二区三区| 国产调教视频一区| 99久久精品国产导航| 午夜视频一区在线观看| 欧美sm美女调教| 成人教育av在线| 亚洲国产日韩精品| 亚洲精品一区二区三区福利| www.成人在线| 爽爽淫人综合网网站| 久久久亚洲综合| 色婷婷一区二区| 精品一区二区三区的国产在线播放| 中文字幕一区二区三区在线不卡| 欧美最猛黑人xxxxx猛交| 看电视剧不卡顿的网站| 中文字幕一区二区三区视频| 3atv在线一区二区三区| 成人免费毛片aaaaa**| 五月婷婷另类国产| 国产精品美女久久久久久久 | 国产精品久久二区二区| 欧美日韩一区二区在线观看| 国产精品18久久久| 亚洲网友自拍偷拍| 欧美国产欧美综合| 884aa四虎影成人精品一区| 成人精品高清在线| 理论电影国产精品| 一个色综合av| 久久精品欧美日韩| 制服丝袜激情欧洲亚洲| 成人av免费在线观看| 久久不见久久见免费视频1| 亚洲激情男女视频| 久久久国产一区二区三区四区小说 | 麻豆精品在线观看| 亚洲精品国产无套在线观| 久久精品夜色噜噜亚洲a∨| 制服丝袜亚洲网站| 色欧美日韩亚洲| 粉嫩蜜臀av国产精品网站| 手机精品视频在线观看| 亚洲欧美综合另类在线卡通| 久久久亚洲精华液精华液精华液| 欧美二区三区91| 一本久道久久综合中文字幕| 国产电影一区二区三区| 秋霞午夜鲁丝一区二区老狼| 亚洲精品伦理在线| 亚洲国产精品激情在线观看| 日韩欧美激情四射| 欧美精品高清视频| 欧美亚洲国产一卡| 色狠狠一区二区| 99久久伊人精品| 国产精品888| 韩国精品在线观看| 麻豆视频一区二区| 美腿丝袜在线亚洲一区| 视频在线在亚洲| 香蕉乱码成人久久天堂爱免费| 一区二区国产视频| 一区二区在线观看av|