您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ CR_CHAN函数代码示例

51自学网 2021-06-01 20:05:59
  C++
这篇教程C++ CR_CHAN函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中CR_CHAN函数的典型用法代码示例。如果您正苦于以下问题:C++ CR_CHAN函数的具体用法?C++ CR_CHAN怎么用?C++ CR_CHAN使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了CR_CHAN函数的26个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: dmm32at_ai_check_chanlist

static int dmm32at_ai_check_chanlist(struct comedi_device *dev,				     struct comedi_subdevice *s,				     struct comedi_cmd *cmd){	unsigned int chan0 = CR_CHAN(cmd->chanlist[0]);	unsigned int range0 = CR_RANGE(cmd->chanlist[0]);	int i;	for (i = 1; i < cmd->chanlist_len; i++) {		unsigned int chan = CR_CHAN(cmd->chanlist[i]);		unsigned int range = CR_RANGE(cmd->chanlist[i]);		if (chan != (chan0 + i) % s->n_chan) {			dev_dbg(dev->class_dev,				"entries in chanlist must be consecutive channels, counting upwards/n");			return -EINVAL;		}		if (range != range0) {			dev_dbg(dev->class_dev,				"entries in chanlist must all have the same gain/n");			return -EINVAL;		}	}	return 0;}
开发者ID:AlexShiLucky,项目名称:linux,代码行数:26,


示例2: ni_m_series_set_second_gate

static int ni_m_series_set_second_gate(struct ni_gpct *counter,	lsampl_t gate_source){	struct ni_gpct_device *counter_dev = counter->counter_dev;	const unsigned second_gate_reg =		NITIO_Gi_Second_Gate_Reg(counter->counter_index);	const unsigned selected_second_gate = CR_CHAN(gate_source);	/* bits of second_gate that may be meaningful to second gate register */	static const unsigned selected_second_gate_mask = 0x1f;	unsigned ni_m_series_second_gate_select;	/* FIXME: We don't know what the m-series second gate codes are, so we'll just pass	   the bits through for now. */	switch (selected_second_gate) {	default:		ni_m_series_second_gate_select =			selected_second_gate & selected_second_gate_mask;		break;	};	counter_dev->regs[second_gate_reg] |= Gi_Second_Gate_Mode_Bit;	counter_dev->regs[second_gate_reg] &= ~Gi_Second_Gate_Select_Mask;	counter_dev->regs[second_gate_reg] |=		Gi_Second_Gate_Select_Bits(ni_m_series_second_gate_select);	write_register(counter, counter_dev->regs[second_gate_reg],		second_gate_reg);	return 0;}
开发者ID:jbetten,项目名称:rtxi,代码行数:27,


示例3: multiq3_ai_insn_read

static int multiq3_ai_insn_read(struct comedi_device *dev,				struct comedi_subdevice *s,				struct comedi_insn *insn, unsigned int *data){	int n;	int chan;	unsigned int hi, lo;	int ret;	chan = CR_CHAN(insn->chanspec);	outw(MULTIQ3_CONTROL_MUST | MULTIQ3_AD_MUX_EN | (chan << 3),	     dev->iobase + MULTIQ3_CONTROL);	ret = comedi_timeout(dev, s, insn, multiq3_ai_status,			     MULTIQ3_STATUS_EOC);	if (ret)		return ret;	for (n = 0; n < insn->n; n++) {		outw(0, dev->iobase + MULTIQ3_AD_CS);		ret = comedi_timeout(dev, s, insn, multiq3_ai_status,				     MULTIQ3_STATUS_EOC_I);		if (ret)			return ret;		hi = inb(dev->iobase + MULTIQ3_AD_CS);		lo = inb(dev->iobase + MULTIQ3_AD_CS);		data[n] = (((hi << 8) | lo) + 0x1000) & 0x1fff;	}	return n;}
开发者ID:AkyZero,项目名称:wrapfs-latest,代码行数:33,


示例4: usbduxsigma_ao_insn_write

