Delucidazioni su SPI (codice assembly) MCU ATMEL

Sezione dedicata ai Microcontrollori e ai Sistemi Embedded

Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby gio919kun » 16 Apr 2013, 11:46

Ciao ragazzi, vi propongo lo stesso post che ho proposto su un altro sito:
stò realizzando un progetto che riguarda la comunicazione wireless di due MCU (un ATMega8535 e un ATMega8515) tramite due transceiver dell Nordic semiconductor ovvero nRf24L01+ (qui il datasheet http://www.nordicsemi.com/eng/content/d ... on_1_0.pdf). In parole povere questi dispositivi vengono programmati tramite interfaccia SPI. Il mio problema consiste nel non riuscire a leggere lo STATUS register di questi dispositivi. Mi spiego meglio, dal datasheet (a pag 52) si legge che, ogni volta che viene scritto un comando tramite SPI il device (nrf24l01) torna lo STATUS register tramite il pin MISO. Io ho provato a leggere lo STATUS register del nRF24L01 scrivendo tramite SPI l'operazione NOP (che non fa altro che mandarmi indietro lo STATUS register) e leggendo il registro SPDR dell' MCU. Il problema è che mi torna sempre tutto 0. Probabilmente non ho capito bene come funziona l'SPI anche perché è la prima volta che mi cimento in cose del genere. La mia domanda è quando il datasheet del transcevier dice che torna lo status register al MCU significa che me lo ritrovo in SPDR o devo fare qualche altra operazione (lato MCU) per poterlo leggere? Probabilmente non sono stato chiaro ma la cosa è difficile da spiegare perciò se c'è qualche problema ditemi cosa non avete capito e grazie in anticipo. Posto anche il codice
Code: Select all
.def counter=r18
.def counter2=r19
.def regcounter=r20
.def target=r21


rjmp Init

;Wait 20 mS about
Wait:
      dec counter
      breq PC+2
      rjmp Wait
      ldi counter, 240
      dec counter2
      breq PC+2
      rjmp Wait
      ldi counter2,85
      ret

;Start transmission throuth SPI
Start_Transmission:
      sbi PORTB, 1 ;Alza CE per iniziare la trasmissione
      rcall Wait
      cbi PORTB, 1 ;Abbassa CE

SPI_MasterTransmit:
      ; Start transmission of data (r17)
      out SPDR,data
Wait_Transmit:
      ; Wait for transmission complete
      sbis SPSR,SPIF
      rjmp Wait_Transmit
      ret

Init:    ldi temp, LOW(RAMEND) ;Initialize Stack Pointer
      out SPL, temp
      ldi temp, HIGH(RAMEND)
      out SPH, temp
     
      ;Initialize Ports
      clr temp
      out DDRD, temp ;Set PORTD as input
      ser temp
      out PORTD, temp ;Pull ups on PortD off
      out DDRC, temp ;Set PORTC as output
      clr temp
      out PORTC, temp ;Pull ups on PORTC on
     
      ;Variables
      ldi counter, 240
      ldi counter2, 85
     
      ;SPI_MasterInit
      ;Set MOSI, SCK and SS output , all others input
      ldi temp,(1<<DDB7)|(1<<DDB5)|(1<<DDB4)
      out DDRB,temp
      ;Enable SPI, Master, set clock rate fck/16
      ldi temp,(1<<SPE)|(1<<MSTR)|(1<<SPR0) ;
      out SPCR,temp
      ldi temp, (1<<PB3);Start CSN high
      out PORTB, temp
     
Init_NRF24L01:
      ;Remember CSN start high
      ldi temp, 0b10101010
      out PORTC, temp ;Controllo posizione
     
      cbi PORTB, 3 ;Abbassa CSN per abilitare la comunicazione SPI
      ldi data, W_REGISTER ;Accedo al W_REGISTER al quale gli passo l'indirizzo di CONFIG register
      subi data, -REG_CONFIG
      rcall SPI_MasterTransmit
      ldi data, 0b01001110 ;PWR_UP and TXmode (in CONFIG register) set  TX_DS interrupt active low and CRC0 (2 bytes)
      rcall SPI_MasterTransmit
      sbi PORTB, 3 ;Alza CSN per chiudere la comunicazione SPI
     
      rcall Wait ;Attendi 20 ms
     
      cbi PORTB, 3 ;Abbassa CSN per abilitare la comunicazione SPI
      ldi data, W_REGISTER;Accedo al W_REGISTER al quale gli passo l'indirizzo di EN_AA register
      subi data,-REG_EN_AA
      rcall SPI_MasterTransmit
      ldi data, 0b00000001 ;Abilito ENAA_P0
      rcall SPI_MasterTransmit
      sbi PORTB, 3 ;Alza CSN per chiudere la comunicazione SPI
     
      rcall Wait ;Attendi 20 ms
     
      cbi PORTB, 3 ;Abbassa CSN per abilitare la comunicazione SPI
      ldi data, W_REGISTER ;Abilta l'indirizzo addr0 in ricezione
      subi data,-REG_EN_RXADDR
      rcall SPI_MasterTransmit
      ldi data, 0b00000001
      rcall SPI_MasterTransmit
      sbi PORTB, 3 ;Alza CSN per chiudere la comunicazione SPI
     
      rcall Wait
     
      cbi PORTB, 3 ;Abbassa CSN per abilitare la comunicazione SPI
      ldi data, W_REGISTER
      subi data,-REG_SETUP_AW
      rcall SPI_MasterTransmit
      ldi data, 0b00000011 ;Setup address witdh to 5 bytes
      rcall SPI_MasterTransmit
      sbi PORTB, 3 ;Alza CSN per chiudere la comunicazione SPI
     
      rcall Wait
     
      cbi PORTB, 3 ;Abbassa CSN per abilitare la comunicazione SPI
      ldi data, W_REGISTER
      subi data, -REG_SETUP_RETR
      rcall SPI_MasterTransmit
      ldi data, 0b00111010 ;Set nRF24L01,s auto retransmission delay up to 1ms and auto retransmit count up to 10 re-transmit
      rcall SPI_MasterTransmit
      sbi PORTB, 3 ;Alza CSN per chiudere la comunicazione SPI
     
      rcall Wait
     
      cbi PORTB, 3 ;Abbassa CSN per abilitare la comunicazione SPI
      ldi data, W_REGISTER
      subi data, -REG_RF_CH
      rcall SPI_MasterTransmit
      ldi data, 0b00000010 ;Set 2,4 GHz frequency
      rcall SPI_MasterTransmit
      sbi PORTB, 3 ;Alza CSN per chiudere la comunicazione SPI
     
      rcall Wait
     
      cbi PORTB, 3 ;Abbassa CSN per abilitare la comunicazione SPI
      ldi data, W_REGISTER
      subi data, -REG_RF_SETUP
      rcall SPI_MasterTransmit
      ldi data, 0b00001111 ;Set air data rate 2Mbps, set output power 0dBm and eneble LNA
      sbi PORTB, 3 ;Alza CSN per chiudere la comunicazione SPI
     
      rcall Wait
     
      cbi PORTB, 3 ;Abbassa CSN per abilitare la comunicazione SPI
      ldi data, W_REGISTER ;Addressing TX5
      subi data, -REG_TX_ADDR
      rcall SPI_MasterTransmit
      ldi data,0x05 ;Sending address 0xB3B4B5B605
      rcall SPI_MasterTransmit
      ldi data,0xB6
      rcall SPI_MasterTransmit
      ldi data,0xB5
      rcall SPI_MasterTransmit
      ldi data,0xB4
      rcall SPI_MasterTransmit
      ldi data,0xB3
      rcall SPI_MasterTransmit
      sbi PORTB, 3 ;Alza CSN per chiudere la comunicazione SPI
     
      rcall Wait
     
      cbi PORTB, 3 ;Abbassa CSN per abilitare la comunicazione SPI     
      ldi data, W_REGISTER ;Addressing RX0
      subi data, -REG_RX_ADDR_P0
      rcall SPI_MasterTransmit
      ldi data,0x05 ;Sending address 0xB3B4B5B605
      rcall SPI_MasterTransmit
      ldi data,0xB6
      rcall SPI_MasterTransmit
      ldi data,0xB5
      rcall SPI_MasterTransmit
      ldi data,0xB4
      rcall SPI_MasterTransmit
      ldi data,0xB3
      rcall SPI_MasterTransmit
      sbi PORTB, 3 ;Alza CSN per chiudere la comunicazione SPI
     
     
Start:     
      cbi PORTB, 3 ;Abbassa CSN per abilitare la comunicazione SPI
      ldi data, W_TX_PAYLOAD
      rcall SPI_MasterTransmit
      ldi data, 0b01100110
      rcall SPI_MasterTransmit
      sbi PORTB, 3 ;Alza CSN per chiudere la comunicazione SPI
     
      ;Inizia la  trasmettere
      rcall Start_Transmission

      cbi PORTB, 3 ;Abbassa CSN per abilitare la comunicazione SPI
      ser data ;Metti in data NOP e leggi STATUS register
      rcall SPI_MasterTransmit
      sbi PORTB, 3 ;Alza CSN per chiudere la comunicazione SPI
      in temp, SPDR
      out PORTC, temp ;Visualizza il registro SPDR con i LED

La parte in cui tento di accedere allo STATUS register si trova alle ultime righe.
gio919kun
 
Posts: 27
Joined: 16 Apr 2013, 11:39

Re: Delucidazioni su SPI (codice assembler) MCU ATMEL

Postby brixall » 16 Apr 2013, 11:54

salve gio919kun, benvenuto.

un cosiglio?.......
presentati tra i nuovi iscritti ;)

