public inbox for ecos-discuss@sourceware.org
 help / color / mirror / Atom feed
From: jayant biswas <biswasj@gmail.com>
To: Ilija Stanislevik <ilijas@siva.com.mk>
Cc: ecos-discuss@ecos.sourceware.org
Subject: Re: [ECOS] SPI send data
Date: Mon, 04 Jul 2011 09:48:00 -0000	[thread overview]
Message-ID: <CAB1rPRP3okQGCgEZCq3pS=gsc3mGbH1VJwTCmrQ4_TC74ahC8w@mail.gmail.com> (raw)
In-Reply-To: <CAB1rPRM8=a6SRctqUUC_NtPHMcivspb7B2LFWKx+cQ5dvLxAWw@mail.gmail.com>

On Mon, Jul 4, 2011 at 10:36, jayant biswas <biswasj@gmail.com> wrote:
> Hi Ilija!
>
> Thanks again for your reply. The loopback test works when I short the
> MISO and MOSI lines. However, I still don't see a clock signal. I have
> checked with both a logic analyzer and an oscilloscope. Is it possible
> that the loopback test works without the clock signal? Am I correct in
> checking pin PA5 for the clock signal?
>
> Best regards,
> Jayant
>
> On Fri, Jul 1, 2011 at 18:25, Ilija Stanislevik <ilijas@siva.com.mk> wrote:
>> On 06/30/2011 04:20 PM, jayant biswas wrote:
>>> It's been a while since the last message. But I am still stuck on this
>>> problem, which means that I am unable to control the programmable
>>> potentiometer AD8400. So I have tried to check the pins with a logic
>>> analyzer and it appears that I do not see any SPI clock. That is to
>>> say that the pin PA5 is always low. As is the pin PA7. And PA8 is
>>> always high. This pins correspond to the descriptions in the STM3210E
>>> eval board http://www.st.com/stonline/products/literature/um/14220.pdf
>>> . Am I missing some initialization step that should start off the
>>> clock?
>>>
>>> I have attached my code with this message. Please let me know if you
>>> need more information.
>>>
>>> Thank you,
>>> Jayant
>>>
>>> On Wed, Jun 1, 2011 at 19:19, Ilija Stanislevik <ilijas@siva.com.mk> wrote:
>>>> On 06/01/2011 11:02 AM, jayant biswas wrote:
>>>>> Hi Ilija,
>>>>>
>>>>> Thank you for your response to the previous question, I am using SPI1
>>>>> and have changed the config accordingly and have noticed with a
>>>>> voltmeter that the pin PA8 does stay high and goes low when the SPI is
>>>>> active. I have another question now about sending data. If you take a
>>>>> look at the timing diagrams on page 10 of the datasheet
>>>>> (http://www.analog.com/static/imported-files/data_sheets/AD8400_8402_8403.pdf)
>>>>> for the programmable potentiometer that I am using and then my code
>>>>> below, could you maybe hint at what I am doing wrong?
>>>>>
>>>>> Regards,
>>>>> Jayant
>>>>>
>>>>> So this code based on the loopback test that comes with the spi package in ecos.
>>>>>
>>>>> #include <cyg/infra/cyg_type.h>
>>>>> #include <cyg/infra/testcase.h>         // Test macros
>>>>> #include <cyg/infra/cyg_ass.h>          // Assertion macros
>>>>> #include <cyg/infra/diag.h>             // Diagnostic output
>>>>>
>>>>> #include <cyg/hal/hal_arch.h>           // CYGNUM_HAL_STACK_SIZE_TYPICAL
>>>>> #include <cyg/kernel/kapi.h>
>>>>>
>>>>> #include <cyg/io/spi.h>                 // Common SPI API
>>>>> #include <cyg/io/spi_stm32.h>           // STM32 data structures
>>>>>
>>>>> #include <string.h>
>>>>>
>>>>> //---------------------------------------------------------------------------
>>>>> // Thread data structures.
>>>>>
>>>>> cyg_uint8 stack [CYGNUM_HAL_STACK_SIZE_TYPICAL];
>>>>> cyg_thread thread_data;
>>>>> cyg_handle_t thread_handle;
>>>>>
>>>>> externC cyg_spi_cortexm_stm32_bus_t cyg_spi_stm32_bus2;
>>>>>
>>>>> //---------------------------------------------------------------------------
>>>>> // SPI loopback device driver data structures.
>>>>>
>>>>> cyg_spi_cortexm_stm32_device_t loopback_device = {
>>>>>     .spi_device.spi_bus = &cyg_spi_stm32_bus1.spi_bus,
>>>>>     .dev_num = 0 ,                      // Only 1 device.
>>>>>     .cl_pol = 1,
>>>>>     .cl_pha = 1,
>>>>>     .cl_brate = 8000000,                // Nominal 8Mhz.
>>>>>     .cs_up_udly = 1,
>>>>>     .cs_dw_udly = 1,
>>>>>     .tr_bt_udly = 1,
>>>>>     .bus_16bit = true, // *** MODIFIED this because my data is 10 bits
>>>>> };
>>>>>
>>>>> //---------------------------------------------------------------------------
>>>>>
>>>>> //const char tx_data[] = {0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1}; // To set
>>>>> maximum resistance at address 00
>>>>> const char tx_data[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // To set
>>>>> minimim resistance at address 00
>>>>> const char tx_data1[] = "Testing extended API...";
>>>>> const char tx_data2[] = "Testing extended API for a second transaction.";
>>>>>
>>>>> char rx_data [sizeof(tx_data)];
>>>>> char rx_data1 [sizeof(tx_data1)];
>>>>> char rx_data2 [sizeof(tx_data2)];
>>>>>
>>>>> //---------------------------------------------------------------------------
>>>>> // Run single loopback transaction using simple transfer API call.
>>>>>
>>>>> void run_test_1 (cyg_bool polled)
>>>>> {
>>>>>     diag_printf ("Test 1 : Simple transfer test (polled = %d).\n",
>>>>> polled ? 1 : 0);
>>>>>     cyg_spi_transfer (&loopback_device.spi_device, polled, sizeof (tx_data),
>>>>>         (const cyg_uint8*) &tx_data[0], (cyg_uint8*) &rx_data[0]);
>>>>>
>>>>>     diag_printf ("    Tx data : %s\n", tx_data);
>>>>>     diag_printf ("    Rx data : %s\n", rx_data);
>>>>>     CYG_ASSERT (memcmp (tx_data, rx_data, sizeof (tx_data)) == 0,
>>>>>         "Simple transfer loopback failed - mismatched data.\n");
>>>>> }
>>>>>
>>>>>
>>>>> //---------------------------------------------------------------------------
>>>>> // Run all PL022 SPI interface loopback tests.
>>>>>
>>>>> void run_tests (void)
>>>>> {
>>>>>     diag_printf ("Running STM32 SPI driver loopback tests.\n");
>>>>>     run_test_1 (true);
>>>>>     CYG_TEST_PASS_FINISH ("Loopback tests ran OK");
>>>>> }
>>>>>
>>>>> //---------------------------------------------------------------------------
>>>>> // User startup - tests are run in their own thread.
>>>>>
>>>>> void cyg_user_start(void)
>>>>> {
>>>>>     CYG_TEST_INIT();
>>>>>     cyg_thread_create(
>>>>>         10,                                   // Arbitrary priority
>>>>>         (cyg_thread_entry_t*) run_tests,      // Thread entry point
>>>>>         0,                                    //
>>>>>         "test_thread",                        // Thread name
>>>>>         &stack[0],                            // Stack
>>>>>         CYGNUM_HAL_STACK_SIZE_TYPICAL,        // Stack size
>>>>>         &thread_handle,                       // Thread handle
>>>>>         &thread_data                          // Thread data structure
>>>>>     );
>>>>>     cyg_thread_resume(thread_handle);
>>>>>     cyg_scheduler_start();
>>>>> }
>>>>>
>>>>> //=============================================================================
>>>>>
>>>> First you should change
>>>>
>>>>    .cl_pol = 1,
>>>>    .cl_pha = 1,
>>>>
>>>> into
>>>>
>>>>    .cl_pol = 0,
>>>>    .cl_pha = 0,
>>>>
>>>>
>>>> in order to make STM32 SPI's timing compatible with potentiometer.
>>>>
>>>> Note that with cyg_spi_transfer() you can send/receive bytes or 16bit
>>>> words, while your potentiometer expects 10bit words. You should take
>>>> care to pack your 10bit word in 16bits (two consecutive bytes) aligned
>>>> towards LS bit. That way STM32's SPI will clock out 6 unused bits at the
>>>> beginning so at the end of transaction your 10 bits will settle in right
>>>> place in potentiometer's shift register.
>>>>
>>>> const char tx_data[] = {0,0xff}; // To set maximum resistance at address 00
>>>> const char tx_data[] = {0,0}; // To set minimum resistance at address 00
>>>>
>>>>
>>>> In your attempt you are packing a bit in each byte (char) which is wrong.
>>>>
>>>> Also change
>>>>
>>>>    .bus_16bit = true,
>>>>
>>>> into
>>>>
>>>>    .bus_16bit = false,
>>>>
>>>> because you are sending/receiving in 8bit portions.
>>>>
>>>> Regards,
>>>> --
>>>>
>>>> Ilija Stanislevik
>>>> SIvA doo
>>>> ul. Mladinska 43 lok. 6
>>>> p.f. 53
>>>> MK-2400 Strumica
>>>> Macedonia
>>>>
>>>> www.siva.mk <http://www.siva.mk>
>>>>
>>>>
>> Hi,
>>
>> Did you retry the test with MISO, MOSI lines shorted (loop back)?
>>
>> Regards,
>> --
>>
>> Ilija Stanislevik
>> SIvA doo
>> ul. Mladinska 43 lok. 6
>> p.f. 53
>> MK-2400 Strumica
>> Macedonia
>>
>> www.siva.mk <http://www.siva.mk>
>>
>>
>

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

  parent reply	other threads:[~2011-07-04  9:48 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-01  9:02 jayant biswas
2011-06-01 17:19 ` Ilija Stanislevik
2011-06-30 14:20   ` jayant biswas
2011-07-01 16:25     ` Ilija Stanislevik
     [not found]       ` <CAB1rPRM8=a6SRctqUUC_NtPHMcivspb7B2LFWKx+cQ5dvLxAWw@mail.gmail.com>
2011-07-04  9:48         ` jayant biswas [this message]
2011-07-04 11:42           ` Manuel Borchers
     [not found]           ` <1309773649.2984.4.camel@netxaccos>
2011-07-04 12:35             ` jayant biswas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAB1rPRP3okQGCgEZCq3pS=gsc3mGbH1VJwTCmrQ4_TC74ahC8w@mail.gmail.com' \
    --to=biswasj@gmail.com \
    --cc=ecos-discuss@ecos.sourceware.org \
    --cc=ilijas@siva.com.mk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).