Sida 1 av 1

Dubbla adresser, AVR Studio

Postat: 3 april 2007, 02:08:47
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
.
.
.

Postat: 3 april 2007, 10:12:46
av $tiff
Det är inte så att assemblern är "case intensive", som i C-programmering? :humm:

Postat: 3 april 2007, 10:24:49
av BEEP
Byt ut sts mot out

Kod: Markera allt

out   eearh,temp
out   eearl,temp 

Postat: 3 april 2007, 11:43:35
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)

Postat: 3 april 2007, 12:39:29
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.

Postat: 3 april 2007, 12:42:22
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:

Postat: 4 april 2007, 10:18:07
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?

Postat: 4 april 2007, 13:08:37
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.

Postat: 4 april 2007, 14:16:47
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

Postat: 4 april 2007, 22:50:04
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

Postat: 5 april 2007, 00:34:09
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.