Do znawcow TMS 320C50

Jan 16, 2004 4 Replies

Mam pytanko jak sie do tego zabrac ? Napisac program dodajacy dwie 8 bitowe liczby calkowite ze znakiem zapisne na 8 m³odszych i 8 starszych bitach portu wejsciowego PORT i umieszczac w Suma



Ten PORT to taki skró myślowy. W rzeczywistości C50 nie ma portów. W ogóle procesory DSP nie miewają (a na pewno nie miewały jeszcze niedawno) takich zbędnych dla obliczeń dodatków. C50 ma specjalne wyjście typu /Strobe adresujące przestrzeń nazwaną przestrzenią I/O. To działa dokładnie tak jak pamięć, tylko strobowanie jest sygnałem /IS. Aby odczytać z portu cokolwiek, użyj instrukcji IN (OUT dla zapisu). To kwestia programowa. Żeby jednak utworzyć port musisz do procesora połączyć bufor 16-bit (np. 2x

245 lub 541) i jego linię strobującą (DIR lub /EN) podłączyć do sygnału będącego funkcją logiczną sygnału /RD i /IS tak, by stany niskie na /RD i /IS wyprowadzały bufor zew stanu HiZ czyli podawały sygnał na magistralę danych. Polecam literaturę, czyli Users Guide do C50 i opisy scalaków TTL.

zalozmy ze to juz jest zrobiony starter kit zrobilem taki sobie program

mmregs .include dsk.h .sect "vectors"

RESET B START INT2 RETE NOP INT3 RETE NOP TINT RETE NOP RINT RETE NOP XINT RETE NOP TRNT RETE NOP TXNT RETE NOP INT4 RETE NOP

.data PORT .set 1000h .bss suma,1 .bss temp,1 .bss temp1,1 .text

*Program glowny

START SETC SXM LDP #0 IN temp,PORT LACC temp,8 SACH temp1,1 LACC temp AND #000FFh ADD #0FF00h ADD temp1 SACL suma RETE

.end

ale brakuje mi jeszcze detekcji znaku moze teraz bedzie latwiej ?

Na pewno w instrukcji: SACH temp1,1 jest coś nie tak - nie możesz zdejmować starszego słowa z akumulatora, bo jest ono puste i nie zawiera interesującego cię starszego bajtu. Akumulator jest w koncu dwusłowowy z zapasem. Shift też nie jest potrzebny. Sekwencja powinna raczej wyglądać tak: LACL temp,8 ; ładowanie z shiftem i czyszczenie starszego słowa Acc SACL temp1 I dalej już raczej w porządku

A co do znaku... Czy znak nie zrobi się sam ?

Coś mnie tknęło. Oczywiście, że: SACH temp1 jest właściwa - interesująca nas zawartość w tej chwili rzeczywiście jest w starzym wordzie. Tylko shift tu jest zbędny. Liczba ta nie ma jednak rozszerzonego na 16-bit znaku. Stą operacje: SACH temp1 LACL temp1 AND ... ADD... Druga miała rozszerzony znak już wcześniej. Po rozszerzeniu znaku można spokojnie dodawać dwie zmienne 16-bit typu signed

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required