[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
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(); } //============================================================================= -- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss