Sprawdź, cza nazwa Twojej procedury obsługi przerwania jest taka sama, jak w tablicy adresów przerwań w pliku startup. Wyrzuć zbędne wywołanie SetPriority.
W STM32 domyślnie podczas zatrzymania rdzenia timery pracują, więc podczas twojej pracy krokowej zgłaszane są setki kolejnych przerwań. Aby to zwalczyć należy w rejestrze DBGMCU->CR (w manualu DBGMCU_CR) zapalić stosowny bit dotyczący stosownego timera. Niestety nie zawsze jest to możliwe (bo aplikacja może wymagać aby timer naprawdę stale pracował...
to nic niestety nie zmienia. Dalej nie odpala się przerwanie INT1. nie jest problemem złe ustawienie rejestru MCUCR, tak myślę.
Spacja w linii polecenia jest traktowana jako separator. Kompilator nie może znaleźć pliku o nazwie "with" - masz to jawnym tekstem. Nie używaj nazw plików ze spacjami.
Komentarze do kodu sam pisałeś? Błąd kompilatora: w AIC_Configure_IRQ pierwszy argument to jak napisałeś "numer urządzenia peryferyjnego" a ty podałeś w kodzie wskaźnik do PITC. PIT to nie peryferium tylko część kontrolera systemowego i jego przerwanie jest obsługiwane po SYSTEM_ID. Poza tym w AIC_Configure_IRQ AIC->AIC_IECR = mask;// !!! tutaj powinieneś...
Chodzi mi o wyzwalanie konwersji ADC w przerwaniu - można do tego użyć timera bez przerwań ;) No i te wszystkie externy można by przenieść nad funkcję obsługi przerwania.
Nie piszesz, na jakiej częstotliwości puszczasz MCU. Ale opisane objawy pasują do kłopotów z MAM. Spróbuj zgłębić temat. Przeczytaj erratę. W googlach też jest wiele informacji. Albert
A wydawałoby się, ze łączenie kawałków w C i C++ jest łatwe i dobrze opisane ;-) Hint: extern "C" ... Albert
Powiedz mi skąd u ciebie wektor przerwania wynosi 10 ? Czy to jakis Egzotyczny procesor czy jak ? Bo dla przerwania Timera 0 dla normalnego uK jest to inna wartość Patrz np Atmel strona http://www.atmel.com/dyn/products/tools_... C51 Timer1 in Mode 1 with Soft Gated Timer (20 KB, updated 06/04) /** * FUNCTION_PURPOSE: timer1 interrupt...
VICVectCntl0 = (1<<4)|(1<<5); Czy w LPC23xx jest w ogóle taki rejestr? Wg mnie takowego rejestru w LPC23xx i LPC24xx NIE MA. Moduł VIC jest generalnie zupełnie różny w LPC21xx/LPC22xx i w nowszych układach - w tym Twoim. W "nowych" rejestry są przypisane na sztywno - Timer0 ma na sztywno kanał 4, a więc i rejestr adresu musi być 4 itd....
Tak. Możesz to tak ustawić. Przykłady Freddiego korzystają z obu stosów. Process stack -> kontekst aplikacji, main stack - > kontekst przerwania.
Skąd pomysł, że wyczyszczenie przerwania skutkuje jego odblokowaniem? W przerwaniach po prostu rdzeń ma kolejne przerwania zablokowane - musisz sobie je aktywować funkcją NVIC_EnableIRQ(), czy jak ona się tam nazywa. 4\/3!!
Luźne przemyślenia pod rozwagę: -procesor wchodząc do obsługi przerwania stanu ABORT (tryb ARM) podstawia shadow-registers w tym r13 który jest wskaźnikiem stosu używanym w czasie obsługi tego typu wyjątku. W twoim przypadku skoro chcesz wywoływać w procedurze obsługi funkcje do obsługi LCD prawie na pewno trzeba zarezerwować specjalny obszar stosu...
Należy "przypiąć" przerwania FreeRTOSa do wektora przerwań w projekcie - wywoływany jest SVC i tak właśnie ma być. 4\/3!!
Witam Panowie czy mógłby ktoś sprawdzić na swoim stm32, jak "wkładacie" go USB ile razy pojawia się przerwanie od USB reset request. W programie z reguły jest tak: /* USB Reset Request */ if (istr & USB_ISTR_RESET) { // USB_Reset(); _SetISTR((uint16_t)CLR_RESET... U mnie jest koło 100 razy. Na SAM7X256, przy wkładaniu...
Kompilacja przebiega bezproblemowo, nie ma żadnych ostrzeżeń. Przykłady dokładnie biore z winarma.Jeżeli chodzi o startup.s to uzywam z przykładów omawianych w książce J.Lyncha. Skopiowanie bezpośrednio tego pliku z Winarma wyrzuci błędy. Ale jeśli chodzi koledze na atmelu poprawnie, i tak samo użyłeś przykładów z winarma to okej. Jeszcze pytanko czy...
Zmienna time definiowana bez podania wartości faktycznie ustawiana jest na zero. Sprawdź sobie ten kod [syntax=c]#include <stdio.h> int time; int main(void){ printf("time=%d ", time); return 0; }[/syntax] tutaj: http://mikrokontrolery.blogspot.com/2011... i przeczytaj artykuł - tam o tym pisze. Nie działa? A jak ma działać...
Elementem wywołującym pracę układu jest Switch S1 który zwierając port PB1 do masy wywołuję zewnętrzne przerwanie INT0 Uzywanie przerwania do styków butonnów, klawiszy i innych podobnych diabelstw jest najgorszym pomysłem. Temat był na tym forum poruszany setki razy - proponuje włożyć trochę wysiłku i użyć wyszukiwarki.
(at)BlueDraco Nie przesadzaj. AC6 równie dobrze działa jak i każde inne środowisko.
Witam wszystkich Tak jak w temacie, skonfigurowałem eclipse pod stm32. Używam makefile i linkera od Frediego. Wszystko pięknie działało(miganie diodą, obsługa klawiszy etc) do mementu, gdy postanowiłem przetestować przerwanie zewnętrzne. W tym momencie podczas odpalania program trafia do funkcji _Default_Handler w pliku vectors.c gdzie się zapętla (chyba...
nic nie robi bo w tej funkcji masz pętlę while, która wykonuje się dopóki nie zostanie ustawiony odpowiedni bit (a ten z kolei się ustawi dopiero jak coś przyślesz) w datasheecie jest co nieco o przerwaniach
Bo może wektor przerwań dla tego akurat kanału DMA się nazywa inaczej? Porównaj nazwę Twojej funkcji z zawartością tablicy wektorów. Jeśli masz w projekcie pliki C++, to trzeba przerwania deklarować jako extern "C". 4\/3!!
nie - bariera jest rozstawiona teraz na powiedzmy około 6 cm od siebie. Wydaje mi się, że jest to problem z timerem, ale wg mojej oceny prawidłowo go zadeklarowałem. Dodam, iż kwarc mam 11.0592MHz. Preskaler 256. Przerwanie timera co 1 sekundę.
a używasz gdzieś przerwań ?
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...
Ileż się naszukałem w User Manualu co odpowiada za globalne włączenie przerwań w LPC2478. I okazało się że chyba nic. Po prostu to wymysł Keila ta funkcja. W User Manualu tego nie znajdziesz, tak samo jak szczegółów dotyczących przerwań, instrukcji assemblera itp. Dlaczego? Dlatego, że to są rzeczy specyficzne dla RDZENIA tego mikrokontrolera - rdznia...
Oprzyj multipleksowanie o timery, a te niech wywołują przerwania.. Tworzysz sobie procedurę przerwania od timera. Następnie w tej procedurze realizujesz funkcję "przełączania" segmentów. Uruchamiasz timer z żądaną częstotliwością + odblokowujesz odpowiednie przerwanie.
No i po co włączasz przerwanie? 4\/3!!
http://www.eclipse.org/downloads/ Które wybrać? ;> Eclipse IDE for C/C++ Developers
No teraz dobrze, ale czy to Ci w ogóle potrzebne? Zerujesz zmienną prze wejściem w pętle ... A wracając o głównego wątku, jeśli masz włączone przerwanie to jego czas dodaje się do tych 1780us, być może wiele razy na bajt (bo częstotliwości oscylatora nie podałeś) i sprawdzasz PD2 w niewłaściwym czasie ... Albert
Temat czas zamykać, ale jeszcze spytam się uprzejmie szanownych kolegów, czy ktoś z was uruchomił USB HOST na LPC1758. Wg erraty mikrokontroler ten ma błąd w tym trybie i nie ma na niego lekarstwa - a płytki zrobione :(. Nie jestem pewny, ale schemat i podłączenie układu jest poprawne. Przemierzone, sprawdzone 100 razy. Załączanie napięcia przez układ...
Ustawiasz bit zezwolenia na przerwanie TXCIE, a gdzie masz procedurę obsługi tego przerwania? Po odesłaniu znaku flaga TXC zostaje ustawiona i ze względu na brak procedury obsługi tego przerwania program najprawdopodobniej startuje od początku. Nie ustawiaj bitu TXCIE lub napisz dla tego przerwania chociaż pustą procedurę obsługi: [syntax=c] EMPTY_INTERRUPT(USART_TXC_vect);...
Problem jest podczas linkowania. Chodzi o flagi kompilacji: [syntax=c] -ffunction-sections -fdata-sections [/syntax] Oraz o flagi linkowania: [syntax=c] --gc-sections [/syntax] Nie znam tego IDE ale powinienes sie przyjrzeć skryprowi linkera. Powinno być tam miej więcej coś takiego jak: [syntax=c] KEEP(.vectors) [/syntax] vectors powinieneś mieć w rozbiegówce...
(at)A.T. Debugowanie nie zadziała Ci z Soft Devicem (to co masz na początku flasha). Stos działa mniej więcej tak w przypadku niespełnienia zależności czasowych (które pojawiają się podczas debugowania przykładowo). Więc jeżeli chcesz debugować to: a) bez Soft Device b) możesz ręcznie wyłączyć przerwanie od SD W obu przypadkach nie będziesz miał oczywiście...
Najlepiej narysuj sobie na schemacie blokowym, co chcesz uzyskać, będzie Ci o wiele łatwiej na tej podstawie napisać poprawny kod. Gdybyś się zastanawiał nad tym, jak na schemacie narysować przerwanie, to narysuj jego zawartość jako oddzielny fragment schematu i powiedz sobie "to może się uruchomić w dowolnej chwili po sei()". Jeszcze jedna drobna uwaga,...
No to szukaj błędu w ustawieniach zegara - skąd bierzesz przebieg wejściowy, częstotliwość (sprawdź czy dobrze ustawiona w module startowym), wywołanie SystemCoreClockUpdate itp... Prosty test: zaprogramuj timer i procedurę przerwania od niego an miganie diodą z częstotliwością 1Hz i zmierz sekundnikiem czas np. 60 mignięć.
Ściągnij z mojej strony przykładowy projekt dla stm32. Będziesz w nim musiał zmienić następujące rzeczy: - w skrypcie linkera adresy i rozmiary pamięci - w tabeli wektorów nazwy i lokalizację "dodatkowych" przerwań (kilkanaście pierwszych jest standardowych dla całej rodziny Cortex-M3) - podstawowy kod w pliku main.c - oczywiste (; Startup i Makefile...
chciałbym się podpytać z jakiego IDE korzystacie? Jak nie na eclipse to może Visual Studio + VisualGDB. Choć nie jest to darmowa opcja.
Faktycznie masz rację ustawiłem na 512 i rzeczywiście HardFault nie występuje. Niestety przerwanie EXTI3 nadal nie jest wywoływane :cry:
Cześć i czołem. Od dwóch tygodni walczę na noże z stmem 32f429 i nie bardzo chce cokolwiek działać. Problem jest dość trywialny: nie działają przerwania. Jedynie projekt wygenerowany przy pomocy CubeMX'a potrafi zrobić przerwania, ale znowu nie chce przyjmować klas etc. Zresztą, wolę unikać tego narzędzia, wolę rozumieć co gdzie jest i dlaczego. Próbuję...
Eee.. zmieniłeś w międzyczasie OSa? Wygląda trochę jakbyś strzelał na oślep, coś nie działa, to sruu wszystko, kopiuj/wklej inny przykład itp. Trochę jakby bez zastanowienia co konkretnie może nie działać... Dodano po 1 Kurka, to odpal sobie DMA, odblokuj przerwanie od Transfer Complete i jesteś pewny, że dane odebrano ;) Z przerwania wepchnij wynik...
Skorzystaj z mojego skryptu linkera - ten który masz jest niewystarczający. W artykule nic nie pisałem o zastępowaniu skryptu linkera innym... Przy okazji: dorzucając FreeRTOS'a do projektu, w makefile'u wystarczy dodać ścieżki do źródeł systemu, czy wymagane są dodatkowe informacje dla kompilatora? Trzeba "przyczepić" 3 funkcje FreeRTOSa do 3 przerwań...
#define F_CPU 1000000 Koledzy uczyli mnie, aby nie definiować tej wartości w kodzie. Jeżeli używasz AVR Studio/Eclipse ustawiaj ją zawsze we właściwościach projektu.
Proszę o pomoc szczególnie freddiego chopina ponieważ jest autorem plików linkera, startup-a i wektora przerwać(vectors.c), które w innych projektach jak dotąd działałają mi niezawodnie. Zajrzyj do skryptu linkera, przeczytaj ze zrozumieniem jego początkowy fragment, ustaw tak jak trzeba i będzie działać. Kluczową sprawą jest przyswojenie sobie tego...
I znowu to samo... poczytaj sobie jak powinna wyglądać procedura obsługi przerwania, nie w tym konkretnym przypadku a ogólnie, dodam że wywalając puthexa z przerwania robisz dobrze.
Witam! Proszę o podpowiedź dlaczego w kodzie: unsigned int i, imax, (...) int obsluga_przerwania1() { AT91C_BASE_TC1->TC_SR; i++; if (i > imax) { i = 0; *AT91C_TC1_CCR = 0x2; } AT91C_BASE_AIC->AIC_EOICR = 0x0; } int main() { [konfiguracja tc i aic] while(1) { if (warunek1)...
Problem rozwiązany - udało mi się uruchomić OpenOCD 0.9.0 + Eclipse + STLink. Działa debug i przerwania. Komunikacja w trybie SWD. Dziękuję wszystkim za pomoc. A jak Wy się łączycie z STM32? Przez JTAG, SWD, czy też kombinację obu interfejsów?
Czy da się wyżej wymieniony uC wprowadzić w tryb sleep i potem wybudzić przerwaniem ?? Nie jest mi potrzebna ciągła praca uC, a do tego jeszcze wszystko jest zasilane baterią.
Wychodzi na to ze to wina srodowiska? Da sie jakos naprawic te usterke? Powiem szerze ze na eclipse bardzo przyjemnie mi sie pracuje:) ale jak takie bledy ma..to mozna caly tydzien szukac przyczyny.. Ja bardzo przepraszam za to co napiszę teraz, a i tak to będzie moja bardzo delikatna reakcja na elektrodzie, ale to co powyżej jest napisane to kompletna...
Aby było śmieszniej, dostaje błędy, projekt się kompiluję To nie są błędy kompilatora tylko indeksera z Eclipse. Właściwości projektu->Index->Freshen all files Właściwości projektu->Index->Rebuild Czasami trzeba jeszcze zamknąć projekt i go otworzyć ponownie, żeby mechanizmy indeksujące zadziałały poprawnie. Jeszcze musisz sprawdzić czy wszystkie flagi...
A plik linkera przeglądałeś? _user_stack_size = 512; _fiq_stack_size = 0; _irq_stack_size = 0; _supervisor_stack_size = 0; _abort_stack_size = 0; _undefined_stack_size = 0; _system_stack_size = 0; Sam pare razy pisałem, że aby uruchomić przerwania, trzeba zmienić rozmiary stosów w pliku linkera... Do tego jeszcze gdybyś przejrzał pierwszy lepszy przykład...
A ja polecam Eclipse. Z sei() nie ma problemu. Poza tym działa i w Windows i Linux (u mnie na Ubuntu).
A dlaczego miało się nie kompilować? Brak obsługi przerwań nie przeszkadza w kompilacji.
Wróciłem do esp-idf v4.2 Eclipse dalej podkreślał ale po wgraniu program działa tak jak kiedyś. Wróciłem do eclipse 2020-12 Niczego już nie podkreśla i wszystko działa jak należy.
http://obrazki.elektroda.pl/9341091800_1... Witam, Od dawna wiadomo sporej liczbie osób, że do programowania mikrokontrolerów AVR można wykorzystać sprzętowy programator oparty o prościutki ale jakże popularny układ FT232RL. W podstawowej formie pełni on rolę przejściówki USB/RS232 a przy okazji wystarczy w pełni do zaprogramowania AVR'ków....
Użycie wrappera rozwiązało problem - OS ładnie przełącza taski w reakcji na przerwania - przynajmniej na symulatorze. Szkoda trochę, że w Practical Guide nie opisali choćby ogólnej metody tworzenia przerwań pod tym OS.
Masz jakoś zdefiniowany rozmiar stosu dla przerwań? Jeśli korzystasz z mojego skryptu linkera, to w pliku tym musisz sobie zdefiniować jaki jest rozmiar stosu, bo bez tego przerwania się sypią. 4\/3!!
Przerwanie jest umieszczane pod 0x04 (sprawdzilem plik *.lst). Czy problemem moze byc brak inicjalizacji plikiem startup.as? Wczesniej pracowalem w srodowisku Eclipse i tam dodawal sie on automatycznie - pod MPLabem chyba nie jest on dodawany - w kazdym razie nie widze tego :( BF
Zgadzam się, reset eepromu prawie na pewno pomoże. Mi jak nie pomagało to kilkakrotnie włączałem telka i przy uruchamianiu wyjmowałem baterię, aby przerwać włączanie. Gdy się trochę pobawiłem baterią to soft sam się resetował do factory settings i wszystko grało.
W tym kawałku skryptu linkera masz rozmiar stosu dla przerwań ustawiony na 0, a przecież FreeRTOS je wykorzystuje. 4\/3!!
(at)szczywronek LCD_WriteText nie ma żadnych opóźnień od innych przerwań. Funkcja zawiera jedną instrukcję...która pośrednio odnosi się do jeszcze 3 innych funkcji. Jednak żadna z nich nie wykorzystuje przerwań. Tak, posiadam debugger. Działam na openocd+eclipse oraz startupie Freddiego. (at)BlueDraco Dziś podczas kolejnych nieudanych prób ten sam...
Bierzesz przykładowy projekt z mojej strony, wrzucasz do tego FreeRTOSa - czyli dodajesz katalogi FreeRTOSa do odpowiednich pól w Makefile: [syntax=bash]# additional directories with source files (absolute or relative paths to # folders with source files, current folder is always included) SRCS_DIRS = FreeRTOS FreeRTOS/portable/GCC/ARM_CM3 FreeRTOS/portable/MemMang...
Ta biblioteka libc.a pochodzi z pakietu WinArm. Ja bym sprawdził czy tam to chodzi. A co do Eclipse/cygwin to u mnie nie chce wykonywać się przerwanie do procków Philipsa Lpc2000,choć kompiluje sie poprawnie. Pod WinArm'em chodzi, sprawdzane było też w Keilu, tam tez nie ma problemu. Nie wiem czary czy co. A ogólnie to polecam pakiet Yagarto ze stronki...
No to chyba czas się przygnać, że ja nie znam się na ARMach i na C ;p Fajne uczucie pomagać komuś w rzeczy na której się nie zna ;p Ja dopiero zaczynam. CodeSourcery/OpenOCD/Eclipse/Wiggler/LPC... http://www.elektroda.pl/rtvforum/topic13...
Moim zdaniem konfiguracja DMA jest trochę niepełna, a ponadto brakuje obsługi przerwania od DMA. Przynajmniej w jednym miejscu wpisz jawnie wartość do rejestru sterującego (CR = ...). Na razie wszędzie masz |= lub &=. Zakładając, że pierwszy transfer poleci i przerzucisz 19200 słów, to później DMA się zatrzyma i nic więcej nie prześle. I jak to ma coś...
Nie napisałeś nic o środowisku programowania. Jeśli to jakaś samoróbka Eclipse, stawiam na błędną konfigurację stosu/stosów. żeby poprawnie obsłużyć przycisk w przerwaniu portu, musisz i tak mieć przerwanie timera i wyłączać przerwanie przycisku po jego przyjściu, a potem włączać je w przerwaniu timera - bez sensu - dużo łatwiej i krócej zrobić to w...
Chyba tutaj dobrze trafiłem z pytaniem. Prośba do wszystkich o jakiś soft z polskim wraz z epromem do w/w telefonu Eclipse MT-450. Na początku wyswietlała się apteczka, potem bawiłem się jakimś softem :( telek zaczął wgrywac a ja mu przerwałem teraz wgrywałem jakiś eclipse_pl_path_l10_4raqa060 ale niemam do niego epromu. Telefon się nie włącza, reaguje...
A posiada ktoś może skrypt linkera razem z vektorami przerwań dla lpc2468? Czy raczej trzeba samemu sobie zrobić?
Witam, No trochę jaśniej jest. Ram który przeznaczyłeś na stos jest prawie całym obszarem RAMU mikrokontrolera. 0x1FE4 - wielkość twojego stosu (obliczone wierzchołek stosu(0x1FF0) - początek sterty(0xc). Stosu Ci zapewne nie zabraknie. np. wywołujesz w mainie moja_funkcja(int param1, int param2, char tab[20]) to musisz przy wywoływaniu z przekazaniem...
Mam nadzieję, że to ostatnie pytanie w tym temacie. Przedefiniowałem w config.h wyjście diody na PB14, oraz podłączyłem odpowiednio. Nadal jednak dioda nie miga. Z http://obrazki.elektroda.pl/5101784800_1... Any ideas ? :D
A jak kompilujesz przez g++ to podajesz wszystkie parametry? np. --mcu=atmega32 Ja korzystam z wtyczki AVR-eclipse, przynajmniej nie trzeba grzebać w makefile ;)
Zassaj z mojej stronki ( www.freddiechopin.info) z sekcji Download -> ARM -> Przykłady plik dla lpc2103 i zerknij tam do pliku default_handler.s. Jest tam zrobiony "łapacz" przerwań, które nie są nigdzie indziej zdefiniowane. Zasadniczo chodzi o fragmenty typu: // Undefined instructions .weakUndefined_Handler .globalUndefined_Handler .setUndefined_Handler,...
Odnośnie inicjowania liczników, pole struktury TIM_Period w jakim związku pozostaje z okresem wykonywania przerwania powstającego od kanałów licznika. Zauważyłem że wartośc tego pola nie zawsze ma wpływ na okres wyzwalania przerwań. Chyba że coś pochrzaniłem.
Niestety wciąż to samo :cry: diodka nie miga co 1s. Zaczynam myśleć, że ten kwarc zegarkowy jest uszkodzony. Wystarczy, że zaremuję konfiguracje zegara i program rusza. Tzn to co jest w main{}. Mam jeszcze takie pytanie do Ciebie. Widzę, że nie wybierasz grupy priorytetów. Czy jeśli jest wykorzystywane tylko jedno przerwanie to nie musimy wybierać grup??
Problem polega na tym, że mój kompilator wyrzuca błędy a nie pokazuje mi gdzie one są (i tym samym nie mogę ich skompilować) ... To je pokaż :) Szukałem na internecie poradników do terminala UART ... USART na przerwaniach: http://mikrokontrolery.blogspot.com/2011... oraz stosuj pokazany tam prawidłowy sposób obliczania...
Zrób dwa bufory i operuj na nich w trybach "ping-pong". Jeden wypełniasz w przerwaniu, na drugim sobie coś robisz w programie głównym. Jak skończysz, to go "zwalniasz" i czekasz aż przerwanie "przydzieli" Ci ten drugi, jednocześnie biorąc dla siebie ten pierwszy. 4\/3!!
No już sobie wgrałem eclipse faktycznie może być, tylko że znowu mi się oczy rozłażą :) Bo cały wieczór straciłem na obeznanie się z Eclipse a nie zabawę z uK i przerwaniami:):) Programator uruchomiłem, programy z WinAVR kompilują się i wgrywają się czyli pewnie nic nie pokręciłem. Druga połowę wieczoru próbowałem zainstalować Eclipse na moim Ubuntu,...
kompilator mi tego nie łapie, pracuję na eclipse, a kompilator to chyba z codewarriora jest - standardowe rozwiązanie do kinetisa.
Oba taski maja ten sam priorytet ? Sprobuj sprawdzic czy przerwanie od SysTiicka dziala (breakpoint). Mozesz tez sprobowac wrzucic tutaj kod, ktory nie dziala (okrojony najbardziej jak to mozliwe).
Ustawienia rejestrów, i trybów masz ok - tylko właśnie ten nieszczęsny wektor przerwania. To może jeszcze wejdź na blog M.Kardasia czyli: http://mirekk36.blogspot.com/2012/03/ecl... i zobacz jak można sobie ułatwiać życie dzięki Eclipse a w twoim szczególnym przypadku jak szukać wektorów przerwań (masz tam też wiele...
Witam. Piszę w eclipse i chcę umieścić obsługę przerwania (SysTick) we własnym pliku. O ile w C nie było z tym żadnych problemu to w C++ wykonuje się SysTick_Handler() z pliku \system\src\corexm\exception_handlers.c Po zakomentowaniu program ląduje w Default_Handler(); W projekcie w C plik exception_handlers.c również zawiera pustą definicję SysTick_Handler()...
W czystym Eclipse miałem chyba włączone obie te rzeczy z automatu, a tu nie i nie potrafiłem się dogrzebać :-/
Ja używam CodeVision i sobie bardzo chwalę. Wsparcie techniczne jest ze strony producenta natychmiastowe. A po za tym kod jest w C , więc od strony programowej to jest bez różnicy . Ma tylko inne nazwy procedur przerwań niż gcc. Reszta jest praktycznie taka sama.
To wykorzystaj timer do generowania jednego PWM. Silnik pewnie dostaje sygnał w okolicach 20kHz. To na przerwaniu zrobisz. 1MHz już nie. Inny sposób to zewnętrzny generator.
nie chodzi mi o te rejestry, te sa nieistotne (nawiasem mowiac mozna je oczywiscie podgladac). istotny jest dla mnie podglad rejestrow kontrolujacych peryferia i rdzen, czyli wsztystkich lokacji w pamieci, ktore odpowiadaja za: przetworniki, porty, interfejsy, przerwania, ... 4\/3!!
mogę ci podesłać uruchomiony przykład mass storage - ale na bibliotekach st. Uruchomiłem ją parę dni temu - też z tym trochę walczyłem. Przykład działa pięknie - wzorowo. U mnie wogle nie uruchamiały się przerwania. Moja aplikację kompilowałem w Eclipse i codesourcery. Daj adres to podrzucę ci to nieodpłatnie - no chyba że z dobrej woli dasz biednemu...
A skąd my na podstawie trzech linijek kodu mamy Ci powiedzieć, co zepsułeś w pozostałych pięciuset linijkach? CubeMX generuje gotowe projekty dla Eclipse, więc nie wiem czemu konwertowałeś projekt dla Eclipse na projekt dla Eclipse, co zresztą i tak nie ma znaczenia dla odpowiedzi na Twoje pytanie. Nie powinieneś w ogóle ruszać priorytetów przerwań....
Nie do końca kumam po co zmieniasz w przerwaniu VPBDIV (APBDIV) i wylaczasz samo to przerwanie - w ARM7 w trybie IRQ dalsze przerwania IRQ sa zablokowane, wiec nie ma potrzeby takich operacji. Tam gdzie sugerujesz różnicę nie będzie jej, no bo i czemu miałaby być? Jedyne co trzeba zmienić, to rozmiary stosów w skrypcie linkera - są na samym poczatku....
Wydaje mi się, że powinno działać bez pętli ... ale dla przerwań wyzwalanych zboczem. Dlaczego wyzwalasz poziomem? Jest jakiś konkretny powód? Pytam, bo Atmele znam najsłabiej. Poza tym czy w procedurze przerwania oprócz wspomnianej pętli masz jeszcze coś (czasochłonnego?) Albert
Jeżeli nie jestes uparty na Atolic'a, to zapraszam na http://tutro.net, tam jest opisana konfiguracja Eclipse, tworzenie projektu z podpietymi bibliotekami od STM, oraz kompilacja OpenOCD.
Na 100%. void FIQ_Handler(void) __attribute__ ((interrupt("FIQ"&... I w przerwaniu nie zapisuj rejestru VICVectAddr.
Kilkukrotnie już instalowałem tą wtyczkę na różnych komputerach i nigdy nie pojawił się ten problem, może dlatego, że Eclipse przy okazji samo (automatycznie) ściągało nową wersję całego CDT? 4\/3!!
adamusx Ma znaczenie i to duże. I nie w kwestiach mechaników to należy rozpatrywać tylko funkcji zdefiniowanych w plikach "startup_stm32f4xx.c", "system_stm32f4xx.c" i "system_stm32f4xx.h". Dla CM4 wygląda to tak: Startup wywołuje funkcję SystemInit(); Ta funkcja przy domyślnych ustawieniach konfiguruje system taktowania uC na 168MHz, ale dla kwarcu...
Rozwiązałem go przez zakomentowanie miejsc, na które "krzywo patrzył" eclipse. A na czym dokładnie polegał problem? Skoro interrupts używają tylko main stack to zmieniłem to. Nie wiem czy dobrze Dobrze, choć ja zwykle zaczynam od 1kB dla obydwóch stosów (; Dla małego przerwania 128B wystarczy oczywiście, ale później może być już za mało... 4\/3!!
Spróbuj ograniczyć problem do minimum, czyli daj TYLKO ten test w programie (i nic więcej), a jak zadziała to dokładaj po kolei inne elementy. Nie masz jakieś alokacji/dealokacji w przerwaniach lub innych wątkach w trakcie tego testu? 4\/3!!
Coś masz źle z tym eclipse kolego, zobacz - ja mam w Eclipse ładnie wszystko, i jeszcze zajrzyj sobie na dole AVR Device Explorer, przecież masz tam podane nazwy wszystkich rejestrów, wektorów przerwań - no wszystko co dotyczy procka który ustawisz - spójrz na zrzut ekranu z mojego Eclipsa dla ATmega162 i wszystko się ładnie kompiluje http://obrazki.elektroda.pl/6333590700_1...
Antystatyczny napisał: Mam już użyty timer0 do odświeżania wyświetlacza LCD. To źle robisz. Obsługa wyświetlacza nie należy do błyskawicznej , więc nic więcej nie będzie działać, zanim się napisy nie wyświetlą, a przy tym Timer się przekręci kilkanaście razy, więc zgubisz tyle przerwań. W obsłudze przerwania nie robi się nic, co by miało trwać zbyt...
Eclipse to tylko edytor tekstu. Reszty nie wiem. Jak nie wiesz specjalnie jak to zrobić to możesz też dać na początku przerwania zapalanie LEDa a na końcu gaszenie. I potem oscyloskopem zobaczyć.
Witam, jakiś czas temu zacząłem zabawę z AVR no i w końcu natrafiłem na problem, którego nie mogę rozgryźć. Mam w programie (multipleksowany wyswietlacz 7 seg) linijkę o treści : DOKŁADNIE o ten zapis, wiem ze lepiej uzyć całego portu a nie mieszać jak powyżej D i C, ale nie rozumiem DLACZEGO zapis, który nie powinien ruszać bitów PD2 i PD3 generuje...
I2C jest rygorystyczne czasowo. Inne przerwania mogą powodować błędy. Zrobić I2C na przerwaniach o najwyższym priorytecie. Uchronić przed błędami powstałymi z HOR-PLUG. Np cykliczne pytanie i resetowanie I2C po konfiguracji sprawdzenie flag oraz stanu pinów.
stm32 przerwać przerwać bascom przerwać przerwać przerwać przerwać bascom
kabel ethernet przerywa triak przekaźnik router talktalk
Światła stopu i pozycyjne nie działają w Volvo XC90 2004 - przyczyny Objawy zbyt małego podciśnienia w silniku 2.9 CRDi