- From: walter corbetta <corbetta_at_aero.polimi.it>
- Date: Thu, 14 Apr 2005 13:38:34 +0200
hello,
I am writing a kernel space module for asyncronous input output with
NI6713 and NI6071e boards.
I use internal trigger for output board (NI6713) and external trigger
for input board (NI6071e).
After module loading I receive following error messages:
ni_mio_common: DMA underrun
ins_ret -32
comedi2: ni_pcimio: timed out waiting for dma load
async->inttrig = -32
appears that _bit13 is not set.
I attach my cmd setting
int do_insn(comedi_t *dev, unsigned int subd, unsigned int trignum)
{
int ret;
comedi_insn insn;
lsampl_t data_trig[] = {0};
memset(&insn, 0, sizeof(comedi_insn));
insn.insn = INSN_INTTRIG;
insn.subdev = subd;
insn.data = data_trig;
insn.n = 1;
ret=comedi_do_insn(dev, &insn);
printk("ins_ret %d\n",ret);
return 0;
}
int do_cmd(void)
{
int ret,i;
comedi_cmd cmd, cmd2;
unsigned int chanlist[N_READ], chanlist2[N_WRITE];
memset( &cmd , 0 , sizeof(cmd));
memset(&cmd2 , 0 , sizeof(cmd2));
/* Set up channel output list */
for (i = 0; i < N_WRITE; i++) {
chanlist2[i] = CR_PACK(BUF_WRITE[i],4,AREF_GROUND);
}
cmd2.subdev = subdev2;
cmd2.flags = TRIG_RT;
cmd2.start_src = TRIG_INT;
cmd2.start_arg = 0;
cmd2.scan_begin_src = TRIG_TIMER;
cmd2.scan_begin_arg = SAMP_TIME;
cmd2.convert_src = TRIG_NOW;//TRIG_TIMER;
cmd2.convert_arg = 0;
cmd2.scan_end_src = TRIG_COUNT;
cmd2.scan_end_arg = N_WRITE;
cmd2.stop_src = TRIG_NONE;
cmd2.stop_arg = 0;
cmd2.chanlist = chanlist2;
cmd2.chanlist_len = N_WRITE;
ret = comedi_command_test(dev2 , &cmd2);
printk("Comedi2: 1st command test returned %d\n",ret);
ret = comedi_command_test(dev2 , &cmd2);
printk("comedi2: 2nd command test returned %d\n",ret);
printk("CONVERT ARG: %d\n", cmd2.convert_arg);
if (ret) {
return ret;
}
ret = comedi_command(dev2 , &cmd2);
printk("Comedi2: command returned %d\n",ret);
/* Set up channel input list */
for (i = 0; i < N_READ; i++) {
chanlist[i] = CR_PACK(BUF_READ[i],4,AREF_GROUND);
}
cmd.subdev = subdev;
cmd.flags = TRIG_WAKE_EOS | TRIG_RT;
cmd.start_src = TRIG_EXT;
cmd.start_arg = 0;
cmd.scan_begin_src = TRIG_TIMER;
cmd.scan_begin_arg = SAMP_TIME;
cmd.convert_src = TRIG_TIMER;
cmd.convert_arg = 0;
cmd.scan_end_src = TRIG_COUNT;
cmd.scan_end_arg = N_READ;
cmd.stop_src = TRIG_NONE;
cmd.stop_arg = 0;
cmd.chanlist = chanlist;
cmd.chanlist_len = N_READ;
ret = comedi_command_test(dev,&cmd);
printk("Comedi0: 1st command test returned %d\n",ret);
ret = comedi_command_test(dev,&cmd);
printk("Comedi0: 2nd command test returned %d\n",ret);
printk("CONVERT ARG: %d\n", cmd.convert_arg);
if (ret) {
return ret;
}
ret = comedi_command(dev,&cmd);
printk("Comedi0: command returned %d\n",ret);
do_insn(dev2,subdev2,0);
return ret;
}
could someone help me ?
thanks
Walter
Received on 2005-04-14Z10:38:34