Na koncu funkcji przerwania musisz kasowac flage tego przerwania.
Witam Napisałem kawałek kodu do obsługi przerwań IRQ Zasada miała być taka po wywołaniu przerwania (zwarcie PIO_PA2 do masy) miał zmienić się stan diody na PIO_PA27. Niestety program nie działa poprawnie (przerwanie nie jest wykonywane). Tytułem wstępu to tyle. Poniżej kod, który powinien realizować przerwania. main.c http://obrazki.elektroda.pl/7449929900_1...
Dolacze sie do problemu z pytaniem. Czy da sie tak skonfigurowac w at91sam7 pin change interrupt zeby reagowalo na zbocze impulsu a nie na zmiane poziomu. Interesuje mnie tylko zbocze narastajace poniewaz moj impuls 1,0,1 jest na tyle krotki ze prawdopodobnie czas obslugi przerwania podczas zmiany z 1 na 0 przykryje mi moment zmiany z 0 spowrotem na...
w przerwaniach z zasady NIE WOLNO umieszczac kodu, ktory zajmuje duzo czasu. kod ktory nigdy sie nie konczy jest absolutnie wykluczony... poszukaj informacji o uzywaniu tak zwanych flag, zwanych czasem 'semaforami' - jesli przerwanie wystapilo i masz odczytane z niego jakies dane, to sygnalizujesz to kodowi w main przy pomocy dodatkowej zmiennej - flagi....
Masz 2 wyjścia. 1. Funkcji obsługi przerwania trzeba ustawić atrybut : __attribute__ ((interrupt ("IRQ"))) który dodaje prolog i epilog funkcji obsługi przerwania. Ale podobno nie zawsze dziala... 2. Piszesz sam prolog i epilog funkcji obsługi przerwania w asemblerze. I zamiast skoku pod AIC skaczesz do etykiety obsługi przerwania która powinna zachowywać...
Jest to możliwe do zrobienia. Jeśli tylko nie kombinujesz z wielokrotnymi przerwaniami tego samego typu (czyli nie chcesz zrobić tak, że przerwanie IRQ przerywa przerwanie IRQ) to nawet jest dosyć proste. 4\/3!!
Czesc, Jak Dexter juz zauwazyl, zazwyczaj core procesora ma jedno albo kilka wejsc przerwan i bardzo czesto sa tylko dwa - maskowalne i niemaskowalne, a dopiero do tych dwoch sie podlacza kontroler przerwan. Wiekszosc firm produkujacych uklady robi swoj kontroler przerwan i podlacza do niego swoje peryferale i wystawia cos dla uzytkownika. Sciagnij...
Na szczęście już załatwione. Zdążyłem się trochę dokształcić z obsługi przerwań pod freertosem :) Rozwiązaniem okazało się wrzucenie obsługi przerwania do osobnych plików, skompilowanie ich w trybie ARM, wrapper (czyli save i restore context) i __attribute__((naked)). Bez tego ostatniego wszystko chodziło idealnie, po czym całość zawieszała się po ok....
Powtórzę: zdecyduj się, czy w końcu obsługujesz transmisję na przerwaniach, czy bez przerwań. Obecnie robisz jedno i drugie - w pętli czytasz znak bez sprawdzania, czy nadszedł nowy, więc Twój program robi dokładnie to, co kazałeś - czyta w kółko ten sam znak bez sprawdzania, czy coś przyszło.
Witam męczę się wczoraj z przerwaniami, zauważyłem ze do rejestru SOURCE_MODE_R Proszę używać przycisku "Zmień" Posty scaliłem.
Wyraziłem się nieprecyzyjnie. Oprócz tego, że uruchamia mi się przykład z USB i przerwaniami (link podałem w poprzednim poście), uruchomiłem również bez problemu framework MSD (chyba ze strony atmela). mariuszlorenc pisał, że miał problem z uruchomieniem czegokolwiek z atmela. Teraz coś nie mogę znaleźć linka do zip-a.. Jeśli komuś potrzebny - mogę...
Witam. Od pewnego czasu jestem w posiadaniu zestawu z prockiem AT91SAM7S64. Mam problem z obsługą przerwań zewnętrznych. Kontroler nie wchodzi w procedurę obsługi przerwania.Wygląda na to ze wykonuje ja tylko po resecie a potem juz nie :( Oto fragment kodu (to jest chyba przykład ze strony atmela): void NACKEDFUNC ATTR irq0_int (void) {...
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 Otóz mam taki fragment kodu przy inicjalizacji uarta0 w mikro sam7s64: //przerwania: AT91S_AIC * pAIC = AT91C_BASE_AIC; //zapis do IER usarta0: AT91F_US_EnableIt(pUSART,AT91C_US_TIMEOU... | AT91C_US_FRAME | AT91C_US_OVRE | AT91C_US_RXRDY); //konfiguracja uarta AIC: AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_US0, 7, AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,...
Witam. Niedawno przesiadłem sie na CrossWorks'a i od razu problem :| Po wgraniu programu przez to środowisko czy to do RAM'u czy flasha, procesor nie łapie mi przerwań. Tak jakby w ogóle nie były skonfigurowane. Natomiast ten sam wykompilowany HEX wgrany za pomocą OpenOCD, chodzi elegancko na procku ( przerwania chodzą poprawnie ). Czy ktoś spotkał...
Witam, mam problem z uruchomieniem przerwań. Procesor działa poprawnie, nie zawiesza się ale nie chcą ruszyć przerwania. Proszę o wskazówki. Programy piszę w Keilu [syntax=c] #include<AT91SAM7S256.h> #include"sterowniki\rezonator.h" #include"sterowniki\USART.h" void main_init(void); void funkcja(void)__irq; unsigned int AT91F_AIC_ConfigureIt (...
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;...
Witam Mam taki kawałek kodu: //definicja void __attribute__ ((interrupt("IRQ"&... led(void); ////////////////////////// potem w mainie: int main(void) { AT91S_PIO *pPIO = AT91C_BASE_PIOA; AT91S_AIC *pAIC = AT91C_BASE_AIC; uart0_init(); *AT91C_PMC_PCER = (1 << AT91C_ID_PIOA);...
Mam problem z przerwaniami od ADC. Skonfigurowałem je, w funkcji main wrzuciłem pętlę nieskończoną która wyświetla znak '.'. Przed wejściem w tą pętlę następuje włączenie konwersji. Wyjście z programu wygląda tak -- AT91SAM7S-EK Skonfigurowano START....... Fragment kodu ADC_Initialize(AT91C_BASE_ADC, AT91C_ID_ADC, AT91C_ADC_TRGEN_DIS, 0, AT91C_ADC_SLEEP_NORMAL_MODE,...
Eclipse zainstalowałem i skonfigurowałem i wszystko działa. Jeśli otworze projekt http://www.freddiechopin.info/index.php/... kompiluje się wiec eclipse jest ok, tylko ze to jest pod procesory lcp. Chciałbym teraz użyć procka at91 i tu pojawia się problem a mianowicie, mam już parę sampli( nie mojego autorstwa) które działają...
Witam! Od kilku dni próbuje opanować timery oraz przerwania od nich w moim ARMie. Kod programu napisałem na podstawie kilku dokumentów i wg datasheet'a od ARM'a powinno wszystko działać a nie działa. Może komuś uda się wychwycić co robię nie tak i co zrobić żeby wykonała sie obsługa przerwania od timera 0 dla następującego programu: unsigned int dummy,...
Witam Mam problem z reakcją na przerwanie od USART0. Za pierwszym razem przerwanie ma reagować na flagę RXRDY - pierwszy bajt ramki. Następnym razem przerwanie ma reagować jedynie na TIMEOUT lub ENDRX. Jest to w ten sposób zrobione, iż przy inicjalizacji odpalam przerwanie oraz ustawiam flagę przerwania na RXRDY. Po przejściu do przerwania i zrobienia...
Witam, Nie mogę uruchomić układów peryferyjnych w moim mikrokontrolerze (UART, SPI, PWM) Przykład konfiguracji PWM: void pwm_init(void) { AT91C_BASE_PIOA->PIO_PDR=AT91C_PA1_PW... AT91C_BASE_PIOA->PIO_ASR=AT91C_PA1_PW... AT91C_BASE_PMC->PMC_PCER=1<<AT9... #define DIVA 150 #define PREA (0x6<<8) AT91C_BASE_PWMC->PWMC_MR=DIVA|PREA;.....
Przy zapisie do flasha trzeba spelnic dwa warunki: 1 - funkcja musi byc w RAMie jak sam napisales 2 - musza byc wylaczone przerwania na czas zapisu ja korzystam z tego i dziala :) #define __RAMFUNC __attribute__ ((long_call, section (".fastrun"))) __ramfunc int AT91F_Flash_Write( unsigned int Flash_Address ,int...
Może zacznę od opisu konfiguracji. Mam czujnik TSOP1736 podłączony do zasilania 5V, zaś jego wyjście do wejścia P0.16 mikrokontrolera LPC2148. Pozostałe połączenia (zasilanie, JTAG itp.) są OK, gdyż jest to zestaw ewaluacyjny Propoxu - EVBlpc213x\4x. Napisałem sobie bibliotekę do odbioru kodu RC5. Posiłkowałem się tą #include "lpc214x.h" #include...
Jak wielu z was, jestem szczęśliwym posiadaczem LCD od Nokii 6100 :D, z tym że nigdy go jeszcze nie używałem. Tak właściwie nigdy nie używałem żadnego wyświetlacza graficznego, więc obsługę tego traktuję jako wprawkę (chociaż wiem, że większe wyświetlacze mają raczej interfejs równoległy i steruje się nimi np. przy pomocy interfejsu EBI w MCU, a ten...
A czy masz zdefiniowane "VECTORED_IRQ_INTERRUPTS" w Project Properties -> Preprocessor Options -> Preprocessor Definitions ?
kurcze, trudne zadanie. Mógłbyś podrzucić cały katalog projektu, tzn. bez rzeczy które chciałbyś zachować tylko dla Siebie. Chodzi mi o tą często zwaną 'rozbiegówkę'( nawiasem... świetna polska nazwa) w assemblerze i o 'startup' w 'C'. sam'a tylko na płaskich przerwaniach znam( bez priorytetów przerwań). Czy procesor wchodzi w to przerwanie? tu inicjalizacja...
Witam! Let's do some math, czyli "dlaczego się nie da" ;] Sygnał stereo o częstotliwości próbkowania 48kHz wymaga wysłania (2*48k)=96000 ramek danych w ciągu sekundy. Pojedyncza ramka danych to 32 bity (w tym 20 bitów danych, reszta to w uogólnieniu "narzut interfejsowy"). 96k ramek na sekundę, z których każda jest 4bajtowa, daje niebagatelną przepustowość...
Jakość dźwięku słuchowo jest dobra. Jakość CD może byłaby tu nadużyciem(chociaż, kto wie, nie mam audiofilskiego słuchu), ale gra to jak dobre radio FM. Porównywalnie z mp-trójką na STA013 i CS4334, którą robiłem ok. 1,5 roku temu. Zastosowałem w tym odtwarzaczu DAC UDA1330ATS (do kupienia tu: www.seguro.pl/sklep/?zobacz=4301&pro... ). Do regulacji...
Chyba jest okreslony limit czasu w ktorym musi przyjsc potwierdzenie. Ogolnie jest to dosyc mocno skomplikowane. Np. w trybie usb->com zapytania z komputera do procesora przychodza co kilka ms, co jest logiczne bo slave nie moze z siebie sam nic wyslac a na comie dane leca przeciez w obie strony. To taka dygresja apropo faktu ze USB nie jest takie proste....
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!!
_irq przy funkcji oznacza ze jest to funkcja obslugi przerwania.Twoj blad polega na tym ze GCC ma inny format deklaracji takiej funkcji niz Keil.W przypadku GCC uzywane jest __attribute__ ((interrupt("IRQ")) zamiast __irq. pz
w PIOB przerwanie jest odnotowane (zapala sie bit w PIOB ISR), wiec problem lezy chyba w tym ze AIC nie odnotowywuje przerwania od PIOB, zamienilem linijki i sposob wyzwalania - bez zmian :(
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!!
Mój plik CStartup.S wygląda następująco: /*--------------------------------------... //*- ATMEL Microcontroller Software Support - ROUSSET - //*-------------------------------------... //* The software is delivered "AS IS" without warranty or condition of any //* kind,...
Dobrze. Da się inaczej. Wersja łatwa: Tablicę (string) zrobić globalną i sprawdzać czy poprzednia transmisja została zakończona przed wysłaniem. Wtedy wywołanie dbguPrintf() zakończy się od razu, za to oczekiwanie nastąpi przy kolejnej okazji, ale czasu procesora zmarnuje się mniej, bo w trakcie transmisji będzie mógł coś robić. Wersja trudniejsza:...
Witam Wysyłam dane w trybie DMA po SPI, po zakończeniu nadawania muszę wyłączyć chip select (u mnie sygnał N_SYNC), który nie jest sterowany przez wbudowany kontroler SPI. Po nadaniu kilku bajtów na przerwaniu od pustego rejestru (AT91C_SPI_TXEMPTY) ma się wyłączyć sygnał N_SYNC void aic_configure(unsigned int periph_id, unsigned int priorytet,...
RTOS oczywiscie nie jest niezbedny. W wiekszosci rozwiazan jest nawet zbedny i powoduje zbyt duza komplikacje programu. Jednakze sa rozwiazania w ktorych okazuje sie ze rezygnujac z systemu, musisz potem sam dopisywac pewne mechanizmy ktore on oferuje. Nie wszystko da sie zrobic w petli z przerwaniami. Dobrym przykladem wydaje mi sie tu urzadzenie sieciowe...
hehe coś to zaczyna działać :D ale program jakby się zawieszał myślę, że to wtedy gdy wejdzie do przerwania :cry: dodałem już do funkcji przerwania: AIC->AIC_EOICR = 0;
Witam, do odmierzenia czasu używam kontrolera PIT. Napisałem funkcje, która odmierza mi 1ms, ALE: -odmierza mi 47917000 taktów zegara o częstotliwości 47923200, więc biorąc pod uwagę to, że nie obsługuje przerwania tylko sprawdzam flagę zgodności i błąd czasowy kontrolera PIT, to wynik jest jak najbardziej OK; -w uVision3 otrzymuję informację, że odmierzono...
Hej Mam pytanko - proboje napisac prosty prog (zapalenie LEDa). Czy atmele wymagają jakieś inicjalizacji (pamięć, przerwania, peryferia) - czy od razu mogę zająć się rejestrami perfyeriów ? Soft jakiego uzywam to IAR zaś wgrywam SAM-PROG. pozdrawiam
Witam Chcialbym się was spytać o rade (wyjasnienie) jak to jest w ARM'ach Potrzebuje pobierac jednoczesnie 3 napiecia (w formie analogowej) i wrzucac je od razu do procka. Bardzo ważne dla mnie jest aby odbywało sie to w jednym takcie zegara. Układ chce oprzec na pocesorze ARM, po wstepnych przeszukiwaniach sadze is wersja S7 (AT91SAM7S128) w zupelnosci...
Ja programuje troche ARMy i ani razu nie uzylem debugera (tez mam Jtaga Krictecha i musze przyznac ze debugowanie programu ktory wykorzystuje przerwania nie jest dobrym pomyslem). Dobrą metodą jest uzycie jednego z UARTow (np DBGU) do wysylania interesujacych nas danych na terminal. W ten sposob mozna podejrzec konkretne zmienne czy rejestry w interesujacych...
Nigdy nie używałem Eclips-a to nie wiem, ale co do kosztów środowiska pracy to nie ma to znaczenia dla jego jakości. Na gcc+gdb zawsze i wszyscy narzekają i narzekali (łącznie ze mną) a mimo wszystko i tak większość tego używa. Bo darmowe ktoś zaraz doda. Może i tak ale w mojej firmie przerobiliśmy kilka środowisk, łącznie ze wspominanym, również takich...
Witam, mogę podjąć się zlecenia, niedawno napisałem podobny soft w pracy na LPC1766 do sterowania silnikiem, z napisaniem softu na AT91SAM7S nie powinienem mieć problemów. Jeśli jest pan zainteresowany proszę o: -dokładna specyfikacje projektu (prototypy funkcji-parametry, jakie mam użyć przerwania) -schemat docelowego układu (piny, peryferia, częstotliwość...
Skąd kompilator ma wiedzieć, że jakaś tam funkcja jest do obsługi przerwania? Przecież trzeba dodać specjalny identyfikator, w Keilu chyba "__isr" czy jakoś tak. 4\/3!!
Czy naprawde nikt nie wie jak to podlaczyc? :) jak widac, najwyrazniej uklady sie roznia odrobine jesli chodzi o sterowanie poza MII. Twoje interface wydaje sie sprzetowo ok i poprawnie rozpoznales piny :) Jednak najwyrazniej nie dostaniesz PHY IRQ od ukladu RTL gdy pojawi sie ramka w buforze. Zas sygnal reset wysylany do RTL najlepiej wystawiaj na...
No więc poprawka, autor używał pakietu WinARM. To co napisałem znalazłem w książce (Mikrokontrolery AT91SAM7 w przykładacj)w której przykłady są przetestowane. Więc idąc takim tokiem rozumowania stwierdzilem ze problem tkwi w moim kompilatorze.... Zmienną plik typu FIL używam w przerwaniach, stąd chce mieć pewność że pobieram aktualne wartości zmiennych...
Mam podobny If the ARM processor executes a coprocessor instruction, it waits for any external coprocessor to acknowledge that it can execute the instruction. If no coprocessor responds, an Undefined Instruction exception occurs. Dodano po 5 A i teraz zobaczyłem: AIC_ConfigureIT(BOARD_AT45_A_SPI_ID, 0, ISR_Spi); konfigurujesz SPI, aby używało...
Nie wiem czy aktualne ale z mojej strony mogę spróbować podpowiedzieć. Jeśli chodzi o przerwania to pierwsze pytanie - czy próbowałeś ustawić BP na adres 00100018 - jeżeli wchodzi w to miejsce to znaczy że przerwanie jest inicjowane tylko problem jest z handlerem. Co do nie zapamiętywania programu - jesteś pewny że wgrywasz program do pamięci flash...
Witam Przerobiłem twój kod pod keila i działa. Pod CrossStudio nigdy nie robiłem więc mam tylko takie sugestie: - pod keilem przerwanie powinno wyglądać tak __irq void Przerwanie() { } bez prefixu są problemy, może pod CrossStudio jest tak samo. - może zamiast: TC0_CMR = (1<<TC0_CMR_CPCTRG_BIT); powinno być: TC0_CMR = TC0_CMR_CPCTRG_BIT; - sprawdź...
Nic nie wiem na temat sposobu detekcji napięcia VBUS (5V z gniazdka USB) na Twojej płytce. W moim projekcie przyłączenie do hosta USB powodowało wywołanie przerwania na jednym z pinów IO a procedura jego obsługi przygotowywała interface USB do enumeracji. Wrzuć kawałek schematu albo opisz jak masz to rozwiązane.
Witam Powiem tak u mnie jest to samo jeśli chodzi o FreeRtos i Sam7x256 +Code Sourcery mam podobne problemy co kolega "Zaquadnik". Kiedyś pracowałem yagarto, po ściągnięciu gotowego projektu ze strony FreeRtos, program się kompiluje i działa od razu. (nadmienię że na stm32 nie ma żadnych problemów z Rtos + Code Sourcery) Pierwszy problem mam z przerwaniami...
W skrypcie linkera muszą być zadeklarowane symbole o nazwach jak wyżej wyznaczające obszar pamięci przeznaczony dla sterty (heap). Proponuję ściągnąć projekt dla lpc2103 i przystosować postawowe pliki (startup, Makefile, skrypt linkera, tablica wektorów: lpc2103_rom.ld, Makefile, startup.S, vectors.S, hdr\hdr_cpsr.h) do swojego projektu, a większość...
Witam ponownie. Poniżej obiecany kod funkcji main (dla przypomnienia: odtwarzanie krótkich mptrójek z pamięci Flash mikrokontrolera, zegar 33,8688MHz). Może się komuś przyda :) int main(void) { int bytesLeft, nRead, err, offset, outOfData, eofReached; unsigned char *readPtr; MP3FrameInfo mp3FrameInfo; MP3Decoder hMP3Decoder; int nFrames,...
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
Pamietaj ze w FreeRTosie przerwan nie mozna obslugiwac w " zwyczajny sposob" tzn funkcjami ktore automatycznie odkladaja dane na stos a potem je zdejmuja itp. Nalezy wykorzystac makra portENTER_SWITCHING_ISR() i portEXIT_SWITCHING_ISR Przyklad przerwania od timera: Inicjalizacja timera void timer_init ( void ) { portENTER_CRITICAL(); //* Open timer0...
Witam, Programy typu zapal diodę w pętli już przerobiłem, od paru dni męczę sie z Real Time Timer . Napisałem sobie program który co 2 sekundy zapala kolejną diodę, aż do 8 diody. W symulatorze program działa w porządku , ale jak testuje na płytce, to zapalają mi sie po 2 sekundach wszystkie diody i nie wiem co jest. Program jest napisany w Keilu. Oto...
Witam Posiadam plytke testowa fimry Kamami ZL11 i modul dip z procesorem AT91SAM7S256. Zaczynam nauke programowania w CrossStudio tego procesora i mam problem z odczytem stanu przyciskow w petli (ale nie uzywajac przerwania). Program aktywuje port GPIO (ustawia linie wejsciowe i wyjsciowe), ale nie moze odczytac stanu przyciskow. Gdzies wyczytalem ze...
przerwania at91sam7 mikrokontrolery at91sam7 at91sam7 timer
passat przewodów nadajnik odbiornik 433mhz radiowy lutowanie izolowanych przewodów
dobra antena pokojowa termostat astra temperatura
Nieregularne, skokowe obracanie się bębna pralki - przyczyny Wyznaczanie liczby odwrotnej w elektronice