From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20464 invoked by alias); 1 Jun 2011 17:19:50 -0000 Received: (qmail 20444 invoked by uid 22791); 1 Jun 2011 17:19:47 -0000 X-SWARE-Spam-Status: No, hits=-1.2 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from tirion.supremecenter202.com (HELO tirion.supremecenter202.com) (209.25.195.243) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 01 Jun 2011 17:19:31 +0000 Received: from [89.185.213.209] (port=42215 helo=[192.168.2.99]) by tirion.supremecenter202.com with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.69) (envelope-from ) id 1QRp4s-0004RY-Nk; Wed, 01 Jun 2011 17:19:31 +0000 Message-ID: <4DE6749E.8050001@siva.com.mk> Date: Wed, 01 Jun 2011 17:19:00 -0000 From: Ilija Stanislevik User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110424 Lightning/1.0b2 Thunderbird/3.1.10 MIME-Version: 1.0 To: ecos-discuss@ecos.sourceware.org, jayant biswas References: In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact ecos-discuss-help@ecos.sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: ecos-discuss-owner@ecos.sourceware.org Subject: Re: [ECOS] SPI send data X-SW-Source: 2011-06/txt/msg00012.txt.bz2 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 > #include // Test macros > #include // Assertion macros > #include // Diagnostic output > > #include // CYGNUM_HAL_STACK_SIZE_TYPICAL > #include > > #include // Common SPI API > #include // STM32 data structures > > #include > > //--------------------------------------------------------------------------- > // 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 -- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss