Pisałem gdzieś jak się je włącza, na co Freddie napisał, że są funkcje w CMSIS, które z resztą na forum też już wklejałem. [syntax=c]/** * (at)brief Enable Interrupt in NVIC Interrupt Controller * * (at)param IRQn The positive number of the external interrupt to enable * * Enable a device specific interupt in the NVIC interrupt controller. * The interrupt...
void TIM3_Handler(void) __attribute__((interrupt)); void TIM3_Handler(void) { } Właśnie tak robię. Wszystko oczywiście w pliku vectors.c. No nic popatrzę zatem w czym jest problem w niedzielę. Jeżeli mi się uda rozwiązać go to przedstawię tutaj rozwiązanie. Dzięki freedy za zainteresowanie
Zaraz zaraz zaraz zaraz! Interrupt latency dla Cortex-M0 wynosi 16 cykli, a nie 24. 16/50 to i tak więcej niż 4-3/16 Do autora: Jaka burza, to normalne wprawki. A takie najwartościowsze są z dobrymi przeciwnikami. Czyżbyś usiłował czytać DS1820 na LPC? Albert
Heh, faktycznie! Mój błąd, a kosztował mnie tyle czasu... Wszystko działa jak należy! Wielkie piwo dla użytkownika Freddie Chopin i oczywiście pomógł. Serdeczne dzięki i pozdrawiam, Marcin
Brakuje jeszcze linii void SysTick_Handler(void) __attribute__ ((interrupt)); bez niej procesor wpada w nieskończoną pętlę. Not true. 4\/3!! Rozszerzę opis. Ale gdy używasz szablonu od Freddiego, a i tam Default_Handler może być dowolnie modyfikowany.
bo przerwanie powinieneś zmienić na void FIQ_Handler(void) __attribute__ ((interrupt("FIQ"))); void FIQ_Handler(void) { ... } gdyż reszta parametrów jest potrzebna aby NIEUŻYWANE przerwania były przypisane do domyślnego. Znaczy się "t0isr" na "FIQ_Handler"? Pozatym potrzebna jest też konfiguracja danego źródła jako FIQ w module VIC. No ale nie robi...
ldr pc, IRQAddr /* IRQ interrupt */ zastap: ldr pc, nie da się tego skompilować:( wywala błąd mowi bad instruction `read the AIC' OMG czlowieku, czy ty umiesz czytac? przeciez blad ktory zwrocil ci kompilator jest opisany ludzkim jezykiem po angielsku... jeden kompilator ma komentarze od srednika, inny nie... wystarczylo skasowac to co bylo wpisane...
void inc_position(void) __attribute__ ((interrupt ("IRQ"))); a dopiero pozniej je zapisywac juz bez zadnych dodatkow: void inc_position(void) { ... } zrobiłem tak i hula dobrze:) teraz jedyne błędy to różnice w nazwach rejestrów pomiędzy kail a moimi, już dłubie dalej:) Dodano po 1 ma problem z USB_EVT_IN USB_EVT_IN_STALL USB_EVT_OUT USB_EVT_SETUP...
pod warunkiem ze Freddie napisze jakis tutor jak definiowac przerwania :] Z grubsza tak: void jakas_funkcja(void) __attribute__ ((interrupt("IRQ"&... void jakas_funkcja(void) { ... } [; Niemniej jednak to tylko jedna z czynności, które są konieczne aby przerwania raczyły działać poprawnie...
Głupi może pomysł, bo ja tylko asm, ale może to? #include <avr/io.h> avr/interrupt.h inkluduje go. Ja od razu mówię Ci, że używa tego starego skoro Ci nie działa. Naprawdę go wywal i będzie po problemie... Po co Ci tak stary kompilator? 4\/3!! Też tak myślę - interfejs przerwań się zmienił jakiś (spory) czas temu a tutaj ewidentnie ISR() nie...
Kolego Piotrus_999 po imporcie projektu do eclipse wygenerowanego z cube widzę że kod jest napisany w hal. Nie widzę opcji w cube aby nie generował w hal jak i opcji USE_HAL_DRIVERw eclipse . Oto fragment kodu ustawiającego zegary: [syntax=c]void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; /**Initializes...
asm na pewno jest taki sam (szczegolnie ten ktorego uzywalem, bo to same podstawy), gorzej z timerami na ktorych opieraja sie dluzsze opoznienia (od ms w gore). nigdy nie zajmowalem sie dspic30, wiec... nie wiem jak to tam jest z tymi timerami. najwyzej dostosujesz sobie <: __________________________ modul sklada sie standardowo z pliku c i h. ponizej...
Witam ładniej by było tak jak napisałem na początku - 3 definicje. I nic nie obchodzi Cię czy ma być naked, interrupt czy może obydwa (albo żaden). Jak wyrzuciłem: [syntax=c]void xPortPendSVHandler( void ) __attribute__ (( naked )); void xPortSysTickHandler( void ) __attribute__ ((interrupt )); void vPortSVCHandler( void ) __attribute__ (( naked ));[/syntax]...
Ech.. Przepraszam za zamieszanie. Problemem okazała się nazwa, którą nawet w poprzednim poście wkleiłem z błędem. Chodzi o void TIM4_Handler(void), a powinno być TIM4_ IRQ Handler. Freddie, dzięki za podpowiedz/pytanie czy plik jest linkowany. Plik był oczywiście kompilowany i linkowany. W pliku .lss zauważyłem, że zostaje podstawione Default_Handler...
Procesor jest w trybie ABORT. Wystąpił jakiś błąd. Jak sprawić żeby printf była reentrant?(aczkolwiek ona nie jest winna ponieważ gdy w proc obsługi ją usuną nic to nie daje). Freddie, przerwania zagnieżdżone nie są mi potrzebne. Kody startowe pobrałem z strony ATMELA i nie grzebałem w nich. Próbowałem usunąć kod odpowiedzialny za zagnieżdzanie ale...
// Interrupt mask register, that EXTI lines are active: 0 and 1 EXTI -> IMR = EXTI_IMR_MR0; //A0 EXTI -> IMR = EXTI_IMR_MR2; //C2 Druga linia kasuje to co zrobiła pierwsza. Przy okazji łatwiej by było jakbyś napisał DOKŁADNY opis problemu, bo tak naprawdę to nie wiadomo co Ci nie działa. Dodano po 1 __attribute__ ((interrupt)) void EXTI0_IRQHandler(void)...
łaa ;] Ofkoz Freddie ma racje, ale zawsze tez mozna tak: Nie ORuje sie rejestrów NVICa typu ISER, ICER, ICPR, ...!! Po to są oddzielne rejestry do set i clear, zeby nie wykonywac na nich RMW!! ISER - Interrupt Set Enable Register ICER - Interrupt Clear Enable Register "Writing 0 has no effect"...
Wygląda na to, że plik ten załatwia sprawy manipulacji stosem i trybem, więc pewnie atrybut jest zbędny. Jak dla mnie ten plik jest przesadnie skomplikowany i robi zbyt dużo niepotrzebnych rzeczy, no ale zapewne jest ok. Ale czy działa poza tym tak jak należy? (; Nie. Powinna przełączać się dioda P1.17 a tego nie robi. Natomiast pętla While(1) przełącza...
Hehe, chyba ślepnę powoli :P Masz dobrą tablicę wektorów? Tablicę wektorów oczywiście napisałem sam, na podstawie twoich projektów dla µC LPC11xx i STM32. No i faktycznie, w tablicy wektorów zapisane miałem: Nie powinieneś działać na rejestrze 0? Tak, dokładnie, jedynka była wynikiem moich poszukiwań niepowodzenia, wcześniej widniało tam zero....
Witam ponownie. Mam jeszcze pytanie. Ponieważ chciałem dodać obsługę: ETH_WKUP_IRQHandler i ETH_IRQn. Więc w pliku vaectors.c dodałem takie linijki: [syntax=c] // ETH Ethernet global Interrupt void ETH_IRQHandler(void) __attribute__ ((interrupt, weak, alias("__Default_Handler"))); // ETH_WKUP Ethernet Wakeup through EXTI line Interrupt void ETH_WKUP_IRQHandler(void)...
A plik linkera przeglądałeś? _user_stack_size = 512; _fiq_stack_size = 0; _irq_stack_size = 0; _supervisor_stack_size = 0; _abort_stack_size = 0; _undefined_stack_size = 0; _system_stack_size = 0; Sam pare razy pisałem, że aby uruchomić przerwania, trzeba zmienić rozmiary stosów w pliku linkera... Co do stosu to faktycznie nie zauważyłem. Poprawiłem....
Musze wrócić do tematu. Oczywiście sugestia Freddie Chopina była w 100% trafna, a konkretnie instalacja sterownika korzystając z libwdi/zadig. Jednak ze względu na kończący się czas, poprzednio wróciłem do WinARMa i w ten poradziłem sobie z projektem. Teraz znów potrzebne mi środowisko do debugowania i programowania ARMów. Więc podjąłem się instalacji...
Witam, Bazuje na projekcie ze strony Freddie Chopin dla stma F4 z dodanymi bibliotekami STM32F4xx_StdPeriph_Driver. Zdefiniowałem sobie konfigurację timer'a w następujący sposób: [syntax=c]void Timers_Config(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TI... ENABLE); NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel = TIM1_CC_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptio...
Freddie: faktycznie to był mój błysk geniuszu :) Co muszę zrobić aby przerwanie od Systick'a przechodziło mi w funkcję SysTick_Handler, a nie w __Default_Handler jak to się dzieje w tym momencie? static void SysTick_Handler(void) __attribute__ ((interrupt)); static void SysTick_Handler(void){ uint32_t stan; stan...
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!! Funkcja przerwania zewnętrznego działa. (at)edit Konfiguracja NVIC (kod z biblioteki STM): [syntax=c] static void RC5_NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; /* Enable the EXTIx global...
Witam wszystkich. Uzywam Eclipse + OpenOCD (0.9.0) + GCC. Do tej pory używałem STM32F103 (Cortex-M3), a teraz przesiadłem się na STM32F373 (Cortex-M4). Wziąłem ze starego programu skrypt linkera, startup, vectors.c i posklejałem do kupy odpowiednio je modyfikując. Program generalnie odpala się, mogę sterować GPIO. Następnie spróbowałem uruchomić SysTicka....
Próbuje uruchomić przerwania: vector.c wygląda tak [syntax=c]static void __Default_Handler(void) __attribute__ ((interrupt)); static void __Default_Handler(void) { while (1); } /* +=======================================... | assign all unhandled interrupts to the default handler +=======================================...
Chodzi mi tylko o to żeby w przyszłości móc wykorzystywać bit banding, bo dopiero zaczynam przygodę z STM32. Dodano po 6 Właściwie problem rozwiązałem. Zastosowałem makro Freddie Chopin z tematu https://www.elektroda.pl/rtvforum/viewto... i wszystko działa dobrze ;) Dodano po 37 Nie potrzebujesz tego - po prostu wyrzuć. zresztą...
Hej Freddie, napisałem prosty program w którym chcę wywołać przerwanie od przychodzącej wiadomosći do UARTA, jako przerwanie ustawiam na 21 tak jak w dokumentacji, do pliku vectors dodałem: void RCC_IRQHandler(void) __attribute__ ((interrupt, weak, alias("__UARTIntHandler"... RCC_IRQ jest własnie 21, nazwy...
Tak, Freddie Chopin ma rację, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIO... oraz configMAX_SYSCALL_INTERRUPT_PRIORITY powinny być spójne, ponieważ odnoszą się do tego samego lecz różnią się przesunięciem bitowym w celu stosowania tych flag w funkcjach bibliotecznych lub bezpośrednio w rejestrach.
pliki vectors.s i startup.s mam od Ciebie /***************************************... * author: Freddie Chopin, http://www.freddiechopin.info/ * file: vectors.S * last change: 2010-04-08 * * chip: LPC2103 * compiler: arm-none-eabi-gcc (Sourcery G++ Lite 2009q3-68) 4.4.1 * * description:...
1) CNDTR! Nie ustawiasz go w przerwaniu więc co z tego, że włączysz DMA, skoro każesz mu wykonać 0 (zero) transakcji? No i dokładnie tyle transakcji wykonuje. 2) Nie ustawiaj w CCR bitu HTIE, i tak nie korzystasz z half-transfer interrupt; po co marnować czas procesora na wykonanie ISRa który nic nie robi? 3) Czy ty w ogóle gdziekolwiek wpisujesz jakąś...
Zdefiniuj sobie funkcję HAL_UART_ErrorCallback() i upewnij się, że NIGDY nie jest wywoływana. Jeśli jest, to znaczy że UART wykrywa jakiś błąd. Zrobiłem tak wczoraj i o dziwo urządzenie całą noc pracowało poprawnie. Dziś rano zresetowałem i testuje dalej. Zmiany w kodzie w stosunku do wersji zawieszającej UART to przeniesienie obsługi gpio odkierunku...
tak wyglada przykladowy startup dla LPC, w ktorym nie ma zadnych nadmiarowych rzeczy w zasadzie - samo minimum: /***************************************... * © 2008 Freddie Chopin * * file: startup.s * last update: 19.04.2008 * * processor: LPC2148 * compiler: ARM-ELF-GCC * * description:...
Aktualnie rozpracowuję przerwania zewnętrzne i mam takie dziwne zachowanie programu otóż na wbudowanym z zestaw nucleo przycisku przerwanie zapala mi diodę tak jak chcę (według schematu nucleo jest od podciągnięty do vcc) jednak jak chcę dodać swój przycisk na płytce stykowej podłączony do portu A0 to działa on wtedy kiedy fizycznie rezystorem podciągnę...
no wlasnie, u ciebie nie jest zalaczona opcja -mthumb-interwork. 4\/3!! Slusznie, ale co ciekawe otrzymalem podczsa kompilacji blink.c: In function 'fiq': blink.c:69: error: interrupt Service Routines cannot be coded in Thumb mode make: *** [blink.o] Error 1 Tez miales cos takiego ? No to jest akurat zrozumiale bo ISR-y...
SysTick_Config() to przykład całkowicie bzdurnej funkcji, która "za Twoimi plecami" ustawia na sztywno że SysTick będzie taktowany z zegara rdzenia podzielonego przez 8. Tak wiec dla Twojego mikrokontrolera taktowanego zegarem 48MHz, SysTick był taktowany zegarem 6MHz. A powiedz mi dlaczego zewn a nie zegar procesora? [syntax=c]__STATIC_INLINE uint32_t...
Witam, Mam problem z debugowanie procesora LPC2478. Środowisko: postawione zgodnie z tutorialem ze strony Freddiego Chopinna czyli Eclipse (helios edition with HDT hardware debugging) + OpenOcd + Code Sourcery Lite edition Procesor: ARM NXP LPC2478 z kwarcem 12MHz Aplikacja: Na tym etapie mrugająca diodka na timeocie opartym o przerwanie timer0, PLL...
nie wiem jak to jest w dsPICach z serii 30, ale jestes pewny, ze oscylator masz na 15MHz? w -33 jest to 7.37MHz i TUNem mozna sobie pozmieniac bardzo niewiele i na pewno do 15MHz sie nie da dojechac... anyway - sa dwa sposoby: 1. hard way (ale inteligentny) - czestotliwosc oscylatora dzielisz przez 4 (dla pic24 i dspic33 przez 2) i masz czas wykonywania...
Witaj Freddie, szczerze mówiąc czytałem wiele Twoich postów i liczyłem na Ciebie - cieszę się, że się nie pomyliłem ;). A więc działa, dla potomności załączam kod, banalny, ale na początku zabaw z każdym prockiem pewnie i taki się komuś przyda. Na Forum Microchipa odbyła się rozmowa dotycząca problemu stałej: http://www.ekiert.com/cgi-bin/yabb/YaBB....
Hmmm. Wgrałem oryginalny program z Stm32 MassStorage. vectors.c startup.S i .ld o kolegi Freddie Chopin. Mam obecnie dwa przerwania z Usb: USB_HP_CAN1_TX_IRQHandler i USB_LP_CAN1_RX0_IRQHandler ( w vectors.c było bez jedynek kolo CAN ). Zrobiłem takie coś, orginalny program void USB_HP_CAN1_TX_IRQHandler(void) { CTR_HP(); }...
Proszę o pomoc szczególnie freddiego chopina ponieważ jest autorem plików linkera, startup-a i wektora przerwać(vectors.c), które w innych projektach jak dotąd działałają mi niezawodnie. Zajrzyj do skryptu linkera, przeczytaj ze zrozumieniem jego początkowy fragment, ustaw tak jak trzeba i będzie działać. Kluczową sprawą jest przyswojenie sobie tego...
Dziękuję Wam wszystkim za odpowiedzi. Na podstawie opisu, który napisał Freddie udało mi się napisać taki kod. Niestety nie mam pomysłu jak rozwiązać czwarty punkt. Na chwilę obecną nie mam możliwości podłączenia do płytki żadnego wyświetlacza ani komputera poprzez port szeregowy. Dlatego aby zobaczyć czy kod w ogóle ma zamiar działać mrugam diodą co...
Zbadałem trochę sprawę. Odpaliłem debugger pod CrossStudio i procek ląduje w wyjątku HardFault. Call stack mniej wiecej wyglada tak: * task_create * thread_create * task_activate * up_unblock_task * up_switchcontext Funkca przelaczajaca kontekst powoduje wyjatek hardfault: <up_switchcontext> 460A mov r2, r1 4601 mov r1, r0 F04F0002 mov.w r0, #2...
Witam, mam napisany spory program, w którym są min przerwanie FIQ i wszystko działa pięknie. Niestety pojawiła się konieczność obsługi odmierzania czasu co 0,125 ms. Początkowo miałem obsługę przerwania wrzucona do FIQ razem z przerwaniami zewnętrznymi. Ale żeby FIQ wykonywało się możliwie najszybciej chciałem przerwania z timera0 ustawić jako IRQ....
niemniej jednak cały taki proces zajmuje kilkadziesiąt-kilkaset cykli zegara. A dokładniej, to jest to ok. 1000 cykli, czyli 10x więcej (15us(at)72MHz) http://stackoverflow.com/a/24906003/4676... Ale żeś się uparł... Normalnie zaraz oscyloskop chyba wyciągnę i Ci zmierzę ile trwa zmiana kontekstu w moim systemie (; Tak czy siak FreeRTOS jest ciekawym...
Witam. Korzystam z mikrokontrolera STM32F207ZGT6. Mam problem z SPI, wysyła poprawnie dane, ale nic nie da się odebrać. Przy odczycie rejestru SPI_DR zawsze otrzymuje 0x0000, nie wiem dlaczego. Mam napisaną funkcje spiTransfer, którą pisałem według schematu, który zalecił gdzieś na forum Freddie Chopin, więc tu raczej nie ma błędu. SCK i MOSI ustawiłem...
(at)Freddie no fakt, trzeba by często w to trafiać. Sprawdzę to jeszcze u siebie jak wrócę z roboty, teraz nie mam STMa pod ręką. A mimo wszystko nalegam, aby Autor pokazał kod asemblerowy programu. Dodano po 2 Data race o którym piszesz faktycznie tam jest - wczytałem się wreszcie porządnie if((zapalona) && (TIM9->CNT > 5000) ) pomaga...
He, dziękuję za sprostowanie - jednak dwa miesiące przerwy w programowaniu i mi się myli :). Tak - wkleiłem te niepotrzebne linie gdyż są one z komentarzem który przynajmniej mi pomaga zrozumieć co tam się dzieje w tych komórkach rejestrów, ale zgadzam się, że również może zaciemniać ogół - i to bardzo :). Freddie napisał dokładnie i krótko, to co chcę...
Przy okazji nie wiem skąd wyczarowałeś czyszczenie flagi startu... To wszystko jest w manualu! 19.10.5.3 State: 0x08 A START condition has been transmitted. The Slave Address + R/W bit will now be transmitted. 1. Write Slave Address with R/W bit to I2DAT. 2. Write 0x04 to I2CONSET to set the AA bit . [syntax=c]// I2C0 Interrupt function; Each Status...
Dzięki za odpowiedzi. (at)flapo213: Chodzi o kompilację samego programu? Korzystam z Eclipse z kompilatorem CodeSourcery G++. Nie wiem dokładnie co to są te breakpointy? To takie zwyczajne jak przy debuggowaniu? :) Czy np. interrupt'y procesora? Może to właśnie przez błędy transmisji danych? (at)Freddie Chopin: Rezystory na liniach JTAGa jak dla mnie...
Poniedziałkowe dziędobry. Teraz ADC + DMA. Może się komuś przyda. Na razie bez przerwań ale działa (dzięki komu to chyba wiadomo, a gdyby nie, to dzięki Freddie Chopin i BlueDraco, kolejność przypadkowa (kłopot z odmianą w Języku Polskim) ). [syntax=c] /***************************************... * Funkcja inicjalizacji ADC tak, ze...
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...
Opisz DOKŁADNIE problem, to co robisz, wrzuć kod którym to robisz i napisz co dokładnie wysyłasz, w jakich ilościach itd. No więc tak: W debuggerze testuje program, który przedstawiłem poniżej. Gdy wykonuje funkcję UART_Receive_DMA to ustawiam oczekiwaną ilość danych do odebrania. Program działa dobrze dopóki wysyłam z programu RealTerm tyle samo danych...
Chodziło mi o to aby struktura była taka jak jest stosowana w układach resetu, czyli rezystor do zasilania, kondensator do masy obwodu. W ten sposób zmniejszasz podatność pinu na przypadkowe zmiany stanu (obniżasz impedancję wejściową). Rozumiem, oczywiście dodam ten kondensator. W kodzie nie widzę głównej pętli programu. To że program zatrzymał się...
Bardzo dziękuję za informacje. Posiedziałem trochę wczoraj w nocy i: moduły DMA pamiętają adresy i pozostałe ustawienia. Po zakończeniu transferu wszystko jest przywracane w rejestrach. Jeżeli coś jest stałe, to nie trzeba tego za każdym razem ładować do rejestrów (jak w programach 2 i 3); wystarczy tylko ustawić bit DMA_CCR1_EN. Podpucha :) Rejestr...
Generalnie ja bym stawiał na zwyczajny skrosowany kabel. Jako 'zwyczajny skrosowany kabel' masz na myśli takie połączenie: http://obrazki.elektroda.pl/2803773500_1... ? Plik lpc2148.cfg, do którego ja mam dostęp nie wygląda tak jak pisałeś: # Use RCLK. If RCLK is not available fall back to 500kHz. # # Depending on cabling you might...
Stwierdziłem że najlepiej jak zacznę przejście do Eclipse od nowa i wzorując się na [url=http://www.freddiechopin.info/pl/ar... i projekcie Freddiego zrobiłem to jeszcze raz. Niestety objawy są dokładnie takie same. Dlatego spróbuję krótko opisać co zrobiłem i co zmieniałem:...
Dziwna wersja, bo jako jedyna seria uC z rdzeniem Cortex ma domyślnie wyłączone wyrównanie stosu (do czego doszliśmy jakiś czas temu z kol. Freddiem) i w związku z tym jako jedyny Cortex wymaga pisania przy procedurach wyjątków "attribute interrupt", bo bez tego potrafi spłatań niezłego psikusa w bardziej złożonych programach. Obecnie mamy F0, F2, F3...
A na jakiej podstawie stwierdzasz, że nie działa? To programik do prostego migania dioda. Kiedy podlaczam do PA11 diode, to nie miga niestety. W keilu, przy tym samym kodzie migala. Co do linkera, to dodaj tam linijki: . = ALIGN(4); *(.text.*); zaraz za sekcją .text i będzie ok. 4\/3!! Serdecznie dzieki :)!!! Edit: No i po probie uzycia vsprintf dostaje:...
Witam, Moja konfiguracja: Eclipse, bazuje na przykładzie od freddiego, Linaro z 28.IX, optymalizacja -O0, [syntax=c] __main_stack_size = 2048; __process_stack_size = 2048; rom (rx): org = 0x08000000, len = 64k ram (rwx): org = 0x20000000, len = 20k[/syntax] [syntax=c]void TIM3_Conf(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TI...
Niedawno stoczyliśmy z Freddiem potyczkę, w wyniku której wyszło, że w niektórych Cortexach STM nie jest włączone domyślnie wyrównanie stosu przy wyjątkach, i z tego powodu procedury obsługi przerwań powinny być na nich deklarowane z atrybutem interrupt. Nie wiem, czy dotyczy to również M4F. Co prawda w takim przypadku problem byłby przy wywołaniu innej...
To kod, który u mnie na STMF107 działa - może znajdziesz jakieś róznice... W przerwaniu mam obsługę klawiatury 4x4 + kilka liczników, ale to tutaj nieistotne, więc nie zamieszczam. [syntax=c] //--------------------------------------... // Inicjalizacja TIM2 //--------------------------------------...
Pokaż mi jakikolwiek komercyjny czy darmowy kod NIE-BĘDĄCY biblioteką do układów peryferyjnych od ST, NXP, Atmela itd., w którym jest coś podobnego, chętnie zobaczę. LWIP (biblioteka - od Ethernetu) * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *...
Witam, Próbuję pożenić template Freddiego (stm32_blink_led) z StdPeriph z racji, że pracuję pod Linuxem i jest to chyba jedyny template jaki działa :) Problem pojawia mi się przy próbie wywołania przerwania od USART1. W pewnym fragmencie kodu ustawiam flagę przerwania: USART_ITConfig(USART1, USART_IT_TXE, ENABLE); Kod obsługi przerwania jest...
Panie Freddie. Dzięki za mocne słowa. Motywują mnie. Niestety znowu muszę prosić o pomoc. Tutaj jest datasheet RFM'a. http://www.sparkfun.com/datasheets/Wirel... Nie mam pewności jak interpretować informacje na temat SPI (tj. strona 14 i 15). Używam STM32F407, którym mogę wysyłać szesnastobitowe informacje po SPI. W tej chwili moja...
Dzień Dobry Udało mi się skonfigurować timer i wszystko działa poprawnie tylko mam problem ze świadomym ustawieniem czasu trwania okresu. Wynika to z faktu że nie jest dla mnie do końca jasne: 1. Jaka częstotliwość jest dzielona przez preskaler 2. Jak w rejestrze: [syntax=c] TIM2->ARR [/syntax] ustawić czas trwania okresu świadomie. Załączę mój program:...
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...
Dzień dobry ponieważ mam identyczny problem podczepię się do tematu :-) Kod niemalże identyczny z przedstawionym przez pana Michała program skacze do przerwania ale do niego nie dociera, i idzie w las objaśnienie: 2 diody migają jednocześnie do momentu wywołania przerwania - w przerwaniu 1 powinna zostać zapalona a 2 zgaszona - po wyjściu z przerwania...
Pewnie jakby zastosować powiększany wskaźnik zamiast indeksowania, to by jeszcze można coś uszczknąć. dekrementację i warunek można dać jako jedno (zmienić na pre-dekrementację). Być może dałoby się też zaoszczędzić używając lokalnych zmiennych do S_Bits i zapisywać je do RAM dopiero na koniec. [syntax=c]ISR(TCC0_OVF_vect) // tutaj rzeczywista obsługa...
Witam Po jednodniowej radości związanej z prawidłową pracą klona amonteca od Freddiego nadszedł kryzys... Aktualnie IAR nie jest w stanie wgrać nawet programu do flasha. W oknie konsoli IAR-a głownie jest Verify error at address.. W gdb: http://obrazki.elektroda.net/3_126701690... Wyrocznia podpowiada: "...I suspect some interrupt routine or...
Używam przerwań. Funkcja read_ms() z nich korzysta. Oto kod wykorzystujący przerwania: scaledy na scaledx i od tego momentu zaczęły się te problemy. Nawet po powrocie do scaledy program ląduje w DH.
Witam, Posiadam mikrokontroler LPC2364, w którym nie potrafię uruchomić pętli PLL. Środowisko programistyczne to Eclipse skonfigurowane według tutoriala Freddiego Chopina. Do uruchomienia LPC2364 posłużyłem się projektem przykładowym naipisanym dla LPC2103 i znajdującym się również na stronie Freddiego Chopina. Zmieniony został plik linkera: /***************************************...
Tak więc jeśli Twój program, po podobnym przesunięciu nie działa prawidłowo, to trzeba się zastanowić, czy on w ogóle działa prawidłowo (; Bez przesunięcia na pewno działa prawidłowo :) No to niezły kwas, muszę to przetrawić :) Uznanie dla umiejętności. Dodano po 14 To na pewno chodzi o kopiowanie tablicy wektorów na początek. Jak wstawić do mojego...
Witam Próbuję postawić FreeRtos'a na LPC2141 przy wykorzystaniu Sourcery G++ Lite zmontowanego z Eclipsem. Pliki startowe Startup, vectors, lpc2141_rom ściągnięte ze strony Freddiego - dla porządku załaczone do tematu. _________konfiguracja plików startowych______________ w plikach zrobiłem standardowe kosmetyczne zmiany lpc2141_rom //ustawienie stosów...
Witam Jak wyliczyć coś takiego za pomocą preprocesora ? Criterion for valid user code: The reserved Cortex-M0 exception vector location 7 (offset 0x 0000 001C in the vector table) should contain the 2’s complement of the check-sum of table entries 0 through 6. This causes the checksum of the first 8 table entries to be 0. The bootloader code checksums...
Dziękuję za szybką odpowiedź :). Czyli Freddie Chopin napisał że się mylę a to dokładnie tyle samo znaczą te linie w przypadku dokładnie tego procka na który ja piszę. Przez to że nie dałem mu do tego powodu rozumiem, że nie powinien zgłaszać przerwania ponieważ zmieżone wartości napięć nigdy nie przekroczyły ustawionych wartości progowych na 5 V i...
Witam. Mam problem z wybudzaniem (z usypianiem chyba też) procesora z trybu Standby za pomocą pinu WKUP. Procesor chyba wchodzi w ten tryb, bo pobór prądu maleje. Ale to chyba nie jesty tryb Standby bo pobór porądu maleje tylko do 2mA a piny IO zachowują swój stan. Kod jest raczej prosty i nic nie robi poza włączeniem wyświetlacza, odczekaniem kilku...
Wiesza się w tym samym miejscu co w moim programie - po włączeniu przerwania NVIC_EnableIRQ. W stosunku do oryginału zmieniłem tylko port GPIO oraz dodałem obsługę TIM3 i mryganie diodą na podstawie TIM3->CNT by wiedzieć czy licznik rzeczywiście działa. W skrypcie linkera ustawiłem oba stosy oraz tak jak sugerowałeś zmniejszyłem pamięć o połowę -...
Kolega Freddie miał po części rację, po części spaprałem jeszcze kwestie zgodności tego, co było we flash-u z tym co debugowałem. Myślę, że problem tymczasowo rozwiązany (w pliku startowym jeszcze trzeba przepisać dane do RAM-u i wyzerować dane w sekcji .bss). Przy większej ilości plików w projekcie, które zawierają dane read-only (ja wrzuciłem cały...
Na początek cały kod: #include <stdint.h> #include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> #include "HD44780.h"//radzio #include "TWI.h"//radzio #define PCF8574ADDR 0x20//adres PCF #define MAX_OBR 220 //to daje 0.576ms/kroczek #define PRAWO 1 #define LEWO -1 #define STOP 0 //zmienne globalne...
Wiec, probowalem jeszcze raz ale z innymi pinami sterujacymi - wybralem do tego PORT_B_PIN11 i PORT_B_PIN_12, nie jestem pewien czy dobrze to sprawdzilem w nocie katalogowej, ale wydaje mi sie ,ze one powinny byc 5V tolerant. Ponizej zalaczam caly config. h oraz main.c - probowalem znowu przetestowac mozliwe wartosci dla nowych pinow sterujacych niestety...
Fakt, nie było pytania. Tylko sugestia- czy można to zrobić inaczej? Bo w zasadzie robię to dotychczas tak jak to opisał mirekk. Z całej dyskusji dotarło do mnie tylko to że można spróbować zastosować bufor- czy pierścieniowy czy FIFO to tak dokładnie nie zrozumiałem. Jakąś implementację bufora w C ściągnę z netu i będę próbował zrozumieć a potem przerobić...
Kernel code generally runs in one of two fundamental contexts. Process context reigns when the kernel is running directly on behalf of a (usually) user-space process; the code which implements system calls is one example. When the kernel is running in process context, it is allowed to go to sleep if necessary. But when the kernel is running in atomic...
Przykład obsługi przerwania od przycisku poziomem niskim: [syntax=c] //**************************************... // // File Name: 'main.c' // Title : AVR DDS2 signal generator // Author : Scienceprog.com - Copyright (C) 2008 // Created : 2008-03-09 // Revised : 2008-03-09 // Version : 2.0 // Target MCU: Atmel AVR...
Wydaje mi się, że mam problem z poprawnym umieszczeniem w pamięci ram struktur zawierających ramkę obrazu. Pierwsza z nich to: [syntax=c] static struct framebuffer { int w; int h; int bpp; int ready; uint8_t pixels[]; }*fb = (struct framebuffer *) &_fb_base; [/syntax] Ona będzie przechowywała co najmniej 320x240*2 bajtów w tablicy pixels. Oraz druga:...
Ok, coś jest nie tak. Przede wszystkim systick działa na trybie optymalizacji O1 i O2. Bez zmiany kodu. Na O0 od razu jest hard fault. Ale nie występuje na żadnej linijce kodu. Nie wchodzi do przerwania i wywala od razu błąd. EDIT: Działa w momencie kiedy wywaliłem inicjalizacje: N VIC_Init(&NVIC_InitStructure); A w to miejsce dałem: NVIC->ISER...
Jako że to jest główny wątek dotyczący adapterów JTAG oraz OpenOCD, chciałbym się podzielić rozwiązanym problemem z programowaniem Flash w prockach LPC17XX, który przewija się przez wiele forów i jakoś nikt nic sensownego nie może w tej sprawie doradzić. Konfiguracja: - CPU LPC1788, płytka EmbeddedArtists OEM PLC1788 - Jtag KT-Link - OpenOCD 0.5.0,...
Ja się wahałem czy tej książki nie kupić i teraz się cieszę, że tego nie zrobiłem :P /* Handler mode (core exceptions / interrupts) can use only main stack */ /* Thread mode can use main stack (default) or process stack - selected in CONTROL special register */ __main_stack_size = 0; __process_stack_size = 1024; Jest jakaś (tzn na pewno...
Przepisałem praktycznie na nowo kod wzorując się ściśle na bibliotekach HAL. Niestety nic to nie daje. Porównałem nawet rejestry poszczególnych peryferiów: FLASH, RCC, GPIOB (SDA i SCL), I2C1, NVIC. Wszystko jest takie same do momentu wysłania adresu po magistrali. Poniżej zamieszczam screeny po wystąpieniu pierwszego przerwania (I2C_SR1_SB) po generacji...
Freddie Chopin dzięki za odpowiedź! Czy mógłbyś podzielić się fragmentami skryptu linkera z poprawnie zdefiniowanymi symbolami __heap_start i __heap_end ? Aktualnie Twój skrypt którego używam wygląda tak: [syntax=c] /***************************************... * author: Freddie Chopin, http://www.freddiechopin.info/...
Oto i funkcje. [syntax=c] static void SELECT (void) // CS w stan niski { GPIOB->BRR |= GPIO_BRR_BR12; } static void DESELECT (void) // CS w stan wysoki { GPIOB->ODR |= GPIO_ODR_ODR12; } void SPI_SD_Init( void ) { RCC->APB1ENR |= RCC_APB1ENR_SPI2EN; gpioConfig(GPIOB, 12, MODE_OUTPUT_50MHZ); //linia CS (PB12) - MODE OUTPUT PP gpioConfig(GPIOB,...
Wydawało mi się, że poprawnie skonfigurowałem FreeRTOS, ale ten znowu mnie zaskoczył :) Nie wiem czym Cię zaskoczył bo dokumentacja mówi o tym wyraźnie. Starts the FreeRTOS scheduler running. Typically, before the scheduler has been started, main() (or a function called by main()) will be executing. After the scheduler has been started, only tasks...
Skompilowałem nieco przerobiony (usunąłem konfigurację PLL, itp..) pod mój procesor (STM32F100RB) przykład z twojej strony. Ze standardowym skryptem linkera działa, po zmianie TYLKO skryptu linkera na przerobiony pod RAM (kod poniżej) niestety nie: [syntax=asm] /***************************************... * author:...
bo w "normalnym" programie to będzie już musiało być zrobione inaczej. Tz jak ? :) Narazie przychodzi mi do głowy tylko takie rozwiązanie: Załóżmy że bez Delay'ów w mainie. W pętli jest tylko wysyłana ramka i zmiana pinu sterującego. Natomiast w przerwaniu sprawdzam: jeśli odebrano pierwszy bajt (tj. adres urządzenia ) to odbieram kolejne aż do otrzymania...
Bardzo dziękuję za dotychczasową pomoc:) A jeszcze jedno pytanie czy mogę połączyć pamięć ram z aux_ram i mieć 128k zamiast 112? W taki sposób: [syntax=c] /***************************************... * author: Freddie Chopin, http://www.freddiechopin.info/ * file: STM32F4xxxG_rom.ld * last change: 2012-03-15 * * chip:...
Faktycznie! Jeśli nie przekroczę 4 breakpointów to nic się złego nie dzieje. W kail-u wyświetla się okienko informujące że nie można dodać kolejnego breakpointu (max to 5). Dzięki Freddie! Mam jeszcze jedno pytanie. Chciałem użyć w projekcie kontenerów z biblioteki standardowej C++ (konkretnie vektora i kolejki) jednak gdy program chciał wykonać którąś...
Generalnie to pobrałem skrypt linkera i plik startup ze strony http://www.freddiechopin.info. W datasheet i manualu znalazłem adres pierwszej strony pamięci flash i SRAM, która jest "rozbita" na 96KB i 32KB. Zmieniłem w oparciu o te informacje skrypt linkera. Czy zrobiłem to dobrze? Nie wiem. Poniżej: Skrypt linkera: [syntax=c] /***************************************...
Witam, program w RAM uruchamiam tylko za pomocą debuggera. Robię dużo testów i nie chcę cały czas przeładowywać flash Ten HardFault następuje dopiero przy pierwszym użyciu new przez Ciebie, czy może np. przed wejściem do main() albo jeszcze gdzieś indziej - "wewnątrz" systemu? Jak nie używam new (w ramie) to wszystko działa, jak gdzieś w kodzie dodam...
Witam! Mam problem z fatfs 0.09b (najnowsza; wersja 0.07 też nie działa) pod stm32f103vet6. Komunikacja SPI. Maksymalny prescaler SPI do debug'u. (Na każdej prędkości to samo). Disk timer proc na SysTick'u (działa). Karta formatowana na różne jednostki alokacji, FAT, FAT32 zawsze to samo. Nie korzystam z LFN. Strona kodowa 852, 125x, 1 (ANSI) bez znaczenia....
freertos interrupt interrupt event interrupt wyłączyć
sterowniki compaq 6720s peugeot partner zawory kamera zawiesza komputer
kemppi rezystor ładowarka macallister
Schemat zasilacza Philips DYS602-210309W Jak zmniejszyć prędkość w skuterze elektrycznym?