static int usbduxsigma_ao_insn_write(struct comedi_device *dev,				     struct comedi_subdevice *s,				     struct comedi_insn *insn,				     unsigned int *data){	struct usbduxsigma_private *devpriv = dev->private;	unsigned int chan = CR_CHAN(insn->chanspec);	int ret;	int i;	down(&devpriv->sem);	if (devpriv->ao_cmd_running) {		up(&devpriv->sem);		return -EBUSY;	}	for (i = 0; i < insn->n; i++) {		devpriv->dux_commands[1] = 1;		/* num channels */		devpriv->dux_commands[2] = data[i];	/* value */		devpriv->dux_commands[3] = chan;	/* channel number */		ret = usbbuxsigma_send_cmd(dev, USBDUXSIGMA_DA_CMD);		if (ret < 0) {			up(&devpriv->sem);			return ret;		}		s->readback[chan] = data[i];	}	up(&devpriv->sem);	return insn->n;}
开发者ID:3null,项目名称:linux,代码行数:31,


示例5: pci6208_ao_insn_write

static int pci6208_ao_insn_write(struct comedi_device *dev,				 struct comedi_subdevice *s,				 struct comedi_insn *insn,				 unsigned int *data){	unsigned int chan = CR_CHAN(insn->chanspec);	unsigned int val = s->readback[chan];	int ret;	int i;	for (i = 0; i < insn->n; i++) {		val = data[i];		/* D/A transfer rate is 2.2us */		ret = comedi_timeout(dev, s, insn, pci6208_ao_eoc, 0);		if (ret)			return ret;		/* the hardware expects two's complement values */		outw(comedi_offset_munge(s, val),		     dev->iobase + PCI6208_AO_CONTROL(chan));		s->readback[chan] = val;	}	return insn->n;}
开发者ID:020gzh,项目名称:linux,代码行数:27,


示例6: dt2815_ao_insn

static int dt2815_ao_insn(struct comedi_device *dev, struct comedi_subdevice *s,			  struct comedi_insn *insn, unsigned int *data){	struct dt2815_private *devpriv = dev->private;	int i;	int chan = CR_CHAN(insn->chanspec);	unsigned int status;	unsigned int lo, hi;	for (i = 0; i < insn->n; i++) {		lo = ((data[i] & 0x0f) << 4) | (chan << 1) | 0x01;		hi = (data[i] & 0xff0) >> 4;		status = dt2815_wait_for_status(dev, 0x00);		if (status != 0) {			dev_dbg(dev->class_dev,				"failed to write low byte on %d reason %x/n",				chan, status);			return -EBUSY;		}		outb(lo, dev->iobase + DT2815_DATA);		status = dt2815_wait_for_status(dev, 0x10);		if (status != 0x10) {			dev_dbg(dev->class_dev,				"failed to write high byte on %d reason %x/n",				chan, status);			return -EBUSY;		}		devpriv->ao_readback[chan] = data[i];	}	return i;}
开发者ID:IDM350,项目名称:linux,代码行数:34,


示例7: dio200_start_intr

/* * Called to start acquisition for an 'INTERRUPT' subdevice. */static int dio200_start_intr(struct comedi_device *dev,			     struct comedi_subdevice *s){	unsigned int n;	unsigned isn_bits;	const struct dio200_layout *layout = dio200_dev_layout(dev);	struct dio200_subdev_intr *subpriv = s->private;	struct comedi_cmd *cmd = &s->async->cmd;	int retval = 0;	if (cmd->stop_src == TRIG_COUNT && subpriv->stopcount == 0) {		/* An empty acquisition! */		s->async->events |= COMEDI_CB_EOA;		subpriv->active = false;		retval = 1;	} else {		/* Determine interrupt sources to enable. */		isn_bits = 0;		if (cmd->chanlist) {			for (n = 0; n < cmd->chanlist_len; n++)				isn_bits |= (1U << CR_CHAN(cmd->chanlist[n]));		}		isn_bits &= subpriv->valid_isns;		/* Enable interrupt sources. */		subpriv->enabled_isns = isn_bits;		if (layout->has_int_sce)			dio200_write8(dev, subpriv->ofs, isn_bits);	}	return retval;}
开发者ID:mikuhatsune001,项目名称:linux2.6.32,代码行数:34,


示例8: dt2815_ao_insn