Spero che qualcuno potrà aiutarti, io ne capisco poco di asm, purtroppo :roll: :roll: :roll:
brixall
 
Posts: 14
Joined: 20 Sep 2012, 20:00

Re: Delucidazioni su SPI (codice assembler) MCU ATMEL

Postby flz47655 » 16 Apr 2013, 12:02

Hai un treno di impulsi su SCLK?
flz47655
 
Posts: 639
Joined: 19 Jan 2012, 21:16

Re: Delucidazioni su SPI (codice assembler) MCU ATMEL

Postby deluca » 16 Apr 2013, 13:26

salve gio919, e benvenuto al forum.

siamo allora alle prese con nRf24L01? bene bene.
posso chiederti se in fase di trasmissione(SPI-master) riesci ad inviare qualcosa all' SPI-slave(modulino)?
o sei completamente fermo causa test Status register? e quindi non riesci a comunicare con 2401?
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Delucidazioni su SPI (codice assembler) MCU ATMEL

Postby gio919kun » 16 Apr 2013, 14:33

Beh grazie a tutti delle risposte, appena possibile mi presenterò ai nuovi iscritti.
flz47655
Hai un treno di impulsi su SCLK?

Intendi sul pin SCK? Sinceramente non saprei neanche come fare a testarlo.

