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...
Wg mnie się da - http://infocenter.arm.com/help/index.jsp...
Ad.1 Teraz ustawienie jest poprawne, nie to co pokazałeś wcześniej. ad2. w zależności od sygnału wejściowego możesz zastosować zewnętrzne lub wewnętrzne podciąganie. Zweryfikuj poprawność nazwy funkcji obsługi przerwania. Bardzo mi się nie podoba.
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)....
Porada: napisz to od nowa. W obecnej wersji masz delay w przerwaniu EXTI i brak przerwania timera do obsługi wyświetlacza.
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...
Nie uda Ci się coś takiego jak liczenie ilości iteracji dla rdzenia Cortex-M3 - zapomnij. Musisz sobie stworzyć timer na przerwaniach (najlepiej na SysTick) i sprawdzać ile czasu już minęło. 4\/3!!
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...
Ewentualnie jak ładnie i zdrowo wyłączyć i włączyć wszystkie przerwania w Cortex-M3 STM32F103. Jeśli korzystasz z FreeRTOSa to po prostu wrzuć tam portENTER_CRITICAL() i po sprawie. Jeśli nie, to użyj funkcji z nagłówków CMSIS (__enable_irq() i __disable_irq()). 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 ?
(at)jareklnx Trochę brzmi jakbyś grzeszył, jak można zaorać kontekst prockowi? :D cortex-m ma to zrobione implicite w przerwaniach, ale już taki cortex-A ma identyczne rozwiązanie gdzie trzeba w przerwaniu skopiować stan rejestrów a potem przywrócić.
Odpowiedź na przerwania ma szansę być precyzyjna (bo samo przerwanie JEST preczyzyjne) jeśli procesor będzie czekał na przerwanie w uśpieniu, a nie w niepustej "pętli głównej" ze sprawdzaniem zdarzeń. Niektóre modele uC z rdzeniami Cortex mają mechanizm sprzętowy gwarantujący determinizm czasu odpowiedzi dla jednego przerwania o najwyższym priorytecie,...
Przecież wystarczy sprawdzić flagę źródła przerwania przez polling, co będzie tak samo skuteczne w sensie czasu, a nie będzie zbędnego wejścia i wyjścia z ISR, przerzucania danych na stos i nie będzie tej nieszczęsnej zmiennej globalnej zadeklarowanej jako bit flag. Pamiętaj że każdy procek będzie miał inaczej zrealizowane przerwania, cortex-m zrzuca...
Najlepiej, dla lepszego efektu: -ustalić priorytet: mają być główne (grupy priorytetów), czy główne z podpriorytetami (SCB->AIRCR) -ustalić żądany priorytet lub/i podpriorytet dla danego peryferium (NVIC->IP) -włączyć w NVIC (NVIC->ISER), odnosi się do tablicy wektorów. -włączyć interesujące nas przerwanie w danym peryferium Obsłużyć przez handler,...
Niby, bo nie wiem nic więcej poza tym, że nie wywala errorów. To może napisz program który coś robi to wtedy będziesz wiedział czy jest OK. Widzę że używasz JTAG'a....co stoi na przeszkodzie żeby uruchomić debugowanie ? Skoro się wszystko poprawnie kompiluje i wgrywa, wystarczy napisać inicjalizację peryferii dla LPC'ka i zweryfikować plik z mapą przerwań.
Witam, Wg manual'a do procesora Cortex M3 jeśli się zmienia kod programu lub/i tablicę wektorów przerwań, to przed następną instrukcją powinno się użyć instrukcji ISB, DSB i DMB aby bufory załadowały nowe wartości.
Masz wrzucony bootloader który uruchamia tą aplikację? Jeśli nie, to pozornie uruchomienie takiej aplikacji za pomocą GDB może się wydawać możliwe, ale właśnie krzaki zaczynają się zwykle w momencie wystąpienia pierwszego przerwania.
Freddie: oczywiście wiem, że tak teoretycznie można zrobić, tylko jakoś nie widzę zastosowania tego mechanizmu w praktyce do obsługi urządzeń. Pewnie ma to sens przy komunikacji pomiędzy procesorami (rdzeniami), ale to raczej nie na Cortex-M.
Pomysł już był - procesor idzie spać i nie ma żadnych innych przerwań oprócz tego najistotniejszego. Być może da się to zrobić tak, że wszystkie inne czynności uda się przenieść do obsługi tego przerwania, np. jeśli wiesz, że pomiędzy przerwaniami nie przepełnisz FIFO UARTa (bo np. ten, kto współpracuje z Tobą nie będzie nadawał danych bez opamiętania),...
Przerwania które korzystają z funkcji FreeRTOSa nie mogą mieć wyższego priorytetu niż wartość ustalona w pliku FreeRTOSConfig.h. Dodatkowo oczywiście w przerwaniu należy korzystać z funkcji z końcówką "FromISR". http://www.freertos.org/RTOS-Cortex-M3-M... http://www.freertos.org/a00110.html (opis configKERNEL_INTERRUPT_PRIORITY i configMAX_SYSCALL_INTERRUPT_PRIORITY)...
3 us to 63 cykle - niby to wcale nie mało dla rdzenia Cortex. Wygeneruj impuls startu konwersji na timerze, w przerwaniu timera na koniec impulsu odpal transmisję, po zakończeniu transmisji z ADC wyzwól ponownie timer. Nie jestem pewny czy zwalnianie uC do 21 MHz to dobry pomysł. Sama transmisja też zajmie trochę czasu, potem obróbka odebranych danych...
Zamieniłeś nienajmłodzszy, ale jeszcze nie przestarzały LPC17xx na zabytkowy, głupszy i trudniejszy LPC21xx. Taki sobie pomysł... LPC17xx występują w obudowach 80- i 100nóżkowych LQFP, które łatwo lutuje się ręcznie. Stałe zapisuj sobie jak chcesz, tylko nie oczekuj potem, że ktoś będzie analizował Twoje szyfry. Tak napisany program nie daje się czytać....
A jeśli chodzi o typ, to w tym przypadku powinienem użyć IRQ? Nie powinieneś używać żadnego. Jeśli używasz STM32F1 (technicznie rzecz ujmując - jeśli używasz rdzenia ARM Cortex-M3 w rewizji r1r1), to po prostu na początku main() (albo w startupie, albo gdzieś "bardzo wcześnie" - byle przed pierwszym przerwaniem) dodaj taką oto magiczną inwokację: SCB->CCR...
Cortexy-m mają określone w jaki sposób działają przerwania (wektor przerwań) i to czy jakieś środowisko sobie upiększa, zabezpiecza czy co tam uznali za stosowne nie za wiele zmienia. https://www.keil.com/support/man/docs/ar... Piszą o zachowywaniu rejestrów, ale dla cortex-m jest to robione można rzec "automagicznie" i zapewne...
Niedawno programowałem LPC2478 i tam nie było tego problemu. No ale to już niemłody ARM7TDMI-S, a nie Cortex-M3. :)
Wpadłem na pomysł jak to "obejść". - w bootloaderze przekierować tablice na RAM; - "skoczyć" pod adres Reset_Handler w aplikacji użytkowej; - podczas inicjalizacji przekopiować adresy wektorów z flash do RAM (sekcja .data); Na razie próbuję: 1. umieścić wektor przerwań w sekcji .data; 2. umieścić startup.S na początku aplikacji użytkowej; Jak ktoś ma...
Proste rozwiązanie: użyj uC z wielopoziomowym systemem przerwań, czyli np. dowolnego małego Cortex-M0.
arm.com: Cortex-M4 Technical Reference Manual ARMv7-M Architecture Reference Manual Co do timera: prawdopodobnie chodzi o opóźnienie kasowania zgłoszenia przerwania. Jeśli skasujesz pod koniec procedury, to po jej zakończeniu znacznik będzie jeszcze ustawiony i spowoduje powtórne zgłoszenie przerwania. Do sterowania NVIC proponowałbym jednak użyć pseudofunkcji...
A masz jakieś przerwania? Bo na Cortex-M3 mogą być DWA stosy i to że jeden się nie przepełnia jeszcze o niczym nie świadczy... 4\/3!!
Tu nie chodzi o sam potok Cortexa, a o to, że sterownik przerwań jest wolniejszy od samego procesora, więc skasowanie przerwania zajmuje zapewne nawet kilka cykli zegara procesora. Cortex nie zdejmuje ze stosu rejestrów na końcu przerwania, jeśli ma zgłoszone przerwanie, więc ten powrót z przerwania na końcu procedury w praktyce nawet się nie wykona,...
Ś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...
Witam, Jestem poczatkujacy jesli chodzi o programowanie pod architekture Cortex. Posiadam zestaw ewaluacyjny STM32 Butterfly. Probuje skonfigurowac przerwanie, aby wykonało się po naciśnięciu przycisku. Debugujac program widac, ze po nacisnieciu przycisku flagi sa ustawiane, ale funkcja obslugujaca przerwanie nie jest wywolywana. tak wyglada moj kod...
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...
Nie zauwazylem zadnej struktury dla SysTicka poza tymi definicjami. Zajrzyj do core_cm3.h , tam jest gotowa funkcja z CMSIS SysTick_Config(uint32_t ticks) i tam też znajduje się odpowiednia struktura w tym headerze. SysTick jest dostarczany z rdzeniem przez ARM. Dlatego konfigurację NVIC, ITM czy SysTick nie szukasz na stronach producenta mikrokontrolera...
Mam takie pytania związane z opóźnieniami reakcji RTOS'a na zdarzenia. Tak czytając ten fragment odniosłem wrażenie że omawiasz opóźnienie związane z reakcją na przerwanie, a nie na reakcje samego wątku. W końcu są elementy, tak wolne że można zrealizować dla nich osobny wątek (np sprawdzanie stanu przycisku), czy wtedy jednak opóźnienie będzie wynosiło...
Ile instrukcji zrobi Twój cortex w 1us? Ile ma Twoja obsługa przerwania? Jak mniej więcej dojdziesz, to rozwiń sobie wiedzę o interrupt latency Albert
Czyli błąd w założeniach projektu - źle wybrany mikrokontroler. Należy albo obsługiwać Onewire w sposób nie wymagający mikrosekundowej precyzji przerwań (czyli przez UART, których zapewne Ci zabrakło), albo zmienić mikrokontroler na taki, który da sobie z tym radę - AVR z większą liczbą UARTów lub dowolny z prawdziwym wielopoziomowym systemem przerwań,...
Szukaj w dokumentacji rdzenia, bo systick jest jego częścią [url=http://lmgtfy.com/?q=cortex+m4+syst...
Adres powrotu jest na stosie a w LR jest tryb procesora z przed wejścia do przerwania. Przed wejściem do przerwania LR przyjmuje takie wartości w zalezności od trybu w jakim procesor sie znajduje 0xFFFFFFF1 0xFFFFFFF9 0xFFFFFFFD 0xd w tym przypadku oznacza: 0b1101 Return to Thread Mode; Exception return gets state from the Process stack; On return execution...
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!!
Bufor w żyro (mpu6050). 400Hz przerwaniem z timera czy z żyra? Korzystam również z mpu6050. 400 Hz przerwaniem z timera.
Na Cortexach i MSP430 nie ma takiej potrzeby - procesor po zainicjowaniu peryferiów usypia w takim trybie, że po powrocie z przerwania śpi i nie rusza ani instrukcji dalej. W Cortex nazywa się to SleepOnExit.
Czy plik wygenerowany przez nowy projekt ale z dołączonymi bibliotekami HAL będzie dobry? W nim znajdują się już te przerwania. Dodaj tylko to co Ci napisałem. Znajdz w dokumentacji procesora gdzie w tablicy przyrwan jest ten EXTI15_10 - i tam zamiast zera wstaw nazwe seojego handlera. I to wszystko. Tu masz zresztą tę tablicę - policz sobie gdzie...
Chciałbym zobaczyć ten low power z pętlą zdarzeń. Tzn. kiedyś były takie procesory, na których to się dawało zrobić poprawnie, ale już wyginęły. Na ogół jest ALBO low power ALBO pętla zdarzeń. Trzecie wyjście to low power i gubienie zdarzeń w pętli. :wink: No tak, masz rację Cortex nie do wszystkiego się nadaje ;-) Albert
Google nie pomaga? ;) http://www.keil.com/forum/19866/how-to-r...
Nie prościej tak nie kombinować? Funkcje zdefiniowane wewnątrz definicji klasy (zwykle w nagłówku) są domyślnie traktowane jako z atrybutem "inline" i po co kombinować więcej? A już jakieś atrybuty "always_inline", to prosta droga to zabawy w assembler++, bo skoro kompilator uznał, że inline'owanie nie ma sensu, to zapewne tak właśnie jest. Pomijając...
skoro już mają być ARM'y to wybierz Cortex M3 są tańsze i imho lepsze (obsługa przerwań) od ARM7TDMI (ale np. STR710FR2 można dostać dość tanio - jako próbki :-)
ja pytam o sposób dostępu do tego rejestru, gdzie znajdę to napisane? Czy mam sam przez podobieństwo próbować czy coś takiego zadziała: DMA->ISR=0x......; ? Czy taka jest zasada? Taka jest zasada. Gdzie te nazwy są zdefiniowane? Większość jest w pliku stm32f10x.h . Jeśli używasz Eclipse, to po prostu trzymając CTRL kliknij w daną nazwę, a otworzone...
Powiem Ci szczerze że myślałem iż po patach zmieniłeś toolchain, ale chyba sprawdzone tematy sa najlepsze (bo znam Twój wpis o tym toolchainie) A ten VS Code to aż muszę sprawdzić, ciekawe czy by mi to zadziałało. A weisz może jak to w ogóle wygląda tzn. rozumiem że wtyczka c/c++ jest do składni języka, a cortex-debug do debudowania, ale jak z wyborem...
Hard fault praktycznie zawsze pojawia się gdy załączymy przerwanie, dla którego nie zdefiniujemy handlera. Sprawdź kod pod tym względem, szczególnie przerwanie watchdoga.
O stosie piszesz herezje, o nakładaniu przerwań też. Ja tylko zauważyłem, że Cortex M0 (LPC1114) ma ghosty na irq (PIO) i jest możliwe krótko po sobie manie przerwania po mimo że układ zewnętrzny sprokurował jedno. Dodałbym że CM0 jest przetaktowany na 60Mhz i po zmniejszeniu częstotliwości do 20Mhz jest dokładnie to samo :P Moim zdaniem jest jakiś...
No tak - na to też wpadłem, że przy systemie operacyjnym coś to daje, ale przy zwyczajnym programie, który jest jedynie głównym wątkiem + przerwania? 4\/3!!
Jakie Bez tego mechanizmu ciężko ogarnąć takie tematy jak zagnieżdżanie przerwań czy zmiana kontekstu po przerwaniu. Idea jest taka, że w twoim przypadku SysTick musi mieć wysoki priorytet (najwyższy w "systemie", w znaczeniu w RTOSie), tak aby tick był regularny i się nie gubił. Przełączanie kontekstu na najwyższym priorytecie zaś jest średnio zabawne,...
Witajcie Przesiadłem się z LPC2148 na LPC1768 i próbuję przełożyć kod na nowy kontroler. Jestem na etapie programującego się kontrolera, potrafię zamigać LEDem, wziąłem się za timery i utknąłem na przerwaniach. Wyczytałem że przerwanie włącza się taką funkcją: NVIC_EnableIRQ(TIMER2_IRQn); Jest ona zdefiniowana w pliku core_cm3.h autorstwa ARM. Gdy właczam...
Jeśli mówimy o ATmega, to najmniej czasochłonnym sposobem nadawania jest użycie SPI, a wtedy trzeba generować ponad 300.000 przerwań na sekundę, co jest niemożliwe do obsługi, zstaje więc aktywne oczekiwanie na SPI z zablokowanymi przerwaniami. Każdy inny sposób transmisji na ATmega (bibang) również wymaga zablokowania przerwań na czas transmisji do...
1. Ta płytka nie ma wbudowanego JTAGa. W przeciwnym wypadku po do by jej było złącze JTAG 20-pin? 2 + 3. Na stronce dostępny jest trial wersji "rozbudowanej", w darmowej musisz sam zadbać o skrypt linkera i startup. Wbrew pozorom nie jest to takie trudne - dobry przykład (polecam te z mojej stronki dla stm32 - http://www.elektroda.pl/rtvforum/topic13...
Napisz coś podobnego jak poniżej: [syntax=c] // zmienne globalne dostepne rowniez w przerwaniu volatile uint32_t PulseWidth; volatile uint8_t zakonczono_pomiar = 0; // obsluga przerwania TMR32B0 void TIMER32_0_IRQHandler(void) { static uint32_t LastCapture = 0; if ( LPC_TMR32B0->IR & (0x1<<4) ) // sprawdzenie czy przerwanie od kanalu zliczajacego...
Pytanie 1: http://infocenter.arm.com/help/index.jsp... CORTEX nie koniecznie wykonuje czynności w spodziewanej kolejności czy w spodziewany sposób, przekonałem się o tym dobitnie po kilku dniach nieustającej próby napisania tego w c/c++ bez podglądu na wygenerowany kod (tzn algorytm działał jednak występowały jittery...
Ten przykład jest dla czegoś innego niż Cortex-M3. Po pierwsze nie powinieneś używać push/pop, tylko "ręcznego" odkładania na PSP, bo push odkłada na stos PRZERWAŃ, a nie wątku. Po drugie nie powinieneś zapisywać i odtwarzać MSP, tylko PSP. 4\/3!!
Ciekawe czy to ma szansę, i do ilu MHz, do 60 MHz na przykład (na LLC)? Samo wejście i wyjście z przerwania (nie licząc ŻADNEGO KODU) to 12 cykli zegara. Tak więc przy 80MHz zegara rdzenia przerwania zewnętrzne z częstotliwością ledwo kilku MHz zasadniczo zajmą Twój układ w 100% samym wchodzeniem i wychodzeniem z przerwań.
Wystarczy dołożyć funkcję, która zwróci wartość zmiennej. Tak jest zrobione - ta funkcja też nie ma dostępu do tej zmiennej, bo jest wywoływana przez wątek który ma taką a nie inną konfigurację MPU. Ja nie mówię o "dostępie" w znaczeniu widoczności zmiennej w kompilatorze, tylko o prawach dostępu w Memory Protection Unit. To jest specjalny port FreeRTOSa...
Zwykle w takich sytuacjach okazuje się, że brakuje pamięci lub jest problem z jej wyrównaniem - w Cortex-M3 stosy muszą być wyrównane do 8. 4\/3!!
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ć...
Właśnie nie używam żadnych przerwań. Jest pusta pętla while(1) w main i tyle. W cortex-ie M0+ tak kiedyś miałem, że zatrzymał mi się w tym default handler, ale właśnie w chwili gdy chciałem wykorzystać przerwanie od timera i coś było nie tak w samej tablicy wektorów przerwań. Dlatego też na chwilę obecną nawet jej nie zmieniałem i zastanawia mnie co...
Mikrokontroler nie przechowuje liczb w systemie dziesiętnym, a w reprezentacji binarnej, więc nic nie musisz konwertować. Zbieranie danych musi być na przerwaniu timera. Jeżeli chcesz wejść w częstotliwości ok. 1 MHz, to trzeba to dobrze przeliczyć. 8-bitowiec tu nie da rady, a Cortex M3 ledwie da radę albo i nie. Trzeba bardzo uważnie zaprojektować...
w ARMach taka sama porazka z tymi przerwaniami... sa tylko dwa wektory przerwan na caly procesor no! tragedia! Polecam Cortex-M3 ;) Wektorów w pierony a nawet wiecej.
Narzędzie dedykowane dla kiwistik-k40 od freescale, to CodeWarrior. Czy mogę używać innego ? Tak, o ile dane narzędzie wspiera posiadany przez Ciebie procesor - to musisz sprawdzić. ARM w wymienionym zestawie to ARM CORTEX-M4, jakie są różnice pomiędzy ARM 7, a ARM CORTEX-M4 ? Mam książkę z heliona dla ARM 7, czy przyda mi się dla COREX-M4 ? ARM7 jest...
A nie prościej byłoby zablokować przerwania na czas modyfikacji? Te mechanizmy (STREX) są raczej przeznaczone do komunikacji w systemie wieloprocesorowym.
Lepszym rozwiązaniem jest użycie przerwań sprzętowych, które pozwalają na monitorowanie stanu zewnętrznego sygnału bez blokowania programu, lub programowanie cyklowe, gdzie zadania są wykonywane sekwencyjnie w cyklu, bez korzystania z pętli while lub for. Czy nadużywanie przerwań sprzętowych może prowadzić do nieprawidłowego działania programu? W jaki...
Wskazany w linku debugger to zapewne JLink ale za cenę niespełna 10 $ to napewno nielegalny klon :) Jeżeli chcesz poznać LPC'ki i mieć debugger to wejściami . Kiedyś zapomniałem o tym fakcie i dziwiłem się dlaczego program nie działa tak jakbym się tego spodziewał.
Cortex to też ARM ;-) Z tym że znacznie nowszy niż archaiczne siódemki. Cortex-M został stworzony specjalnie do stosowania w mikrokontrolerach - jego system przerwań bije na gowę ten z "siódemek", które zostały "na siłę" wepchnięte do mikrokontrolerów i wymagają sporej ilości protez aby jako-tako dało się je używać do celów typowo uK.
Obawiam się, że żaden AVR nie jest w stanie obsługiwać przerwań zgłaszanych z częstotliwością > 400 kHz. Czynności sprzętowe związane z obsługą i wyjściem z przerwania zajmują kilkanaście cykli zegara, do tego dodaj prolog i epilog procedury - następnych min. kilkanaście cykli. W ogóle nie używa się aż takich częstotliwości przerwań - takie rzeczy trzeba...
Praktycznie 100% plików z STM32 będzie kompatybilnych z innymi Cortex'ami. Rzeczy do zmiany: 1. wektory przerwań (to oczywiste [; ) 2. rozmiar i adresy pamięci w skrypcie linkera 3. opcję CORE w pliku Makefile przy Cortex-M0. Jak zwykle więc - http://www.elektroda.pl/rtvforum/topic13... 4\/3!!
Tutaj się nie zgodzę gdyż nie wiadomo dla jakiej architektury jest pisany ten tekst, zakładasz że dla AVR co uważam za błąd. Nie każdy uC czy procesor wywołuję ISR związany z źródłem i po stronie usera jest sprawdzenie jego źródła i jego obsłużenie. Patrz cortex-a. Owszem, nawet na AVR są współdzielone przerwania i w ISR musisz sprawdzić źródło - w...
OK, dzięki wielkie hotdog za rozbudowaną wypowiedź/odpowiedź! Niebawem zaczynam kompletować biblioteki do peryferiów tego mikrokontrolera (CAN, UART, timery, przerwania, itp, itd.) to na pewno będę potrzebował pewnej pomocy.[/u]
Z tego co wyczytałem nie można zmienić adresu wektora przerwań jedynie możnawskazać czy jest we FLASHU (czyli bootloader zaczynający się od początku FLASHa) w RAMie (Początek pamięci RAM 0x10000000) czy też jakiś tam bootrom (sprzętowy bootloader we flashu). Nie ma w M0 rejestru SCB->VTOR... chyba. Faktycznie, w ARM Cortex-M0 akurat wektory trzeba...
Fajne te xmegi :) Daleko im do ARM i w stosunku do nich są koszmarnie drogie. Mają jednak pewną zaletę, niespotykana w ARM, rejestr TOGGLE w GPIO i EEPROM, to czego trochę w ARM mi brakuje. Więcej zalet Xmega nie pamiętam za co serdecznie żałuję i postanawiam sie poprawić :-) Prosiłem kilka razy, aby Kolega sprawdzał informacje przed wysłaniem postu....
Czy robiąc napęd AC silnika indukcyjnego (falownik) na procku serii LPC176x, gdy tensterownik ma jednocześnie ma obsługiwać sieci Ethernet i CANopen, robić na to program "na piechotę", czyli pisać stosy TCP/IP i CANopena czy wgrać w to jakiś Linux ? Jeżeli system wbudowany (linux) to czy można z systemem embedded sterować silnikiem AC (czas, real time...
OMG co za herezje... Co to ma do rzeczy jakich instrukcji assemblera użyje kompilator? Kod w C ma ZAGWARANTOWANE, że ZAWSZE działa tak jak go widzisz - nie ma żadnych "myków" działających między wywołaniami tej samej funkcji... Żaden kompilator i żaden rdzeń nie ma jakiegokolwiek "bankowania rejestrów" w którym mógłby odzyskiwać wartości z poprzedniego...
Sprawdzilem i dalej nie wiem co jest grane. W trybie release moge wyslac wartosci przez usart, ale nie moge nic odebrac. Odbieranie probowalem zrobic na przerwaniach i w petli glownej. Za kazdym razem w trybie release nie moge nic odebrac. Ma ktos jakies pomysly co jest grane?
Dobra rada: nie rób tego w aplikacji. Był już kiedyś wątek nt. bootloaderów dla Cortex - odszukaj i poczytaj, znajdziesz tam prawie wszystko. Powrót z aplikacji do bootloadera w sposób inny, niż przez programowy reset, to też nieszczególnie szczęśliwy pomysł.
IMHO do problemu podchodzisz z troche zlej strony. procek ten na pewno moze wygenerowac przerwanie po oproznieniu owego bufora FIFO i po prostu powinienes napisac funkcje obslugi przerwania, w ktorej bedziesz zajmowal sie machaniem CS-ami. 4\/3!!
Narzut na włączenie i wyłączenie swoje zrobi przy dużym time. A na zwykłej fladze od przerwania ominąłbyś ten problem, kombinujesz tylko po co? Nie prościej zrobić timer programowy z tego? Nie prościej zapisać odpowiednią wartość do ARR?
A co to niby jest, jak nie adres: &TIM2->CCR1 Inna rzecz, że kompletnie nie rozumiem, po co chcesz używać DMA do przeładowania rejestru timera, zamiast zrobić to po prostu w przerwaniu timera.
Kontynuując, aby sprawdzić aktualne wywołane przerwania w systemie, sprawdzamy rejestr NVIC->ICPR (w cortex-m0+ to NVIC->ICPR IRQn_Type . Kasowanie przerwania odbywa się po przez wpisanie 1 pod zgłoszone przerwanie, czyli jeśli na 3 bicie mamy 1, to ponownie tam wpisujemy 1, wtedy jest ono kasowane. Ale mam teraz inny problem, mianowicie za nic...
Gdzieś znajdziesz dokładne info, ale wejście to chyba ~12 cykli, a wyjście to chyba ~6. Tak więc generalnie same te operacje zajmują tak ze ~12-18 cykli, +/- oczywiście. 4\/3!! Wg UM rdzeń arm powinien obsłużyć przerwanie w ciagu 15 cykli. (3.5.28 IRQ latency register). Dotyczy to rdzeni ARM Cortex M0. Troszkę mnie to zdziwiło, bo kiedyś wyczytałem,...
https://obrazki.elektroda.pl/8717321000_... Cena $5 (20zł) dotyczy oczywiście producenta, u nas jeszcze VAT, ale i tak powinniśmy się zmieścić w 30zł. Ale do rzeczy, co się zmieniło w porównaniu do RP2040: 1. Jest teraz do wyboru płytka 7×7mm, QFN60 (RP2350A) z 30 GPIOs lub 10×10mm, QFN80 (RP2350B) z 48 GPIOs 2. 4 MB pamięci QSPI flash,...
O tym akurat wiem, ale z tego co napisał autor, wg mnie wynikało, że te priorytety są odwrócone w samym RTOSie co by było nieprawdą. To że Cortexy mają tym wyższy priorytet im niższy jego numer można wywnioskować chociażby zerkając na tabelę wektorów przerwań :) Nie musicie mi tego cytować
... i wstawić ją bezpośrednio pod adres fiq w startup-ie. Ponoć da się to zrobić (osobiście nie próbowałem), jednak należny pamiętać,że nie ma tam za dużo miejsca na kod. Podobno Cortex'y mają tam więcej miejsca :D Albert Cortex-y mają to zupełnie inaczej rozwiązane. Posiadają NVIC i nie ma osobnego przerwania FIQ (chyba tylko specjalne dla USB oznaczone...
W Cortex-M7 jest zaimplementowany zaawansowany mechanizm odczytów do cache. W manualu dotyczącym LTDC (AN4861), jest na przykład taka wzmianka: As illustrated in Section 4.6, the MPU attributes should be correctly configured in order to prevent graphical performance issues related to the Cortex®-M7 speculative read accesses and cache maintenance....
Nie wiemy nic o typie uC. Jeśli nie jest to Cortex-M4, to zapewne przyczyna kłopotu leży w bezsensownym i niepotrzebnym użyciu typu float. Użycie dwóch przerwań od dwóch timerów też ciut bez sensu, przecież wystarczyłoby w co 20-tym przerwaniu timera od pomiarów inicjować transmisję danych. Czy funkcja HAL_UART_Transmit_IT() jest blokująca? Mam nadzieję,...
Raster 0.5 da się bez problemu zrobić metodą termotransferową. Tak jak w przypadku fotochemii, warunkiem jest dobra drukarka i papier. Przyda się też laminator. Ja używałem dużego biurowego kombajnu Xeroxa, matowego papieru foto z tesko (niestety dawno go już nie widziałem) i laminatora z podwyższoną temperaturą. http://obrazki.elektroda.pl/8916863300_1...
Tutaj masz opisane jak należy postępować z NVIC dla FreeRTOS w CM3: http://www.freertos.org/index.html?http:... Ogólnie ustawiasz Priority Group 4. Przerwania, które wykorzystują funkcji systemowych przy Twoim ustawieniu 191 muszą mieć preemption priority od 'b' wzwyż. Ta wartość 191...
Przerwania i wyjątki używają 'Main Stack'. Po resecie procesor Cortex jest w 'Privileged Thread Mode', chcąc pozostać przy jednym stosie ustawiamy 'Main Stack'. W skrypcie linkera: [syntax=script]__main_stack_size=1024 __process_stack_size=0 [/syntax] W startupie inicjalizujemy: [syntax=asm]Reset_Handler: ldr sp,=_estack [/syntax] I na tym poprzestajemy....
(at)LED5W O ile w AVR-ach być może jest to możliwe, to zastosowanie przedstawionej wyżej konstrukcji w Cortex-ach spowoduje, że uC będzie dalej pracował w handler mode . Skutki mogą być trudne do przewidzenia.
Najbardziej prymitywną formą uruchomienia cortex-m jest wrzucenie do adresu startowego adresu stosu, wrzucenie pod wektor przerwania resetu adresu funkcji, która może być już main'em. Oczywiście toolchainy i IDE zapewniają już cały startup, ale to i w AVR się dzieje. Nawet pll nie trzeba konfigurować, zwłaszcza że układ odpala się z oscylatora wewnętrznego......
Co innego w przypadku np procesorów, które posiadają bit-banding (Cortex-M3), gdzie istnieje wirtualny obszar pamięci umożliwiający dostęp do pojedynczych bitów, zarówno do odczytu jak i zapisu. W takim przypadku można by utworzyć mapującą strukturę i przytwierdzić ją do takiego obszaru pamięci, dzięki czemu można atomowo odwoływać się do pojedynczych...
void countDown(void) __attribute__ ((interrupt)); coś takiego owszem mam W ARM7 jest 5 rodzajów przerwań, więc to co masz to za mało. programie testowym (który działa) A ten program testowy to skąd? Bo jeśli "z netu", to z faktu że "działa" zbyt wiele nie wynika - równie dobrze może to być przypadek (większość programów z netu ma tą przypadłość). Jeśli...
LD PC, [PC, #-0x0ff0] oznacza, że do PC zostanie załadowana zwartość komórki pamięc spod adresu PC - 0x0ff0. Ponieważ owa instrukcja leży na początku pamięci odjęcie od PC -0x0FF0 spowoduje ze powstanie "ujemny" w postaci 0xfffffxxx. Jeśli LDR PC ... będzie leżalo na adresie 0xF0 po odjeciu 0xff0 wyjedzie wynik 0xfffff100 czyli adres początku tablicy...
Dziękuje, już sobie poradziłem. Jeśli kogoś interesuje w czym tkwił problem, to powiem, że miałem skonfigurowany USART od SmartCard tak jak w przykładach z ST. Niestety tam domyślny Guard Time był 16. Dla mojej karty widocznie było to za dużo i zjadało mi bajty wracające od niej. A dlaczego bajty wysyłane, wracały do mnie? Po każdym zapisanym bajcie...
cortex firmware cortex manager cortex assembler
wyjscie optyczne technics rozebra ekspres saeco kontrolka oleju cieplym silniku
analizator widma analizator widma
Schemat wtyczki komputera BMW E46 2.0d Schemat podłączenia sterownika Negros Kom-Ster