SPI Datenübertragung

OP #764086
Lesenswert?

Hallo

Ich möchte mit folgendem Code ein "r" von einem MIkrocontroller zum 
nächsten übertragen. Das Ganze hat auch schon funktioniert, vor 2 
Monaten, aber jetzt tut sich garnichts mehr!

Hier der Quellcode des Masters:
1
.include "m8def.inc"
2

3
.def temp1     = r16
4
.def temp2    = r17
5

6
.equ Bereit      = 4        ;Gibt Status von COntroller an("Bereit"=Gesetzt->Controller
7
.equ ZentBef  = 5        ;EINGANG:Hierhin sendet Zentrale seine Befehle zur Verteilung
8
                ;(weg schicken;her holen;nix machen);muss global deklariert werden
9

10
.equ DD_SS      = 2      ;Mit DD_SS des Slave verbunden
11
.equ DD_MOSI    = 3      ;Mit DD_MISO des Slave verbunden    
12
.equ DD_MISO    = 4      ;Mit DD_MOSI des Slave verbunden
13
.equ DD_SCK     = 5      ;Mit DD_SCK des Slave verbunden
14

15
.equ vary       = 4
16
.equ DDR_SPI    = DDRB
17
.equ PORT_SPI  = PORTB
18

19
          ldi temp1,LOW(RAMEND)
20
          out SPL,temp1
21

22
          ldi temp1,HIGH(RAMEND)
23
          out SPH,temp1
24
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
25
          rcall SPI_MasterInit
26
loop:        sbi PORTB,DD_SS
27
          ldi temp1,'r'
28
          rcall SPI_MasterTransmit
29
          rjmp loop
30
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
31
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
32
SPI_MasterInit:    ldi temp2,(1<<DD_MOSI)|(1<<DD_SCK)|(1<<DD_SS);|(1<<ComSignalausgang)|(0<<ComSignaleingang)  ;Set MOSI and SCK output, all others input
33
          out DDR_SPI,temp2                ;Enable SPI, Master, set clock rate fck/16
34
          ldi temp2,(1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0)
35
          out SPCR,temp2  
36
          ret
37
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
38
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
39

40
SPI_MasterTransmit:  cbi PORT_SPI,DD_SS
41
          
42
          out SPDR,temp1                ;Start transmission of data (temp1)
43
Wait_Transmit:    sbis SPSR,SPIF                ;Wait for transmission complete
44
          rjmp Wait_Transmit
45
          in temp1,SPDR        
46
          
47
          sbi PORT_SPI,DD_SS
48
          ret
49
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Und Hier der des Slaves:
1
.include "m8def.inc"
2

3
.def temp1     = r16
4
.def transZ      = r20
5
.def temp2    = r17
6
.def receiZ    = r21
7

8

9
.equ DD_SS      = 2      ;Mit DD_SS des Slave verbunden
10
.equ DD_MOSI    = 3      ;Mit DD_MISO des Slave verbunden    
11
.equ DD_MISO    = 4      ;Mit DD_MOSI des Slave verbunden
12
.equ DD_SCK     = 5      ;Mit DD_SCK des Slave verbunden
13

14
.equ vary       = 4
15
.equ DDR_SPI    = DDRB
16

17
          ldi temp1,LOW(RAMEND)
18
          out SPL,temp1
19

20
          ldi temp1,HIGH(RAMEND)
21
          out SPH,temp1
22
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
23
          ldi r16,0xff
24
          out DDRD,r16
25

26
          ;ldi r16,0xff
27
          ;out PORTD,r16
28
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
29
          rcall uart_init
30
          rcall SPI_SlaveInit
31
loop:        rcall SPI_SlaveReceive
32
          rcall uart_send
33
          rjmp loop
34
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
35
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
36
SPI_SlaveInit:    ldi temp2,(1<<DD_MISO)    ;Set MISO output, all others input
37
          out DDR_SPI,temp2            ;Enable SPI
38
          ldi temp2,(1<<SPE)|(1<<SPR1)
39
          out SPCR,temp2
40
          
41
          ret
42
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
43
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
44
SPI_SlaveReceive:  out SPDR,temp1
45
SPI_SlaveReceive_1:  sbis SPSR,SPIF            ;Wait for reception complete
46
          rjmp SPI_SlaveReceive_1        ;Read received data and return
47
          in temp1,SPDR
48
          
49
          ret    
50
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
51
          
52
.include "uart-routines.asm"


Wäre um schnelle Hilfe sehr Dankbar

P.S. Ja ich habe die SPI-Pins richtog verbunden....

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