deluca
posso chiederti se in fase di trasmissione(SPI-master) riesci ad inviare qualcosa all' SPI-slave(modulino)?
o sei completamente fermo causa test Status register? e quindi non riesci a comunicare con 2401?

Il problema è proprio che non riesco a capire se stò comunicando o no perchè l'unico modo che mi è venuto in mente per testare la comunicazione è prendere lo STATUS register e metterlo sui LED dell'STK. Ma i LED rimangono tutti spenti (cioè il registro è tutto 1). Quindi le mie ipotesi sono le seguenti:
1. Non ho impostato bene l'SPI quindi non riesco a comunicare.
2. La comunicazione in uscita funziona ma non so/riesco a utilizzare quella in entrata.
3. O non ho capito niente di niente XD
gio919kun
 
Posts: 27
Joined: 16 Apr 2013, 11:39

Re: Delucidazioni su SPI (codice assembler) MCU ATMEL

Postby deluca » 16 Apr 2013, 14:49

@gio, ho capito
c'è un motivo per cui devi necessariamente programmare in assembly?
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Delucidazioni su SPI (codice assembler) MCU ATMEL

Postby flz47655 » 16 Apr 2013, 15:24

Intendi sul pin SCK? Sinceramente non saprei neanche come fare a testarlo.


Esattamente, puoi testarlo con un oscilloscopio ma anche con un semplice tester, visto che il duty cycle è del 50% dovresti leggere VCC/2 quando comunichi, o un valore inferiore se il tester fa la media su un periodo più lungo ma NON zero volt

