Odczyt równoległy w CF jest dużym atutem, potrzeba uzyskać ponad 200kB/s czyli 1,6Mb/s dla kart szeregowych. SPI będzie do wysyłania danych na wyświetlacz z szybkością 4,6Mb/s co powinno wystarczyć nawet na uzyskanie modulacji jasności koloru o 50%. Sam procesor ma dużą wydajność prądową aby wysłać po SPI taką częstotliwość na większą odległość, jeśli...
gdyby to było takie proste to nie pisałbym o tym na forum, ja potrzebuję czytać pozycje przy pełnej prędkości i to bezbłędnie bez żadnych przekłamań... Maksymalnie schrzaniłeś hardware, teraz to już Cię nic nie uratuje. Do zliczania trzeba było wykorzystać ten większy Timer, a do wykrywania zmiany kierunku przerwanie. Pięknie by to chodziło a procek...
Z tymi sterownikami nie maiłem do czynienia ale początek opisu wskazuje, że służą do obsługi code page - czyli zestawu znaków (np polskie litery) Co do programowania kontrolera przerwań to znalazłem taki papier: http://sirius.cs.put.poznan.pl/~inf94333... Trzeba pamiętać, że dostęp do rejestrów HW jest przez rozkazy assemblera in/out i nie jest...
funkcje w assemblerze nazwac __vector_XX gdzie XX to jedna lub dwie cyfry. numerek ten jest numerem wektora przerwan, przy czym reset ma numer 0 pozatym odpowiedni zestaw parametrow przy owym ISR pozwoli usunac wszelkie opcje dodawane przez kompilator (atrybut 'naked'). do tego mozna sobie wtedy przerwanie napisac jako wstawke asm. 4\/3!!
Nie mam żadnego pomysłu na to aby zmusić kompilator AVR GCC(+AVRstudio) aby procedurę obsługi przerwania całkowicie zrealizować jako procedurę napisaną w assemblerze reszta jest w C... Utwórz sobie plik z rozszerzeniem "S", umieść w nim np. coś takiego i dołącz go do projektu :) #include <avr/io.h> #ifdef __SFR_OFFSET #undef __SFR_OFFSET #endif...
Jesli rozumiem chodzi o przerwanie INT aktywowane oadajacym zboczem a nie poziomem. W INT0 ustawiasz bit IT0 w rejestrze TCON na 1 jesli ma byc od zbocza a 0 jesli od niskiego poziomu. w INT1 bit IT1
Bo jak ma działać? Widać kolega nie do końca rozumie mechanizm przerwań, skoro czeka na przerwanie INT0, a włącza przerwanie przepełnienia Timera0. Adresem przerwania przepełnienia Timera0 jest OVF0addr, a nie INT0addr. Przerwanie od INT0 wyzwalane jest ZEWNĘTRZNIE zboczem lub stanem na fizycznym wejściu INT0 mikrokontrolera, a nie Timerem. Skąd ten...
Działa ;-) Ustaw Breakpoint na linijce (prawy myszy Toggle Breakpoint) [syntax=avrasm]com LED[/syntax] naciśnij F5 (Run) jak zatrzyma się na Breakpoint wykonaj kod przerwania krokowo F11 naciśnij F5 (Run) jak zatrzyma się na Breakpoint wykonaj kod przerwania krokowo F11 itd. Zamiast 15625 ładuj do OCR1A 15624. Wieczorem wrzucę inny sposób migania tym...
1. Do wyznaczenia co ile następuje przepełnienie timera potrzeba znać taktowanie procesora. Dla kwarcu 12MHz timer zwiększany jest o 1 co 1us (= 12/12MHz). 2. Timer to licznik, który zlicza w górę. Wpisując liczbę do rejestrów tego licznika zlicza on od tej wpisanej wartości, czyli szybciej doliczy do maksymalnej wartości (65535) i "przekręci się" co...
tak, musisz kasować ją ręcznie - tak samo jak VICVectAddress. Inaczej nie da się tego zrobić - jedno przerwanie może zostać wywołane przez wiele źródeł (przepełnienie, porównanie, złapanie nowej wartości, ...), więc nie ma innego uniwersalnego sposoby niż ręczne kasowanie odpowiednich flag Dodam może, że przy debuggowaniu wewnątrz przerwania, czasem...
Witam, ... Czy to dzielenie będzie wykonane jako 1 operacja, czy zostanie rozbite na ileś tam poleceń asm. I czy przerwanie nie nastąpi w trakcie wykonywania się tej funkcji i czy przez to nie mogą pojawić się błedy? W AVR na wszelki wypadek wyłaczałem przerwania na czas wykonywania tego typu działań. ... 1) Nie do konca rozumiem pierwsze pytanie, tak...
Szybkie może i są, jednak CC Studio raczej nie pozwala na wykorzystanie możliwości C67XX. Dosyć spory kod tworzy ten kompilator. Dlatego przeważnie programy na TMS'y pisze się w assemblerze, masz wtedy pełną kontrolę nad procesorem. Z racji, iż program jest malutki proponuję napisać go w assemblerze (poleceń jest mało). Nie znalazłem błędu jeżeli chodzi...
Tak ponad rok temu zacząłem się bawić Nucleo, zasięgając rad u kolegi, który próbował jeszcze wcześniej. Ogólnie na STMy masz kilka możliwości pisania / środowisk. Ja standardowo zacząłem od migania ledem z assemblera, ogarnięcie środowiska do tego było przykre (pracuje na Linuxie) jest i było gcc, ale jakieś pliki trzeba było brać skądś tam itd itp....
Bascom nie da sobie z tym rady, C też nie da rady bez wstawki assemblerowej, W wartym 5zl ARM klasy STM32F030F4P6 masz 5 kanałów DMA którymi ogarnąłbyś problem tak po prostu. A z czego Ty chcesz te DMA wyzwalać? W przerwaniu bez wstawki assemblerowej też sobie z tym nie poradzi. Coś nie chce mi działać, wgrałem z kompilowany hex do procka i restartuje...
1. Nie da się lecieć linia-po-linii w assemblerze. 2. Czy przerwanie nie powinno przypadkiem mieć atrybutu informującego kompilator, że jest to przerwanie? void ADC_IRQHandler(void) __attribute__ ((interrupt("IRQ"&... void ADC_IRQHandler(void) { ... } ? 4\/3!!
$katalog_WinAVR$/doc/avr-libc/avr-libc-u... Tworzysz osobny plik w asemblerze (.S, nie .s) zawierający procedurę obsługi przerwania, kompilujesz do pliku .o i linkujesz z pozostałymi plikami. W dołączanym wo WinAVR szablonie Makefile jest przewidziane miejsce na wypisanie źródeł w asemblerze (ASRC = $tu wpisz nazwy plików$). Przykład,...
Mozę powtórzę, bo nie lubię patrzyć jak ktoś traci czas - wszystkie porady sugerujące że problemem jest 8-/16-/32-bitowy dostęp do rejestru DR lub jakieś nieistniejące w tym układzie FIFO są po prostu błędne. Jeśli bez optymalizacji ruszyło, to powód jest dokładnie taki jak w słynnym przypadku timerów - to co kasuje flagę (zapis do DR) jest zbyt blisko...
Chyba to właśnie co znalazłem w źródłach. Deklaracja funkcji przerwania nie może mieć atrybutu Interrupt("FIQ") skoro mamy już wrapper w assemblerze. Tak jak pisałem, spróbuj z __attrybut__((naked)) albo wcale. Jeśli zadeklarujemy to jako FIQ to kompilator dodaje kod odejmujący 4 od adresu powrotu, co my już robimy we wrapperku.
:arrow: dscreator Przede wszystkim koniecznie skomentuj każdą linię i wklejaj za pomocą znaczników Code , ponieważ (jak widzisz) Twój program jest zupełnie nieczytelny (forum usuwa spacje na początku linii). Program powinien zaczynać się zaraz za obszarem wektorów przerwań. Jeśli jakiegoś przerwania nie wykorzystujesz to zamiast mnemonika rjmp wstawiasz...
Port szeregowy działa na całkiem innej zasadzie. Podaje się mu liczbe iluś-bitową (to można skonfigurować) a on przekształci ją w ciąg binarny rozpoczynający się bitem startu a zakończony bitem stopu. Układ sterownika zbudowany jest z rejestru przesuwnego do którego wpisuje się wartość do wysłania a w czasie wysyłania kolejne bity są przesuwane tak...
Witam wszyskich, zaczynam programować uC (ATMega8) i mam pytanie co do assemblera. Jestem w trakcie pisania programu w którym generowana jest jakaś przerwa czasowa i moje pytanie czy instukcja mov trwa 1 cykl i dla czego instrukcja brne trwa 2 cykle? Pozdrawiam Łukasz
Za bardzo nie mogę zrozumieć dlaczego po stronie odbiornika wszystkie dane mają postać zanegowaną w stosunku do nadajnika. Nie musi tak być - po prostu większość (wszystkie?) dostępne demodulatory podczerwieni w przypadku braku sygnału mają na wyjściu stan wysoki. Pojawienie się paczki impulsów generuje stan niski na wyjściu takiego odbiornika. Tu...
Napisalem na wszelki wypadek z akumulatorem bo nie pamietam czy port 2 da sie bezposrednio sprawdzac bitowo. Musialbym zajrzec do ksiazki. Dodano po 4 Ja kompresuje program gdy zalezy mi na upchnieciu sporego programu do malej pamieci lub gdy zalezy mi na czasie procesora - przy tak prostym programie to mija sie z celem bo: 1 pamieci jak na taki programik...
Przerwania, w odróżnieniu od starych ARMów są w całości zarządzane przez ARM'a czyli CortexMx. W dokumentacji ARM znajdziesz opisy rejestrów i jako to działa. Każdy producent, taki jak ST zmienia znaczenie linii przerwań, definiując je po swojemu za wyjątkiem kilku pierwszych zarezerwowanych przez ARM. Ponadto, Cortex'y mają możliwość nadania przerwaniom...
Niedawno zbudowałem timerek w którym stan przycisków sprawdzam tak : callsprawdz ;sprawdzaj stan przyciskow -------------- ------------- ------------- sprawdzcallspr_s1 callspr_s2 return ;---------------------- spr_s1btfscPORTB,4 ; wcisniety ? return ; nie btfscPORTB,4 ; puszczony goto$-1 ; nie -------------- ; tak, puszczony ------------- -------------...
Do kolegów co podpowiadają mi użycie makr, tak jak pisałem wczesniej, uzywam Codevision a w nim nie ma czegoś takiego - chyba. Jak już wcześniej napisałem, moim zdaniem przy takich procedurach obsługi przerwań program powinien się wyrobić bez konieczności zagnieżdżania przerwań, a przyczyna złego zliczania może leżeć gdzie indziej. Możesz oczywiście...
Wszystko juz chodzi. Przyczyną problemów były błędy jakie zawiera sam BASCOM, które zgłoszę do autora. Cały program robi sie po prostu za skomplikowany dla BASCOM i tylko w Assemblerze będzie pełna kontrolą nad tym co sie dzieje w programie i nie zostaje mi nic innego jak po wielu latach przerwy przypomnieć sobie ASM na AVR-y. Już kilka wstawek zrobilem...
Witam siedzę od jakiegoś czasu i nie mogę za chiny uruchomić przerwań. Program piszę w assemblerze. chcę uruchomić przerwanie INT0 i INT1 na porcie E Oczywiście odpowiednie bity kierunkowe tego portu są ustawione na IN (czyli wyzerowane) Chcę wywołać przerwanie INT0 gdy na bicie1 portu E pojawi się zbocze opadające. Podobnie z drugim przerwaniem: Chcę...
tyle ze uzycie tej flagi (czy jakiegokolwiek innego sposobu) to nie kwestia jezyka C, tylko kazdego jaki istnieje, z assemblerem wlacznie. inna sprawa jest to, ze koniecznosc rownoczesnego wspoldzielenia zmiennych przez przerwanie i funkcje zachodzi raczej nieczesto, a jak juz zajdzie, to i tak mozna jej czesto uniknac na conajmniej kilka sposobow....
hehe nie męcz sie dalej, jest błąd w AVRstudio. Ja miałem ten sam problem. Program w symulatorze nie działał ale gdy go wgrałem do qP to działał jak należy. W AVRstudio jest jeszcze jeden błąd a mianowicie nie działa tryb wieloprocesorowy USART. Pozdrawiam
Witam, wlacze od jakiejs chwili z assemblerem dla 51, stanalem na odczytaniu stanu licznika T1, sytuacja jest taka ze T1 pracuje w trybie counter liczac impulsy z zewnatrz w tym czasie T0 pracuje w trybie timer, w momencie gdy T0 wygeneruje 15 przerwan przy kwarcu 12Mhz tyle mniej wiecej przypada na sekunde ma nastapic odczyt licznika T1. O tyle co...
Przerwanie nie modyfikuje SP (z punktu widzenia przerwanego kodu). Wartość SP po powrocie z przerwania jest taka sama, jak przed wywołaniem. I tu właśnie problem, bo też tak myślałem, dlatego pisałem wcześniej że błędu w logice nie ma. Mój kod nie jest błędem. Dodałem brakujące CLI i kod od godziny chodzi bez zarzutów. Spójrz na to: zapamiętaj SREG...
W PONOŻSZYM PROGRAMIE JEST JAKIŚ BŁĄD, JEST PROSTY PROGRAMIK GENERUJĄCY PRZERWANIE OD T0 I ZMIENIAJĄCY CO 0.5s STAN P1.7 CHOĆ PROSTY TO JEDNAK NIE DZIAŁA. KOMPILOWANY JEST POD KOMPILATOREM FORTECH ASSEMBLER RODZINY PROCESORÓW 8051 NA 2051. NA PORT TEN WŁĄCZYŁEM DIODĘ JEDNAK NIC, TO SAMO ZADANIE POD BASSCOM NIE PISANE W ASSEMBLERZE DZIAŁA WIĘC UKŁAD...
Postanowiłem coś napisać by sprowokować wypowiedzi innych :wink: Przyznaję się: w języku C pisałem dawno temu pod DOS-em (Turbo C 2.0) a UART programowałem tylko na 2313. Dobrze, że zamieściłeś cały program, ponieważ posłużył mi za pierwszą lekcję programowania w C na AVR-y. Atmega8 ma bardziej skomplikowany USART niż 2313 ale po przeczytaniu fragmentu...
Gdzieś wyczytałem, nie wiem gdzie, że w Cortex'ach funkcje obsługi przerwań mogą być użyte jako zwykłe funkcje. Odwrotnie - funkcje przerwań mogą być zwykłymi funkcjami, bez żadnych dziwactw, bez atrybutów, bez assemblera. Ale jak jest przerwanie to skąd procesor "wie" że wychodząc z przerwania ma nie odtwarzać LR bezpośrednio tylko to ma inicjować...
Witam. Czy mógłby mi ktoś pomóc wykonać program w assemblerze, który wykonuje trzy obroty w prawo i dwa w lewo za pomocą metody przerwania. Potrzebny mi kod abym mógł to wrzucić w symulator (EdSim) i pokazać doktorowi na zaliczenie. ;/
https://obrazki.elektroda.pl/2568884200_... Witajcie moi drodzy Zapraszam na kolejną część mojego tutoriala PIC18F2550 i kompilatora SDCC . W tej części zademonstruję jak używać wyświetlacza 7-segmentowego z PIC18F2550 . Kod obsługi wyświetlacza będzie oczywiście napisany w oparciu o przerwania i timery . Cały proces powstawania układu...
Dzięki za pomoc, poradziłem sobie :D W linku co podałeś znalazłem: LDIR30, lo8(signal) LDIR31, hi8(signal) i to załatwiło sprawę, resztę dopisałem sam. Druga sprawa, że właśnie problemem było zajęcie wcześniej dwóch rejestrów indeksowych, teraz zająłem tylko jeden (Z) i 3 inne i jakoś to śmiga. W czasie wysyłania próbek na port, mikroprocesor nie będzie...
Witam. wcześniej w mikrokontrolerach avr korzystałem z assemblera (co pomogło mi dobrze poznać ukłądy "od środka"). Jednak nadszedł czas aby skorzystać z dobrodziejstw języka C (w tym języku pisałem wcześniej programy komputerowe). schody zaczęły się już na początku. po napisaniu kolejnych fragmentów kodu uruchamiałem symulator żeby zobaczyć czy poprawnie...
Witam, Programuje w CooCoox, toolchain arm-none-eabi. Na STM32F4discovery udało mi się odpalić freeRTOSa (z ripo CooCox) oraz odzielnie projekt urządzenia USB klasy HID. Oba moduły oddzielnie działają dobrze. W obydwu tematach jestem początkujący. Problem pojawia się,kiedy chce połączyć obydwie części. Nie działa;/ Prawdopodobnie winne są ramy czasy...
Może odpal jakiś Timer żeby generował przerwanie bardzo często. Powiedzmy co 10us. I w przerwaniu sprawdzaj czy pin ma stan 0 czy 1. Jak 1 to inkrementujesz jakaś zmienną. Jak zmieni się na 0 to zwracasz wynik i zerujesz tą zmienną. Oczywiście w tym samym przerwaniu sprawdzaj tak samo drugi pin. Niestety wymaga to kodu obsługi przerwania w assemblerze...
W jaki sposób obsłużyć przerwanie na tym mikrokontrolerze?Np. program w assemblerze w którym dioda miga co 1 sekunde
Teoretycznie jest możliwe na etapie kompilacji stwierdzenie które przerwania będą odblokowane, ale tylko teoretycznie, kompilator musiał by przeprowadzić symulację działania programu, można by w zasadzie zrezygnować z wstawiania takiego „bezpiecznika” (instrukcji RETI) dla każdego możliwego poza jawnie wskazanymi, idę o zakład że w wielu...
Jak już zostało wspomniane, brak instrukcji atomowo ustawiającej lub kasującej bity w pamięci. W związku z tym może warto napisać dodatkowy moduł (kilka linijek na krzyż w assemblerze), który blokował by przerwania na dosłownie cztery cykle, pomiędzy którymi następował by odczyt, modyfikacja i zapis. Oczywiście kod nie będzie tak optymalny jak być powinien...
Tak jak pisałem - Twój startup załatwia manipulacje stosem, więc w takiej sytuacji atrybut dla funkcji jest zbędny, a wręcz błędny. Jeśli masz debugger, to przecież możesz sobie sprawdzić czy w ogóle wchodzi do przerwania oraz czy wchodzi do tego assemblerowego wrappera który jest pod etykietą "VIC". Profilaktycznie włącz sobie też ręcznie przerwania...
kurcze, trudne zadanie. Mógłbyś podrzucić cały katalog projektu, tzn. bez rzeczy które chciałbyś zachować tylko dla Siebie. Chodzi mi o tą często zwaną 'rozbiegówkę'( nawiasem... świetna polska nazwa) w assemblerze i o 'startup' w 'C'. sam'a tylko na płaskich przerwaniach znam( bez priorytetów przerwań). Czy procesor wchodzi w to przerwanie? tu inicjalizacja...
Po długich bojach udało się znaleźć winą były jakieś śmieci w rejestrze UCSR1A które sprawiły że jednocześnie oprócz int0 pd2 pracowała jako xck1 co chyba uniemożliwiało wywoływanie przerwania int0. Pisze bo może się komuś to przyda. Warto też zwrócić uwagę na fusebit M161C przy takich problemach
Prowadzącemu być może chodziło o sterownaie wyświetlaczy w przerwaniach, Ty zrobiłeś to na pętlach opóżniających. Akurat te dwa klawisze możesz sprawdzać właśnie w tych przerwaniach obsługujących wyświetlacz albo całkiem śmiało po za przerwaniami. Bez sensu jest używać aż dwóch przerwań. Jeśli już, to podepnij klawisze pod jedno wejscie INT. DELAY:...
Wykorzystując chwilową przerwę w dyskusji na temat hardwaru pozwolę sobie zaprezentować prosty programik użytkowy (?) ZEGAR. Napisany w assemblerze zajmuje RAM od adresu 5000hex do 5878hex (2128 bajtów). Adres startowy to G:5000hex Program korzysta z pętli czasowej 1 sekundy i można skorygować szybkość chodu zegara dopasowując do częstotliwości pracy...
Na podstawie kodu, którego mamy się domyślić mamy się domyślić co zaobserwowałeś i Ci pomóc. Bo dalej nie wiemy, co zaobserwowałeś gdy w kodzie są 2 procedury obsługi Dalej nie wiemy, czy to procesor czy symulator, jaki procesor, nie znamy efektu pracy kompilatora - listingu assemblerowego, dalej nie wiemy, czy OpenTimer4 kompiluje się a nie działa,...
assembler darmowy assembler stm32 przerwa przerwa assembler opóźnienie
antena kierunkowa telewizji suszarka suszyć geometria zawiesi
bateria hilti zmywarka whirpool mruga start
Memoscan U581 UIF Firmware File Download & Safe Flashing Guide Peugeot 407 – lokalizacja wtyczki do haka, instalacja, kodowanie BSI, modele 2004-2011