Inicjalizacja zewnętrznej pamięci w Ethernut z Atmel Mega128 - problemy z I/O
ethernut i external memory
From: "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl>
Subject: ethernut i external memory
Date: Thu, 14 Jul 2005 20:09:42 +0200
hej,
mam problem z inicjalizacją zewnętrznej pamięci, a własciwie urządzenia I/O
które jest podłączone do ethernuta (atmel mega128).
Ethernut ma gotowy interfejs Address/Data i dostaje A0-A15, D0-D7, /WR, /RD
i własciwie tyle mnie interesuje w chwili obecnej.
Z grubsza wygląda to jak na schemacie - link poniżej (sorry za jakość).
http://services.leon.com.pl/~marcin/enut.tif
Chce zapalać linijkę LED ale chce zeby była ona adresowana jak normalna
pamięć.
Zdaje się, że na schemacie nie popełniłem żadnego logicznego błędu - jeżeli
tak to proszę o poprawienie mnie.
procedura wysłania czegoś na adres 0xFFF8 jest u mnie taka:
.org $0
jmp RESET
.org $0046
RESET:
ldi r16,0b10000000
sts MCUCR,r16
ldi r16,0b00001100
sts XMCRA,r16
ldi r16,0b10000000
sts XMCRB,r16
ldi r27,0xff
ldi r26,0xf8
TEST:
ldi r16,0b11111111
st X,r16
; sts 0xfff8,r16
rcall TEST
niestety, efekt jest zawsze taki, żę diodki sobie pomrugują mniej lub
bardziej periodycznie. Niby można się w tym doszukać czegoś regularnego
ale nie mam najmniejszej możliwości panowania nad tym. Jedynie jeżeli SRE
jest 0 to jest ciemność. Pozatem co bym nie napisał lub napisał to efekt
jest
ten sam, chaotyczne mruganie/zatrzaskiwanie danych.
te LEDy to jest tak na początek, potem chce podpiąć LCD i może jeszcze coś,
ale chciałem móc coś wysłać na linijke, żeby sprawdzić ze to działa.
Niestety nie posiadam żadnego oscyloskopu aby móc stwierdzić co się dzieje
na poszczególnych liniach.
Chce to koniecznie móc adresować - taki kaprys ;-)
Ma ktoś jakieś wskazówki ?
Pozdrawiam,
Marcin
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 20:25:03 +0200
Użytkownik "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl> napisał w wiadomości news:db69p9$old$2_at_nospam_polsl.gliwice.pl...
...
RESET:
ldi r16,0b10000000
sts MCUCR,r16
ldi r16,0b00001100
sts XMCRA,r16
ldi r16,0b10000000
sts XMCRB,r16
ldi r27,0xff
ldi r26,0xf8
TEST:
ldi r16,0b11111111
st X,r16
; sts 0xfff8,r16
rcall TEST
...
to jest caly kod czy cos wyciales ?
rcall na koncu spowoduje, ze stos sie wywali
powinno byc jmp albo na koncu procedury RET
a w ogole inicjalizujesz wskaznik stosu ?
--
Andrzej
From: "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 20:31:14 +0200
> to jest caly kod czy cos wyciales ?
raczej cały, wyciełem tylko to:
.nolist
.include "m128def.inc"
.list
rcall na koncu spowoduje, ze stos sie wywali
powinno byc jmp albo na koncu procedury RET
wpisalem jmp i to samo
a w ogole inicjalizujesz wskaznik stosu ?
nie, ale zaraz po RESET: dopisałem
ldi r16,0x00
out SPH,r16
ldi r16,0x00
out SPL,r16
i nadal ten sam efekt...
Marcin
From: Zbych <abuse_at_nospam_onet.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 20:40:21 +0200
Marcin Kuczera wrote:
nie, ale zaraz po RESET: dopisałem
ldi r16,0x00
^^^^^^^^^^^^^^^^^^
out SPH,r16
ldi r16,0x00
^^^^^^^^^^^^^^^^^
out SPL,r16
i nadal ten sam efekt...
Avr ma stos malejący, a nie rosnący. Obejrzyj sobie też mapę pamięci
procesora który stosujesz i zobacz co mieści się w początkowych
komórkach pamięci.
W pierwszym lepszym przykładowym programie możesz znaleźć coś takiego:
ldi r16,high(RAMEND) ;High byte only required if
out SPH,r16 ;RAM is bigger than 256 Bytes
ldi r16,low(RAMEND)
out SPL,r16
From: "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 20:52:19 +0200
Avr ma stos malejący, a nie rosnący. Obejrzyj sobie też mapę pamięci
procesora który stosujesz i zobacz co mieści się w początkowych komórkach
pamięci.
W pierwszym lepszym przykładowym programie możesz znaleźć coś takiego:
ldi r16,high(RAMEND) ;High byte only required if
out SPH,r16 ;RAM is bigger than 256 Bytes
ldi r16,low(RAMEND) out SPL,r16
ok, zrobiłem.
Obecnie mój kod wygląda tak:
.nolist
.include "m128def.inc"
.list
.org $0
jmp RESET
.org $0046
RESET:
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,0b10000000
sts MCUCR,r16
ldi r16,0b00001100
sts XMCRA,r16
ldi r16,0b10000000
sts XMCRB,r16
ldi r27,0xff
ldi r26,0xf8
TEST:
ldi r16,0b11111111
st X,r16
; sts 0xfff8,r16
rjmp TEST
--------------------
niestety nadal sobie pomruguje...
zastanawiam się co się dzieje na magistrali adresowej/ danych kiedy
aplikacja nie odnosi się do niczego co tam jest zapięte.
W dokumentacji wyczytałem ze gdy odnosze się do rejestrów znajdujących się w
wewnętrznej pamięci, to adresy i dane są wystawiane,
ale nie działają /WR oraz /RD.
Tyle ze nawet gdy na końcu zrobie:
TEST1:
rjmp TEST1
to na magistrali danych cały czas zmieniają się dane i inne sygnały też nie
są niezmienne...
Może czegoś zapomniałem przy inicjalizacji ?
Marcin
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 20:54:35 +0200
Użytkownik "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl> napisał w wiadomości news:db6c95$pfu$1_at_nospam_polsl.gliwice.pl...
TEST1:
rjmp TEST1
to na magistrali danych cały czas zmieniają się dane i inne sygnały też nie
są niezmienne...
Może czegoś zapomniałem przy inicjalizacji ?
moze masz watchdoga na stale wlaczonego ?
zobacz FUSE od watchdoga
--
Andrzej
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 20:51:19 +0200
Użytkownik "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl> napisał w wiadomości news:db6b1l$p4s$1_at_nospam_polsl.gliwice.pl...
a w ogole inicjalizujesz wskaznik stosu ?
nie, ale zaraz po RESET: dopisałem
ldi r16,0x00
out SPH,r16
ldi r16,0x00
out SPL,r16
Przyczyna dziwnego zachowania sie LEDow raczej nie lezy w tym
ale stos ustawia sie na koniec RAMu
np 0x10FF koniec wewnetrznego RAM'u dla Atmega128
Przyznam, ze robilem cos bardzo podobnego i mi dzialalo bez problemu
Na pierwszy rzut oka nie widze co moze byc nie tak
Polaczenie sprawdzone ? Moze jakies wejscie ktorejs bramki wisi w powietrzu ?
Bramki i 74138 w wersji CMOS ? znaczy HC lub HCT ?
--
Andrzej
From: "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 20:56:10 +0200
Przyznam, ze robilem cos bardzo podobnego i mi dzialalo bez problemu
Na pierwszy rzut oka nie widze co moze byc nie tak
Polaczenie sprawdzone ? Moze jakies wejscie ktorejs bramki wisi w
powietrzu ?
no chyba ze gdzieś się machnęłem.... szkoda że nie mam żadnego
analizatora...
najbardziej by mi odpowiadała praca z zegarem krok po kroku, ale raczej go
nie zatrzymam palcem ;-)
Bramki i 74138 w wersji CMOS ? znaczy HC lub HCT ?
wymieszane, to znaczy 74LS30, 74HC138, 74LS00, 74HCT573.. takie dostałem
ale wszystko leci z +5V, tak więc nie powinno to stanowić problemu.
Marcin
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 21:00:58 +0200
Użytkownik "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl> napisał w wiadomości news:db6cgc$pgb$1_at_nospam_polsl.gliwice.pl...
...
wymieszane, to znaczy 74LS30, 74HC138, 74LS00, 74HCT573.. takie dostałem
ale wszystko leci z +5V, tak więc nie powinno to stanowić problemu.
...
sprobuj uproscic uklad, pomin dekoder adresowy
zostaw tylko zatrzask i negacje miedzy ~WR a wejsciem LE zatrzasku
w takim przypadku powinnien sie ztrzasnac stan przy zapisie dowolnej komorki RAMu
a adresie powyzej 0x10FF
--
Andrzej
From: "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 21:35:21 +0200
sprobuj uproscic uklad, pomin dekoder adresowy
zostaw tylko zatrzask i negacje miedzy ~WR a wejsciem LE zatrzasku
w takim przypadku powinnien sie ztrzasnac stan przy zapisie dowolnej
komorki RAMu
a adresie powyzej 0x10FF
już się wnerwiłem i podłączyłem LE do +5V, a port A potraktowałem jako
zwykły port i wyświetlam na nim zdefiniowane oktety.
No i to działa.
Teraz chyba zaczne testować piny read, write oraz adresowe.....
Marcin
From: "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 22:33:49 +0200
a z innej beczki, nie mogę np testować portu G tak jakbym był w
compatibility mode 103.
Tyle ze sam kompilator wywala mi błędy przy próbie wpisania czegoś do DDRG
!?
Jest na to jakiś myk ?
Marcin
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 22:42:53 +0200
Użytkownik "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl> napisał w wiadomości news:db6i7g$rav$1_at_nospam_polsl.gliwice.pl...
a z innej beczki, nie mogę np testować portu G tak jakbym był w
compatibility mode 103.
Tyle ze sam kompilator wywala mi błędy przy próbie wpisania czegoś do DDRG
!?
Jest na to jakiś myk ?
jaki blad ?
a masz plik naglowkowy z definicjami rejestrow dla ATMEGA 128 ?
czy dla 103 ?
--
Andrzej
From: "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 23:18:48 +0200
jaki blad ?
a masz plik naglowkowy z definicjami rejestrow dla ATMEGA 128 ?
czy dla 103 ?
.include "m128def.inc"
Tools\AvrAssembler\AppNotes\m128def.inc'
C:\ethernut\test_led\test_led.asm(15) : error : Illegal argument type or
count
C:\ethernut\test_led\test_led.asm(22) : error : Illegal argument type or
count
a o te 2 linijki się rozchodzi..
out DDRG,r16
out PORTG,r20
coś dziwne to wogóle mam, ustawiłem tryb zewnętrznej pamięci, i na wyjsciach
/WR oraz /RD mam cały czas stan niski.
wg dokumentacji powinien być wysoki stan na tych wyjsciach o ile nic nie
wysyłam na magistrale... niestety jest cały czas stan niski...
aplikacja robi tyle:
.nolist
.include "m128def.inc"
.list
.org $0
jmp RESET
.org $0046
RESET:
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,0b10000000
sts MCUCR,r16
ldi r16,0b00001100
sts XMCRA,r16
ldi r16,0b10000000
sts XMCRB,r16
ldi r27,0xff
ldi r26,0xff
TEST:
rjmp TEST
skoro nic nie wysyłam to /WR powinien milczeć jak zaklęty w stanie
wysokim..... a jest chyba w powietrzu, bo 1k rezystor do +5V zaświeca
LED'a...
Marcin
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: ethernut i external memory
Date: Fri, 15 Jul 2005 00:05:00 +0200
Użytkownik "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl> napisał w wiadomości news:db6krr$s54$1_at_nospam_polsl.gliwice.pl...
jaki blad ?
a masz plik naglowkowy z definicjami rejestrow dla ATMEGA 128 ?
czy dla 103 ?
.include "m128def.inc"
Tools\AvrAssembler\AppNotes\m128def.inc'
C:\ethernut\test_led\test_led.asm(15) : error : Illegal argument type or
count
C:\ethernut\test_led\test_led.asm(22) : error : Illegal argument type or
count
a o te 2 linijki się rozchodzi..
out DDRG,r16
out PORTG,r20
...
te rejstry juz nie sa w przestrzeni IO
sprobuj tak:
ldi 16, 0xFF
sts PORTG, r16
--
Andrzej
From: Zbych <abuse_at_nospam_onet.pl>
Subject: Re: ethernut i external memory
Date: Thu, 14 Jul 2005 20:33:38 +0200
Marcin Kuczera wrote:
procedura wysłania czegoś na adres 0xFFF8 jest u mnie taka:
..org $0
jmp RESET
..org $0046
RESET:
[ciach]
TEST:
[ciach]
rcall TEST
^^^^^^^^^^^^^^^^^^^
A gdzie ustawiasz stos ? Po drugie w nieskończonej pętli odkładasz adres
powrotu na ten niezainicjalizowany stos. Zamień rcall na rjmp.
Ma ktoś jakieś wskazówki ?
From: nbs <nbs_r_at_nospam_gazeta.pl>
Subject: Re: ethernut i external memory
Date: Sat, 16 Jul 2005 01:14:01 +0900
Marcin Kuczera wrote:
hej,
mam problem z inicjalizacją zewnętrznej pamięci, a własciwie urządzenia I/O
które jest podłączone do ethernuta (atmel mega128).
Ethernut ma gotowy interfejs Address/Data i dostaje A0-A15, D0-D7, /WR, /RD
i własciwie tyle mnie interesuje w chwili obecnej.
Z grubsza wygląda to jak na schemacie - link poniżej (sorry za jakość).
http://services.leon.com.pl/~marcin/enut.tif
Zbramkuj (na samym koncu) wyjscie dekodera z /WR (LE = /Y0 NOR /WR) zeby
wyciac glitche. Nie wiadomo co z niego wylazi.
\R.
From: "Marcin Kuczera" <marcin-n0spam_at_nospam_poczta.rybnik.pl>
Subject: Re: ethernut i external memory
Date: Fri, 15 Jul 2005 18:39:53 +0200
zdaje się, że rozwiązałem problem
miałem:
ldi r16,0b10000000
sts MCUCR,r16
poprawiłem na:
ldi r16,0b10000000
out MCUCR,r16
i działa...
Marcin
From: J.F. <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: ethernut i external memory
Date: Fri, 15 Jul 2005 21:23:02 +0200
On Fri, 15 Jul 2005 18:39:53 +0200, Marcin Kuczera wrote:
zdaje się, że rozwiązałem problem
miałem:
ldi r16,0b10000000
sts MCUCR,r16
poprawiłem na:
ldi r16,0b10000000
out MCUCR,r16
i działa...
Bo o ile pamietam to w obu instrukcjach adresy maja byc inne.
J.