Zapisywać przez DMA to samo, co zapisujesz przy użyciu przerwań, tylko nie masz żadnych przerwań. Dwa kanały DMa programujesz na transmisję jednego słowa w kółko - jeden ustawia przez BSRR jedynkę, drugi przez BRR zero na wyjściu. Masz to opisane gdzieś w EP z 2016 roku.
W Keilu symulator działa bez sensu INT0 ma niższy priorytet od T1 dopiero SETB PX0 przywraca właściwą kolejność????? Upewnij się czy napewno wchodzisz w procedurze LEDY do miejsca gdzie włączasz przewania INT0 i T0 ,jest to jedyne miejsce gdzie się to wykonuje.
Moje pytanie dla upewnienia się. Rozumiem, że ustawiając priorytety przerwań od peryferiów należy stosować wartości z przedziału 5-15, mniejsze wartości zarezerwowane są dla systemu? Z grubsza tak. Dla przerwań możesz używać dowolnych priorytetów, ale te powyżej skonfigurowanej granicy NIE mogą używać funkcji FreeRTOSa (czyli semaforów, kolejek, ...)...
Dokładnie. Tak, szkoda, ze w elektronice nie ma demokracji ;-) A w '51 więcej niż 2 priorytetów przerwań. Albert
Poczytaj w dokumentacji, sprawa jest tam poruszona. SysTick i PendSV mają być na najniższym, a inne przerwania - które używają funkcji RTOSa - nie mogą mieć wyższego priorytetu (niższego numerka) niż configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIO... lub configMAX_SYSCALL_INTERRUPT_PRIORITY. Obstawiam, że jedna z tych wartości nie jest używana i w ogóle jest...
Proszę o informacje, gdzie w nocie katalogowej można znaleźć informacje na temat priorytetów wykonywania przerwań, jeżeli wystąpią w tym samym czasie. Nie można, ale ten co ma niższy adres w tablicy wektorów wykona się pierwszy jak przyjdą w tym samym czasie. Co najwyżej możesz właczyć przerwania na początku obsługi aby umożliwić obsługę kolejnych...
Ale Ty tak na poważnie pytasz? P.S. Numeru przerwania nie polecam stosować jako indeksu dla rejestrów ISER/ICER... 4\/3!!
To systemowe przerwanie bedzie mialo mniejszy priorytet tylko w przypadku > 0010_1000 i nie bedzie podzialu na pre i sub priorytety ? Dokładnie tak. The combination of the group priority and the sub-priority is referred to generally as the priority. Grupowanie działa tylko na zewnętrznych przerwaniach i powoduje, że przerwania z tej samej grupy nie...
Spróbuj zainstalować DOS (6.22, albo FreeDOS) na jakimś sofcie wirtualizacyjnym (np. darmowy VirtualBox, qemu, bochs), i tam uruchom program. Co prawda nie mam praktycznej wiedzy w zakresie programowania 8259, ale podejrzewam, że NTVDM nie jest zaprojektowany, aby w 100% emulować poprawnie całe środowisko, z kolei wymienione przeze mnie wirtualizery...
SSPIF ustawia się niezależnie od GIE, natomiast przerwanie wystąpi wówczas gdy ustawiony jest SSPIE, w rejestrze PIE1 oraz PEIE w rejestrze INTCON. Po zakonczeniu obsługi przerwania timera, ustawiona flaga SSPIF wywoła obsługę przerwania od MSSP
Na przykładzie Timer0: Ponieważ używasz priorytetów, to musisz zadbać o to aby sprawdzić czy używane przez Ciebie peryferia, mają możliwość przypisania przerwania do LOW lub HIGH priorytetu. W przypadku Timer0 odpowiada za to INTCON2.TMR0IP. Ponieważ ustawiasz: http://obrazki.elektroda.pl/2728693600_1... ... a obsługę tego przerwania...
Twój kod jest zły, bo czwórki bitów dla poszczególnych przerwań są w tych tablicach IP[] upakowane po 8. Funkcje z CMSISa do przerwań (do NVIC) są generalnie funkcjami inline, więc efekt finalny będziesz miał taki sam - czy użyjesz swoich dostępów do rejestrów, czy tych funkcji. Ja bym proponował zostać przy tych funkcjach. Jak koniecznie chcesz poczytać,...
Na jakiej podstawie twierdzisz, że problemem są priorytety przerwań? Przerwania występują na tyle sporadycznie, że nie ma tutaj miejsca na problemy. Jeśli wysyłany jest znak '2', to porównanie (i==2) jest błędne TCCR2 = 1<<CS00 | 1<<CS02 | 0<<CS01 ; proponuję zapisać tak: TCCR2 = (1<<CS00) | (1<<CS02) |...
Ten układ ma dosyć elastyczny system ustalania priorytetów obsługi przerwań. Temat jest zbyt obszerny, żeby go tu opisać. Na jutro zeskanuję Ci fragment literatury na ten temat, bo dziś jest już 2-ga w nocy i idę spać. Poniżej 6 plików w jpg Pozdrowienia.
1. z tego co piszesz to przerwanie o najwyższym piriorytecie będzie występowało z częstotliwością 4kHz. Zakładając że będziesz miał zegar 8MHz to na obsługe przerwania (zapisanie 8 bajtów) i obsługe innych przerwań będziesz miał: 8MHz/4kHz = 2000 cykli zegarowych co w przypadku procesorów typu RISC daje jakieś 1500 instrukcji. A to jest całkiem sporo....
Czyli rozumiem, że jak jednocześnie nastąpią przerwania INT0 i INT1 to du*a ? Przeczytaj jeszcze raz to: W tym przypadku nic się nie stanie - każde przerwanie ma swoją flagę, więc się kolejkują . Chyba, że dojdzie do dwóch przerwań tego samego typu , wtedy informacja się gubi. Tu jest tabelka wektorów przerwań na przykładzie ATMEGA8: http://obrazki.elektroda.pl/6297702500_1...
Dokładniej to nie AVRy, tylko ATMega ma jednopoziomowy sytem przerwań, XMEGA (która też należy do AVR) ma 3-poziomowy system przerwań. ATMegi mają też sztywnie przydzielone priorytety przerwań (o ile jest w ogóle sens mówić tu o priorytetach), XMEGA mają kilka schematów priorytetowania. Tak jak piszą koledzy powyżej można zrobić obsługe nieblokującą...
Ustawia sie to w HWconfig po kliknięciu na procesor otwierają sie zakładki do ustawiania "rożnych rzeczy". W zakładce Cyclic Interrupts masz ustawianie przerwań czasowych. Sprawdź tylko czy twój procesor na pewno obsługuje dwa przerwania bo wg. mnie 314 obsługuje tylko OB35.
To nic Ci nie da, nawet jeśli dałoby się zrobić. Problem nie leży w priorytecie przerwań ale w obsłudze przerwań. Musisz ją tak napisać aby nie były zbyt długie, albo zastosować obsługę nie blokującą.
A jakie są priorytety przerwań? Do odmierzania czasu musi być przerwanie o wyższym priorytecie, inaczej zostanie zaburzone przez inne przerwanie.
Sama fraza "priorytet przerwań od przycisków" sugeruje błąd koncepcyjny w projekcie, bo przycisków nie obsługuje się an przerwaniach. Z kolei priorytety DMA nie mają nic wspólnego z priorytetami przerwań, więc całość brzmi mocno podejrzanie. Moim zdaniem błąd w koncepcji całości powodujący kolejne błędy w implementacji programowej. Jeżeli używasz DMA...
Przepraszam bardzo, ale czy tutaj zostały jakieś posty usunięte, czy autor ma lekkie objawy schizofrenii (bez obrazy)?
No ale z tego co mi wiadomo przerwanie o priorytecie X nie może być przerwane przez inne / to samo o priorytecie X - do "przerwania przerwania przerwaniem" <: priorytet musi być większy. 4\/3!!
Mi to wygląda na jakiś błąd w koncepcji projektu oprogramowania. Zawsze powtarzam, żeby nie ruszać programowo priorytetów przerwań, bo na ogół kończy się to katastrofą. To jak ruszasz priorytety przerwan ? Sprzetowo ?? (at)arcyimperator Jak masz ustawione PriorityGrouping ?
I tu jest problem. Łamiesz tym podstawową zasadę w ustawianiu priorytetów przerwań w FreeRTOS'ie. Ustaw priorytet na: configLIBRARY_KERNEL_INTERRUPT_PRIORITY. Zdefiniowane jest toto w FreeRTOSConfig.h. W komentarzu masz opisane na jaką najniższą wartość możesz ustawić przerwanie korzystające z funkcji FreeRTOS'a.
W AMEGA 2560 można to zrobić tylko programowo (podczas wchodzenia w przerwanie). Generalnie nie ma to sensu bo narzut na programowe ustalanie priorytetu będzie większy niż odpowiednio napisana funkcja obsługi enkodera na INT0. Tzn. lepiej szybko obsłużyć INT0 niż się bawić w ustawianie priorytetów przerwań.
Wyzwalasz timerem sprzętowo, odbierasz wyniki do bufora przez DMA, po odebraniu bloku o długości, którą sam wymyślisz - przetwarzasz wyniki. Dane możesz pewnie przetwarzać w przerwaniu DMA. Jeśli masz inne, ważniejsze przerwania - obniż priorytet przerwania DMA.
No bo wciąż ustawiasz rejestr IMR "odwrotnie" - zajrzyj do manuala co oznacza 0, a co oznacza 1. I w ramach testów zrezygnuj z ustawiania jakichkolwiek priorytetów przerwań czy czegokolwiek z nimi związanego. 4\/3!!
Spora szansa, że problemem są priorytety przerwań. We FreeRTOS (w sumie w większości RTOSów) przerwanie które używa funkcji systemu musi mieć priorytet niższy lub równy wartości którą sobie skonfigurowałeś jako progowa w pliku FreeRTOSConfig.h. Ponieważ zwykle w tym pliku jest to skonfigurowane tak głupio, że nie wiadomo nigdy o co chodzi, na szybko...
W projekcie założyłem sobie dwa przerwania z dwóch timerów. Jedno (nazwijmy je A) wywoływane często i krytyczne czasowo (przerwanie musi być obsłużone jak najszybciej po jego pojawieniu się), trwające tylko kilkanaście cykli. Drugie (B) mniej krytyczne (właściwie w ogóle nie krytyczne), wołane rzadziej, trwające kilkaset cykli. Główna pętla programu...
Tu na pewno jest błąd: if(released & btn == btn) to to samo co: (poprawiłem) if(released & 1) Jeśli nie masz nieblokującej obsługi LCD w przerwaniu timera, to skoro już bardzo chcesz pisać coś na LCD w przerwaniu - obniż priorytet tego przerwania.
W ciągu ostatnich dwóch lat w EP pojawił się cykl artykułów poświęconych programowaniu STM32 bez SPL z wieloma przykładami. A i ważna uwaga co do tekstu: w aktualnych, nowych wersjach plików nagłówkowych dla F4 już nie ma BSRRL i BSRRH, a jest BSRR (co powoduje, że programy napisane pół roku temu już się nie kompilują z nowymi plikami nagłówkowymi)....
Witam Czy ja dobrze widze, ze mikrokontrolery serii ATmega nie maja ustawianego priorytetu przerwan ? Z manuala wynika, ze po wywolaniu przerwania system przerwan zostaje wylaczony. I zostaje wlaczony dopiero po wykonaniu podprogramu obslugi tego przerwania. Tak to wyglada i w manualu i w Bascomie. Oczywiscie mozna w podprogramie obslugi przerwania...
Witam, Co do zasady w przerwaniach kod powinien być możliwie jak najmniejszy oraz jak najprostszy. Powoduje to szybkom obsługę przerwań. Nie ma co kombinować i się zbytnio zastanawiać. Wymianę danych między przerwaniami można wykonać jednak jest to ryzykowne z dwóch powodów: 1) Priorytety przerwań 2) Błąd w projektowaniu programu np. Jeżeli MB20 jest...
Witam A jak masz ustawione priorytety przerwań? Przypadkiem przerwanie od DMA nie wywłaszcza Ci przerwania od DCMI? Proponował bym sprawdzić Status Register w przerwaniu DMA, co jest źródłem przerwania, sam ostatnio miałem taki przypadek, że mimo tego, że nie włączałem przerwania od Start Conversion[SC] a jedynie End Conversion[EC] w ADC, kiedy ADC...
Czyli żeby ustalić hierarchię, musisz na początku podprogramu przerwania o niższej hierarchi zezwolić na przerwania o wyższej hierarchi. Softwareowo, ale da się. Domyślnie nie ma żadnej hierarchi, jak nade mną napisane ;) Więc żeby ją utworzyć musisz się trochę pobawić
12 cykli - tyle zajmuje przejście do obsługi przerwania 6 cykli - tyle zajmuje przejście z przerwania do przerwania o wyższym priorytecie 6 cykli - tyle zajmuje przejście do przerwania o niższy priorytecie bezpośrednio po zakończeniu przerwania o wyższym priorytecie 12 cykli - tyle zajmuje wyjście z przerwania. Ta zasada tyczy się wszystkich przerwań
No nie tyle "sztywne", co ich po prostu nie ma ;) - kto pierwszy ten lepszy Można napisać soft przydzielający priorytety, ale jest to dość skoplikowane i nie zawsze się opłaca (w sensie czasu potrzebnego do określenia źródła przerwania, określenia priorytetu, adresu procedury itp. - robi się z tego prawdziwy OS)
Przecież twój kod się nawet nie powinien kompilować, więc jest faktycznie zły :) Jak sobie wyobrażasz zagnieżdżenie ISR? Mieszasz nowe makra (ISR) ze starymi (SIGNAL). Poza tym ATMega nie ma czegoś takiego jak priorytety przerwań. Przerwanie TIMER1_COMPA_vect nie zostanie przerwane, chyba, że jawnie odblokujesz wszystkie przerwania co zapewne doprowadzi...
Może przerwanie od INT0 albo INT1 :?:
cli i sei zmienią globalną flagę przerwań, blokując lub odblokowując wszystkie. Na to nakładają się priorytety przerwań kontrolera przewań i na końcu masz przerwania z danego modułu. Kolejne możesz zablokować tak jak masz, wpisując blokadę do PINCTRL lub w rejestrze kontrolnym przerwań dla danego peryferium (w tym przypadku PORT). Normalnie RETI na...
1. Przycisków nie obsługuje się na przerwaniach portów. 2. Nie potrzebujesz do tego trzech przerwań - wystarczy przerwania timera i UART. 3. Nie zmieniaj priorytetów przerwań - jeden poziom zdecydowanie wystarczy. Nie potrzebujesz zagnieżdżania, a próbując je zrobić brniesz w ślepą uliczkę, bo 5. Ogólną zasadą jest, że w procedurze obsługi przerwania...
Wg mnie się da - http://infocenter.arm.com/help/index.jsp...
w LPC23xx źródła przerwań są na stałe przypięte pod konkretne kanały. W LPC21xx sam ustawiałeś przyporządkowanie źródło - kanał VIC. Tak więc tutaj musisz przerwanie od Timer0 obsługiwać przez VICVectAddr4, VICVectPriority4 itd., a ustawienie wartosci 4 (numer kanalu dla Timer0) w VICVectPriorty0 po prostu ustawia priorytet przerwania WDT (to jest na...
To już cały kod :) Aktualna pełna wersja wygląda tak: /***************************************... * * Architecture: Advanced PIC * Processor: 18F47J53 * Compiler: MPLAB XC8 (Free mode) * * ****************************************... * * Description: Led Blinking...
Pozwole sobie zacytować polskiego helpa p. Zbigniewa Gibek Instrukcja PRIORITY Przeznaczenie: Ustala priorytety przerwań. Składnia: PRIORITY SET | RESET źródło_przerwania gdzie: źródło_przerwania symboliczna nazwa źródła przerwania, Jesli potrzeba wiecej informacji to zachecam do sciagniecia calego helpa, naprawde przyda sie napewno nie raz.
W trakcie wykonywania tego podprogramu zostało zgłoszone przerwanie zewnętrzne na nóżce int1 atmega328p. Czy atmega328p przerwie wykonywanie podprogramu nóżki int0 Zależy jak zadeklarujesz przerwanie, czy ISR bez atrybutu lub z atrybutem ISR_BLOCK albo jako SIGNAL czy ISR z atrybutem ISR_NOBLOCK lub jako INTERRUPT. Jeśli przerwanie w przerwaniu jest...
W ATmega 16 nie ma możliwości zmiany priorytegów przerwań. Ale jest lekarstwo na Twoją bolączkę, możesz poprostu włączyć przerwania zaraz na początku obsługi przerwania od INT0. Przerywanie przerwań wcale nie jest takie niebezpieczne.
Czyli jak na 8253 moge zrealizowac ten zegar czasu rzeczywistego? A jak ma zrealizowac ten dzielnik wiem ze w slowie programujacym mam ustawic tryb 2. A jak wpisac wartosci do liczników? Jaki to jest rozkaz, i jak nazywa sie licznik?
Chciałbym zmierzyć jak długo wykonuje się przerwanie od DMA po zakończeniu transmisji z I2S. Myślałem nad uruchomieniem jakiegoś timera, który będzie zliczał mikrosekundy, ale kiedy wykonuje się jedno przerwanie z najwyższym priorytetem to inne są hamowane. Dobrze kombinujesz! Ale trochę przekombinowujesz :). Nie potrzebujesz żadnych dodatkowych przerwań...
Poza tym to, co chcesz definiować samemu, jest już od dawna zdefiniowane w plikach nagłówkowych mikrokontrolera. Z kolei programowanie SysTick znajdziesz w pliku nagłówkowym rdzenia - wystarczy przepisać treść nibyfunkcji SysTick_Config. Zmianę priorytetu przerwania, która w tej funkcji jest, możesz pominąć. No i zapis: (uint32_t) 0x00000007 to to samo,...
Dzięki - chyba o to właśnie mi chodziło.
Witam. Pytanie dla osób znających się na MSP430: Jak w środowisku IAR zmienić priorytet przerwań? Chciałbym mieć np. przerwanie od portu P1 o wiekszym prioryteci niż przerwanie od TA. Da sie to zrobić ? Czy ktoś mógłby mi podać przykład deklaracji? Znalazłem w jakiejś książce tablice z priorytetami przerwań... ale myślałem że można je dowolnie ustawiać,...
Żeby wywołane zostało przerwanie musisz jeszcze odblokować globalną flagę zezwolenia na przerwanie (sei()) i skonfigurować kontroler przerwań - odblokować przerwanie o najwyższym priorytecie.
Skoro nie masz problemu z timerem, to po co w ogóle o nim pisać i po co testować program który ma też przerwania od timera? Niemniej jednak na początek brawa za to, że NIE używasz słynnego i popularnego badziewia (; Wg mnie (skoro chodzi o pin zerowy), powinieneś konfigurować rejestr AFIO->EXTICR[0], a nie 1. Problemem jest manual niezgrany z plikiem...
A teraz :?: #include <avr/io.h> #include <stdio.h> #include <stdlib.h> #include <math.h> unsigned char buf[20]; double x=23.1256; int main(void) { dtostrf(x,6,2,buf); return 0; } Pośpiech , to zły doradca :( Przepraszam. Piotrek
Witam, Używam FSMC do obsługi wyświetlacza, a timera do generowania przebiegu który steruje serwomechanizmami. Zauważyłem taką przypadłość, że jak coś zmieniam na ekranie to serwa lekko drgają, co zapewne jest spowodowane jakimś opóźnieniem w wysterowaniu wyjścia przez zegar i/lub uruchomieniu przerwania które ładuje następna wartość do rejestru (jeden...
najpierw używałem samych przerwań na najwyższym priorytecie jak ST przykazało, niestety od czasu do czasu zdarzało się że RTOS wyłączał wszystkie przerwania i przy odbiorze ostatniego bajtu zdążył się wygenerować już STOP i sprawdzenie if ((SR2Register & I2C_SR2_MSL) == I2C_SR2_MSL) było nieprawdą, co powodowało brak odczytu ostatniego bajtu. W distortos...
1.Czy w CMSIS jest jakieś makro wywołania, czy trzeba to pisać ręcznie? Ręcznie. O tak - https://github.com/DISTORTEC/distortos/b... 2.Czy to przerwanie się inicjalizuje? Co przez to rozumiesz? 3.Czy trzeba mu ustawiać priorytet (domyślny ma chyba najniższy i o to mi chodzi)...
Z tego co wiem, priorytety przerwań w ESP są stałe. Jeśli mówisz o priorytetach tasków od domofonu i Wi-Fi, to ustawienie priorytetu taska od domofonu ponad priorytet wszystkich innych tasków niczego nie zmienia. No ale masz tam jeszcze AVR, który ponoć analizuje linię domofonu. Jeszcze potrzebujesz do tego jednego rdzenia? Przecież to wszystko da...
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 pierwsze, co to za biblioteka? Co do przerwań - dokładnie dla użytego procesora masz to opisane w nocie. Najlepiej tam sprawdzić. Generalnie jest coś takiego jak priorytet przerwań - przerwanie o wyższym priorytecie jest wykonywane najpierw. Przerwania mogą być "kolejkowane" o ile mają różne flagi przerwań - czyli są to np. różne przerwania z pinu....
No ubaw jest pierwszej klasy... Wrzucisz w końcu tyle kodu, żeby była w nim KOMPLETNA inicjalizacja wszystkiego? Przecież nikt tutaj nie wie, co jest w Twojej funkcji HW_Init_GPIO(), ani w pozostałych (System_Init()?), które mogą coś jednak zmieniać w SPI2 czy istotnych GPIO. A jeśli uważasz, że nic nie zmieniają, to zakomentuj je i potem wywal z tego...
Chwila. Timer bez preskalera, częstotliwość procesora nieznana, załóżmy, że 1 MHz (nieistotne). Timer zgłasza przerwanie co 21 cykli zegara, czyli ATmega zajmuje się na okrągło obsługą przerwań timera, nie mając szans obsłużyć żadnych przerwań o niższym priorytecie (ADC).
[quote="insmod,post=21511867" Zauważyłem, że jeśli wyłączę mqtt (na urządzeniu, nie w kodzie), odczyty są znacznie bardziej spójne.[/quote] Głównym pytaniem jest, gdzie leży problem, czy pomijamy wywołania przerwań z powodu przegrzania procesora? Może moglibyśmy opracować prosty scenariusz testowy, aby to sprawdzić, z najprostszym generatorem sygnału...
Nie chcę być upierdliwy, ale czy naprawdę wygodnie jest Ci pisać coś takiego? Możesz z pamięci powiedzieć, co robi ten kod? Może jednak prościej i czytelniej w ten sposób: http://www.leon-instruments.pl/2013/11/k... [syntax=vbnet] Usartc1_ctrla = &B00010101 Usartc1_ctrlb = &B00001000 Usartc1_ctrlc = &B11000000 Usartc1_baudctrla...
Ad 1 - Właśnie tak - nie da się. Ad 2 - Zapewne tak. Jak wiesz, ja nie RTOSowy, ale ogólnie kiedy mam coś wysłać do hosta w oprogramowaniu device - zgłaszam przerwanie o tym samym priorytecie, co przerwanie USB i wysyłam (wołam jakieś tam Send) w tym przerwaniu właśnie. Podobnie w przerwaniach wołam procedurę Receive, która, jak wiadomo, nic nie odbiera,...
1. Nie siedź tak długo w tym innym przerwaniu. 2. Obniż priorytet tego innego przerwania. Domyślnie wszystkie przerwania mają najwyższy priorytet 0. 3. Nie zmieniaj priorytetów przerwań, jeśli nie rozumiesz dokładnie, co robisz.
Wskazówka: zostaw biblioteki. Wtedy będziesz wiedział, które bity wpływają na priorytet wywłaszczania. Być może wartości, które ustawiasz w polach PreemptionPriority, w ogóle nie wchodzą na najbardziej znaczące 3 bity priorytetu w rejestrach NVIC, a tylko te 3 bity decydują o wywłaszczaniu. Skąd wiesz, że nie ma wywłaszczania?
Jeśli używasz stosu USB z CubeMX, to: 1. Oprogramowanie urządzenia niekoniecznie jest poprawnie skonfigurowane, np. słynne już błędne ustawienie VBUS sensing lub bzdurny rozmiar bufora danych w CDC. 2. Funkcje wysyłania danych muszą być wołane z przerwania o tym samym priorytecie, co przerwanie USB - inaczej urządzenie się powiesi z powodu błędnych...
Tyle że domyślnie masz "pełne" wywłaszczanie, więc pytanie jest o to czemu sobie to wywłaszczanie ograniczać. 4\/3!!
Gdzie MCS51 przetrzymuje PSW kiedy skacze do przerwania ? Jeśli wykonujemy przerwanie o priorytecie P1(średni) i pojawi sie przerwanie o priorytecie wyższym P2(wyższy) i w tym przerwaniu zmienimy priorytet tego przerwania na P0(najniższy) to co sie stanie? Czy istnieje jakiś stos odnośnie priorytetów przerwań, bo skąd ma system wiedzieć do jakiego aktualnie...
No to masz nieprawidłowo skonfigurowane priorytety przerwań :D
Poczytaj o systemie przerwań i priorytetów przerwań w procesorze 51.
Nie odblokowałeś w kontrolerze przerwań przerwań o najwyższym priorytecie, które generuje ADC. W XMEGA układ peryferyjny generuje przerwania o trzech różnych poziomach, które trafiają do kontrolera przerwań, który je przekazuje dalej jeśli dany poziom jest w nim odblokowany i dopiero dalej masz flagę I zmienianą przez sei(), i obsługę przez CPU.
1. ok, z 1 się wycofuję bo masz zrobione zewnętrzne pull-upy ale niepotrzebnie mnożysz rezystory, gdyż takowe są wewnątrz procesora - wystarczy tylko włączyć je z poziomu programu. 2. to teoretycznie może powodować problem - najlepiej sprawdzaj przerwania w jakiś inny sposób - np. w każdym tylko zapalać lub gasić diodę 3. Rozumiem istotę Twojego problemu,...
Czego powinienem użyć? Kodera zwanego też enkoderem 1 z n na odpowiednia ilość bitów. Tu przykładowy 1 z 8 na 3 ale na rysunku 5 jest pokazane jak z dwóch i kilku bramek zrobić 1 z 16 na 4. https://www.farnell.com/datasheets/19249... Jest on priorytetowy czyli na wyjściu masz kod najstarszego aktywnego wejścia - często stosowane do wyboru np priorytetu...
Wszystko sprowadziło się do tego, że priorytety przerwań i tasków potraktowałem jako jedno i to samo, kiedy są to dwie różne rzeczy - moje niedopatrzenie :-)
Nie [; Ale przypuszczam że to kwestia priorytetów przerwań, tworzenie mutexa zapewne odbywa się w sekcji krytycznej, a ta na Cortex-M3 i we FreeRTOSie jest realizowana przez zmianę priorytetu dozwolonych przerwań. Wiele Ci nie pomogę, ale szukałbym w tym kierunku. 4\/3!!
Sprawdziłem specyfikację Bl602, jest to RISC-V 64 przerwania, kontroler przerwań z 16 poziomami/priorytetami przerwań do przetwarzania przerwań z niskimi opóźnieniami, obsługa zewnętrznej pamięci Flash BL602/BL604 obsługuje wewnętrzne wybudzanie RTC i wybudzanie przerwań zewnętrznych. Kontroler przerwań procesora obsługuje stos/zagnieżdżanie, poziom/impuls...
END jest tylko znacznikiem dla kompilatora i nie powoduje skoku na początek programu, musisz to zrobic za pomocą rozkazu SJMP, AJMP lub LJMP w zależności jak długi masz program. A co do instrukcji RETI i RET nie jestem pewien ale chyba chodzi o priorytety - jeśli zakończysz jedno przerwanie o wyższym priorytecie instrukcją RET to przerwanie o niższym...
Równie dobrze możesz na stałe obniżyć priorytet przerwania I2C.
A ja przewrotnie zapytam o jaki AVR ci chodzi? Gdyż np. ATXMega mają priorytety przerwań.
priorytet przerwań ;-) potrzebny wsad
sei nie ma nic do priorytetu przerwań - to po prostu instrukcja włączająca przerwania.
Witam, priorytet przerwań w avr jest stały i nie da sie go zmienić. Pozdr. N.
True - w wielu przypadkach jeden priorytet przerwań starcza w zupełności (; 4\/3!!
Przerwania mają różne priorytety (jest o tym w nocie), ale nie można ich zmienić. Dopiero w bodajże XMegach można ustalać priorytety przerwań. Zrobiłeś eliminację drgań, tak, jak ja ci to zaproponowałem?
Od kiedy avry mają priorytety przerwań, to raz, dwa nic nie wyłącza, ba mają to samo dzialanie (defaultowo) bez parametrów;)
Przerwanie 1Ch jest wywoływane z wnętrza IRQ 0. Ma więc wyższy priorytet niż przerwanie klawiatury - IRQ 1 - i stąd "zawieszenie". Komputer nie reaguje na klawiaturę, dopóki nie zakończy się IRQ 0, a ono nie zakończy się, bo debugger czeka na klawiaturę.... EDIT: Dla jasności - nie chodzi tu o fakt, że IRQ0 ma wyższy priorytet niż IRQ1. Wystarczy ,...
Sterowniki dedykowane są jedynym sensownym rozwiązaniem by nie wystąpiło jednoczesne załączenie się kluczy lub zewnętrzny analogowy układ dead time. Wprowadza się również inne zabezpieczenia, ale są one zawsze analogowe + czasem coś w programie można dodać, ale nigdy tylko coś w programie, bo soft jest za bardzo zawodny. krzysiek_krm dobrze pisze. Mikrokontrolery...
Dzięki za radę ! :D Popróbuję jeszcze tym trochę pobawić się. A czy da się w jakiś sposób ustawiać te priorytety przerwań w ATMega32 ?
Słowotok strasznie źle się czyta :) Nie napisałeś jakiego AVRa używasz. Może priorytety przerwań pomogą?
Hm...a jak zatem rozumieć priorytety przerwań związane ze slotami? W instrukcji stoi, że VicVectCtl0 ma wyższy priorytet niż VicVectCtl1. Skoro mówisz, że jedynie FIQ może przerwać jakieś IRQ albo non vectored IRQ, to po co to całe priorytetowanie względem slotów?
Nie wiem jak w przypadku Disortos-a, ale jezeli zalezy nam na "lżejszych" mechanizmach synchronizacyjnych to freeRTOS zapewnia "direct to task notification", system "event flags" i "stream buffers". Z 2 ostatnich nigdy nie miałem potrzeby korzystać, ale z DTN tak. Mją one swoje ograniczenia - np zakładają że są tylko 1x1. więcej też trzeba zwrócić uwagi...
Priorytetów przerwań nie ruszaj. Najpierw zastanów się, co właściwie chcesz osiągnąć i jakie przerwania są do tego potrzebne. Podajesz tak wyrywkowe informacje, że nie sposób zrozumieć, o co właściwie chodzi.
Widzę że są problemy ze zrozumieniem "priorytetu przerwań". Wyższy poziom przerwania oznacza tylko tyle że to przerwanie może przerwać wekonywanie przerwanie o niższym priorytecie. Po wykonaniu zwojego zadania powraca do obsługi tego niższego przerwania.
INTy działają Tak sobie jeszcze myślę czy muszę ustawić priorytety z TR0 jak INT0 wisi mi w "powietrzu"? Bo INT0 ma wyższy priorytet przerwania niż TR0
W poście #237 pisałem, że mam 1 błędne CRC na ok 2000 ramek. Teraz zero błędów na 60k ramek. Wystarczyło ustawić najwyższy priorytet dla przerwania od Uarta lub odczyt przez DMA. (at)yntelo. A jak u Ciebie wygląda sprawa wysłania danych do sterownika? Podejmiesz się tego tematu? Ja narazie stoję w miejscu. Chyba się zakończy na kupieniu modułu ETH i...
(at)_lazor_ Reset Handler Raczej ciężko nazwać to przerwaniem. Stany wyjątkowe, jakim jest NMI i RESET, to przerwania o ujemnym priorytecie. Przerwań tych nie można wyłączyć. w ARM RESET jest przerwaniem.
atmega priorytety przerwań priorytety operatorów priorytety mikrotik
iskrownik ustawić transformator halogenowy zmienne akumulator nożyce
akumulator easun lifepo4 miernik satelitarny
Schemat sterowania dmuchawy Honda Jazz - szczegóły i diagnostyka Programowanie anty-Legionella w Termet Ecocondens Silver