Re: stm3210e eval board adc question

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 <biswasj@xxxxxxxxx> 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:<ADC test>
> 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=<value optimized out>) 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=<value optimized out>
>  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 = <value optimized out>
> (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 <ccoutand@xxxxxxxx> 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@xxxxxxxxx]
>> Sent: 18. april 2011 16:49
>> To: Christophe Coutand
>> Cc: ecos-discuss@xxxxxxxxxxxxxxxxxxx
>> 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:<ADC performance test>
>> INFO:<Opening available ADC channel
>> s>
>> Opened 32 ADC channels
>> INFO:<Preparing ADC channels for test>
>> INFO:<Starting measurement>
>>
>>
>> /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:<Finished measurement>
>>
>>
>> ----------------------------------------
>> Samples expected after 10210 milliseconds: 10210
>> Samples read (per channel):
>> /dev/adc00          \0x09= 0
>> .
>> .
>> .
>>
>> On Mon, Apr 18, 2011 at 11:47, Christophe Coutand <ccoutand@xxxxxxxx> 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@xxxxxxxxx]
>>> Sent: 18. april 2011 10:47
>>> To: John Dallaway; Christophe Coutand
>>> Cc: ecos-discuss@xxxxxxxxxxxxxxxxxxx
>>> 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 <john@xxxxxxxxxxxxxxx> 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
>>>>
>>>
>>
>

-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss




[Index of Archives]     [Linux Embedded]     [U-Boot V2]     [Linux Kernel]     [Linux MIPS]     [Linux ARM]     [Linux for the Blind]     [Yosemite]     [ISDN Cause Codes]     [eCos Home]

  Powered by Linux