Hi, Stefan Schaal wrote: > Hi Alexis, > > I guess I slowly understand that my clocking signal connected to > scan_begin_arg has to come from an external DIO input, if > scan_bigin_src = TRIG_EXT, and that the insn instruction is still > needed to trigger the entire acquisition.
Yes. The trigger instruction is needed so as to start the whole acquisition (which is composed of many scans). A periodic external signal is needed so as to trigger each scan. > > Alternatively, would it be possible to use the internal clocking signals > like > > scan_bigin_src = TRIG_FOLLOW > > or > > scan_bigin_src = TRIG_TIMER I think you are right. If the sampling clock comes from another subdevice, TRIG_EXT may not be the most appropriate constant. However, the original comedi driver only expects TRIG_EXT even if... the sampling signal is not external. TRIG_TIMER does not seem suitable because it assumes an independant sampling clock is available. And TRIG_FOLLOW may be the most appropriate one. We should modify the driver so that TRIG_FOLLOW is used if the analog sampling clock is chosen. > > > if I try any of these sources, I get an error -22, and dmesg reports: > > [195882.321300] Analogy: a4l_check_cmddesc: scan_begin_src, trigger > unsupported > For me, the command interface is an empty shell because the various parameters (start_src, scan_begin_src, ...) and the values (TRIG_*) are imposed. And, on the other side, the driver is fully in charge of the command structure as it is. So, the comedi command imposes a communication method but does not ease the driver's task of managing it (errors checking, translation, etc.) And, in our case: DIO, we may conclude that this imposed API does not fit well: in scan_begin_arg, we have to pass an index which is supposed to correspond to some sampling clock (which is specific to a board). Then, we use a generic interface with board-specific arguments. So, to sum up, I understand your point: the way we control the driver may not always be the most appropriate one. But, we inherited from comedi both the interface and the drivers. On my side, I am working on trying to implement (as a background task) a generic interface a little bit more based on discovery (query / enum) that would render the command interface obsolete. Unfortunately, I have nothing interesting to show yet. > Best wishes, > > -STefan > > > > > > On Jul 9, 2010, at 17:10, Stefan Schaal wrote: > > > Hi Alexis, > > > > thanks a lot for the clarification. Thus, scan_begin_arg is set to the > > digital line that I would like to use as a trigger. The triggering itself > > has to happen by flipping the bit on this specific digital line, e.g., > > using a4l_sync_dio() on this specific line? I assume that I do not need to > > re-wire anything on my board. > > > > In your cmd_bits.c code, you use the "a4l_insn_t insn" structure below for > > triggering, which is what I have to replace with a4l_sync_dio(), I guess? > > > > Best wishes, > > > > -Stefan > > > > > > > > On Jul 9, 2010, at 15:17, Alexis Berlemont wrote: > > > >> Stefan Schaal wrote: > >>> Hi Alexis, > >>> > >>> I conceptually understand what you are telling us, but I am bit confused > >>> how to implement your advice: > >>> > >>>> So, Stefan, here is a quick solution: > >>>> > >>>> if you have access to your board you can choose one of these signals > >>>> (in which a regular pulse is occuring) and you can modify accordingly > >>>> the field scan_begin_arg of the structure a4l_cmd_t in cmd_bits.c. > >>> > >>> The data structures in question are: > >>> > >>> /* The command to send by default */ > >>> a4l_cmd_t cmd = { > >>> .idx_subd = -1, > >>> .flags = 0, > >>> .start_src = TRIG_INT, > >>> .start_arg = 0, > >>> .scan_begin_src = TRIG_EXT, > >>> .scan_begin_arg = 0, /* in ns */ > >>> .convert_src = TRIG_NOW, > >>> .convert_arg = 0, /* in ns */ > >>> .scan_end_src = TRIG_COUNT, > >>> .scan_end_arg = 4, > >>> .stop_src = TRIG_NONE, > >>> .stop_arg = 0, > >>> .nb_chan = 4, > >>> .chan_descs = chans, > >>> }; > >>> > >>> a4l_insn_t insn = { > >>> .type = A4L_INSN_INTTRIG, > >>> .idx_subd = -1, > >>> .data_size = 0, > >>> }; > >>> > >>> > >>> Thus, I assume you mean that > >>> > >>> scan_begin_src = TRIG_EXT > >>> > >>> should be modified to one of the enum items below? Are all these > >>> timers automatically running, or do they need to be configured, too? > >>> Sorry, I am a bit at a loss how to proceed. > >> > >> Sorry for the delay. > >> > >> I was not clear enough. In fact, scan_begin_arg should be > >> modified. scan_begin_src indicates the type of trigger and > >> scan_begin_arg gives an associated argument. In our case, it is the > >> signal number. Sorry for the comment (/* in ns */) which is an > >> inappropriate copy-paste (as a matter of fact, it is the whole command > >> interface which is unsuitable but that's another topic). > >> > >>> > >>> Best wishes, > >>> > >>> -Stefan > >>> > >>> > >>> On Jul 5, 2010, at 15:02, Alexis Berlemont wrote: > >>> > >>>> Hi, > >>>> > >>>> Alexis Berlemont wrote: > >>>>> Hi, > >>>>> > >>>>> Stefan Schaal wrote: > >>>>>> Hi Alexis, > >>>>>> > >>>>>> thanks for the feedback. We have 32 bit DIO on subdevice #2, and I am > >>>>>> not sure that there is anything special to be configured. I will check > >>>>>> again. Feel free to log into our machine with the pwd I indicated to > >>>>>> you some time ago. The computer is not used productively. > >>>>>> > >>>>> > >>>>> Sorry for answering late, I was unavailable. > >>>>> > >>>>> My question was: did you ensure that the digital line were properly > >>>>> modified after having launched cmd_bits ? > >>>>> > >>>>> As I said, the digital output system does not consume the data (now I > >>>>> am sure). I instrumetented the code and I found out that the mite > >>>>> copied about 8000 bytes from the RAM and filled the digital output > >>>>> FIFO. Then, the DO FIFO status register keeps on indicating the FIFO > >>>>> is full. Nothing happens, the digital output system does not retrieve > >>>>> data from the FIFO. > >>>>> > >>>>> I tried to find out why and I had a close look at the driver: I > >>>>> noticed that no sample clock was configured. The driver only proposes > >>>>> to use an external signal (from the digital system, so AI/AO clocks, > >>>>> counters, PFI, etc.) as sample clock. Unfortunately, I do not know > >>>>> which value corresponds to which clock source. > >>>>> > >>>>> I had a look a the DAQ documentation: unfortunately the M series > >>>>> digital system is different (the DAQ-STC document is not valid for > >>>>> this board). I tried to find the M series developer manual but it is > >>>>> unavailable according to the NI support. I found a document named > >>>>> mseries_registermap.doc in: > >>>>> http://digital.ni.com/express.nsf/bycode/exyv4w?opendocument > >>>>> > >>>>> Unfortunately, it does not tell how to configure the sample clock > >>>>> source (I know which register I have to fill, but I do not know which > >>>>> value to put so as to use AI clock, digital counters or PFI...) > >>>>> > >>>>> So, I am kind of stuck. I will proceed on looking for the missing > >>>>> pieces of information. Please, if anyone have the info (the mapping > >>>>> between the "CDO_Mode register" values and the sample clock source), > >>>>> do not hesitate to help us. > >>>>> > >>>> > >>>> Argh, I found it. I did not see an item in the url displayed above. > >>>> > >>>> > >>>> Here is an enum found in: > >>>> ftp://ftp.ni.com/support/daq/mhddk/examples/nimseries.zip > >>>> > >>>> // Field Accessors (Compile-time selectable) > >>>> typedef enum { > >>>> kCDO_Update_Source_SelectGround = 0, > >>>> kCDO_Update_Source_SelectPFI0 = 1, > >>>> kCDO_Update_Source_SelectPFI1 = 2, > >>>> kCDO_Update_Source_SelectPFI2 = 3, > >>>> kCDO_Update_Source_SelectPFI3 = 4, > >>>> kCDO_Update_Source_SelectPFI4 = 5, > >>>> kCDO_Update_Source_SelectPFI5 = 6, > >>>> kCDO_Update_Source_SelectPFI6 = 7, > >>>> kCDO_Update_Source_SelectPFI7 = 8, > >>>> kCDO_Update_Source_SelectPFI8 = 9, > >>>> kCDO_Update_Source_SelectPFI9 = 10, > >>>> kCDO_Update_Source_SelectRTSI0 = 11, > >>>> kCDO_Update_Source_SelectRTSI1 = 12, > >>>> kCDO_Update_Source_SelectRTSI2 = 13, > >>>> kCDO_Update_Source_SelectRTSI3 = 14, > >>>> kCDO_Update_Source_SelectRTSI4 = 15, > >>>> kCDO_Update_Source_SelectRTSI5 = 16, > >>>> kCDO_Update_Source_SelectRTSI6 = 17, > >>>> kCDO_Update_Source_SelectAI_Start = 18, > >>>> kCDO_Update_Source_SelectAI_Convert = 19, > >>>> kCDO_Update_Source_SelectPXI_Star_Trigger = 20, > >>>> kCDO_Update_Source_SelectPFI10 = 21, > >>>> kCDO_Update_Source_SelectPFI11 = 22, > >>>> kCDO_Update_Source_SelectPFI12 = 23, > >>>> kCDO_Update_Source_SelectPFI13 = 24, > >>>> kCDO_Update_Source_SelectPFI14 = 25, > >>>> kCDO_Update_Source_SelectPFI15 = 26, > >>>> kCDO_Update_Source_SelectRTSI7 = 27, > >>>> kCDO_Update_Source_SelectG0_Out = 28, > >>>> kCDO_Update_Source_SelectG1_Out = 29, > >>>> kCDO_Update_Source_SelectAnalog_Trigger = 30, > >>>> kCDO_Update_Source_SelectAO_Update = 31, > >>>> kCDO_Update_Source_SelectFreq_Out = 32, > >>>> kCDO_Update_Source_SelectDIO_Change_Detect_Irq = 33, > >>>> } tCDO_Update_Source_Select; > >>>> > >>>> So, Stefan, here is a quick solution: > >>>> > >>>> if you have access to your board you can choose one of these signals > >>>> (in which a regular pulse is occuring) and you can modify accordingly > >>>> the field scan_begin_arg of the structure a4l_cmd_t in cmd_bits.c. > >>>> > >>>>> > >>>>>> Best wishes, > >>>>>> > >>>>>> -Stefan > >>>>>> > >>>>>> > >>>>>> On Jun 30, 2010, at 15:45, Alexis Berlemont wrote: > >>>>>> > >>>>>>> Hi, > >>>>>>> > >>>>>>> Stefan Schaal wrote: > >>>>>>>> Hi Alexis, > >>>>>>>> > >>>>>>>> I did a reboot, ran my modified cmd_bits.c again one time. > >>>>>>>> > >>>>>>>> cat /proc/xenomai/irq reports: > >>>>>>>> > >>>>>>>> IRQ CPU0 CPU1 CPU2 CPU3 CPU4 > >>>>>>>> CPU5 CPU6 CPU7 > >>>>>>>> 56: 0 0 0 0 0 > >>>>>>>> 0 0 0 Analogy device > >>>>>>>> 518: 0 1 1 1 1 > >>>>>>>> 1 1 1 [IPI] > >>>>>>>> 521: 626392 618020 618539 620274 617326 > >>>>>>>> 625008 622464 626300 [timer] > >>>>>>>> 522: 0 0 0 0 0 > >>>>>>>> 0 0 0 [critical sync] > >>>>>>>> 546: 0 0 0 0 0 > >>>>>>>> 0 0 0 [virtual] > >>>>>>>> > >>>>>>> > >>>>>>> I have not forgotten you. I am still stuck with your bug: The mite > >>>>>>> transfers the first 8000 bytes and after does nothing; no interrupt is > >>>>>>> generated by the mite so as to finally awake your application. > >>>>>>> > >>>>>>> It seems like the data retrieved by the mite are not consumed by the > >>>>>>> board. Are you sure the digital output lines correspond to what you > >>>>>>> configured with cmd_bits ? > >>>>>>> > >>>>>>> I think the digital output is misconfigured. I am working on it. > >>>>>>> > >>>>>>>> > >>>>>>>> -Stefan > >>>>>>>> > >>>>>>>> On Jun 27, 2010, at 3:37, Alexis Berlemont wrote: > >>>>>>>> > >>>>>>>>> Hi, > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> Stefan Schaal wrote: > >>>>>>>>>> Hi Alexis, > >>>>>>>>>> > >>>>>>>>>> thanks so much for the new analogy software. Here are some first > >>>>>>>>>> observations: > >>>>>>>>>> > >>>>>>>>>> 1) cmd_bits.c works fine on our NI6250 board > >>>>>>>>>> > >>>>>>>>>> 2) however, a slightly modified version hangs -- I appended my > >>>>>>>>>> cmd_bits.c to this email. All what I added is a for loop around > >>>>>>>>>> the a4l_async_write() and a4l_snd_insn() commands, i.e., I wanted > >>>>>>>>>> to trigger a write repeatedly. Look for the "sschaal" comment in > >>>>>>>>>> my modified cmd_bits.c . After 32 iterations, cmd_bits hangs, no > >>>>>>>>>> error messages in dmesg. Interesting, when I change your > >>>>>>>>>> "trigger_threshold" variable from 128 to 256, my loop runs for 16 > >>>>>>>>>> iterations (other changes of the trigger threshold adjust the > >>>>>>>>>> number of iterations I get in a similar way). Thus, it feels like > >>>>>>>>>> there is a buffer which does not get reset after a4l_snd_insn() is > >>>>>>>>>> called -- does this make sense? > >>>>>>>>>> > >>>>>>>>> > >>>>>>>>> Could you tell me if the mite triggered an interrupt ? Could you > >>>>>>>>> send > >>>>>>>>> a dump of cat /proc/xenomai/irq after having made the test program > >>>>>>>>> hang ? > >>>>>>>>> > >>>>>>>>> Many thanks, > >>>>>>>>> > >>>>>>>>>> Best wishes, > >>>>>>>>>> > >>>>>>>>>> -Stefan > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> On Jun 24, 2010, at 15:43, Alexis Berlemont wrote: > >>>>>>>>>> > >>>>>>>>>>> Hi, > >>>>>>>>>>> > >>>>>>>>>>> Alexis Berlemont wrote: > >>>>>>>>>>>> Hi Stefan, > >>>>>>>>>>>> > >>>>>>>>>>>> Stefan Schaal wrote: > >>>>>>>>>>>>> Hi Alexis, > >>>>>>>>>>>>> > >>>>>>>>>>>>> I was just wondering whether the new "experimental" branch in > >>>>>>>>>>>>> your git repository is something that can be tried already. > >>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>> No. Not yet. This branch is aimed at temporarily holding the > >>>>>>>>>>>> corrections I am trying to do for the cmd_bits issue. It needs > >>>>>>>>>>>> quite a > >>>>>>>>>>>> lot of work and I have not finished yet. > >>>>>>>>>>>> > >>>>>>>>>>>> If you have a look at the commits in this branch, we will see > >>>>>>>>>>>> many > >>>>>>>>>>>> "(broken)". > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> I just rebased the experimental branch into the branch analogy. > >>>>>>>>>>> So, > >>>>>>>>>>> starting from now, we should be able to properly use cmd_bits > >>>>>>>>>>> with a > >>>>>>>>>>> clone of my git repository. > >>>>>>>>>>> > >>>>>>>>>>> After having reworked the asynchronous buffer subsystem (and > >>>>>>>>>>> having > >>>>>>>>>>> fixed some oops in the NI driver and in the new code), cmd_bits > >>>>>>>>>>> can > >>>>>>>>>>> correctly communicate with the DIO subdevice. > >>>>>>>>>>> > >>>>>>>>>>> A command like "./cmd_bits 0xffff 0xffff" works on my > >>>>>>>>>>> board. Unfortunately, I have not done the necessary to check the > >>>>>>>>>>> digital output lines yet. > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>>>> Best wishes, > >>>>>>>>>>>>> > >>>>>>>>>>>>> -Stefan > >>>>>>>>>>>> > >>>>>>>>>>>> -- > >>>>>>>>>>>> Alexis. > >>>>>>>>>>> > >>>>>>>>>>> -- > >>>>>>>>>>> Alexis. > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> ======================================================= cmd_bits.c > >>>>>>>>>> ================================================== > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> -- > >>>>>>>>> Alexis. > >>>>>>>> > >>>>>>> > >>>>>>> -- > >>>>>>> Alexis. > >>>>>> > >>>>> > >>>>> -- > >>>>> Alexis. > >>>> > >>>> -- > >>>> Alexis. > >>> > >> > >> -- > >> Alexis. > > > > > > _______________________________________________ > > Xenomai-core mailing list > > Xenomai-core@gna.org > > https://mail.gna.org/listinfo/xenomai-core > -- Alexis. _______________________________________________ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core