static int dt2815_ao_insn(struct comedi_device *dev, struct comedi_subdevice *s,			  struct comedi_insn *insn, unsigned int *data){	struct dt2815_private *devpriv = dev->private;	int i;	int chan = CR_CHAN(insn->chanspec);	unsigned int lo, hi;	int ret;	for (i = 0; i < insn->n; i++) {		lo = ((data[i] & 0x0f) << 4) | (chan << 1) | 0x01;		hi = (data[i] & 0xff0) >> 4;		ret = comedi_timeout(dev, s, insn, dt2815_ao_status, 0x00);		if (ret)			return ret;		outb(lo, dev->iobase + DT2815_DATA);		ret = comedi_timeout(dev, s, insn, dt2815_ao_status, 0x10);		if (ret)			return ret;		devpriv->ao_readback[chan] = data[i];	}	return i;}
开发者ID:AlexShiLucky,项目名称:linux,代码行数:27,


示例9: pcl711_set_changain

static void pcl711_set_changain(struct comedi_device *dev, int chan){	int chan_register;	outb(CR_RANGE(chan), dev->iobase + PCL711_GAIN);	chan_register = CR_CHAN(chan);	if (this_board->is_8112) {		/*		 *  Set the correct channel.  The two channel banks are switched		 *  using the mask value.		 *  NB: To use differential channels, you should use		 *  mask = 0x30, but I haven't written the support for this		 *  yet. /JJ		 */		if (chan_register >= 8)			chan_register = 0x20 | (chan_register & 0x7);		else			chan_register |= 0x10;	} else {		outb(chan_register, dev->iobase + PCL711_MUX);	}}
开发者ID:AllenWeb,项目名称:linux,代码行数:26,


示例10: dmm32at_ao_insn_write

static int dmm32at_ao_insn_write(struct comedi_device *dev,				 struct comedi_subdevice *s,				 struct comedi_insn *insn,				 unsigned int *data){	unsigned int chan = CR_CHAN(insn->chanspec);	int i;	for (i = 0; i < insn->n; i++) {		unsigned int val = data[i];		int ret;		/* write LSB then MSB + chan to load DAC */		outb(val & 0xff, dev->iobase + DMM32AT_AO_LSB_REG);		outb((val >> 8) | DMM32AT_AO_MSB_DACH(chan),		     dev->iobase + DMM32AT_AO_MSB_REG);		/* wait for circuit to settle */		ret = comedi_timeout(dev, s, insn, dmm32at_ao_eoc, 0);		if (ret)			return ret;		/* dummy read to update DAC */		inb(dev->iobase + DMM32AT_AO_MSB_REG);		s->readback[chan] = val;	}	return insn->n;}
开发者ID:AlexShiLucky,项目名称:linux,代码行数:30,


示例11: cb_pcimdda_ao_insn_write

static int cb_pcimdda_ao_insn_write(struct comedi_device *dev,				    struct comedi_subdevice *s,				    struct comedi_insn *insn,				    unsigned int *data){	unsigned int chan = CR_CHAN(insn->chanspec);	unsigned long offset = dev->iobase + PCIMDDA_DA_CHAN(chan);	unsigned int val = s->readback[chan];	int i;	for (i = 0; i < insn->n; i++) {		val = data[i];		/*		 * Write the LSB then MSB.		 *		 * If the simultaneous xfer mode is selected by the		 * jumper on the card, a read instruction is needed		 * in order to initiate the simultaneous transfer.		 * Otherwise, the DAC will be updated when the MSB		 * is written.		 */		outb(val & 0x00ff, offset);		outb((val >> 8) & 0x00ff, offset + 1);	}	s->readback[chan] = val;	return insn->n;}
开发者ID:383530895,项目名称:linux,代码行数:29,


示例12: dac02_ao_insn_write

static int dac02_ao_insn_write(struct comedi_device *dev,			       struct comedi_subdevice *s,			       struct comedi_insn *insn,			       unsigned int *data){	unsigned int chan = CR_CHAN(insn->chanspec);	unsigned int range = CR_RANGE(insn->chanspec);	unsigned int val;	int i;	for (i = 0; i < insn->n; i++) {		val = data[i];		s->readback[chan] = val;		/*		 * Unipolar outputs are true binary encoding.		 * Bipolar outputs are complementary offset binary		 * (that is, 0 = +full scale, maxdata = -full scale).		 */		if (comedi_range_is_bipolar(s, range))			val = s->maxdata - val;		/*		 * DACs are double-buffered.		 * Write LSB then MSB to latch output.		 */		outb((val << 4) & 0xf0, dev->iobase + DAC02_AO_LSB(chan));		outb((val >> 4) & 0xff, dev->iobase + DAC02_AO_MSB(chan));	}	return insn->n;}
开发者ID:AlexShiLucky,项目名称:linux,代码行数:33,


