Dubbla adresser, AVR Studio

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
CyberLeffe
Inlägg: 50
Blev medlem: 22 februari 2007, 01:15:26
Ort: Göteborg/Örebro

Dubbla adresser, AVR Studio

Inlägg av CyberLeffe »

Varfär står det två adresser i I/O view i AVR Studio?

Bild


Har skrivit ett program (till AT90S8515) som bla ska sparar lite data på EEPROM:et men det funkar inte om man skriver så här:

Kod: Markera allt

 
 // Lite skräp innan

 clr	temp                   // Sätter EEPROM adress till 0
 sts	eearh,temp
 sts	eearl,temp
 lds	temp1,$0091       // Sparar $0091 på EEPROM
 out	eedr,temp1
 sbi	eecr,eemwe
 sbi	eecr,eewe

 // Lite skräp efter
Men om man däremot skriver detta så funkar det

Kod: Markera allt

 
 // Lite skräp innan

 clr	temp                   // Sätter EEPROM adress till 0
 sts	0x3f,temp
 sts	0x3e,temp
 lds	temp1,$0091       // Sparar $0091 på EEPROM
 out	eedr,temp1
 sbi	eecr,2
 sbi	eecr,1

 // Lite skräp efter
Det konstiga är ju att alla adresser är ju definierade i include filen (8515def.inc) men ändå måste man skriva adressen. Dessutom så funkar det inte med de definierade adresserna till EEARH och EEARL. Men när man ändrar dessa
0x1e till 0x3e
0x1f till 0x3f
då funkar det. Men dessa nya adresser är i include-filen definierade som SPH och SREG. :shock:

utdrag ur 8515def.inc

Kod: Markera allt

.
.
.
.equ	SREG	= 0x3f
.equ	SPL	= 0x3d
.equ	SPH	= 0x3e
.equ	GIMSK	= 0x3b
.
.
.
.equ	WDTCR	= 0x21
.equ	EEARL	= 0x1e
.equ	EEARH	= 0x1f
.equ	EEDR	= 0x1d
.equ	EECR	= 0x1c
.
.
.
;EECR - EEPROM Control Register
.equ	EERE	= 0	; EEPROM Read Enable
.equ	EEWE	= 1	; EEPROM Write Enable
.equ	EEMWE      = 2	; EEPROM Master Write Enable
.
.
.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Det är inte så att assemblern är "case intensive", som i C-programmering? :humm:
Användarvisningsbild
BEEP
EF Sponsor
Inlägg: 1593
Blev medlem: 21 januari 2006, 16:57:56
Ort: Mölndal

Inlägg av BEEP »

Byt ut sts mot out

Kod: Markera allt

out   eearh,temp
out   eearl,temp 
CyberLeffe
Inlägg: 50
Blev medlem: 22 februari 2007, 01:15:26
Ort: Göteborg/Örebro

Inlägg av CyberLeffe »

BEEP:

Jag om man byter ut sts mot out så funkar den biten. Men det är fortfarande problem med

Kod: Markera allt

 
sbi   eecr,eemwe 
sbi   eecr,eewe
och vad betyder dom två adresserna i I/O view:n?

ex.vis

Kod: Markera allt

EECR     0x1C(0x3C)
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Har du provat att köra med stora bokstäver på "eemwe" och "eewe", som $tiff föreslog?

Det står om varför det är 0x20 skillnad mellan värdena under "I/O Memory" i databladet.
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Vad dom olika addresserna är för står i databladet, se sidan (19-)20. De olika registren/addresserna har olika åtkomstmöjlighet men pekar på samma.

EDIT: cykze han före :cry:
Användarvisningsbild
BEEP
EF Sponsor
Inlägg: 1593
Blev medlem: 21 januari 2006, 16:57:56
Ort: Mölndal

Inlägg av BEEP »

Kod: Markera allt

// raderat
Edit1:
Får du ett fel medelande i AVR Studio eller fungerar det inte på mikroprocessorn?

Edit2:

Kod: Markera allt

lds   temp1,$0091       // Sparar $0091 på EEPROM
Ska du skriva in värdet $0091 eller värdet i adressen $0091?
CyberLeffe
Inlägg: 50
Blev medlem: 22 februari 2007, 01:15:26
Ort: Göteborg/Örebro

Inlägg av CyberLeffe »

Jag får inget felmeddelande i AVR Studio men det funkar inte i processorn (och inte i simuleringen häller).

Jag ska spara värdet på adressen $0091. Jag har ett program där man ska kunna spara inställningar och mätvärden innan man stänger av.
Användarvisningsbild
BEEP
EF Sponsor
Inlägg: 1593
Blev medlem: 21 januari 2006, 16:57:56
Ort: Mölndal

Inlägg av BEEP »

Det kan ju vara något strul i ett tidigare skede när du skriver till adressen. Om du provar att t.ex skriva $01 direkt till adressen får du då $01 i temp1?

Kod: Markera allt

ldi temp, $01
sts $0091, temp
lds temp1, $0091
CyberLeffe
Inlägg: 50
Blev medlem: 22 februari 2007, 01:15:26
Ort: Göteborg/Örebro

Inlägg av CyberLeffe »

javisst det funkar utmärkt

Vet inte vad jag har ändrat men nu funkar det med

Kod: Markera allt

 sbi	eecr,eemwe
 sbi	eecr,eewe
Användarvisningsbild
BEEP
EF Sponsor
Inlägg: 1593
Blev medlem: 21 januari 2006, 16:57:56
Ort: Mölndal

Inlägg av BEEP »

"Om du provar att t.ex skriva $01 direkt till adressen får du då $01 i temp1?"
"javisst det funkar utmärkt "

Det var ju inte det som du hade problem med, förlåt :(


"Vet inte vad jag har ändrat men nu funkar det med "

Jag funderar på om du har klippt och klistrat koden ifrån någon webbsida för att det kanske är så att det finns tecken i koden som inte syns i AVR Studio eller så är det bara en bugg i programmet.
Skriv svar