This is the mail archive of the ecos-discuss@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: SPI send data


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]