示例13: pci1720_ao_insn_write

static int pci1720_ao_insn_write(struct comedi_device *dev,				 struct comedi_subdevice *s,				 struct comedi_insn *insn,				 unsigned int *data){	unsigned int chan = CR_CHAN(insn->chanspec);	unsigned int range = CR_RANGE(insn->chanspec);	unsigned int val;	int i;	/* set the channel range and polarity */	val = inb(dev->iobase + PCI1720_AO_RANGE_REG);	val &= ~PCI1720_AO_RANGE_MASK(chan);	val |= PCI1720_AO_RANGE(chan, range);	outb(val, dev->iobase + PCI1720_AO_RANGE_REG);	val = s->readback[chan];	for (i = 0; i < insn->n; i++) {		val = data[i];		outb(val & 0xff, dev->iobase + PCI1720_AO_LSB_REG(chan));		outb((val >> 8) & 0xff, dev->iobase + PCI1720_AO_MSB_REG(chan));		/* conversion time is 2us (500 kHz throughput) */		usleep_range(2, 100);	}	s->readback[chan] = val;	return insn->n;}
开发者ID:AlexShiLucky,项目名称:linux,代码行数:31,


示例14: multiq3_ai_insn_read

static int multiq3_ai_insn_read(struct comedi_device *dev, struct comedi_subdevice *s,	struct comedi_insn *insn, unsigned int *data){	int i, n;	int chan;	unsigned int hi, lo;	chan = CR_CHAN(insn->chanspec);	outw(MULTIQ3_CONTROL_MUST | MULTIQ3_AD_MUX_EN | (chan << 3),		dev->iobase + MULTIQ3_CONTROL);	for (i = 0; i < MULTIQ3_TIMEOUT; i++) {		if (inw(dev->iobase + MULTIQ3_STATUS) & MULTIQ3_STATUS_EOC)			break;	}	if (i == MULTIQ3_TIMEOUT)		return -ETIMEDOUT;	for (n = 0; n < insn->n; n++) {		outw(0, dev->iobase + MULTIQ3_AD_CS);		for (i = 0; i < MULTIQ3_TIMEOUT; i++) {			if (inw(dev->iobase +					MULTIQ3_STATUS) & MULTIQ3_STATUS_EOC_I)				break;		}		if (i == MULTIQ3_TIMEOUT)			return -ETIMEDOUT;		hi = inb(dev->iobase + MULTIQ3_AD_CS);		lo = inb(dev->iobase + MULTIQ3_AD_CS);		data[n] = (((hi << 8) | lo) + 0x1000) & 0x1fff;	}	return n;}
开发者ID:AppEngine,项目名称:linux-2.6,代码行数:35,


示例15: subdev_3724_insn_config

/* overriding the 8255 insn config */static int subdev_3724_insn_config(struct comedi_device *dev,				   struct comedi_subdevice *s,				   struct comedi_insn *insn,				   unsigned int *data){	unsigned int chan = CR_CHAN(insn->chanspec);	unsigned int mask;	int ret;	if (chan < 8)		mask = 0x0000ff;	else if (chan < 16)		mask = 0x00ff00;	else if (chan < 20)		mask = 0x0f0000;	else		mask = 0xf00000;	ret = comedi_dio_insn_config(dev, s, insn, data, mask);	if (ret)		return ret;	do_3724_config(dev, s, insn->chanspec);	enable_chan(dev, s, insn->chanspec);	return insn->n;}
开发者ID:AeroGirl,项目名称:VAR-SOM-AM33-SDK7-Kernel,代码行数:28,


示例16: usbduxsigma_ai_cmd

