ethernut i external memory

Jul 14, 2005 17 Replies

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¶æ).

formatting link



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


U¿ytkownik "Marcin Kuczera" snipped-for-privacy@poczta.rybnik.pl> napisa³ w wiadomo¶ci news:db69p9$old$ snipped-for-privacy@polsl.gliwice.pl...

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 ?

raczej ca³y, wycie³em tylko to: .nolist .include "m128def.inc" .list

wpisalem jmp i to samo

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

[ciach]
[ciach]

^^^^^^^^^^^^^^^^^^^

A gdzie ustawiasz stos ? Po drugie w nieskończonej pętli odkładasz adres powrotu na ten niezainicjalizowany stos. Zamień rcall na rjmp.

^^^^^^^^^^^^^^^^^^

^^^^^^^^^^^^^^^^^

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

U¿ytkownik "Marcin Kuczera" snipped-for-privacy@poczta.rybnik.pl> napisa³ w wiadomo¶ci news:db6b1l$p4s$ snipped-for-privacy@polsl.gliwice.pl...

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 ?

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

U¿ytkownik "Marcin Kuczera" snipped-for-privacy@poczta.rybnik.pl> napisa³ w wiadomo¶ci news:db6c95$pfu$ snipped-for-privacy@polsl.gliwice.pl...

moze masz watchdoga na stale wlaczonego ? zobacz FUSE od watchdoga

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 ;-)

wymieszane, to znaczy 74LS30, 74HC138, 74LS00, 74HCT573.. takie dosta³em ale wszystko leci z +5V, tak wiêc nie powinno to stanowiæ problemu.

Marcin

U¿ytkownik "Marcin Kuczera" snipped-for-privacy@poczta.rybnik.pl> napisa³ w wiadomo¶ci news:db6cgc$pgb$ snipped-for-privacy@polsl.gliwice.pl...

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

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

U¿ytkownik "Marcin Kuczera" snipped-for-privacy@poczta.rybnik.pl> napisa³ w wiadomo¶ci news:db6i7g$rav$ snipped-for-privacy@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

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

U¿ytkownik "Marcin Kuczera" snipped-for-privacy@poczta.rybnik.pl> napisa³ w wiadomo¶ci news:db6krr$s54$ snipped-for-privacy@polsl.gliwice.pl...

te rejstry juz nie sa w przestrzeni IO

sprobuj tak:

ldi 16, 0xFF sts PORTG, r16

Zbramkuj (na samym koncu) wyjscie dekodera z /WR (LE = /Y0 NOR /WR) zeby wyciac glitche. Nie wiadomo co z niego wylazi.

\R.

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

Bo o ile pamietam to w obu instrukcjach adresy maja byc inne.

J.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required