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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sync_serial.c

?? ARM 嵌入式 系統 設計與實例開發 實驗教材 二源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
	port->odd_input = 0;	init_waitqueue_head(&port->out_wait_q);	init_waitqueue_head(&port->in_wait_q);	port->ctrl_data_shadow =	  IO_STATE(R_SYNC_SERIAL1_CTRL, tr_baud, c115k2Hz)   | 	  IO_STATE(R_SYNC_SERIAL1_CTRL, mode, master_output) | 	  IO_STATE(R_SYNC_SERIAL1_CTRL, error, ignore)       |	  IO_STATE(R_SYNC_SERIAL1_CTRL, rec_enable, disable) |	  IO_STATE(R_SYNC_SERIAL1_CTRL, f_synctype, normal)  |	  IO_STATE(R_SYNC_SERIAL1_CTRL, f_syncsize, word)    |	  IO_STATE(R_SYNC_SERIAL1_CTRL, f_sync, on)	     |	  IO_STATE(R_SYNC_SERIAL1_CTRL, clk_mode, normal)    |	  IO_STATE(R_SYNC_SERIAL1_CTRL, clk_halt, stopped)   |	  IO_STATE(R_SYNC_SERIAL1_CTRL, bitorder, msb)	     |	  IO_STATE(R_SYNC_SERIAL1_CTRL, tr_enable, disable)  |	  IO_STATE(R_SYNC_SERIAL1_CTRL, wordsize, size8bit)  |	  IO_STATE(R_SYNC_SERIAL1_CTRL, buf_empty, lmt_8)    |	  IO_STATE(R_SYNC_SERIAL1_CTRL, buf_full, lmt_8)     |	  IO_STATE(R_SYNC_SERIAL1_CTRL, flow_ctrl, enabled)  |	  IO_STATE(R_SYNC_SERIAL1_CTRL, clk_polarity, neg)   |	  IO_STATE(R_SYNC_SERIAL1_CTRL, frame_polarity, normal)|	  IO_STATE(R_SYNC_SERIAL1_CTRL, status_polarity, inverted)|	  IO_STATE(R_SYNC_SERIAL1_CTRL, clk_driver, normal)   |	  IO_STATE(R_SYNC_SERIAL1_CTRL, frame_driver, normal) |	  IO_STATE(R_SYNC_SERIAL1_CTRL, status_driver, normal)|	  IO_STATE(R_SYNC_SERIAL1_CTRL, def_out0, high);  	if (port->use_dma)		port->ctrl_data_shadow |= IO_STATE(R_SYNC_SERIAL1_CTRL, dma_enable, on);	else		port->ctrl_data_shadow |= IO_STATE(R_SYNC_SERIAL1_CTRL, dma_enable, off);  	*port->ctrl_data = port->ctrl_data_shadow;}static int sync_serial_open(struct inode *inode, struct file *file){	int dev = MINOR(inode->i_rdev);	DEBUG(printk("Open sync serial port %d\n", dev));   	if (dev < 0 || dev >= NUMBER_OF_PORTS || !ports[dev].enabled)	{		DEBUG(printk("Invalid minor %d\n", dev));		return -ENODEV;	}	if (ports[dev].busy)	{		DEBUG(printk("Device is busy.. \n"));		return -EBUSY;	}	ports[dev].busy = 1;	return 0;}static int sync_serial_release(struct inode *inode, struct file *file){	int dev = MINOR(inode->i_rdev);	if (dev < 0 || dev >= NUMBER_OF_PORTS || !ports[dev].enabled)	{		DEBUG(printk("Invalid minor %d\n", dev));		return -ENODEV;	}	ports[dev].busy = 0;	return 0;}static int sync_serial_ioctl(struct inode *inode, struct file *file,		  unsigned int cmd, unsigned long arg){	int return_val = 0;	int dev = MINOR(file->f_dentry->d_inode->i_rdev);  sync_port* port;        	if (dev < 0 || dev >= NUMBER_OF_PORTS || !ports[dev].enabled)	{		DEBUG(printk("Invalid minor %d\n", dev));		return -1;	}        port = &ports[dev];	/* Disable port while changing config */	if (dev)	{		RESET_DMA(4); WAIT_DMA(4);		*R_DMA_CH4_CLR_INTR = IO_STATE(R_DMA_CH4_CLR_INTR, clr_eop, do) |                  IO_STATE(R_DMA_CH4_CLR_INTR, clr_descr, do); 		SETS(gen_config_ii_shadow, R_GEN_CONFIG_II, sermode3, async);	}	else	{		RESET_DMA(8); WAIT_DMA(8);		*R_DMA_CH8_CLR_INTR = IO_STATE(R_DMA_CH8_CLR_INTR, clr_eop, do) |                  IO_STATE(R_DMA_CH8_CLR_INTR, clr_descr, do);  		SETS(gen_config_ii_shadow, R_GEN_CONFIG_II, sermode1, async);	}	*R_GEN_CONFIG_II = gen_config_ii_shadow;	switch(cmd)	{		case SSP_SPEED:			if (GET_SPEED(arg) == CODEC)			{				if (dev)					SETS(sync_serial_prescale_shadow, R_SYNC_SERIAL_PRESCALE, clk_sel_u3, codec);				else					SETS(sync_serial_prescale_shadow, R_SYNC_SERIAL_PRESCALE, clk_sel_u1, codec);				SETF(sync_serial_prescale_shadow, R_SYNC_SERIAL_PRESCALE, prescaler, GET_FREQ(arg));				SETF(sync_serial_prescale_shadow, R_SYNC_SERIAL_PRESCALE, frame_rate, GET_FRAME_RATE(arg));				SETF(sync_serial_prescale_shadow, R_SYNC_SERIAL_PRESCALE, word_rate, GET_WORD_RATE(arg));			}			else			{				SETF(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, tr_baud, GET_SPEED(arg));				if (dev)					SETS(sync_serial_prescale_shadow, R_SYNC_SERIAL_PRESCALE, clk_sel_u3, baudrate);				else					SETS(sync_serial_prescale_shadow, R_SYNC_SERIAL_PRESCALE, clk_sel_u1, baudrate);			}			break;		case SSP_MODE:			if (arg > 5)				return -EINVAL;			SETF(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, mode, arg);			break;		case SSP_FRAME_SYNC:			if (arg & NORMAL_SYNC)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, f_synctype, normal);			else if (arg & EARLY_SYNC)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, f_synctype, early);    			if (arg & BIT_SYNC)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, f_syncsize, bit);			else if (arg & WORD_SYNC)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, f_syncsize, word);			else if (arg & EXTENDED_SYNC)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, f_syncsize, extended);    			if (arg & SYNC_ON)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, f_sync, on);			else if (arg & SYNC_OFF)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, f_sync, off);    			if (arg & WORD_SIZE_8)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, wordsize, size8bit);			else if (arg & WORD_SIZE_12)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, wordsize, size12bit);			else if (arg & WORD_SIZE_16)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, wordsize, size16bit);			else if (arg & WORD_SIZE_24)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, wordsize, size24bit);			else if (arg & WORD_SIZE_32)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, wordsize, size32bit);    			if (arg & BIT_ORDER_MSB)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, bitorder, msb);			else if (arg & BIT_ORDER_LSB)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, bitorder, lsb);			if (arg & FLOW_CONTROL_ENABLE)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, flow_ctrl, enabled);			else if (arg & FLOW_CONTROL_DISABLE)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, flow_ctrl, disabled);			if (arg & CLOCK_NOT_GATED)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, clk_mode, normal);			else if (arg & CLOCK_GATED)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, clk_mode, gated);    			break;		case SSP_IPOLARITY:			if (arg & CLOCK_NORMAL)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, clk_polarity, neg);			else if (arg & CLOCK_INVERT)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, clk_polarity, pos);			if (arg & FRAME_NORMAL)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, frame_polarity, normal);			else if (arg & FRAME_INVERT)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, frame_polarity, inverted);			if (arg & STATUS_NORMAL)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, status_polarity, normal);			else if (arg & STATUS_INVERT)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, status_polarity, inverted);			break;		case SSP_OPOLARITY:			if (arg & CLOCK_NORMAL)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, clk_driver, normal);			else if (arg & CLOCK_INVERT)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, clk_driver, inverted);    			if (arg & FRAME_NORMAL)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, frame_driver, normal);			else if (arg & FRAME_INVERT)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, frame_driver, inverted);			if (arg & STATUS_NORMAL)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, status_driver, normal);			else if (arg & STATUS_INVERT)				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, status_driver, inverted);			break;		case SSP_SPI:			SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, flow_ctrl, disabled);			SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, bitorder, msb);			SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, wordsize, size8bit);			SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, f_sync, on);			SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, f_syncsize, word);			SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, f_synctype, normal);			if (arg & SPI_SLAVE)			{				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, frame_polarity, inverted);				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, clk_polarity, neg);				SETF(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, mode, SLAVE_INPUT);			}			else			{				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, frame_driver, inverted);				SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, clk_driver, inverted);				SETF(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, mode, MASTER_OUTPUT);			}			break;		default:			return_val = -1;	}	/* Set config and enable port */	*port->ctrl_data = port->ctrl_data_shadow;	*R_SYNC_SERIAL_PRESCALE = sync_serial_prescale_shadow;	if (dev)		SETS(gen_config_ii_shadow, R_GEN_CONFIG_II, sermode3, sync);	else		SETS(gen_config_ii_shadow, R_GEN_CONFIG_II, sermode1, sync);	*R_GEN_CONFIG_II = gen_config_ii_shadow;	return return_val;}static ssize_t sync_serial_manual_write(struct file * file, const char * buf,                                         size_t count, loff_t *ppos){	int dev = MINOR(file->f_dentry->d_inode->i_rdev);	DECLARE_WAITQUEUE(wait, current);	sync_port* port;	if (dev < 0 || dev >= NUMBER_OF_PORTS || !ports[dev].enabled)	{		DEBUG(printk("Invalid minor %d\n", dev));		return -ENODEV;	}	port = &ports[dev];	copy_from_user(port->out_buffer, buf, count);	port->outp = port->out_buffer;	port->out_count = count;	port->odd_output = 1;	add_wait_queue(&port->out_wait_q, &wait);	set_current_state(TASK_INTERRUPTIBLE);	*R_IRQ_MASK1_SET = 1 << port->ready_irq_bit; /* transmitter ready IRQ on */	send_word(port); /* Start sender by sending first word */	schedule();	set_current_state(TASK_RUNNING);	remove_wait_queue(&port->out_wait_q, &wait);	if (signal_pending(current))	{		return -EINTR;	}	return count;}static ssize_t sync_serial_write(struct file * file, const char * buf,                                  size_t count, loff_t *ppos){	int dev = MINOR(file->f_dentry->d_inode->i_rdev);	DECLARE_WAITQUEUE(wait, current);		sync_port *port;	if (dev < 0 || dev >= NUMBER_OF_PORTS || !ports[dev].enabled)	{		DEBUG(printk("Invalid minor %d\n", dev));		return -ENODEV;	}	port = &ports[dev];	DEBUG(printk("Write dev %d count %d\n", port->port_nbr, count));	count = count > OUT_BUFFER_SIZE ? OUT_BUFFER_SIZE : count;	/* Make sure transmitter is running */	SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, clk_halt, running);	SETS(port->ctrl_data_shadow, R_SYNC_SERIAL1_CTRL, tr_enable, enable);	*port->ctrl_data = port->ctrl_data_shadow;	if (!port->use_dma)	{		return sync_serial_manual_write(file, buf, count, ppos); 	}  	copy_from_user(port->out_buffer, buf, count);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人免费网站| 91精品国产91久久久久久最新毛片 | 亚洲免费资源在线播放| 图片区小说区区亚洲影院| 国产乱码一区二区三区| 在线观看91精品国产入口| 久久精品亚洲国产奇米99| 亚洲成a人v欧美综合天堂| 成人一区二区视频| 日韩精品一区二区三区在线| 亚洲精品网站在线观看| 国产精品中文欧美| 91精品欧美福利在线观看| 国产精品久99| 国产一区二区久久| 欧美二区三区91| 一区二区三区在线高清| 成人h动漫精品一区二区| 精品入口麻豆88视频| 性做久久久久久免费观看| 成人国产在线观看| 久久―日本道色综合久久| 丝袜美腿亚洲一区二区图片| 91成人在线精品| **网站欧美大片在线观看| 国产伦精品一区二区三区免费迷 | 国产精品一区二区你懂的| 91九色02白丝porn| 亚洲天堂中文字幕| 91在线播放网址| 国产精品美女久久久久aⅴ | 国产真实乱子伦精品视频| 91精品国产一区二区| 污片在线观看一区二区| 欧美天天综合网| 亚洲一区二区美女| 欧美午夜免费电影| 午夜久久久久久久久| 欧美日韩一二区| 视频一区免费在线观看| 在线91免费看| 免费的成人av| 欧美精品一区二区三区在线| 国模一区二区三区白浆| 久久久www免费人成精品| 久久99热99| 国产欧美精品区一区二区三区| 国产乱码精品1区2区3区| 国产片一区二区| 成人晚上爱看视频| 亚洲三级电影全部在线观看高清| 91看片淫黄大片一级在线观看| 亚洲伦理在线精品| 欧美天天综合网| 免费不卡在线视频| 国产欧美一区二区精品秋霞影院| 成人av高清在线| 亚洲综合免费观看高清完整版 | 91久久人澡人人添人人爽欧美| 亚洲自拍都市欧美小说| 91麻豆精品国产91久久久久久久久 | 日韩午夜激情免费电影| 韩国女主播一区| 中文字幕在线观看一区二区| 欧美性大战久久久久久久蜜臀| 免费看精品久久片| 国产精品久久久久久妇女6080| 欧美午夜精品一区二区三区| 精品一区二区在线观看| 国产精品国产三级国产普通话99 | 精品国产凹凸成av人网站| 成人午夜在线播放| 午夜亚洲国产au精品一区二区| 精品黑人一区二区三区久久| 99re这里只有精品6| 秋霞午夜av一区二区三区| 欧美国产在线观看| 欧美男男青年gay1069videost| 国产精品69久久久久水密桃| 亚洲一区二区三区小说| 久久女同精品一区二区| 欧美三级日韩在线| 国产v日产∨综合v精品视频| 亚洲地区一二三色| 国产精品剧情在线亚洲| 亚洲成人av在线电影| 26uuu精品一区二区| 色婷婷久久久久swag精品| 精品亚洲aⅴ乱码一区二区三区| 亚洲乱码中文字幕综合| 国产欧美日韩卡一| 欧美一卡2卡3卡4卡| 色av成人天堂桃色av| 国产高清视频一区| 免费欧美在线视频| 亚洲图片自拍偷拍| ...av二区三区久久精品| 国产亚洲人成网站| 日韩一级精品视频在线观看| 在线看日本不卡| 91在线免费播放| 国产不卡一区视频| 国产资源在线一区| 日本不卡免费在线视频| 亚洲国产精品人人做人人爽| ...中文天堂在线一区| 久久久91精品国产一区二区精品| 欧美一级免费大片| 欧美片网站yy| 欧美婷婷六月丁香综合色| 色狠狠色狠狠综合| 色综合色综合色综合色综合色综合| 国产一区二区三区日韩| 精品一区二区综合| 久久国产精品色婷婷| 另类欧美日韩国产在线| 蜜桃视频在线一区| 蜜臀国产一区二区三区在线播放| 天天色图综合网| 首页国产欧美久久| 青青草97国产精品免费观看无弹窗版 | 欧美aaaaaa午夜精品| 午夜电影久久久| 日韩精品91亚洲二区在线观看| 亚洲国产色一区| 天堂久久一区二区三区| 午夜伦欧美伦电影理论片| 亚洲成av人片在www色猫咪| 五月开心婷婷久久| 蜜桃av一区二区| 国产自产2019最新不卡| 国产盗摄一区二区三区| 成人av在线资源网| 色网站国产精品| 欧美日韩精品一二三区| 日韩一级片在线播放| 日本一区二区三区在线不卡| 国产精品成人免费精品自在线观看| 亚洲视频一二三区| 亚洲成av人综合在线观看| 九九九精品视频| 成人免费高清视频在线观看| 日本韩国欧美在线| 91.com在线观看| 久久久久久久久久久久电影| 国产精品久久久久久久久久免费看| 亚洲少妇最新在线视频| 午夜久久久久久| 国产很黄免费观看久久| 在线观看欧美日本| 欧美精品一区二区三| 亚洲欧洲在线观看av| 日韩福利电影在线观看| 国产电影一区在线| 欧美日本一道本| 日本一区二区视频在线观看| 亚洲国产日产av| 国产成人免费视频| 欧美色图12p| 日本一区二区电影| 午夜精品久久久久久久久| 国产一区高清在线| 在线精品视频免费播放| 国产三级三级三级精品8ⅰ区| 亚洲欧美偷拍另类a∨色屁股| 麻豆成人91精品二区三区| thepron国产精品| 欧美成人官网二区| 亚洲永久免费视频| 福利91精品一区二区三区| 7777精品伊人久久久大香线蕉 | 欧美亚洲日本国产| 久久精品水蜜桃av综合天堂| 亚洲成在人线免费| 99在线热播精品免费| 欧美www视频| 亚洲成人三级小说| 色综合咪咪久久| 欧美激情一二三区| 久久91精品国产91久久小草| 欧美日精品一区视频| 国产精品美女久久久久久久| 狠狠色丁香九九婷婷综合五月| 欧美日韩成人一区二区| 亚洲人123区| www.日韩av| 美女在线视频一区| 欧美日韩精品三区| 中文字幕日韩精品一区| 国产另类ts人妖一区二区| 日韩一区二区三| 午夜av区久久| 欧美日韩免费一区二区三区视频| 亚洲色图制服诱惑| 99re成人在线| 成人免费一区二区三区视频| 成人免费高清在线| 中文一区二区完整视频在线观看| 国产成人免费在线观看不卡| 久久久噜噜噜久久中文字幕色伊伊|