static int usbduxsigma_ai_cmd(struct comedi_device *dev,			      struct comedi_subdevice *s){	struct usbduxsigma_private *devpriv = dev->private;	struct comedi_cmd *cmd = &s->async->cmd;	unsigned int len = cmd->chanlist_len;	uint8_t muxsg0 = 0;	uint8_t muxsg1 = 0;	uint8_t sysred = 0;	int ret;	int i;	down(&devpriv->sem);	/* set current channel of the running acquisition to zero */	s->async->cur_chan = 0;	for (i = 0; i < len; i++) {		unsigned int chan  = CR_CHAN(cmd->chanlist[i]);		create_adc_command(chan, &muxsg0, &muxsg1);	}	devpriv->dux_commands[1] = len;  /* num channels per time step */	devpriv->dux_commands[2] = 0x12; /* CONFIG0 */	devpriv->dux_commands[3] = 0x03; /* CONFIG1: 23kHz sample, delay 0us */	devpriv->dux_commands[4] = 0x00; /* CONFIG3: diff. channels off */	devpriv->dux_commands[5] = muxsg0;	devpriv->dux_commands[6] = muxsg1;	devpriv->dux_commands[7] = sysred;	ret = usbbuxsigma_send_cmd(dev, USBBUXSIGMA_AD_CMD);	if (ret < 0) {		up(&devpriv->sem);		return ret;	}	devpriv->ai_counter = devpriv->ai_timer;	if (cmd->start_src == TRIG_NOW) {		/* enable this acquisition operation */		devpriv->ai_cmd_running = 1;		ret = usbduxsigma_submit_urbs(dev, devpriv->ai_urbs,					      devpriv->n_ai_urbs, 1);		if (ret < 0) {			devpriv->ai_cmd_running = 0;			up(&devpriv->sem);			return ret;		}		s->async->inttrig = NULL;	} else {	/* TRIG_INT */		/* wait for an internal signal and submit the urbs later */		s->async->inttrig = usbduxsigma_ai_inttrig;	}	up(&devpriv->sem);	return 0;}
开发者ID:7799,项目名称:linux,代码行数:58,


示例17: ni_660x_set_second_gate

static int ni_660x_set_second_gate(struct ni_gpct *counter,	lsampl_t gate_source){	struct ni_gpct_device *counter_dev = counter->counter_dev;	const unsigned second_gate_reg =		NITIO_Gi_Second_Gate_Reg(counter->counter_index);	const unsigned selected_second_gate = CR_CHAN(gate_source);	/* bits of second_gate that may be meaningful to second gate register */	static const unsigned selected_second_gate_mask = 0x1f;	unsigned ni_660x_second_gate_select;	unsigned i;	switch (selected_second_gate) {	case NI_GPCT_SOURCE_PIN_i_GATE_SELECT:	case NI_GPCT_UP_DOWN_PIN_i_GATE_SELECT:	case NI_GPCT_SELECTED_GATE_GATE_SELECT:	case NI_GPCT_NEXT_OUT_GATE_SELECT:	case NI_GPCT_LOGIC_LOW_GATE_SELECT:		ni_660x_second_gate_select =			selected_second_gate & selected_second_gate_mask;		break;	case NI_GPCT_NEXT_SOURCE_GATE_SELECT:		ni_660x_second_gate_select =			NI_660x_Next_SRC_Second_Gate_Select;		break;	default:		for (i = 0; i <= ni_660x_max_rtsi_channel; ++i) {			if (selected_second_gate == NI_GPCT_RTSI_GATE_SELECT(i)) {				ni_660x_second_gate_select =					selected_second_gate &					selected_second_gate_mask;				break;			}		}		if (i <= ni_660x_max_rtsi_channel)			break;		for (i = 0; i <= ni_660x_max_up_down_pin; ++i) {			if (selected_second_gate ==				NI_GPCT_UP_DOWN_PIN_GATE_SELECT(i)) {				ni_660x_second_gate_select =					selected_second_gate &					selected_second_gate_mask;				break;			}		}		if (i <= ni_660x_max_up_down_pin)			break;		return -EINVAL;		break;	};	counter_dev->regs[second_gate_reg] |= Gi_Second_Gate_Mode_Bit;	counter_dev->regs[second_gate_reg] &= ~Gi_Second_Gate_Select_Mask;	counter_dev->regs[second_gate_reg] |=		Gi_Second_Gate_Select_Bits(ni_660x_second_gate_select);	write_register(counter, counter_dev->regs[second_gate_reg],		second_gate_reg);	return 0;}
开发者ID:jbetten,项目名称:rtxi,代码行数:58,


示例18: das16_ai_rinsn

