problem with internal trigger

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