Bez przerwań nie da się zrobić absolutnie niczego, co jest bardziej skomplikowane. Dzięki zastosowaniu przerwań mikrokontroler nie musi stale sprawdzać, czy zaszło jakieś zdarzenie. Ciągłe sprawdzanie czegoś takiego (ang. polling) spowolniłoby program. Ponadto kolejny kłopot to odczytanie danej flagi z układu zewnętrznego (np. przez SPI/I2C) to dodatkowe...
ale nie wiem jak podejsc do przerwan zewnetrznych (przyciski). Przyciski mam podlaczone pod: P3.3 (Int1), P3.5(T1), P3.4 (T0), P3.2 (Int0). Jak to jest mozliwe ze sterujac multiplekserowo wyswietlaczami segmentowymi wysylajac aktywny bit na port P3, moge jednoczesnie zglaszac zewnetrzne przerwania (z przyciskow)?? Możesz. Ale dlaczego przyciski mają...
jako ze jestem początkujący to po prostu robię kopiuj i wklej z innych przykładów ;) nie do końca rozumiejąc o co chodzi (C to czarna magia na razie jeszcze). dlatego przydałby ci się jakiś dobry kurs C ;) A w uproszczeniu jak zamienić SIGNAL na ISR - po prostu na razie zamiast SIGNAL pisz ISR tylko podawaj nieco inne nazwy wektorów tych przerwań....
Tak na szybko to powinieneś mieć plik prawdopodobnie o nazwie startup, w którym umieszcza się wektory obsłygi przerwań wyglądający jakoś tak: [syntax=c] //Interrupt vector table __attribute__ ((section(".isr_vector"))) void (* const exceptions_vectors[])(void) = { &_estack, // The initial stack pointer reset_handler, // The reset handler unused_vector,...
Atmega jest taktowana zewnętrznym kwarcem 12MHz, żeby jeden tick timera trwał ~1us. 1. Czy timer 8-bitowy przyjmujący zewnętrzne impulsy, może je przyjmować w takich samych odstępach czasowych jak 16-bitowy? Tak. Te dłuższe timery mają po prostu większy rejestr w którym liczone są impulsy, poza tym działają tak samo. 2. Czy do przerwania, kiedy jest...
Tak tez podejzewalem dlatego poczekalem cierpliwie az 16 bitowe TCNT1 sie przepelni, ale zadnego przerwania nie dostalem. Bo zastosowałeś nie ten wektor przerwania: Od przepełnień są wektory z OVF.
Andrzej__S , z przerwania możesz wtedy wywalić dodatkowy "licznik" [syntax=avrasm] inc TIME cpi TIME, 250 brne PAUSE ldi TIME, 0[/syntax]
Sprawdź w dokumentacji do winavr (avr-libc) czy to jest właściwy wektor tego przerwania dla atmega168...
Kompilator mówi, że nawet coś takiego jak SP, czy SPL nie istenieje w tym procku :cry: A co do rozkazów rcall to przecież też korzystają ze stosu. Więc skoro w prostym miganiu działa to znaczy że ogólnie ten 3 stopniowy stos chyba trybi. ________________________________________... Problem rozwiązałem. Przekopałem dziś chyba wszystkie...
Skonfigurowałem w tym procesorze odbiór i nadawanie poprzez rs232. Jak stworzyć przerwanie od odbiornika? Gdzie jest tablica wektorów obsługi przerwań itp?
Ja sie nie znam na STM8 ale oglądając Twój kod odnoszę wrażenie że wektor dla przerwania powinien być opisany jako: {$82000000+tim2}
nie jestem specem w "c" ale wartosc wpisywana do rejestru licznika T1 ((to chyba ten ktory u Ciebie ciągle odlicza) - powinna być wpisywana odrazu po wejsciu do podprogramu obsługi przerwania a nie na jego koncu. (tym bardziej ze program wykonuje sie rozną liczbę cykil). pamietaj o tym , ze mikrokontroler ma stale adresy wektorów przerwan. Tego nie...
Witam, Mam taki problem z tym prockiem Atmela, ze potrzebuje ustalic ktore przerwania maja wiekszy priorytet od innych (tzn moga przerwac je w trakcie wykonywania). W dokumentacji znalazlem jedynie informacje o tym ze w przypadku wystapienia dwoch przerwan na raz wykonane zostanie to ktore znajduje sie wyzej w wektorze przerwan. Chcialbym sie dowiedziec...
Witam. Uruchomiłem WDT (będę używał tego skrótu zamiast watchdog) bez resetu, jedynie samo przerwanie. Wszytko "ładnie pięknie" do czasu gdy "wskoczy" do funkcji przerwania. Nie potrafię wyjść z tej funkcji. Flagę przerwania WDINT nie da się softowo wyczyścić (jedynie poprzez reset). Stad też nie wiem co mam zrobić, by wyjść z funkcji przerwania i nadal...
Przerwania PCINTx wykonują się przy każdej zmianie stanu logicznego, niema możliwości konfiguracji np. tylko dla zbocz narastającego lub opadającego. Stan zbocza na poszczególnym pinie sprawdzasz w przerwaniu. Attiny13 ma 6 pinów PB.0-PB.5 (PCINT0 do PCINT5) które mogą wywołać przerwanie. I tu jest jedna myląca rzecz :) dla tych pinów jest tylko jeden...
Witam, Dzieki za wyczerpujaca odpowiedz, widze ze tez zaglebiasz sie w szczegoly tego ustrojstwa ;]. W tej chwili u mnie juz dziala jak trzeba. Jezeli chodzi o wywolanie funkcji to mialem na mysli wywolanie funkcji juz z mojej funkcji obslugi przerwania. Sprawa wygladala tak, ze mialem mthumb-interwork z tym ze dla samej komendy linkowania gotowych...
dodaj pętle nieskończoną na końcu ...i zmień nazwę wektora na INT0_vect . Druga i niestety MASAKRA jaką robisz to _delay_ms() w przerwaniu. Jak napisał Mirek, w przerwaniach nie używamy żadnych "delay"(!) W ogóle nie używamy _delay() -nie tylko w przerwaniach. Czyżbyście cierpieli na jakąś manię prześladowczą :?: Poza tym- po co jest to kasowanie flagi...
Jeśli proc faktycznie się nudzi, to może w pętli czekać na zapalenie flagi INTx zamiast zezwalać na wykonanie podprogramu obsługi przerwania. Zyskasz na czasie przyjęcia obsługi przerwania - nie będzie odłożenia adresu powrotu na stosie, oraz wywołania funkcji z wektora przerwań. powodzenia, genetix
poczatek ramu jest wykorzystywany przez bootloader. flash magic - zgodnie z nazwa - sluzy do programowania FLASHa, a nie RAMu. najprawdopodobniej masz w kodzie wlaczone tez remapowanie wektora przerwan na poczatek ramu (czyli od 0x4000000), a ze nic tam nie ma (bo twoj wektor przerwan zaczyna sie na 0x40000200), to program robi jakas blizej niezdefiniowana...
Konfiguracja GPIO [code][syntax=c] GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_Init(GPIOA, &GPIO_InitStructure); [/syntax] Konfiguracja NVIC [syntax=c] void NVIC_Config(void)...
Czekaj, spokojnie, powoli...:] Wiem ze mam DWA wektory przerwan....Ale: Moze "pytania w pigulce": -Gdzie konfiguruje się w jakim trybie procesor ma wejsc do tego przerwania -Jak sie maja adresy wektorow przerwan do MMU? -Jak sie je przemapowywuje? -JAK SIE JE WLACZA?? (wystarczy ustawic bit w rejestrze z manuala??) No to ok, ustawie odpowiednie bity,...
Portuję system Contiki na STM32F303 i natknąłem się na problem z brakiem linkowania handlerów przerwań. Ponieważ interesuje mnie obsługa modułu radiowego SPIRIT1, portowanie sprowadziło się do skopiowania katalogu platform/stm32nucleo-spirit1 oraz katalogu cpu/arm/stm32l152 do platform/stm32elnix oraz cpu/arm/stm32f303 i zmodyfikowania znajdującego...
smalski->O priorytecie przerwań w AVR-ach , można powiedziec tak , że im niższy(mniejszy) adres wektora , tym wyższy priorytet posiada dane przerwanie. To jest zasada stosowana w PC, (np przerwanie 2h ma prorytet wyższy od 3h, ale niższy od 0h... 0h (dzielenie przez zero) ma najwyższy priorytet..).. w AVR wszystkie przerwania mają taki sam priorytet.....
Procesor ten wspiera takiej możliwości sprzętowo (inne np intel x86 albo Motorola CPU32, posiadają tzw wektoryzowalny system obsługi przerwań i jest taka możliwość). Pozostaje rozwiązanie programowe, niestety ono nieco spowalnia działanie programu.
gmp wrote: Procek obsluguje poprawnie 4xmnijesze czestotliwosci od zegara. Dziwne, ale z dokumentacji wynika coś zupełnie innego. Mikrokontroler poprawnie rozpoznaje zmianę stanu (przy reakcji na zbocze) o ile stan ten trwa dłużej niż jeden cykl zegarowy. Przy czasach krótszych może wykryć albo nie. Pan Arkadiusz Krysiak w swojej książce o AT90S2313...
A masz procedurę obsługi przerwania ? Musi być zapisana pod odpowiednim adresem bo Atmegi mają wektor przerwań z osobnym adresem dla każdego źródła przerwania to raz. Dwa to proponowałbym inna kolejność tych poleceń. Config Int0 = Rising Enable Int0 Enable Interrupts Tak to powinno wyglądać. Najpierw konfiguracja a na koniec włączenie przerwań. Ale...
Dodam jeszcze że kiedy wywalam na port stan rejestru licznika 1 TCNT1H to jest caly czas 0, a jak patrze na TCNT1L to liczy od 0 do 255, tak jakby licznik byl 8 bitowy. Nie wiem czemu, juz brakuje mi pomysłów. Aha i jeszcze jedną rzecz zauważyłem. Wektory dla obsługi przerwań są parzyste i tak dla ATmegi32 dla przerwania z przepełnienia T1 to jest 0x12...
Witam, zbudowałem prosty układ do testowania przerwania zewnętrznego INT/RB0. Według moich założeń układ po wciśnięciu microswitcha powinien wygenerować przerwanie i naprzemiennie zapalać i gasić diodę na porcie D ;***** COMPILATION MESSAGES & WARNINGS ***** ERRORLEVEL -302 ; register in operand not in bank 0 ;***** PROCESSOR DECLARATION & CONFIGURATION...
Witam, Chcę obsłużyć przycisk USER za pomocą przerwania. Projekt oparty jest na ćwiczeniu 9 z książki "STM32 Aplikacje i przykłady w języku C". NVIC_Config(void) void NVIC_Config(void){ //Konfigurowanie kontrolera przerwan NVIC NVIC_InitTypeDef NVIC_InitStruct; EXTI_InitTypeDef EXTI_InitStruct; #ifdef VECT_TAB_RAM // Jezeli tablica wektorow...
Nie znam tego kompilatora ale skoro to działało na ATmega8 to tylko się w 128 zmieniły adresy rejestrów oraz wektorów przerwań. Sprawdź to a najlepiej zobacz w listingu czy jest właściwie umieszczony wektor przerwania.
Witam, 1) kod powinien mieć wcięcia, to nie asembler 2) niestety kurs z tamtej strony ma już ze 2 lata, avr-libc się trochę zmieniło od tamtego czasu. Polecam korzystać z w/w dokumentacji w jęz. angielskim do weryfikacji funkcji itp. 3) jak już pisałem, GIMSK został "przemianowany" na GICR. 4) zamiast SIGNAL() używa się ISR() 5) trzeba czytać, co kompilator...
Witam, mam problem z przerwaniem modulu TWI w symulatorze AVR STUDIO. Program pisalem w C , obsluga przerwan globalna i TWIE ustawione.... Gdy ustawie recznie flage TWINT program nie przechodzi do wektora przerwania, tak jakby nic sie nie stalo. Nie wiem czemu tak sie dzieje, napisalem to samo w assemblerze i reczne ustawienie tej flagi wywoluje przejscie...
cześć chłopcy i dziewczęta :) Od jakowegoś czasu próbuje rozgryźć przerwania w procku ADUc7026 korzystając z IAR System , Wigglera i H-Jtaga. Wszystko skonfigurowane wg opisu na stronie: (EN).pdf W związku, ze korzystam z ARMa z firmy Analog Device nie mam możliwości flashowania pamięci wiec ożywając plik startowy dostępny z examplow IARa programuje...
Na miejscu kolegi nie bagatelizowałbym sprawy obsłużenia przerwania portu równoległego i dokładnie upewniłbym się czy system operacyjny którym dysponujesz obsługuje własnie te przerwanie. Z tego co się orientuję na popularnych PC-tach tylko jakaś stara wersja OS-a używała tego. A chcąc użyć przerwania pod Dos-em należało modyfikować wektory przerwań....
dla ISR w trakcie wykonywania procedury obsługi przerwania zablokowane są pozostałe przerwania. Potrzebuję żeby wykonywały się tylko te o wyższym priorytecie. Tak jak napisał kolega wyżej, tu nie ma priorytetów przerwań. Wprawdzie można je odblokować na czas wykonywania przerwania ale trzeba uważać i ew nauczyć się z tego korzystać. Podaje się wtedy...
Musisz użyć przerwania zewnętrznego. Po pierwsze, uaktywnić je w rejestrze IE. Odpowiada za nie bit 0. Należy go ustawić. Podobnie, należy ustawić bit 7 w tymże rejestrze, aby włączyć system przerwań mikrokontrolera. Następnie, w zależności od kompilatora, musisz zadeklarować funkcję, która będzie obsługiwała to przerwanie. Ja używałem do 8051 środowiska...
Witam. Walczę właśnie z programem do PWM opisywanym parę postów niżej. Postanowiłem jednak założyć nowy temat bo komuś może się przydać do innych projektów. Mianowicie problem jest z przerwaniem od uarta w M169 wydaje mi się że wszystko ustawiłem poprawnie jednak wymuszenie przerwania w symulacji nie powoduje skoku do wektora. .include "m169def.inc"...
Czyli patrząc pod kątem identyfikacji źródła przerwania AVRy mają jednak wektorowy system przerwań, dobrze zrozumiałem ?
Witam, napisałem obsługę zewnętrznego przerwania, które się wykonuje bezproblemowo, jednak po obsłużeniu przerwania program nie wraca od razu w miejsce z którego przerwanie zostało wywołane. Oto kod: [syntax=asm].INCLUDE "m16def.inc" .DEF acc = r16 // akumulator .EQU SYS_FREQ = 1 .CSEG .MACRO delay1sek // delay 1 sekunda na 1MHz ldi r17, 0x09 9 delay3:ldi...
Witam! Zbudowałem prosty układ i chciałbym na nim nauczyć się dobrze obsługiwać i synchronizować przerwania. Jego głównym założeniem będzie liczenie co jedną sekundę do 99 na dwóch wyświetlaczach siedmiosegmentowych(obsługa "multipleksacją") z dodatkowymi opcjami(odebrać coś z komputera itp). Pisałem w C a z assemblerem dopiero zaczynam dlatego proszę...
Problem rozwiązany, zmieniłem tylko przerwanie które muszę włączyć, na compare i wektor do niego. Dzięki za pomoc :) Wstawiam tu kod, jeśli ktoś miałby taki problem jak ja, to może dojdzie co zrobić po kolei aby zadziałało ;) Czas jaki led ma migać ustawiłem programowo na wypełnienie 10% co daje jedno mignięcie 200ms i 1800ms przerwy. [syntax=c] /*...
Daj nowy region pamięci tylko na przerwania, Flash zaczniesz wyżej. Ja dałbym nawet nowy region na ów eeprom. mógłby być programowany wartościami domyślnymi, albo po prostu przesuń operator . za przerwaniami, choć to mało eleganckie.
Firma SiFive zaprezentowała właśnie dwa nowe rdzenie RISC-V z rodziny Performance, zaimplementowane w procesorach P670 i P470 ze wbudowanym rozszerzeniem RISC-V dla operacji wektorowych, celem akceleracji algorytmów AI/ML, przetwarzania mediów i analizy danych z czujników. Układy te przeznaczone są do zastosowań o dużym wolumenie produkcyjnym, takich...
( void INT(void) interrupt 0 { instrukcje } To akurat przerwanie dotyczy INT0 a to: // Przekroczenie T0 void Timer_0 (void) interrupt 1 właśnie dotyczy T0 Kolejne numerki za słowem interrupt oznaczają wektory przerwań w '51 Tak przynajmniej jest w kompilatorze Raisonance.
Witam, mam problem z programem obsługi przerwania od Timera2. Używam biblioteki #include <libopenstm32/rcc.h> #include <libopenstm32/flash.h> #include <libopenstm32/gpio.h> #include <libopenstm32/usart.h> #include <libopenstm32/timer.h> #include <libopenstm32/nvic.h> void clock_setup(void) { rcc_osc_on(HSI);...
Wczoraj uruchomiłem RTC, działa ładnie, choć nie wiem dlaczego na koniec wpisu do rejestru RTC_CNT muszę dwa razy wyzerować bit RTC_CRL_CNF:) W następnej kolejności chcę uruchomić przerwanie od RTC, no i oczywiscie nie działa, inaczej nie pisałbym tu. Jak rozumiem z dokumntacji (tej cześci którą przeczytałem) i opisu przykladów, najpierw powinny być...
nie jest to fuse bit tylko bit w GIRC ktory odpowiada za przepisanie tablicy wektorow przerwan do bootloadera...w Datasheet jest opisany Dodano po 5 w procku nie dziala sekcja SPM (nie mozna bylo zapisac nic do flasha poprzez spm). podlaczylem inny uklad PCB tez z mega8 i wszystko bylo OK. No wlasnie bylo !!! bo po chwili zabawy drugi uklad tez nie...
Wystarczy nie właczać globalnego zezwolenia i ręcznie sprawdzać przerwania (polling) Tak też się da, ale to raczej mało "eleganckie" i komplikuje program wykonywany między przerwaniami. Ja stosuję taką metodę: wszystkie interesujące mnie przerwania mają ten sam wektor (adres procedury obsługi), dzięki czemu sprawdzenie źródła przerwania jest wykonywane...
Witam Niedawno zacząłem "zabawę" z zestawem Kamami ZL27ARM z procesorem STM32F103VB. Mam problem z przerwaniem od timera SysTick. Jest ono generowane 4 razy za często - miało być 1 raz na sekundę, a jest 4. Kwarc 8MHz, SYSCLK = 72MHz, SysTick_CLK= 72/8=9MHz czyli załądowanie do licznika wartości 9'000'000 powinno dać zgłoszenie przerwania co 1s, więc...
Cześć, Nie dawno zacząłem przygodę z STM32. I mam duży problem nad którym siedzę już parę dni. Chciałem stworzyć prostą komunikację z komputerem gdzie przez terminal odpowiednimi komendami będzie można gasić i zapalać diody i w drugą stronę przesyłać które diody są zapalone. nie wiem gdzie jest tu błąd więc Ustawienie GIPO void GPIO_Conf(void) { GPIO_InitTypeDef...
nie wiem czemu przeskakuje do 8 od dołu "reti" po czym dochodzi do pętli głównej i co drugi krok wraca do tego nieszczęsnego "reti" Tam nie powinno być reti, a poza tym jako wektrów przerwań dla ATmega16 musisz używać instrukcji 'jmp', a nie 'rjmp'. Spróbuj zrobić tak: ..... .org 0x00 jmp reset jmp ext_int0 jmp def_vect jmp def_vect jmp def_vect jmp...
Pamiętaj jeszcze o tym że jeżeli UART nie nadąży wysyłać próbek to żadne FIFO Ci nie pomoże (w końcu się zapełni). Zauważyłem, że moja kolejka FIFO się zapycha :/. Sprawdzam to tym fragmentem kodu: [syntax=c]if (FIFO_READ - FIFO_WRITE < 2) { LPC_GPIO1->FIOCLR |= (1<<28); }[/syntax] w funkcji void FIFO_Write (uint16_t); i obserwuje na oscyloskopie...
Na początku sprawdziłem, jest JMP 3-cyklowy, zapomniałem o tym wspomnieć, myśląc że komentarze w kodzie o tym mówią. Jest nawet dodatkowy NOP, aby przerwanie miało dokładnie 12 cykli, jakoś na parzystych łatwiej mi się dokonuje obliczenia. Może innym licznikiem sprawdzę ile tak naprawdę cały ten kod konsumuje cykli... Update: Wyszło na to, że cały ten...
W Pascalu możesz to tak napisać: program ObslugaPrzewan; {$B-,F-,R-,S-,V-} {$M 1024,0,0} //Tu rezerwujesz pamięć, jeśli nie wiesz ile to zawsze lepiej za dużo niż za mało {$F+} procedure ObslIRQ5; interrupt; begin (...) end; procedure ObslIRQ7; interrupt; begin (...) end; {$F-} begin SetIntVec($05,...
Praktycznie to masz tylko dwa wektory przerwan pod ktore mozesz podłączyć lub dokonfigurować układy procesora.
Witam, zastanawia mnie dlaczego nie mogę używac rcall gdy jestem w procedurze obsługi jakiegoś przerwania (procesor to attiny2313). Podczas symulacji w AVR Studio strzałka jakby zatrzymuje się na tej instrukcji ale program nie wykonuje żadnego skoku. .include "tn2313def.inc" .def acc = r16 ; nadanie rejestrowi r16 nazwy symbolicznej .equ led...
Add 1. Priorytet przerwań w MSP430 jest stały i nie można go zmienić. Działa tylko wtedy, gdy w tym samym czasie wystąpi więcej niż jedno przerwanie, czyli w praktyce bardzo rzadko... Częściej natomiast wykorzystuje się wielopoziomowe przerwania - w trakcie obsługi przerwania procek może wejść w obsługę innego przerwania (jeżeli mu się na to pozwoli)...
Witam! Spędziłem już dobre kilka dni na czytaniu specyfikacji, przykładów i różnych wypowiedzi innych ludzi, a problemu wciąż nie mogę rozwiązać. Pracuje na procesorze AT91SAM7S64 z programem CrossStudio i potrzebuje skonfigurować Timer0 tak by zliczał od 0 do rejestru RC w kółko i przy tym generował przerwanie. Z Timerem poradziłem sobie bez większych...
w kodzie programu jedyne niepokojące jest to, że F_CPU jest deklarowane PO dołączeniu delay.h (ja to deklaruję na poziomie pliku Makefile "-D F_CPU=$(F_CPU)"). Sprawdź też, czy plik jest kompilowany na atmega8, bo jeśli wybierzesz inny, to kompilator nie zaprotestuje, a wektory przerwań mogą się różnić, tudzież wywołanie przerwania bez kodu obsługi...
Co do pierwszego postu: To jest wynik pisania czegoś takiego jak "TIMSK = 0x80;" W ten sposób załącza się przerwanie OCIE2:"Timer/Counter2 Output Compare Match Interrupt Enable" a nie TOIE2:"Timer/Counter2 Overflow Interrupt Enable", który jest bit niżej. W symulatorze dokładnie widać, że jest wykonywany nie ten wektor przerwania. Wejście do wektora...
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,...
Dopóki symbole związane z funkcjami są globalne (co zapewniają odpowiednie atrybuty lub umieszczenie ich w nagłówkach) nie ma znaczenia, gdzie znajduje się ciało funkcji. Zresztą tak naprawdę dla kompilatora nie ma znaczenia nawet to czy symbol jest globalny, czy nie, to dopiero linker będzie się rzucał o to, że czegoś nie może znaleźć. AVR-libc zapewnia...
Próbuję pożenić template Freddiego (stm32_blink_led) z StdPeriph Ale to widziałeś? Ma ktoś pomysł co może być nie tak ? W skrypcie linkera należy ustawić rozmiar stosu dla przerwań - domyślnie jest zero, co zwykle źle się kończy. Ustawiłeś jakąś sensowną wartość? Podejrzewam, że albo czegoś nie nadpisuje (override) lub z jakiejś przyczyny mam nie taką...
Jestem na etapie uruchamiania nowego zestawu opartego na STM32F4, w kolejnym kroku postanowiłem uruchomić komunikacje przez UART, w tym celu wykorzystuje przerwanie. Problem jest następujący. pomimo konfiguracji poprawnej przerwanie ląduje w _Default_Handler. Obsługę przerwania mam zdeklarowaną, adres funkcji ląduje do wektora przerwań.
czytałem ten artykuł jak i wiele innych, tylko tutaj jest napisane że faktycznie miejsce wystąpienia przerwania nie jest istotne a czas: W punkcie "Flagi - rozwiązaniem problemu" "Takie rozwiązanie ma oczywiście także pewną wadę. Mianowicie, kod który zostanie wykonany w odpowiedzi na przerwanie nie jest wykonywany dokładnie w momencie rozpoczęcia...
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...
To znowu ja... staram się teraz zrobić 2 bufory: nadawczy i odbiorczy - nadawanie i odbiór w przerwaniu. Jeśli ktoś ma opanowany ten sposób transmisji to proszę o sugestie i porady. Kod mojego programu zamieszczam niżej. Niestety nie działa tak jakbym chciał - nie wiem jak zainicjiować nadawanie. Gdy ustawie flage TI to jest generowane przerwanie ale...
należy "podpiąć się" pod przerwanie 1ch. Przerwanie to jest generowane 18.2 razy na sekunde. #include <dos.h> #include <conio.h> #define cint 0x1C typedef void interrupt(*intproc)(void)... // typ wsk na proc. przerwania void interrupt far zegar(void){ // nasza nowa obsluga przerwania // instrukce które mają być...
Co do priorytetów w AVR to jest on taki jaka kolejność wektorów przerwań. A wracając do twojego problemu, ja zrobił bym to tak: Jak procedura przerwania od wyświetlacza zrobi swoje to ustawia flagę gotowości. 1. Ty natomiast w programie głównym testujesz tą flagę, jak stanie się gotowa to wywołasz procedurę odczytu z kolejnego DS-a i zerujesz tą flagę....
No cóż, dobrze jest raz napisać własną porządną wersję obsługi 1wire, a potem uzywac wielokrotnie... ;) BTW Można używać wiele wektorów przerwań na raz, ważne aby procedury ich obsługi trwały krótko, co w Bascomie wymaga nieraz większej dłubaniny (i wymaga dogłebnej wiedzy o tym co robi kompilator z poszczególnymi poleceniami), niż w asm. Pozdrawiam,...
jak wydaje sie człowiekowi ze powinno działac a nie działa to rózne mu przychodza mysli do głowy. Swoja droga w dalszym ciagu nie osiagnołem celu. Aby rs wygenerował przerwanie musze ustawic: w MCR3 -uaktywnienie OUT2 w IER odblokowanie przerwan (wysłac tam 00000001b) oraz odblokwowac przerwanie w kontorlerze PIC Coś jeszcze? Ramka danych, predkosci,...
Witam. Mam mały problemik z UARTem . Mianowicie wszystko dziala ladnie , wysylanie i odbieranie znakow. Problem powstaje w momencie gdy wlacze przerwanie od zakonczenia nadawania (TXC: USART Transmit Complete ). Wowczas po wyslaniu jakiegokolwiek znaku z mikroprocesora mikroprocesor sie restartuje. Uklad to ATmega16, kwarc 16Mhz, predkosc transmisji...
Czy jest w ogole mozliwa obsluga przerwania gdy debagujemy prze JTAG w pamieci RAM?? Mam prosciutki program i jak wywolam przerwania to program mi sie "wiesza" tzn po zatrzymaniu debagingu licznik rozkazow jest w na poczatku pamieci. Pytam o to bo przeciez wektory przerwan sa na poczatku pamieci flash, czy mozna je przestawic? Jesli tak to w jaki sposob?...
Na przykładzie timera0 ;wektory przerwań .org 0x00 rjmp reset .org 0x09 rjmp przerwanie_timer0 reset: .def acc = r16 .def maska = r17 ;### START TIMER0 in acc, TCCR0 ldi maska, 0b00000111 ; 3 ostatnie bity to ustawienie preskalera or acc, maska out TCCR0, acc in acc, TIMSK ldi maska, 0b01000001 or acc, maska out TIMSK, acc ; odblokowanie przerwania...
Jak przerwanie pierwsze jest wykonywane i w tym czasie wystapi drugie, to flaga drugiego bedzie ustawiona dopoki nie skonczy sie pierwsze, czyli jak sie pierwsze skonczy to zacznie sie drugie. A w AVRach jest wektor przerwan, ale ustala on kolejnosc tylko wtedy, jak wystapia przerwania w jednym cyklu zegarowym.
z moich obserwacji 'na szybko' wynika, ze przerwania standardowo definiowane przez __attribute__ ((interrupt("FIQ"))) cos nie chca dzialac, wiec profilaktycznie spytam - czy w gcc w aktualnej wersji nadal jest blad w tworzeniu poprawnego prologu i epilogu dla tego typu przerwan? czy tez moze ja cos poknocilem i dlatego nie dzialalo (nie wchodzi w ogole...
Mam taki problem z wygenerowaniem i przechwyceniem przerwania drukarki (IRQ7) w komputerze PC. W assemblerze została podmieniona procedura obsługi przerwania w tablicy wektorów przerwań (wszystko pod DOS w C++). Przerwanie ma być generowane sprzętowo, za pomocą linii ~ACK na porcie LPT1 i tutaj się zaczyna problem, ponieważ program ulega zawieszeniu...
Poniższy program dla wersji ATMega32 usiłuję przerobić na wersję dla ATMega644p /która posiadam/. Program ma za pomocą przerwań realizować opóźnienia. Niestety robi się to wszystko skomplikowane ponieważ jak wiadomo szczególnie system przerwań i timerów jest dużo bardzie rozbudowany niż na niższych modelach procesorów. Jeśli ktoś jest w stanie mi pomóc...
Oczywiście. Zarówno puszczałem kod swobodnie i czekałem na breakpoint'a jak i działałem StepOver i czekałem na zmianę w AIC_IPR(po zmianie powinno się wywołać przerwanie, zmiana następowała, a przerwanie nie). //Edit: Zauważyłem, że Linker wykorzystuje pliki *.icf do pozyskania danych o pamięciach oraz wielkościach stosów. Niby w pliku znajdują się...
To nie chodzi o "zakomentowanie" początku i końca wrappera, tylko o zupełnie inny sposób wejścia do przerwania. Jeśli nie masz zagnieżdżeń, to powinno to być zrobione w tablicy wektorów i wyglądać podobnie do tego (dla LPC2103): ldr pc, [pc, #-0xFF0] // Interrupt exception -> VIC Swoją drogą, to chyba dla Atmeli nawet wygląda to identycznie. Oczywiście...
Dwóch rdzeni to tam raczej nie masz, więc oczywiście że może. Są dwa warianty, albo drugie przerwanie zostanie przyblokowane na czas wykonywania pierwszego, albo pierwsze przerwanie zostanie przerwane przez drugie. Jeżeli wystąpią jednocześnie, to jako pierwsze zostanie wywołane to, które ma niższy adres w tablicy wektorów przerwań.
Z tego co widzę to np. mega8 posiada obsługę przerwań zewnętrznych więc możesz do PD2 i PD3 (int 0 i int 1) podpiąć swoje switch'e do tych portów i w tablicy wektorów przerwań(początek .cseg) w miejscach odpowiednich dla tych przerwań użyć skoków do fragmentów kodu obsługujących je. Problemem może być to że ty chcesz aby układ zawsze przerywał aktualnie...
Witam! Timer generuje przerwanie periodyczne. W procedurze obsługi testowo chciałem przełączać stan na jednej z linii portu GPIO (prymitywny debug na LED), ale... okazało się, że nie działa. W pierwszej chwili szukałem błędów w inicjalizacji timera, ale później się okazało, że przerwania się generują, tylko ja tego nie widzę, bo nie wykonuje się przełączenie...
Tak powinna wyglądać obsługa "prawidłowa" przerwania: Tak to wygląda NAJGORSZA z możliwych wersji obsługi przerwania: 1. nie dość że stary rodzaj obsługi za pomocą SIGNAL() zamiast ISR(), 2. to jeszcze oczekiwanie w przerwaniu, 3. a na koniec cli() oraz sei() w przerwaniu. Kolego snnaap - nie ucz początkujących najgorszych z możliwych zasad programowania...
NA 99.666% funkcje przerwań nazywają się zupełnie inaczej w tablicy wektorów, a więc nie ma możliwości ich wywołania przez przerwanie. 4\/3!!
A masz włączony ten TIMER w rejestrze PCONP? To takie pierwsze co mi się nasuwa. No i czym się objawia to niedziałanie przerwań u Ciebie? Program staje i nic się nie dzieje? Czy może coś innego? Ustawienia wydają się być dobre. I dla Timera i dla VIC. Sprawdź jeszcze w startup.s czy masz poprawnie wpisany adres skoku do wektora przerwań. Poszukaj linijki:...
Niemniej jak zaznaczył kolega BlueDraco, w takiej sytuacji nie włączamy przerwania. Generalnie handler przerwania musi istnieć wtedy, kiedy przerwanie o danym wektorze jest włączone (niezależnie czy przerwanie wystąpi czy nie). Włączenie przerwania bez handlera jest błędem. Z drugiej strony robienie handlera i włączenie przerwania, które nigdy nie wystąpi...
No ale ja nie chcę nic wysyłać. Co to znaczy że TX jest empty ? TXE jest ustawiane sprzętowo, więc to oczywiste że jeśli jest empty to będzie. Jeśli dobrze to rozumiem (bardziej na intuicję niż na wiedzę z dokumentacji) to jeśli nie chce nic nadawać to powinienem wyłączyć nadajnik. A możesz mnie nakierować jak to zrobić ?? W AVR były dwa różne wektory...
Witam, A tablica z wektorami się zgadza ? Pozdrawiam
Witam, przesymulowałem sobie pierwsze 8 minut działania zegarka. Dokładnie patrzyłem (wartość Stop Watch w symulatorze), kiedy wchodzę do obsługi przerwania. W ciągu tych 8 minut (odpowiada to 12.000 wywołań tego przerwania) błąd był niewidoczny, tzn. symulator nie był w stanie stwierdzić wahań, tj. resztkowe opóźnienie wynosi poniżej 10 ns (najmniejsze...
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...
Witam, 1. W postach używaj znaczników kodu tak aby kod był czytelny i wyróżniony 2. W programie brak inicjalizacji stosu. 3. Rozkaz skoku do obsługi przerwania od SPI masz pod złym adresem. Adresy wektorów przerwań są co 2 słowa (4 bajty), a rozkaz RJMP zajmuje tylko 1 słowo (2 bajty) tym samym RJMP SPIIntVecror znajduje się pod adresem 0x000A (0x0014...
Zacznijmy od pytań: 1. Które bity według Ciebie ustawiłeś w TCCR2B : Autor tematu pisał, że stosuje gotową bibliotekę do obsługi jakiegoś panelu dotykowego. Z tego, co zrozumiałem, to przerwanie to znajduje się we "wnętrzu" tej biblioteki. Takie efekty są oczywiście normalne, gdy ktoś mało świadomy tego, co się dzieje w jego programie stosuje gotowe...
To ja podniose temat: chodzi o uszczegółowienie logiki działania procesora przy zapisie do wewnetrznego flash. Jesli wykonuje zapis do flash to kontroler wstrzymuje dzialanie programu na czas zapisu/kasowania - to oczywiste. I jesli przychodzi przerwanie a obsluga jest w RAM (tak jak i wektor przerwan) to przerwanie wykonuje sie - to tez oczywiste....
W pierwszej kolejności proponowałbym zamienić wszystkie INTERRUPT na SIGNAL . Tym bardziej że masz dwa różne wektory przerwań.
Dziwne zachowanie, zmien przerwanie na taka linie: void interrupt uuu(void) (at) 0x04 pewnie nie pomoze bo linker sam powinien wiedziec gdzie jest wektor przerwania.
Ten kod nigdy działać nie będzie bo są błędne wektory przerwań. AVR-Libc 1.6.0, strona 123: USART0_RXC_vect Rx Complete, ATmega162 USART0_TXC_vect Tx Complete, ATmega162 Analogicznie USART1.
Nie znam się na języku BASCOM, ale w ASM trzeba zdefinować jeszcze wektory przerwań, czego u Ciebie nie widzę. Innaczej program zapętla się wykonując się od początku do miejsca przerwania. Flagę I w SREG masz ustawioną "Enable Interrupts", więc jedynie to przychodzi mi do głowy.
odczytaj pamiec tak jak kazda inna lokacje. a tak w ogole to nie wiem jak u ciebie, ale na LPC sie nie da debuggowac tak, zebym mogl zobaczyc ze procek skoczyl do wektora przerwan i jeszcze zebym sobie krokowo mogl pracowac. probowales po prostu sprawdzic czy przerwanie dziala bez JTAGa? 4\/3!!
funkcje w assemblerze nazwac __vector_XX gdzie XX to jedna lub dwie cyfry. numerek ten jest numerem wektora przerwan, przy czym reset ma numer 0 pozatym odpowiedni zestaw parametrow przy owym ISR pozwoli usunac wszelkie opcje dodawane przez kompilator (atrybut 'naked'). do tego mozna sobie wtedy przerwanie napisac jako wstawke asm. 4\/3!!
W sumie nie ma tu nic szczególnego w tym przerwaniu, poza nieco nieoptymalnym kodem (Mój był lepszy :D ): IntN1: inr2, SREG pushzl pushzh pushr24 pushr25 sbisPIND, 3 rjmpL0003 L0004: ldszl, poz ldszh, poz+1 sbiwzl, 0x01 stspoz, zl stspoz+1, zh ldsr24, poz ldsr25, poz+1 ldizl, byte1(0) ldizh, byte2(0) cpr24, zl cpcr25, zh breqPC+0x02...
1. Ustawiasz cały portD jako wyjścia a na nim są wejścia INT którymi chcesz generować przerwania. 2. używasz starych wektorów przerwań, używaj nowych ISR: 3. pokaż schemat swojego układu. 4. return(0) jest zbędne. Wystarczy: [syntax=c]while(1){};[/syntax]
Wlasnie zobaczlem: SystemInit z tego co widziałem to już nie ma żadnej funkcji. Mam pytanie odnośnie do funkcji SystemInit(). Sa jakieś wskazówki, jak taka funkcje sie tworzy? Aby to zrobić świadomie?
oraz jeszcze: 1. stosujesz stare funkcje obsługi przerwań a nowe wektory - stosuj nowe funkcje ISR(): i wywal nagłówek #include <avr/signal.h> 2. returny w funkcjach ISR() i main() są zbędne. 3. Ostatnia uwaga kol Zaquadnik jest baaaardzo istotna. Nie dość, że czekasz w funkcji delay to jeszcze dodatkowo czekasz w funkcji USART_Recive takżę wywoływanej...
(at)Piotrus_999 No chyba ze zrobi to tak że któryś z wektorów będzie obsługiwał tylko to jedno krytyczne przerwanie. Wtedy nawet nie trzeba sprawdzać. Rly? Trochę to oczywiste. A nie lepiej w przypadku jednego przrwania po prostu podłączyć tą llinię tam gdzie jest poprostu jedno źródło przerwania (np EXTI0)?
Witam. Czy ten zapis jest poprawny? [syntax=c]OCR0B = 200;[/syntax] Myślę jż powinno być: [syntax=c]OCR0A = 200;[/syntax] I zmienić wektor przerwania.
Pierwsze z nich to przerwania wektorowe. A tych drugich nie znam. Pozdrawiam, Piotr
Witam! Napisałem następujący program w asemblerze i chciałbym przerobić go w ten sposób aby na naciśnięcie przycisku było np kilka sekund, a po tym czasie program zaczynałby się od nowa. Pojawia się jednak problem, ponieważ w trakcie wykonywania pętli typu wait: ldi r18,255 dec r18 brne wait program nie zareaguje na wciśnięcie przycisku. To wstaw...
Witam Piszę program, który ma mierzyć długość impulsu podawanego z zew. źródła jakim jest odbiornik RC, częstotliwość impulsów to 50Hz, a ich długość mieści sie w przedziale 1ms-2ms. To mój pierwszy program na AVR w którym obsługuje przerwania zew. i mam pewien problem, program już napisałem, sprawdziłem go na symulatorze i wydaje się działać poprawnie,...
Mam w zasadzie wie sprawy, ucząc się programować wspomniany w temacie procesor, pełen optymizmu i zapału, zabrałem się za rozgryzanie systemu przerwań. No i zaczęły się schody. Aha, przy nauce mocno wspomagam się książką p. Lucjana Bryndzy "LPC2000 - mikrokontrolery z rdzeniem ARM7". Ustawiając przerwania zacząłem od odpowiedniego przygotowania kontrolera...
Problem w tym, że piszesz a nie pamiętasz. A głupie teksty zostają dla potomnych. Miejsca jest tyle ile pamięci. I to zarówno w omawianej architekturze (osobny wektor dla FIQ) jak i cortexach (osobne wektory dla wszystkich przerwań). Twoje stwierdzenia o małej ilości miejsca jak i o FIQ w cortex'ie dla USB można między bajki włożyć. Albert
Witam, Probuje potestować przerwania IRQ dla TImera. Podbralem sobie przyklady Bryndzy i po malych przerobkach nie za bardzo o dziala. Po samych ustawianiach Timera wchodzac do petli while flaga T0IR jest ustawiana, czyli funkcjonalnie jako tak śmiaga. Ale niestety nie działa jeśli probuje czy zostalo to zhandlowane jako IRQ ( iniclajlizacja parametrow...
Bo nie podłączyłeś myszki ? ;) Żartuję... ;) Pomijając fakt, ze dla przerwania przepełnienia licznika0 bity preskalera zaczynają się na CS0..., jak wygląda wektor przerwaia ? Może być tak : ;...
Witam! Na wstępie chciałem zaznaczyć, że od niedawna dopiero poznaję procesory z serii ARM. Bardzo dawno temu miałem styczność z 51- jedynką i keilem. Moje doświadczenie w programowaniu C też nie jest oszałamiające, natomiast asembler na ARM jak na razie jest przeze mnie mało zrozumiany. Proszę o wyrozumiałość przy pisaniu ewentualnych odpowiedzi, za...
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...
A więc tak : - na przyszłość podawaj pełne nazwy, łatwiej bedziesz rozumiany. ;) - zajrzałem do pdf-ów od AT90S2313 i ATtiny2313 (trudno zgadnać którego miałeś na myśli) i tak - AT90S2313 (s.18 DOC0839.pdf) ma 11 wektorów przerwania wliczając RESET, a ATtiny2313 ma ich 19 (s.43 - doc2543.pdf). Wyciągając moją słabo działającą szklaną kulę jestem w stanie...
1/ #include "avr/io.h" <- zdecydowanie powinno być <avr/io.h> 2/ z tego co widać w "test.txt", nie ma tam żadnych funkcji odpowiedzialnych za przerwania (nazwy właśnie __vector_* [po rozwinieciu SIGNAL(x) przez preprocesor]), a skok do wektora przerwania, w którym brak funkcji przerwania powoduje skok do resetu (domyślna funkcja do wektorów...
wklejam moj fragment rozbiegowki dla LPC2101/2/3 dotyczacy wstawki od handlera, zastepujacej kod dodawany przez kompilator GCC dla funkcji z atrybutem interrupt // Runtime Interrupt Vectors // ------------------------- .equVICVectAddr, 0xfffff030 Vectors: b _start // reset - _start ldr pc,_undf // undefined - _undf ldr pc,_swi // SWI - _swi ldr...
Na 99% w startupie pod wektor FIQ przypisana jest funkcja o stałej nazwie, a nie wektor z AIC, tak jak to ma miejsce w przypadku IRQ. Z tego względu przerwania FIQ aktywuje sie zupelnie inaczej - wystarczy aby funkcja miała odpowiednią nazwę (do znalezienia w startupie), a w AIC trzeba jedynie przekierować, że źródło przerwania nr X będzie zgłaszało...
Ja ci coś podpowiem może się przyda. Akurat też teraz walczę z oprogramowaniem modułu Slave na RS485 ;) 1. nie używaj SIGNAL tylko ISR (to tak na przyszłość) bo tak w ogóle to mieszasz na maxa SIGNAL(USART_TXC_vect) Jak się korzystało kiedyś z SIGNAL to się brało wektor któy też miał w nazwie SIGNAL_ a teraz używaj makra ISR i używaj tych wektorów bez...
rs07 --> Po pierwsze to powinieneś założyć nowy temat a nie się tak doklejać z całkiem innym problemem poza nazwą. Po drugie po co dwa razy powtarzasz to samo w jednym poście - nawet jak wyszło niechcąco to post można wyedytować i poprawić Po trzecie jak się wkleja kod to daje się znaczniki CODE bo inaczej to chyba widzisz jaką SIECZKĘ widać w twoim...
Na to wskazuje także tablica wektorów z początku pliku hex: :10 0000 00 1EC0 37C0 36C0 35C0 34C0 33C0 32C0 31C0 66 Widać najpierw wektor resetu skaczący pod adres 0x3E (0x1E * 2 + 2) a potem ciągłe skoki pod ten sam adres (0x72 - np. 0x37 * 2 + 4, 0x36 * 2 + 6 itd) - normalnie jest to __bad_interrupt, skaczący na początek (do wektora resetu). Wektor...
Jeżeli chcesz korzystać z zewnętrznego rezonatora kwarcowego to musisz pobawić się fusebitami. Trzeba tylko uważać z fusebitami. Jesteś pewien, że akurat w tym zastosowaniu, do którego ja używam rezonatora, jest to konieczne? Gdzieś spotkałem się z przykładem, gdzie był podłączony rezonator zewnętrzny 32,768 kHz i był używany do przerwań timera, a...
Czyli: za każdym razem gdy wartość OCR2 jest mniejsza od wartości TIMERA2 na wyjściu OC2 czyli PB3 pojawia się stan wysoki, a gdy TIMER2 przepełni się (256) uruchomiona zostaje procedura przepełnienia ISR(TIMER0_OVF_vect) ? Tak, przy takim ustawieniu jak w pierwszym kodzie, ale masz w nim błąd polegający na tym, że używasz Timer2, a włączasz przerwania...
Po pierwsze to wypadałoby napisać jaką częstotliwością taktujesz procka m8 na którym chcesz to zrobić i czy na pewno poprawnie ustawiłeś w nim fusebity po drugie, czy przypadkiem nie mylą ci się totalnie nazwy bitów bo w przykładach wyżej używasz np bitów CS02 i CS00 dla Timera1 (teoretycznie mogą akurat pasować ich pozycje ale jeśli takich literówek...
Witam . W dokumentacji pisze wyraźnie że jeśli zostanie wybrane compatibility mode to bity odpowiedzialne za priorytet każdego z przerwań nie będą brane pod uwagę , czyli ich ustawianie nie przyniesie żadnego efektu. Wszystkie przerwania w tym trybie będą kierowane pod wektor o adresie 0x0008 czyli pod wektor high priority . Czyli kod powinien działać...
Zerknij sobie to pliku .lss i sprawdź następujące rzeczy: 1. czy w ogóle jest tam funkcja SysTick_Handler 2. czy adres funkcji SysTick_Handler zgadza się z adresem widocznym w tablicy wektorów (pod adresem 0x800003c) - adres w tablicy wektorów będzie miał nieparzystą wartość (jeśli np. funkcja SysTick ma adres 0x8001000, to w tablicy wektorów będzie...
Zainstalowałem AVR Studio4 i lecę od początku z google i pdf na temat ASM i AVR Powiedzcie chociaż czy w dobrym kierunku zmierzam? Bo jak w złym to odpuszczam i daje sobie spokój, pobawię się migającymi diodami w Bascomie. Tam gdzie nie ma komentarza to nie wiem co to znaczy i co robi ale było w pdf lub innych opisach, jeżeli ktoś może mi wyjaśnić instrukcje...
Możesz powiedzieć jakie masz błedy i dokładnie co chcesz wiedzieć na temat tej funkcji. Na tym co przedstawiłeś widzę 1 błąd a mianowicie masz plot w pętli i tam może być problem z wyrysowaniem tego. Przenieś plot za tego end-a powinno działać. Najogólniej opisze Ci jak działa mój kod a później twój Sprawdzamy wielkość wektora wejściowego Iterujemy...
Program zachowuje się gdyby chciał a nie mógł skorzystać z SysTick_Handler. Najpierw kod: Przy zmniejszeniu ilości taktów na przerwanie w systicku i debugowaniu po kroku przerwanie w ogóle nie występuje. A gdy przy w/w kodzie ma być wywołane przerwane (via step to line) program wiesza się w miejscu: Wg datasheeta przerwanie to powinno mieć adres 0x0000003C....
(at)rpal Wybacz, ale taka jest natura przerwań. Widziałeś gdzieś przerwania, które pobierają parametry? ;) W sumie to wektor przerwania może być funkcją zaprzyjaźnioną klasy. Wtedy będziesz mógł bezpośrednio dobierać się do danych prywatnych. Jednak obiekt (albo referencja do niego) musi być jakoś "dostarczona" do wektora przerwań.
Idzmy głównym wątkiem bez cofania sie. Tak, uaktywnia ale już wiem, ze było ono przechowywane w SREG. To jest wyjaśnione. W SREG przechowywana jest informacja o fladze I, czyli fakt włączenia lub wyłączenia przerwań globalnych. Nie ma to nic wspólnego z "przechowywaniem" informacji o przerwaniach INTx. Instrukcjami operującymi na fladze I w SREG są:...
Więc - na przykłądzie przerwania zewnętrznego: 1. Musisz zdefiniować w wektorze przerwań skok do obsługi tego przerwania którego chcesz używać - np. przerwanie zewnętrzne INT0 .cseg .org $0000 rjmpstart ;Reset handler .org INT0addr rjmpext_int0 ;External interrupt handler 2. pod etykietą ext_int0 musisz napisać podprogram obsługi tego przerwania nie...
Jacu$ a gdzie inicjacja stosu, inicjacja przerwania ? Pomijając, że nie zawsze taki sposób programowania jest do przyjęcia, np procesor obsługuje kilka elementów na raz i właśnie jest coś włączone, to jeżeli stos jest inicjowany po resecie, to można sobie te "pop smietnik" darować, jeśli i tak skaczemy do procedury resetu. W poście wyżej jest topic,...
żeby przerwania działały to należy na to zezwolić. to znaczy ustawić odpowiedni bit w rejestrze odpowiedzialnym ze to przerwanie oraz ustawić flagę "i" w rejestrze głównym procesora poprzez rozkaz "sei". do tego w wektorze przerwanie należy wstawić skok "rjmp" do początku procedury przerwania a na jej końcu "reti" należy też pamiętać o zachowaniu i...
LDI R16,0B00000100 kolego, od kiedy 0b00000100 == 2 ?? przesymulowałeś to chociaż w AVRStudio?? od razu byś zauważył!!!! Dodano po 15 .include "2313def.inc" .def temp= r16 .equ LED = 2 .device AT90S2313, English .cseg 0000h rjmp Inicjalizacja ; ------------OBSŁUGA PRZERWANIA ZEW.NR.0-------------------- .org 0001h rjmp Przerwanie ;//reti...
Muszę Cię zmartwić ;) , ale to nie jest kod wygenerowany dla ATMega 16. Jakiego środowiska używsz :?: AVRStudio+WinAVR,PN+WinAVR , czy jeszcze coś innego :?: Co z plikiem makefile :?: itp. Tak powinien wyglądać wektor przerwania dla Megi16 i nie tylko: 0:0c 94 2a 00 jmp0x54 <__ctors_end> Jeden wektor zajmuje 2 słowa(4 bajty) , a u Ciebie :?:...
Wie może ktoś co zrobić w Keilu, żeby można było korzystać z więcei niż jednego przerwania? Chodzi o to, że jak jest ich już 2 to nakładają się na siebie. Pisze program w C i nie wiem co z tym fantem zrobić?? W asm to nie ma sprawy bo odrazu robi się skok do właściwej procedury i dopiero tam odkłada się co potrzebna na stos a w C to juz gorzej bo nie...
Chodzi o czas pomiędzy wyzerowanie licznika (zaznaczeniem przerwania) a ponownym załadowaniem licznika wartością początkową w jego obsłudze. To jest czas na obsługę stosu (zapamiętanie adresu powrotu i znaczników skok do wektora przerwań), skok do obsługi przerwania, coś jeszcze niewiadomo co tam kompilator i programista wstawi i czas ponownego przeładowania...
Wektory przerwań mają odpowiednie priorytety ... jeżeli odczyt czasu masz w przerwaniu to przerwanie klawiatury powinno być o mniejszym priorytecie. Jeżeli obsługę odczytu masz w pętli głównej - to zrób własny "kontroler przerwania" :P Po odczytaniu godziny itd. sprawdź czy flaga przerwania jest ustawiona, a jeżeli tak to skocz do procedury obsługi...
Wywoływanie przerwania w symulatorze może i jest, ale twój program nieoczekiwanie będzie się wtedy resetował. Nie musisz załączać przerwania (SPIE) żeby sprawdzać flagę SPIF. Jeśli załączysz SPIE, procek (symulowany) będzie przechodził do odpowiedniego wektora przerwań, a tam nie ma żadnej procedury obsługi przerwania (domyślnie jest skok pod etykietę...
I coś te priorytety to nie bardzo działają w tych picach. Ustawiam priorytet przerwania z timera 0 na niski a i tak przychodzi na na wysokie. W symulatorze to samo. Nie mam pojęcia czemu się tak dzieje. Poniżej wrzucam kod konfiguracji i obsługi przerwań. konfiguracja bcf INTCON2,TMR0IP;niski priorytet bsf INTCON,TMR0IE;włączenie przerwania bcf INTCON2,INTEDG2...
Śmiem twierdzić, że w (0<<ISC11) | (1<ISC10) jest błąd, powodujący, że wyrażenie to ma wartość równą 1 (podczas gdy powinno mieć wartość równą 4). Jeśli flaga jest ustawiana na zbocze, to w kodzie głównym powinny występować jakieś opóźnienia albo zmiana algorytmu, bo inaczej flaga zostanie sprawdzona raz - będzie ustawiona,...
Witam. Nie znam C wcale bo programuję w assemblerze ale muszę do istniejącego programu w C (nie mojego) wstawić program obsługi przerwania UART_TX_COMPLETE w którym będzie tylko jedna linia ustawiająca 0 na pinie PB2 PORTU B. projekt w AVR GCC procesor atmega8 i teraz proszę o pomoc: 1. jak i w którym miejscu włączyć obsługę tego przerwania 2. jak i...
Już działa:) Jeżeli chodzi o same ustawienia i inicjalizację Timera0 oraz przerwań to okazało się tak jak mi się wydawało że wszystko miałem dobrze. Jak zwykle w takich przypadkach błąd okazał się błahy i leżał w zupełnie innym miejscu. Otóż przy definiowaniu wektorów przerwań nie używałem definiowania ".org". Początek mojego programu wyglądał tak:...
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...
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...
I priorytetów jako tako tym przerwaniom w AVRACH (nie Xmega) nie można nadawać należy jednak przyjąć że priorytety są zgodne z wektorem przerwań. Gdy nastąpią w tym samym czasie 2 przerwania zostaną wykonane wg kolejności ustalonej przez wektor przerwań.
Witam, uruchomiłem przerwania jednak jest jeden defekt i to poważny. Pętla główna działa ok i przerwanie od INT1 wywołuje się poprawnie, ale tylko jeden raz. To znaczy wchodzi do obsługi przerwania i powraca do pętli głównej, ale przy kolejnym żądaniu przerwania już go nie wykonuje. Zauważyłem, że prawidłowo przy wywołaniu przerwania core przechodzi...
Witam, od kilku dni męczy mnie uciążliwy problem, nie wiem skąd się bierze przepełnienie stosu, skoro wg mnie program powinien działać poprawnie. Kto wie, co może być tego przyczyną? Dziekuje za jakiekolwiek wskazówki Programator - J-LINK SEGGER Środowisko - IAR Procedura obsługi przerwania: __irq void Przerwanie(){ unsigned int dummy;...