Ciao
flz47655
 
Posts: 639
Joined: 19 Jan 2012, 21:16

Re: Delucidazioni su SPI (codice assembler) MCU ATMEL

Postby gio919kun » 16 Apr 2013, 16:07

deluca
@gio, ho capito
c'è un motivo per cui devi necessariamente programmare in assembly?

Purtroppo si è per un esame universitario.
per rispondere a flz47655 credo proprio che lo testerò appena arrivo all'uni. Cmq sono abbastanza sicuro che il mio codice sia giusto, secondo me il problema sono i moduli wireless. Vedrò di effettuare dei test anche su i moduli, se qualcuno trova qualche errore nel codice mi faccia sapere. Grazie ancora
gio919kun
 
Posts: 27
Joined: 16 Apr 2013, 11:39

Re: Delucidazioni su SPI (codice assembler) MCU ATMEL

Postby deluca » 16 Apr 2013, 21:02

@gio, non esserne così sicuro......
per prima cosa devi controllare la configurazione della SPI che deve essere così impostata:

Data order=first MSB, SPI Mode Master, Polarità=Low, Phase=0, Clockrate=4 se xtal=8Mhz, noSS perchè gestito manualmente nel programma.

Inizia a controllare i registri e controlla che questa impostazione venga rispettata..... poi controlliamo altro.

PS. La premessa è cmq che tutti i segnali siano stati collegati in modo impeccabile e l'alimentazione sia stata rispettata...... giusto? ;)
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Delucidazioni su SPI (codice assembler) MCU ATMEL

Postby gio919kun » 16 Apr 2013, 21:48

Data order=first MSB, SPI Mode Master, Polarità=Low, Phase=0, Clockrate=4 se xtal=8Mhz, noSS perchè gestito manualmente nel programma.

Allora data order, SPI Mode, polarità, phase ci siamo. SS anche per è impostato come output e in modalità master questo significa che è gestito manualmente e non interferisce con l'SPI. Per quanto riguarda la velocità di clock non ho ben capito, comunque il mio settaggio è il seguente:
Per il MCU clock interno a 4 MHz velocità SPI fclk/8, anche se in precedenza era settato a f/16.
PS. La premessa è cmq che tutti i segnali siano stati collegati in modo impeccabile e l'alimentazione sia stata rispettata...... giusto?

Beh certo controllato più volte, anche se ora è in fase di test quindi il tutto è collegato all'STK500. ;)
gio919kun
 
Posts: 27
Joined: 16 Apr 2013, 11:39

Re: Delucidazioni su SPI (codice assembler) MCU ATMEL

Postby js-bascom » 17 Apr 2013, 00:32

vi propongo lo stesso post che ho proposto su un altro sito:
Ciao gionni90 ;) (io so tutto sai)

Stavo quasi per consigliarti questo sito, alcuni "nell'altro" sito mi annoiano quando saltano subito a dirti di usare C invece di assembler o di usare un'altro AVR quando sei in possesso di quello che hai.

Non e' che stassi disegnando un sistema commerciale con il vecchio M8535.

Comunque io no posso aiutarti perche' non ho un chip RF come quello che hai tu.

Se lo avessi porterei il codice su un'altro AVR che usa JTAG o DW perche' io no so lavorare senza essere attaccato ad un debugger.

Poi guarderei al codice mentre e dentro il chip per vedere i risultati.
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: Delucidazioni su SPI (codice assembler) MCU ATMEL

Postby js-bascom » 17 Apr 2013, 00:53

Un pensierino, stacca il cavo ISP dal STK500 mentre fai le tuo prove in caso possa interferire perche' usa gli stessi piedini.
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby deluca » 17 Apr 2013, 08:46