static int das16_ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s,			  struct comedi_insn *insn, unsigned int *data){	const struct das16_board *board = comedi_board(dev);	int i, n;	int range;	int chan;	int msb, lsb;	/*  disable interrupts and pacing */	devpriv->control_state &= ~DAS16_INTE & ~DMA_ENABLE & ~PACING_MASK;	outb(devpriv->control_state, dev->iobase + DAS16_CONTROL);	/* set multiplexer */	chan = CR_CHAN(insn->chanspec);	chan |= CR_CHAN(insn->chanspec) << 4;	outb(chan, dev->iobase + DAS16_MUX);	/* set gain */	if (board->ai_pg != das16_pg_none) {		range = CR_RANGE(insn->chanspec);		outb((das16_gainlists[board->ai_pg])[range],		     dev->iobase + DAS16_GAIN);	}	for (n = 0; n < insn->n; n++) {		/* trigger conversion */		outb_p(0, dev->iobase + DAS16_TRIG);		for (i = 0; i < DAS16_TIMEOUT; i++) {			if (!(inb(dev->iobase + DAS16_STATUS) & BUSY))				break;		}		if (i == DAS16_TIMEOUT) {			printk("das16: timeout/n");			return -ETIME;		}		msb = inb(dev->iobase + DAS16_AI_MSB);		lsb = inb(dev->iobase + DAS16_AI_LSB);		if (board->ai_nbits == 12)			data[n] = ((lsb >> 4) & 0xf) | (msb << 4);		else			data[n] = lsb | (msb << 8);	}
开发者ID:ARMWorks,项目名称:FA_2451_Linux_Kernel,代码行数:45,


示例19: daq700_ai_rinsn

static int daq700_ai_rinsn(struct comedi_device *dev,			   struct comedi_subdevice *s,			   struct comedi_insn *insn, unsigned int *data){	int n, i, chan;	int d;	unsigned int status;	enum { TIMEOUT = 100 };	chan = CR_CHAN(insn->chanspec);	/* write channel to multiplexer */	/* set mask scan bit high to disable scanning */	outb(chan | 0x80, dev->iobase + CMD_R1);	/* mux needs 2us to really settle [Fred Brooks]. */	udelay(2);	/* convert n samples */	for (n = 0; n < insn->n; n++) {		/* trigger conversion with out0 L to H */		outb(0x00, dev->iobase + CMD_R2); /* enable ADC conversions */		outb(0x30, dev->iobase + CMO_R); /* mode 0 out0 L, from H */		/* mode 1 out0 H, L to H, start conversion */		outb(0x32, dev->iobase + CMO_R);		/* wait for conversion to end */		for (i = 0; i < TIMEOUT; i++) {			status = inb(dev->iobase + STA_R2);			if ((status & 0x03) != 0) {				dev_info(dev->class_dev,					 "Overflow/run Error/n");				return -EOVERFLOW;			}			status = inb(dev->iobase + STA_R1);			if ((status & 0x02) != 0) {				dev_info(dev->class_dev, "Data Error/n");				return -ENODATA;			}			if ((status & 0x11) == 0x01) {				/* ADC conversion complete */				break;			}			udelay(1);		}		if (i == TIMEOUT) {			dev_info(dev->class_dev,				 "timeout during ADC conversion/n");			return -ETIMEDOUT;		}		/* read data */		d = inw(dev->iobase + ADFIFO_R);		/* mangle the data as necessary */		/* Bipolar Offset Binary: 0 to 4095 for -10 to +10 */		d &= 0x0fff;		d ^= 0x0800;		data[n] = d;	}	return n;}
开发者ID:LuweiLight,项目名称:linux-3.14.35-vbal,代码行数:57,


示例20: usbduxsigma_ai_insn_read

static int usbduxsigma_ai_insn_read(struct comedi_device *dev,				    struct comedi_subdevice *s,				    struct comedi_insn *insn,				    unsigned int *data){	struct usbduxsigma_private *devpriv = dev->private;	unsigned int chan = CR_CHAN(insn->chanspec);	uint8_t muxsg0 = 0;	uint8_t muxsg1 = 0;	uint8_t sysred = 0;	int ret;	int i;	down(&devpriv->sem);	if (devpriv->ai_cmd_running) {		up(&devpriv->sem);		return -EBUSY;	}	create_adc_command(chan, &muxsg0, &muxsg1);	/* Mode 0 is used to get a single conversion on demand */	devpriv->dux_commands[1] = 0x16; /* CONFIG0: chopper on */	devpriv->dux_commands[2] = 0x80; /* CONFIG1: 2kHz sampling rate */	devpriv->dux_commands[3] = 0x00; /* CONFIG3: diff. channels off */	devpriv->dux_commands[4] = muxsg0;	devpriv->dux_commands[5] = muxsg1;	devpriv->dux_commands[6] = sysred;	/* adc commands */	ret = usbbuxsigma_send_cmd(dev, USBDUXSIGMA_SINGLE_AD_CMD);	if (ret < 0) {		up(&devpriv->sem);		return ret;	}	for (i = 0; i < insn->n; i++) {		uint32_t val;		ret = usbduxsigma_receive_cmd(dev, USBDUXSIGMA_SINGLE_AD_CMD);		if (ret < 0) {			up(&devpriv->sem);			return ret;		}		/* 32 bits big endian from the A/D converter */		val = be32_to_cpu(get_unaligned((__be32						 *)(devpriv->insn_buf + 1)));		val &= 0x00ffffff;	/* strip status byte */		val ^= 0x00800000;	/* convert to unsigned */		data[i] = val;	}	up(&devpriv->sem);	return insn->n;}
开发者ID:3null,项目名称:linux,代码行数:57,


示例21: das08_ai_rinsn

static int das08_ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s,			  struct comedi_insn *insn, unsigned int *data){	const struct das08_board_struct *thisboard = comedi_board(dev);	struct das08_private_struct *devpriv = dev->private;	int i, n;	int chan;	int range;	int lsb, msb;	chan = CR_CHAN(insn->chanspec);	range = CR_RANGE(insn->chanspec);	/* clear crap */	inb(dev->iobase + DAS08_LSB);	inb(dev->iobase + DAS08_MSB);	/* set multiplexer */	/*  lock to prevent race with digital output */	spin_lock(&dev->spinlock);	devpriv->do_mux_bits &= ~DAS08_MUX_MASK;	devpriv->do_mux_bits |= DAS08_MUX(chan);	outb(devpriv->do_mux_bits, dev->iobase + DAS08_CONTROL);	spin_unlock(&dev->spinlock);	if (s->range_table->length > 1) {		/* set gain/range */		range = CR_RANGE(insn->chanspec);		outb(devpriv->pg_gainlist[range],		     dev->iobase + DAS08AO_GAIN_CONTROL);	}	for (n = 0; n < insn->n; n++) {		/* clear over-range bits for 16-bit boards */		if (thisboard->ai_nbits == 16)			if (inb(dev->iobase + DAS08_MSB) & 0x80)				dev_info(dev->class_dev, "over-range/n");		/* trigger conversion */		outb_p(0, dev->iobase + DAS08_TRIG_12BIT);		for (i = 0; i < TIMEOUT; i++) {			if (!(inb(dev->iobase + DAS08_STATUS) & DAS08_EOC))				break;		}		if (i == TIMEOUT) {			dev_err(dev->class_dev, "timeout/n");			return -ETIME;		}		msb = inb(dev->iobase + DAS08_MSB);		lsb = inb(dev->iobase + DAS08_LSB);		if (thisboard->ai_encoding == das08_encode12) {			data[n] = (lsb >> 4) | (msb << 4);		} else if (thisboard->ai_encoding == das08_pcm_encode12) {
开发者ID:AllenDou,项目名称:linux,代码行数:54,


示例22: multiq3_ao_insn_read

static int multiq3_ao_insn_read(struct comedi_device *dev,				struct comedi_subdevice *s,				struct comedi_insn *insn, unsigned int *data){	int i;	int chan = CR_CHAN(insn->chanspec);	for (i = 0; i < insn->n; i++)		data[i] = devpriv->ao_readback[chan];	return i;}
开发者ID:ARMWorks,项目名称:FA_2451_Linux_Kernel,代码行数:12,


示例23: ni_tio_rinsn

int ni_tio_rinsn(struct ni_gpct *counter, struct comedi_insn *insn,		 unsigned int *data){	struct ni_gpct_device *counter_dev = counter->counter_dev;	const unsigned channel = CR_CHAN(insn->chanspec);	unsigned first_read;	unsigned second_read;	unsigned correct_read;	if (insn->n < 1)		return 0;	switch (channel) {	case 0:		ni_tio_set_bits(counter,				NITIO_Gi_Command_Reg(counter->counter_index),				Gi_Save_Trace_Bit, 0);		ni_tio_set_bits(counter,				NITIO_Gi_Command_Reg(counter->counter_index),				Gi_Save_Trace_Bit, Gi_Save_Trace_Bit);		/* The count doesn't get latched until the next clock edge, so it is possible the count		   may change (once) while we are reading.  Since the read of the SW_Save_Reg isn't		   atomic (apparently even when it's a 32 bit register according to 660x docs),		   we need to read twice and make sure the reading hasn't changed.  If it has,		   a third read will be correct since the count value will definitely have latched by then. */		first_read =		    read_register(counter,				  NITIO_Gi_SW_Save_Reg(counter->counter_index));		second_read =		    read_register(counter,				  NITIO_Gi_SW_Save_Reg(counter->counter_index));		if (first_read != second_read)			correct_read =			    read_register(counter,					  NITIO_Gi_SW_Save_Reg(counter->							       counter_index));		else			correct_read = first_read;		data[0] = correct_read;		return 0;		break;	case 1:		data[0] =		    counter_dev->		    regs[NITIO_Gi_LoadA_Reg(counter->counter_index)];		break;	case 2:		data[0] =		    counter_dev->		    regs[NITIO_Gi_LoadB_Reg(counter->counter_index)];		break;	}	return 0;}
开发者ID:CSCLOG,项目名称:beaglebone,代码行数:53,


示例24: fl512_ao_insn_readback

/* * fl512_ao_insn_readback : used to read previous values written to * DA port */static int fl512_ao_insn_readback(struct comedi_device *dev,				  struct comedi_subdevice *s,				  struct comedi_insn *insn, unsigned int *data){	int n;	int chan = CR_CHAN(insn->chanspec);	for (n = 0; n < insn->n; n++)		data[n] = devpriv->ao_readback[chan];	return n;}
开发者ID:ARMWorks,项目名称:FA_2451_Linux_Kernel,代码行数:16,


示例25: cb_pcimdda_ao_insn_read

static int cb_pcimdda_ao_insn_read(struct comedi_device *dev,				   struct comedi_subdevice *s,				   struct comedi_insn *insn,				   unsigned int *data){	unsigned int chan = CR_CHAN(insn->chanspec);	/* Initiate the simultaneous transfer */	inw(dev->iobase + PCIMDDA_DA_CHAN(chan));	return comedi_readback_insn_read(dev, s, insn, data);}
开发者ID:383530895,项目名称:linux,代码行数:12,


示例26: daq700_ai_rinsn

static int daq700_ai_rinsn(struct comedi_device *dev,			   struct comedi_subdevice *s,			   struct comedi_insn *insn, unsigned int *data){	int n;	int d;	int ret;	unsigned int chan	= CR_CHAN(insn->chanspec);	unsigned int aref	= CR_AREF(insn->chanspec);	unsigned int range	= CR_RANGE(insn->chanspec);	unsigned int r3_bits	= 0;	/* set channel input modes */	if (aref == AREF_DIFF)		r3_bits |= CMD_R3_DIFF;	/* write channel mode/range */	if (range >= 1)		range++;        /* convert range to hardware value */	outb(r3_bits | (range & 0x03), dev->iobase + CMD_R3);	/* write channel to multiplexer */	/* set mask scan bit high to disable scanning */	outb(chan | 0x80, dev->iobase + CMD_R1);	/* mux needs 2us to really settle [Fred Brooks]. */	udelay(2);	/* convert n samples */	for (n = 0; n < insn->n; n++) {		/* trigger conversion with out0 L to H */		outb(0x00, dev->iobase + CMD_R2); /* enable ADC conversions */		outb(0x30, dev->iobase + CMO_R); /* mode 0 out0 L, from H */		outb(0x00, dev->iobase + ADCLEAR_R);	/* clear the ADC FIFO */		/* read 16bit junk from FIFO to clear */		inw(dev->iobase + ADFIFO_R);		/* mode 1 out0 H, L to H, start conversion */		outb(0x32, dev->iobase + CMO_R);		/* wait for conversion to end */		ret = comedi_timeout(dev, s, insn, daq700_ai_eoc, 0);		if (ret)			return ret;		/* read data */		d = inw(dev->iobase + ADFIFO_R);		/* mangle the data as necessary */		/* Bipolar Offset Binary: 0 to 4095 for -10 to +10 */		d &= 0x0fff;		d ^= 0x0800;		data[n] = d;	}	return n;}
开发者ID:AlexShiLucky,项目名称:linux,代码行数:52,



注:本文中的CR_CHAN函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ CR_DDI_PROLOGUE函数代码示例
C++ CRY_ASSERT_MESSAGE函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。