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.
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.
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
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...
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!!
A wydawałoby się, ze łączenie kawałków w C i C++ jest łatwe i dobrze opisane ;-) Hint: extern "C" ... Albert
Tak. Możesz to tak ustawić. Przykłady Freddiego korzystają z obu stosów. Process stack -> kontekst aplikacji, main stack - > kontekst przerwania.
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...
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ł...
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.
Zmienne globalne używane w przerwaniach jak i w pętli głównej deklaruję tak : [syntax=c] volatile uint8_t int0_flag,int1_flag; [/syntax] Przerwania działają, program mam dosyć obszerny, więc nie daję całego, tylko to co nie działa. Jak już mówiłem wszystko działa na przerwaniu INT0, natomiast INT1 deklarowane tak samo już nie działa. Przerwania zostały...
Należy "przypiąć" przerwania FreeRTOSa do wektora przerwań w projekcie - wywoływany jest SVC i tak właśnie ma być. 4\/3!!
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
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ś...
W programie poniżej dekrementuję zmienną globalną(volatile) "time" w przerwaniu. Problem tkwi w tym, że dekrementacja działa prawidłowo tylko gdy zainicjuję zmienną globalną "time" początkową wartością, natomiast ja chcę podawać wartość zmiennej do dekrementacji w głównej pętli while(1) tak jak to jest w kodzie poniżej (który oczywiście nie działa)....
A ustawiłeś sobie rozmiar stosu dla przerwań (w pliku linkera)? 4\/3!!
Nie odpowiedziałeś na ostatnie pytanie.
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...
(at)BlueDraco Nie przesadzaj. AC6 równie dobrze działa jak i każde inne środowisko.
a używasz gdzieś przerwań ?
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....
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...
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!!
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...
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...
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...
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ęć.
Przede wszystkim, to gdybyś korzystał np z ECLIPSE to zobacz sobie sam na obrazku ;) nie miałbyś nawet możliwości żeby się pomylić z nazwą wektora przerwania - bo w Eclipse masz od razu pod ręką wszystkie nazwy wektorów przerwań, rejestry ale też pliki nagłówkowe i wiele innych zobacz: http://obrazki.elektroda.pl/5492100600_1... (nie...
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.
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...
Nie można definiować funkcji ISR wewnątrz funkcji main. [syntax=c] /* main.c * * Created on: 26 lip 2017 * Author: TADEK */ #include <avr/io.h> #include <avr/interrupt.h> int main(void) { DDRC|=(1<<PC3); PORTC|=(1<<PC3); TCCR1B|=(1<<WGM12); //USTAWIAM TRYB CTC TCCR1B|=(1<<CS12);//PRESKALER NA 256 OCR1A=15624;//ZEBY...
Ś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...
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ą.
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!!
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.
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ń...
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...
conf.clk_flags = 0; Teraz mogę się zająć właściwym problemem czyli przerwaniami. Dam znać jak coś wyrzeźbię. Działam na esp-idf v4.3 i eclipse 2020-12
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.
dondu: Ja wcale tego pisać nie muszę :-) Po prostu zastanawiam się skąd taka maniera bierze. Ale dzięki za dbałość o mnie. Właściwie to ciekawsza byłaby dla mnie odpowiedź niż zlikwidowanie tej maniery. Do autora: Nie wnikając czy procedura skanowanie robi to co chciałbyś, aby robiła czy nie poniższa robi to samo trochę krócej, nieprawdaż? [syntax=c]...
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...
A dlaczego miało się nie kompilować? Brak obsługi przerwań nie przeszkadza w kompilacji.
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)...
A jak kompilujesz przez g++ to podajesz wszystkie parametry? np. --mcu=atmega32 Ja korzystam z wtyczki AVR-eclipse, przynajmniej nie trzeba grzebać w makefile ;)
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.
Nie pochwalę się pewnie teraz wiedzą ale już piszę co zrobiłem że mi zaczął freertos banglać.. :) A więc - podpięte przerwania miałem w pliku stm32f10x_it.c: [syntax=c]void SVC_Handler(void) { vPortSVCHandler(); //FreeRTOS SVC Handler } void PendSV_Handler(void) { xPortPendSVHandler();//FreeRTOS PendSV Handler } void SysTick_Handler(void) { xPortSysTickHandler();//FreeRTOS...
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ś...
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...
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...
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,...
(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...
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()...
Witam w sumie to wstyd się przyznać ale cóż, to był problem ze stosem. Zacząłem pisać coraz więcej funkcji i raz po raz procesor zaczął znowu się "wieszać". Miałem ustawiony tylko na 100 bajtów. Teraz śmiga aż miło nawet na 3 przerwaniach z USB. Ups... ale porażka
A posiada ktoś może skrypt linkera razem z vektorami przerwań dla lpc2468? Czy raczej trzeba samemu sobie zrobić?
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...
kompilator mi tego nie łapie, pracuję na eclipse, a kompilator to chyba z codewarriora jest - standardowe rozwiązanie do kinetisa.
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!!
W czystym Eclipse miałem chyba włączone obie te rzeczy z automatu, a tu nie i nie potrafiłem się dogrzebać :-/
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!!
No i po co włączasz przerwanie? 4\/3!!
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ę...
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...
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...
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...
BlueDraco no i tu może być problem. Czyli lepiej operować na tych globalnych tablicach, ale na czas ich wykorzystywania wyłączyć przerwania czy to nie wpłynie znacząco jeżeli będę "używał" tylko początku bufora?
Jesli jeszcze tego nie zrobiles to w pliku crt.s przy ustawianiu stosu uaktywnij przerwania dla trybu User Mode, czyli w CPSR nie ustawiaj bitów I i F. Ustawienie ich powoduje wyłączenie przerwań w danym trybie. Do tego ustaw odpowiednio rozmiar stosu dla trybów przerwania, u mnie to jest np. .set IRQ_STACK_SIZE, 0x00001100 Pozdrawiam
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....
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!!
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...
(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...
chciałbym się podpytać z jakiego IDE korzystacie? Jak nie na eclipse to może Visual Studio + VisualGDB. Choć nie jest to darmowa opcja.
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!!
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.
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,...
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.
Właśnie próbuję uruchomić program z pamięci RAM. Usunąłem linijkę rom (rx) : org = 0x8000000 oraz zastąpiłem wszystkie "> rom AT > rom" na "> ram AT > ram" w pliku linkera. Program działa do momentu wywołania przerwania (w moim programie przerwania SysTick). Wtedy licznik rozkazów skacze z adresu 0x2.... pod adres 0x08000864.Czyli do pamięci flash i...
Skrypt linkera niedopasowany do startupa. http://www.elektroda.pl/rtvforum/topic13... http://www.elektroda.pl/rtvforum/topic13... Zaadaptuj dla Twojego układu (wystarczy zmienić rozmiary i adresy pamięci w skrypcie linkera oraz sposób wywołania przerwania IRQ w tablicy wektorów) i po problemach. 4\/3!!
Przy okazji - w jakim dokumencie szukać tego typu informacji? Dodano po 1 No właśnie wszystko powłączałem - w rejestrach USART, w pliku stm32f10x_it.c itd. Tylko sama ta linia nie jest przyjmowana, coś jest nie tak. Dodano po 4 Chodzi mi o to, że wszystkie włączenia przerwań w NVIC, jeżeli są prawidłowe, to to co w nawiasie jest wyświetlane niebieską...
Witam, Mam problem napisaniem programu w eclipsie w C. Chciałbym napisać program na arduino mega 2560, w którym po wykryciu przez czujnik ultradźwiekowy przeszkody w odległości 20cm zapala się lampka. Nie wiem dokładnie jak obsłużyć czujnik. Czy muszę stosować przerwania? Mógłby ktoś podesłać przykladowy program obsługujący czujnik? Pozdrawiam
Na 100%. void FIQ_Handler(void) __attribute__ ((interrupt("FIQ"&... I w przerwaniu nie zapisuj rejestru VICVectAddr.
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
Faktycznie masz rację ustawiłem na 512 i rzeczywiście HardFault nie występuje. Niestety przerwanie EXTI3 nadal nie jest wywoływane :cry:
Witam, Uzywam stm32Cube do generowania kodu dla SW4 ktorego uzywam w eclipse. Staram sie uwuchomic przerwania RX dla CAN1, ale nie moge tego uruchomic, program counter nigdy nie wchodzi do obslugi przerwania. Wysylanie dziala. Testowa procedura dla sprawdzenia wysylania: [syntax=c]CanTxMsgTypeDef TxMess; TxMess.ExtId = 0x234501; //TxMess.StdId = 0x241;...
Builder 6(C++), Unity 3D(C#), Eclipse(java), Code::Blocks(C++) Teraz czas na STM32 - tworzyłem już przerwania zapalałem diody, używałem przekaźników, styczników, tranzystorów, oporników :) Może najprostszym rozwiązaniem będą monostabilne przyciski sterujące głowicą plotera. :) (oś x: prawo, lewo oś y: prawo lewo oś z: góra dół)
Masz w swoim kodzie jakieś przerwania? Coś zmieniłeś w samym programie? Generalnie tablica wektorów z jednego układu oczywiście nie pasuje do drugiego, jednak jak nie masz przerwań to bez znaczenia, bo pierwsze ileśtam wektorów jest identyczne, a do podstawowego działania i tak potrzebujesz tylko dwóch pierwszych wpisów.
(at)Freddie Chopin - dzięki za info dziś pokombinowałem z twoim przykładem i Eclipse przy pomocy plug-inu GnuARM samo znalazło wektory przerwań i startup.s oczywiście przykład się nie skompilował jeszcze ale jestem na dobrej drodze. Sprawdziłem jeszcze raz w zestawie siedzi interfejs usb na ft2232 :). Dziękuję wszystkim za info. Te kilka wypowiedzi...
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ń....
Dzięki Freddie! Po odblokowaniu __USES_CXX i pobraniu syscalls kontenery działają jak należy. Mam jednak jeszcze jedno male pytanko: chcialem użyć standardowej kolejki FIFO (std::queue) do której w main-e wrzucam jakaś wartość natomiast w przerwaniu ta wartość odczytuje. W którymś ze swoich postów pisałeś ze dynamiczna alokacja pamięci w przerwaniach...
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ć.
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,...
#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.
Witam Serdecznie Na początek kod: [syntax=c]#define F_CPU 4000000UL #include <avr/io.h> #include <avr/iom128.h> #include <util/delay.h> #include <avr/interrupt.h> volatile uint8_t i=0; int main(void) { DDRA = 0xFF; ASSR &= ~(1<<AS0); TCCR0 |= (1<<CS01) | (1<<CS02); TIMSK |= (1<<TOIE0); TCNT0 = 131;...
CHYLĘ CZOŁA - chłopie jesteś WIELKI. Kiedyś zrobiłem sopelka (plus kilka innych efektów na atmega8), ale zrobić coś takiego na attiny13 - majstersztyk. Przewkompilowałem Twoje źródła (sopelek) pod eclipse i wprowadziłem drobną modyfikację - funkcję led_on zrobiłem jako funkcja wewnętrzna w procedurze obsługi przerwania. Co się zmieniło - program z 386...
Witam, Napisałem program, w którym do odliczania czasu używam SysTick'a i przerwania od niego. Gdy skompiluję i zapiszę program do pamięci Flash, program ten działa jak należy i możliwe jest jego debugowanie. Jeśli skompiluję i wpiszę program do pamięci RAM, to program nie działa poprawnie, a debugować go można jedynie do momentu wystąpienia przerwania...
renesas przerwania flagi przerwania attiny przerwania
transformator monitora monta telewizji tracer sterowniki myszki
napęd bramy przesuwnej uziemienie basenu
Odblokowanie telewizora LG 32LN536B: instrukcje i porady Mechanizm napędu 5D z szufladami - jak działa?