EmbDev.net

Forum: µC & Digital Electronics ATUC3C-EK problem with SPI CS


von marko (Guest)



Rate this post
useful
not useful
Greetings,

working with AT32UC3A-Xplained as Master and Accelerometer SCA830-D07 as 
Slave. (one master and one slave)
I have a problem with SPI CS.

On the picture is what i get with my osciloscope( 1. SCK;
                                                  2. MOSI
                                                  3. MISO and
                                                  4. CS).
and on the other 2 pictures is how it should be.

This is my code:

#include <avr32/io.h>
#include "compiler.h"
#include "board.h"
#include "power_clocks_lib.h"
#include "gpio.h"
#include "usart.h"
#include "spi_master.h"
#include "stdio.h"

#  define EXAMPLE_TARGET_PBACLK_FREQ_HZ FOSC0  // PBA clock target 
frequency, in Hz

   // spi otions
    spi_options_t my_spi_options={
      // The SPI channel to set up
      .reg = SPI_SLAVE,
      // Preferred baudrate for the SPI.
      .baudrate = 14400,
      // Number of bits in each character (8 to 16).
      .bits = 8,
      // Delay before first clock pulse after selecting slave (in PBA 
clock periods). (min 5ns für STEVAL-MKI105V1)
      .spck_delay = 0, // ca. 20,0 ns 5
      // Delay between each transfer/character (in PBA clock periods).
      .trans_delay = 0,
      // Sets this chip to stay active after last transfer to it.
      .stay_act = 1,
      // Which SPI mode to use when transmitting.
      .spi_mode = SPI_MODE_1,
      // Disables the mode fault detection.
      // With this bit cleared, the SPI master mode will disable itself 
if another
      // master tries to address it.
      .modfdis = 1
    };

    struct spi_device SPI_DEVICE_EXAMPLE = {
      //! Board specific select id
      .id = SPI_SLAVE };

     void spi_init_module(void)
      {
          //Init SPI module as master
          spi_initMaster(SPI_EXAMPLE,&my_spi_options);
          //Setup configuration for chip connected to CS1


         spi_setupChipReg(SPI_EXAMPLE,&my_spi_options,sysclk_get_pba_hz());

         //Allow the module to transfer data
          spi_enable(SPI_EXAMPLE);
      }
int status;
int status1;

uint16_t data1;
uint16_t data;

int main(void)
{
 static const gpio_map_t SPI_GPIO_MAP =
  {
    {AVR32_SPI0_SCK_0_0_PIN,AVR32_SPI0_SCK_0_0_FUNCTION},
    {AVR32_SPI0_MOSI_0_0_PIN,AVR32_SPI0_MOSI_0_0_FUNCTION},
    {AVR32_SPI0_MISO_0_0_PIN,AVR32_SPI0_MISO_0_0_FUNCTION},
    {AVR32_SPI0_NPCS_3_0_PIN, //AVR32_SPI0_NPCS_3_0_FUNCTION},
    },
    };

  gpio_enable_module(SPI_GPIO_MAP,
  sizeof(SPI_GPIO_MAP) / sizeof(SPI_GPIO_MAP[0]));

  pcl_switch_to_osc(PCL_OSC0, FOSC0, OSC0_STARTUP);

  sysclk_init();
  sysclk_enable_peripheral_clock(SPI_EXAMPLE);
    spi_init_module();
  spi_master_init(SPI_EXAMPLE); // Initiate the SPI Module 1 as Master
  spi_initMaster(SPI_EXAMPLE, &my_spi_options);
  spi_master_setup_device(SPI_EXAMPLE, &SPI_DEVICE_EXAMPLE, SPI_MODE_0, 
my_spi_options.baudrate, 0); // Parametrization for the SPI Module
  spi_setupChipReg(SPI_EXAMPLE,&my_spi_options,FOSC0);
  spi_enable(SPI_EXAMPLE);
while(1)
{
  spi_selectChip(SPI_EXAMPLE, SPI_SLAVE); // select the SPI Module
        //Wait for the transmitter to be ready
  while(!spi_is_tx_ready(SPI_EXAMPLE));
        //Wait for a complete transmission
  status = spi_write(SPI_EXAMPLE, 0b00010101);
        status = spi_write(SPI_EXAMPLE, 0b00000000); //dummy
  status = spi_read(SPI_EXAMPLE, &data);
  //empty tx
  while(!spi_is_tx_empty(SPI_EXAMPLE));
  //Wait for the transmitter to be ready
  while(!spi_is_tx_ready(SPI_EXAMPLE));
  status1 = spi_write(SPI_EXAMPLE, 0b00010000);
  status1 = spi_write(SPI_EXAMPLE, 0b00000000);
  status1 = spi_read(SPI_EXAMPLE, &data1);
  //Wait for a complete transmission
  while(!spi_is_tx_empty(SPI_EXAMPLE));
  // Deselect the slave
  while(!spi_is_tx_empty(SPI_EXAMPLE));
  spi_unselectChip(SPI_EXAMPLE,SPI_SLAVE);

  }
}

Can someone tell what am i doing wrong?

Regards

von marko (Guest)


Rate this post
useful
not useful
My mistake it is UC3-A3 Xplained board!!!

Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
No account? Register here.