XMEGA SPI Registerfehler

Gast #1470549
Lesenswert?
• ▲
▼
Hallo ich habe ein Problem mit meinem SPI Bus, denn er setzt egal ob 
beim simulieren, oder beim debuggen mittels mkII immer die InputRegister 
und nicht die out.

Hier der code für den ATXMEGA128A3:
1
int spi_init_master(unsigned char port)
2
{
3

4
    PORTC_DIR |= (1<<DD4); ///SS pin as in/out must be hold high
5
    PORTC_OUT |= (1<<DD4); //Driven high
6

7
    PORTC_DIR |= (1<<DD5); //MOSI pin as output
8
    PORTC_DIR &= ~(1<<DD6); //MISO pin as input
9
    PORTC_DIR |= (1<<DD7); //SCK pins as output
10
    
11

12
    SPIC.CTRL = 0x00;
13

14
    SPIC.CTRL|=(1<<SPI_CLK2X_bp);              //Doubles Frequency in Master Mode
15
    SPIC.CTRL|=(1<<SPI_DORD_bp);              //Data Order 1=LSB first
16
    SPIC.CTRL|=(1<<SPI_MASTER_bp);              //1=Master Mode
17
    SPIC.CTRL&=~((1<<SPI_MODE0_bp)|(1<<SPI_MODE1_bp));      //SPI Mode Rising Sample, Falling Setup
18
    SPIC.CTRL|=(1<<SPI_PRESCALER0_bp)|(1<<SPI_PRESCALER1_bp);  //11=clkper/64
19
    
20
    SPIC.INTCTRL|=(1<<SPI_INTLVL1_bp);    //interrupt level is middle
21
    SPIC.INTCTRL&=~(1<<SPI_INTLVL0_bp);
22
      SPIC.CTRL|=(1<<SPI_ENABLE_bp);  
23

24
int spi_master_send(unsigned char SPI_data, unsigned char port)
25

26
{
27

28
    if(!spi_master_busy(0,'C',1))
29
      {
30
      SPIC.DATA|=SPI_data;  // sende Daten
31
      spi_master_busy(1,'C',0);//SPI busy
32
      }
33
 }
34

35

36
bool spi_master_busy(bool write, unsigned char port, bool read) //wenn read 1 wird gelesen bei 0 wird write geschrieben
37
{
38
  static bool SPIC_busy=0;
39
      if(!read)
40
      {
41
      SPIC_busy=write;
42
      }
43
    else return SPIC_busy;
44
}

Vielen Dank im voraus
#1470681
Lesenswert?
• ▲
▼
Heißt das ich sehe nicht einmal bei der Simulation das writing DATA 
Register (es gibt nur eine Variable aber einen shift Register Receive 
buffer)

Nach dem Testen scheint das wirklich der fall zu sein da er die Register 
richtig am Input anzeigt (sehe wie er sie rausschiebt).
Wird dann wohl auch der gleiche fehler beim Port sein, nämlich das er 
die out register nicht anzeigt weil er sie nicht lesen kann. Kann das 
sein?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren