Hi Jayant, While reviewing the code I found few issues in the ADC driver. Please try with the attached code and let me know if it works for you. Christophe -----Original Message----- From: jayant biswas [mailto:biswasj@gmail.com] Sent: 2. mai 2011 12:16 To: Christophe Coutand Cc: ecos-discuss@ecos.sourceware.org Subject: Re: stm3210e eval board adc question Hello again! I have tried stepping through the code for adc1.c. Stepping from line 124 in adc1.c, I notice that when trying to read from the channels it is always waiting for data to be available on /dev/adc014. This means that in packages/io/adc/current/src/adc.c it never reaches line 131 (// A sample is available, transfer it to the buffer). Do you have an idea why the data is never available from the potentiometer on the STM3210E-eval board? Let me know if I can provide more information about my tests. Thank you, Jayant On Tue, Apr 19, 2011 at 14:42, jayant biswas wrote: > Hi Christophe. > > Thanks for the info about how to find out which channel corresponds to > which input. This will be useful for me. > > As for the terminal I am using cutecom on ubuntu. 38400,8,1, parity > none, no handshake, open for reading and writing. > > I tried running the adc1 test and that only runs this far: > \0x00INFO: > Testing ADC channel '/dev/adc00' > > when I force stop the program it says the following > (gdb) continue > Continuing. > ^C > Program received signal SIGINT, Interrupt. > 0x08003832 in Cyg_Mutex::lock (this=0x6800001c) >    at /home/jayant/ecos/adc/ecos_install/include/cyg/kernel/sched.inl:99 > 99          if( __lock == 0 ) unlock_inner(0); > Current language:  auto; currently c++ > > Stepping through adc2 in gdb with a breakpoint on line 181 as you > mentioned i get this > (gdb) break adc2.c:181 > Breakpoint 1 at 0x800027e: file adc2.c, line 181. > (gdb) continue > Continuing. > Note: automatically using hardware breakpoints for read-only addresses. > > Breakpoint 1, adc_thread (data=) at adc2.c:181 > 181                     cyg_uint32 len = sizeof(sample); > (gdb) info frame > Stack level 0, frame at 0x68004668: >  pc = 0x800027e in adc_thread (adc2.c:181); saved pc 0x8002b4e >  called by frame at 0x68004670 >  source language c. >  Arglist at 0x68004628, args: data= >  Locals at 0x68004628, Previous frame's sp is 0x68004668 >  Saved registers: >  r4 at 0x68004644, r5 at 0x68004648, r6 at 0x6800464c, r7 at > 0x68004650, r8 at 0x68004654, >  r9 at 0x68004658, r10 at 0x6800465c, r11 at 0x68004660, lr at 0x68004664 > (gdb) print len > $1 = > (gdb) print sample > $2 = 26624 > (gdb) s > cortex_m3 interrupt mask on > 176             for (i = 0; i < num; i++) { > cortex_m3 interrupt mask off > (gdb) print len > $3 = 2 > (gdb) print sample > $4 = 26624 > (gdb) s > cortex_m3 interrupt mask on > 177                 chan = &test_channels[i]; > cortex_m3 interrupt mask off > (gdb) s > cortex_m3 interrupt mask on > 182                     res = cyg_io_read(chan->handle, &sample, &len); > cortex_m3 interrupt mask off > (gdb) s > cortex_m3 interrupt mask on > 181                     cyg_uint32 len = sizeof(sample); > cortex_m3 interrupt mask off > (gdb) print len > $5 = 0 > (gdb) print sample > $6 = 26624 > (gdb) > > Not sure what I should be looking for here. Can you please suggest how > I may proceed to find the problem? > > Thanks again > Jayant > > On Tue, Apr 19, 2011 at 09:25, Christophe Coutand wrote: >> Hi Jayant, >> >> From this documentation: http://www.st.com/stonline/books/pdf/docs/14220.pdf, the potentiometer is connected to PC4. >> >> Looking at the IOs definition in: packages\hal\cortexm\stm32\var\current\include\var_io.h, you can sample PC4 using ADC1/14. >> >> #define CYGHWR_HAL_STM32_ADC12_IN14             CYGHWR_HAL_STM32_GPIO( C, 4,  IN, ANALOG ) >> #define CYGHWR_HAL_STM32_ADC1_IN14              CYGHWR_HAL_STM32_ADC12_IN14 >> >> The adc2 test does not log any sampling results. It is used to check that the sampling rate is correct over a period of 10 seconds. The output of your test does not look good. The \0x09 is a tabulation that your terminal is not interpreting (which terminal do you use)? But the result is 0 for all channels, meaning that no samples are read. >> >> ---------------------------------------- >> Samples expected after 10210 milliseconds: 10210 >> Samples read (per channel): >> /dev/adc00          \0x09= 0 >> >> Do you have a way to step into the code? I don't clearly see how the test can complete without reading samples. Line 181 is a loop waiting for samples: >> >>  // Read & count samples >>  do { >>    cyg_uint32 len = sizeof(sample); >>    res = cyg_io_read(chan->handle, &sample, &len); >>    if (res == ENOERR) >>       chan->count++; >>  } while (res == ENOERR); >> >> You can also try the adc1 test which shall read and display the sampled data. I don't own a STM3210e boards therefore can't give it a try. >> >> Regards, >> Christophe >> >> -----Original Message----- >> From: jayant biswas [mailto:biswasj@gmail.com] >> Sent: 18. april 2011 16:49 >> To: Christophe Coutand >> Cc: ecos-discuss@ecos.sourceware.org >> Subject: Re: stm3210e eval board adc question >> >> Dear Christophe! >> >> Thanks for your support. I have a feeling I am getting closer, but not >> quite there yet. So I appreciate your time in helping me out. Now I >> have been able to add the adc io, as in the screenshot you sent using >> only the cvs code. So I am not mixing anymore ecos-3.0 and the cvs. >> But when I run the tests on my stm3210e eval board I do not get the >> desired output. The output of adc2 test is shown below. It shows that >> no samples have been read. I am also not sure what to make of the >> \0x09 stuff before the '=' signs. >> >> My goal is to be able to read the value from the potentiometer on the >> board (http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATA_BRIEF/CD00278458.pdf >> as shown on page 2/3) and eventually also from the 3 bnc connectors. >> First of all, how can I know which input (BNC or Potentiometer) is >> connected to which device on which channel? And secondly why when I >> try to display values from all channels on both devices I receive >> nothing. One of these channels must be connected to the potentiometer >> no? The BNC connectors are currently left open. >> >> Hope I can make this work. >> >> Regards, >> Jayant >> >> \0x00INFO: >> INFO:> s> >> Opened 32 ADC channels >> INFO: >> INFO: >> >> >> /dev/adc00          \0x09= 0 >> /dev/adc01          \0x09= 0 >> /dev/adc02 >>          \0x09= 0 >> /dev/adc03          \0x09= 0 >> . >> . >> . >> /dev/adc113         \0x09= 0 >> /dev/adc114         \0x09= 0 >> /dev/adc115         \0x09= 0 >> INFO: >> >> >> ---------------------------------------- >> Samples expected after 10210 milliseconds: 10210 >> Samples read (per channel): >> /dev/adc00          \0x09= 0 >> . >> . >> . >> >> On Mon, Apr 18, 2011 at 11:47, Christophe Coutand wrote: >>> Hi Jayant, >>> >>> You are using ecos-3.0 with the additional STM32 ADC package from CVS? It is usually not recommended to mix source code as it make it more difficult to get support from the mailing list. >>> >>> It is not enough to copy the directory packages\devs\adc\cortexm\stm32 in your repository, you must also include the package entry in the database (i.e. ecos.db): >>> >>> package CYGPKG_DEVS_ADC_CORTEXM_STM32 { >>>    alias         { "STM32 ADC driver" adc_stm32 } >>>    hardware >>>    directory     devs/adc/cortexm/stm32 >>>    script        adc_stm32.cdl >>>    description " >>>    This package provides a driver for the ADC interfaces found on the >>>    ST STM32 microcontroller family." >>> } >>> >>> To build the STM32 HAL with ADC support from CVS repository, I do: >>> $ ecosconfig.exe new stm3210e default >>> $ ecosconfig.exe add io_adc >>> >>> You can configure the ADC from the GUI: >>> $ configtool.exe ecos.ecc >>> >>> Example: >>> >>> http://dl.dropbox.com/u/21589565/misc/stm32_adc.JPG >>> >>> Regards, >>> Christophe >>> >>> -----Original Message----- >>> From: jayant biswas [mailto:biswasj@gmail.com] >>> Sent: 18. april 2011 10:47 >>> To: John Dallaway; Christophe Coutand >>> Cc: ecos-discuss@ecos.sourceware.org >>> Subject: Re: stm3210e eval board adc question >>> >>> Thank you Christophe and John for your replies. >>> >>> I did checkout the cvs repository and was able to get the right folder >>> i.e. packages\devs\adc\cortexm\stm32 >>> >>> However, this hasn't solved my problem. I am still getting the same >>> output as before when calling cyg_io_lookup and cyg_io_read. >>> >>> To integrate the new packages from the cvs. I copied  the entire >>> repository over my ecos-3.0 folder. Then I regenerated the ecos.ecc >>> file for stm3210e. I noticed here that the >>> CYGPKG_DEVS_ADC_CORTEXM_STM32 checkboxes were grayed out. I then >>> recompiled my application with the newly generated libraries. >>> >>> Please let me know if I am missing some steps. I am sure I am. Is >>> there a guide that I can follow that shows how to integrate the ecos >>> cvs packages? >>> >>> Best regards, >>> Jayant >>> >>> On Wed, Apr 13, 2011 at 20:11, John Dallaway wrote: >>>> Hi Jayant >>>> >>>> jayant biswas wrote: >>>> >>>>> I installed ecos as indicated here >>>>> http://ecos.sourceware.org/getstart.html . >>>> >>>> ... so you have the eCos 3.0 release repository. >>>> >>>> The STM32 ADC driver is not present in eCos 3.0. You will have to >>>> checkout the eCos CVS repository in order to gain access to >>>> CYGPKG_DEVS_ADC_CORTEXM_STM32. Ref: >>>> >>>>  http://ecos.sourceware.org/anoncvs.html >>>> >>>> I hope this helps... >>>> >>>> John Dallaway >>>> eCos maintainer >>>> http://www.dallaway.org.uk/john >>>> >>> >> >