PS: Ho corretto il titolo in "Delucidazioni su SPI (codice assembly) MCU ATMEL". Si dice codice assembly e non assembler, poichè l'assembler è l'assemblatore, ovvero, il software che serve per assemblare...... chissà perchè tutti lo confondono. :)
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby js-bascom » 17 Apr 2013, 09:15

Cosa c'è in un nome? Ciò che chiamiamo rosa, anche con un altro nome, conserva sempre il suo profumo.
:lol:
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby deluca » 17 Apr 2013, 20:48

orbene !, adesso risvegliamo anche William Shakespeare,
chissà cosa risponderebbero Romeo e Giulietta, se ponessimo loro il quesito: Assembly o Assembler?

Io penso risponderebbero: "noi preferiamo ADA, grazie"
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby gio919kun » 17 Apr 2013, 23:17

Buona sera a tutti.
Scusate l'assenza ma ho avuto molto da fare. Vedo con piacere che oggi siamo in vena poetica eh?bene bene
Stavo quasi per consigliarti questo sito, alcuni "nell'altro" sito mi annoiano quando saltano subito a dirti di usare C invece di assembler o di usare un'altro AVR quando sei in possesso di quello che hai.

eheh pure a me... e non poco, ma che ci possiamo fare
Comunque torniamo in topic
Un pensierino, stacca il cavo ISP dal STK500 mentre fai le tuo prove in caso possa interferire perche' usa gli stessi piedini.

Fatto e non cambia niente

PS: Ho corretto il titolo in "Delucidazioni su SPI (codice assembly) MCU ATMEL". Si dice codice assembly e non assembler, poichè l'assembler è l'assemblatore, ovvero, il software che serve per assemblare...... chissà perchè tutti lo confondono.

Si lo so sbaglio sempre, grazie per la correzzione.

Ancora niente di risolto, ieri però ho testato l'SPI , cioè ho fatto un programmino che inizializza il MCU come master e mandata un byte tramite SPI in seguito leggo questo byte e lo metto sui LED (ovviamente ho collegato il piedino MOSI a quello MISO) e tutto sembra funzionare infatti sui LED vedo lo stesso byte che invio. A questo punto mi chiedo, che sia un problema del modulo wireless?
gio919kun
 
Posts: 27
Joined: 16 Apr 2013, 11:39

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby js-bascom » 18 Apr 2013, 04:19

Non so perche' ma le ultime notifiche sono finiti nella spazzatura! L'e ho segnalati come "not spam"
Non so perche' ma le ultime notifiche sono finite nella spazzatura! Le ho segnalate come "not spam" (diciamo che stai ricordando abb bene l'ITA.. dlg)

Allora nel mio pozzo senza fondo di cose AVR, ho trovato un esempio BASCOM per questo chip, pero e' impostato per il mega8 a 7372800MHz e la versione demo no puo' compilarlo perche' e piu' grande di 4Kb.

Potrei postare il codice qui ma bisognerebbe che qualche anima buona con la licenza per BASCOM ;) lo modificasse e lo compilasse per il tuo "set up" e quindi darti il file .hex.
Questo NON E' per fare i tuoi compiti ma per verificare che il tuo hardware funzioni correttamente.
Una volta confermato il funzionamento potrai continuare con la tua versione.
Una cosa che ho notato e' che il codice usa il CE e SS, non vedo il CE nel tuo codice ma forse e' usato in modo differente. Almeno puoi vedere come la SPI sia impostata.
Code: Select all
'=== Config hardware ===
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1
'Software SPI is NOT working with the nRF24L01, use hardware SPI only, but the SS pin must be controlled by our self
Config Pinc.5 = Output                                      'CE pin is output
Config Pinb.2 = Output                                      'SS pin is output
Config Pinc.4 = Input                                       'IRQ pin is input
Config Pinc.3 = Input                                       'TX/RX Device _select
Ce Alias Portc.5
Ss Alias Portb.2
Irq Alias Pinc.4
Txrx_device Alias Pinc.3
Spiinit                                                     'init the spi pins
Set Ce
Waitms 10                                                   'Wait a moment until all hardware is stable
Reset Ce                                                    'Set CE pin low
Reset Ss                                                    'Set SS pin low (CSN pin)
Porca miseria l'Italiano mi sta quasi ritornando in queste poche settimane che frequento qui! :mrgreen:
Last edited by js-bascom on 18 Apr 2013, 09:37, edited 2 times in total.
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby deluca » 18 Apr 2013, 08:30

@js-bascom,
Ho rivisto il file .bas con $regfile = "M8535.dat".
Non ci sono problemi durante la ricompilazione, anche con il micro utilizzato da @gio919

Naturalmente potrebbe essere necessario spostare qualche pin per un corretto collegamento.
Nel file viene gestito anche l'IRQ del nRF24L01, e quando viene intercettato, il valore letto dal registro status deve essere mascherato con x70.

Code: Select all
If Irq = 0 Then                                            'se c'è un interrupt hw
         Call R_register(status , 1)                    'leggi un byte dallo status register
         Temp = B_bytes(1) And &B_0111_0000   'mascheralo ed identifica i vari tipi di interrupts
end if
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby gio919kun » 18 Apr 2013, 12:05

Una cosa che ho notato e' che il codice usa il CE e SS, non vedo il CE nel tuo codice ma forse e' usato in modo differente. Almeno puoi vedere come la SPI sia impostata.

CE e SS sono impostati come nel mio codice solo che lui pone SS=CSN io invece ho semplicemente usato un altro pin per CSN e SS non lo utilizzo prorpio. Leggendo il tuo codice ho notato un errore che ho commesso. Cioè a furia di scrivere e riscrivere il codice ho tolto la parte in cui mettevo CSN e CE output, ho rimediato subito ma non è cambiato niente. Ho effettuato altri test e in particolare ho provato a leggere il registro CONFIG che avevo impostato sopra e quello che ho notato è che quando leggo SPDR (dove in teoria dovrei avere lo STATUS register o in quest'ultimo caso il registro CONFIG ricevuto dal pin miso) mi restituisce sempre l'ultima istruzione trasmessa. Vi faccio un esempio: per leggere lo STATUS è sufficiente mandare l'istruzione NOP che ha indirizzo 0xff, infatti quando leggo SPDR sui led visualizzo 0xff, o ancora per leggere il registro CONFIG gli devo mandare l'istruzione R_REGISTER (cioè leggi un registro) con l'indirizzo di CONFIG e subito dopo un byte a caso. Il mio byte a caso era 0b00110011 perciò quando sono andato a leggere SPDR ho visualizzato 0b00110011. Non so se sono stato chiaro, spero di si.
gio919kun
 
Posts: 27
Joined: 16 Apr 2013, 11:39

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby gio919kun » 18 Apr 2013, 12:33

Ho effettuato altri test e in particolare ho provato a leggere il registro CONFIG che avevo impostato sopra e quello che ho notato è che quando leggo SPDR (dove in teoria dovrei avere lo STATUS register o in quest'ultimo caso il registro CONFIG ricevuto dal pin miso) mi restituisce sempre l'ultima istruzione trasmessa. Vi faccio un esempio: per leggere lo STATUS è sufficiente mandare l'istruzione NOP che ha indirizzo 0xff, infatti quando leggo SPDR sui led visualizzo 0xff, o ancora per leggere il registro CONFIG gli devo mandare l'istruzione R_REGISTER (cioè leggi un registro) con l'indirizzo di CONFIG e subito dopo un byte a caso. Il mio byte a caso era 0b00110011 perciò quando sono andato a leggere SPDR ho visualizzato 0b00110011. Non so se sono stato chiaro, spero di si.

Scusatemi errore mio, non è vero che SPDR mi torna sempre il valore dell'ultima istruzione ma mi torna sempre 0xff.
gio919kun
 
Posts: 27
Joined: 16 Apr 2013, 11:39

Next

Return to Microcontrollori e microprocessori

Who is online

Users browsing this forum: No registered users and 3 guests

cron