wychodzi mi jakieś 8 8 cykli to zajmuje pierwsza linijka <; wejście do przerwania to następne kilkanaście + wyjście. Sugerujesz bitbanding dla kasowania flagi przerwania? No przecież właśnie o to chodzi - żebyś nie musiał odczytywać, modyfikować i zapisywać z powrotem. Czyli twiedzisz że 6*10kHz takich przerwań to dla tego procesora pikuś i nie...
w makro masz odwołanie do ODR zamiast IDR
Rozumiem, że bitbanding wykorzystuje się do odczytu flag ustawiana wyjść niż konfiguracji peryferii, które w większości przypadków lepiej ustawiać tradycyjnie? Exactly. No chyba że właśnie musisz w jakimś celu zmienić JEDEN bit (np. najpierw konfigurujesz całe "coś", a potem włączasz to "coś" jednymi bitem), to wtedy również. 4\/3!!
odczyt rejestru - modyfikacja - zapis do rejestru . Nie powinno cię dziwić, że jeśli między tymi operacjami wystąpi przerwanie, w którym modyfikowane są ODR bitbandingiem i nie tylko to cała operacja z przerwania zostanie anulowana.
Działający kod dla I2C mojego autorstwa był wrzucany na forum już wielokrotnie - wystarczy poszukać. 4\/3!! Zdziwisz się ale wzorowałem się na twoim kodzie: http://www.elektroda.pl/rtvforum/viewtop... Ty wykorzystujesz bitbanding ja sprawdzanie warunków, fakt że twój kod będzie krótszy ale to nie powinno mieć wpływu na efekt...
Witam , mam problem z działaniem bit brandingu. Zmieniając makrem BB rejestr GPIOB->ODR jest OK , ale chcąc zmienić rejesr MODER program wchodzi w infinite loop. Jak wiecie w czym rzecz , proszę o pomoc. [syntax=c] #define BB(rej,pin) *(__IO uint32_t*)(0x42000000 + (32 * ((uint32_t)&rej - ((uint32_t)&rej & 0xFFF00000))) + (4 * pin)) int...
Zaraz postaram się zrobić to za pomocą bitbandingu, ale jest nadal kwestia tego, że wpisanie do TIM2->ARR jakiejkolwiek wartości niczym nie skutkuje... A jeśli ustawię przerwanie od CC1 ( TIM2->DIER |= TIM_DIER_CC1IE ), to co jest tak właściwie przyczyną przerwania? Jednak TIM2->ARR już działa. Żeby wykorzystać bitbanding to będzie tak?? [syntax=c]TIM1_SR_UIF_bb...
Witam, Nie mogę ustawić pinu za pomocą bit banding, Wydaje mi się, że wszystko robię ok. Czy ktoś mógłby sprawić czy to powinno działać ? Korzystam z RM0038 Reference manual. Wykorzystuję następujący wzór: bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4) Próbuje dla portu C pin 8 bit_word_addr = 42000000h + ( 20800h x 20h) + (8h...
Czy trzeba to pisać dla każdego peryferium/pamięci samemu? Ja robię to przy pomocy arkusza kalkulacyjnego, do którego muszę powpisywać nazwy bitów i ich numerki, reszta robi się mniej więcej sama. Trochę roboty z tym jest. Niemniej jednak mam tych nagłówków trochę, pisz więc jakich potrzebujesz to Ci podeślę. Żadna wada. Zauważyłem tylko, że ktoś niedawno...
Mowisz dalej o szybkosci ok trzeba bylo dac STM32F4 + PHY :), a moze lepiej pilo by zrobic karte na PCI-x ? Jest w tym sens ? Oczywiscie, ze jest sens - nauka,wiedza,rozwiazywanie problemow i nie widze nic smiesznego pytajac tu na forum o rzeczy, ktore innym wydaja sie oczywiste. Pije tu do tematu 1Mhz, bo ja potrzebuje wiedzy i chcialbym wiedziec...
No ale jaki jest w ogóle sens tego kodu? 1. Najpierw czekasz na zmienną którą ustawiasz w tej samej funkcji i ponoć nie masz przerwań (choć w komentarzach coś niby o nich piszesz), to po co czekać? (nie mówiąc już o tym, że się nigdy nie doczekasz poza pierwszym razem [może], gdyż nigdzie tej zmiennej nie zerujesz przy braku problemów) 2. Potem kopiujesz...
OpenOCD zaktualizowanie tak jak kompilator wcześniej. Przerabiam przykład od początku teraz na bazie tego o którym mówiłeś LPC Będe wklejał tutaj co dokładnie przerabiam. Jeśli coś robię źle to mam nadzieje że mnie poprawicie. Jeśli dobrze to mam nadzieje że komuś się przyda. 1.Import projektu lpc1114_blink_led i rename na stm32f0_blink_led 2. Zmiany...
Może wbiję kij w mrowisko: Po co właściwie Ci ten bitbanding? Programuję Cortexy na codzień i nie zauważam praktycznej potrzeby użycia BB. Nie to, żeby w ogóle jej nie było, ale jest ona tak marginalna, że nie opłaca się w to bawić. Tam, gdzie są potrzebne operacje bitowe, są one zaimplementowane w sprzęcie lepiej i bez potrzeby użycia BB i szybciej...
Bitbanding służy tylko do bitów. Atomic block w AVR po prostu wyłaczą przerwania na ten czas. Chodzi o to aby coś w tle nie zmieniło tej lokacji w trakcie czytania / pisania. Dotyczy to zresztą tylko operacji wykonujących w wiekszej ilości operacji niż jedna. Dodano po 3 o dzięki, szukałem dzisiaj tego bitu w PM, ale nie mogłem znaleźć. Naprawdę? http://www.st.com/content/ccc/resource/t...
Ja chyba nigdy nie rozumiem czemu po prostu nie skorzystać z bit-bandingu... A! już mi się przypomniało - bo nie ma tego w nagłówku od ST... Jedyne zastosowanie do którego bitbanding się nie nadaje, to ustawianie wielu bitów na raz... 4\/3!!
Według dokumentacji gpioa jest na 0x48000000 - nie za wysoko jak na bitbang? Za wysoko. Bitbanding obejmuje obszar o rozmiarze 1MB, a więc do 0x400fffff. w tym miejscu bidband jest pożyteczny, jak... w obliczu zaimplementowanego bitbangu w samym GPIO..... I zapewne większości kodu w SPLu No i co z tego?
Nie ma praw autorskich - kod jest public domain / freeware. Możesz z nim robić co chcesz. Ja bym tylko z ciekawości zapytał co jest "nie tak" z bitbandingiem? No i swoją drogą, funkcja w takiej postaci jak w przykładzie (wyliczanie ustawień) jest średnio sensowna do jakiegoś typowego projektu, w którym kwarc i częstotliwość finalna są znane i stałe,...
Pierwszy raz słyszę, żeby za pomocą komentarzy dało się cokolwiek zrobić w C :) Poszukaj w postach freddiego chopina, zrobił cały tutorial do toolchaina i udostępnił publicznie i nieodpłatnie projekt właśnie do migania diodą na STM32, zawierający plik startup, tablicę wektorów i konfigurację portów GPIO ze sterowaniem jednego pinu za pomocą bitbandingu....
Kod który kiedyś udostępniłem na forum używał bitbandingu. Nagłówki do tego bitbandingu można pobrać z mojej stronki (wraz z projektem-szablonem stm32_blink_led). Skoro wziąłeś ten kod i usunąłeś z niego bitbanding po to żeby potem dodać go ręcznie, to musisz mi darować że nie chce mi się sprawdzać czy przeprowadziłeś tą całkowicie pozbawioną sensu...
Takich rzeczy się nie robi zazwyczaj, bo każdy bit jest zdefiniowany i oruje się nazwy bitów lub stosuje się bitbanding, ale jeśli trzeba już coś takiego zrobić to najlepiej pogrupować sobie na 4. 0b10100010100011101100101100101000 0b1010 0010 1000 1110 1100 1011 0010 1000 0xA28ECB21
Template i konfiguracja RCC freddiego, mam nadzieję, że się nie obrazi :) Program używa tylko pinu TX i cyklicznie wysyła tablicę, w tym przypadku w kółko tą samą. [syntax=c]#include "inc/stm32f10x.h" #include "config.h" #define CRYSTAL 8000000ul // quartz crystal resonator which is connected to the chip #define FREQUENCY 72000000ul // desired target...
Cześć Odpaliłem w nim prawie wszystkie peryferia włącznie z SPI Master i Slave. Tutaj masz kod wycięty z jakiegoś ich exampla i napewno działający: /***************************************... * Function Name : SPI_FLASH_SendByte * Description : Sends a byte through the SPI interface and return the byte *...
W STM32F3 porty GPIO są na magistrali AHB2 i w przestrzeni adresowej 0x48000000 i wzwyż. Obszar ten nie jest dostępny przez bitbanding.
Wystarczy spojrzeć na problem z ISP (na rejestrach trywialny): Chyba SPI, a nie ISP... Zainteresuj się bitbandigiem -> można jeszcze prościej grzebać w rejestrach, z dość sporą oszczędnością pamięci I2C na rejestrach i z bitbandingiem: // jednorazowa inicjalizacja io_pin_cfg(GPIO_SCL, SCL_pin, m_GPIO_MODE_CNF_value(GPIO_CRx_MODE_...
Możliwe, że to u mnie właśnie było. Zawieszał się właśnie przy pierwszym starcie. Jak się powtórzy to właśnie to zrobię. Jak masz debugger to sprawdź stan wszystkich bitów w rejestrach statusowych, albo wyślij wartości tych rejestrów po uarcie, albo jakoś je podejrzyj ps. to się liczy od zegara w CR2 czy zegara magistrali APB, bo dziwnie to jest napisane?...
Pytam z ciekawości, fakt, nie doczytałem że M0. Z bitbandingiem gdyby działało, będzie działało szybciej/prościej a to też zaleta.
Dzięki wielkie za odpowiedzi, oczywiście było tak jak mówicie, bit w rejestrze DIER + błędnie ustawiony bit UDIS, teraz już działa ;) co do wartości w rejestrach PSC i ARR to były zupełnie przypadkowe na razie :) a TIM2_CR1_CEN_bb = 1; to dostęp do bitu CEN przez bitbanding i tak, włącza on timera ;) Jeśli chodzi o printf Freddiego - on napisał swoją...
void i2c_send_start(u32 i2c) { I2C_CR1(i2c) |= I2C_CR1_START; } void i2c_send_stop(u32 i2c) { I2C_CR1(i2c) |= I2C_CR1_STOP; } void i2c_send_data(u32 i2c, u8 data) { I2C_DR(i2c) = data; } void i2c_send_7bit_address(u32 i2c, u8 slave, u8 readwrite) { I2C_DR(i2c)...
mgiro: CooCox jest o tyle wygodny, że po instalacji możesz samodzielnie zmodyfikować pliki, które jako szablon projektu będą kopiowane do folderu tworzonego projektu już na starcie. W ten sposób nie zaczynasz z pustym "main.c", a np. stm32f4xx.h może zawierać dodatkowe informacje, definicje czy makra (np. BitBanding). W repozytorium zazwyczaj zaznaczam...
No ja nawet wiem gdzie to znalazłeś (; Po tym jak zrezygnowałeś z bitbandingu, to niektóre odczyty SR1 są zbędne, przy bitbandingu pewnie też były, ale nie sprawdzałem... Swoją drogą nie wiem czemu jakoś nikt nie wykorzystuje bitbandingu w cortexach - przecież to jest przegenialne! Generalnie rozwiązanie bez wad, a jednak wszyscy wolą biblioteki do...
Witam, próbuję skonfigurować licznik TIM2 w STM32L152RE, aby zliczał impulsy z pinu w trybie alternatywnym AF1 na PA0 i generował przerwanie po zliczeniu 10. Stan wysoki na linii w przerwaniu od SysTick. Niestety, TIM2 po zliczeniu impulsów nie generuje przerwania i nie ma żadnej reakcji od niego. Czy ktoś spotkał się z takim problemem? Funkcje do obsługi...
To, że coś działa jak to ujmujesz, nie jest miarą poprawności kodu, czy funkcjonowania algorytmu. A nie twierdzę że jest to poprawne, dlatego pytam. Z reguły używam do kasowania flagi bitbandingu. To że przy takiej operacji może być problem z innym przerwaniem, to wiem. Myślałem że jest jakiś inny powód. z bitbandingiem jest to samo - nie używać lepiej.
Jeśli chodzi o rozkazy BSRR oraz BRR to wydaje mi się, że w zasadzie dostęp do końcówek jest równoważny bitbandingowi, czyli korzyści dodatkowej nie ma. Korzyść jest gdy zastąpi się sprawdzanie warunku: [syntax=c]if(0 == (GPIOA->IDR & GPIO_IDR_IDR0)) if(BUTTON) [/syntax] Proszę o sprostowanie jeśli się mylę.
Obsługa Frediego, co prawda z bitbandingiem, ale wystarczy przepisać na odpowiedni rejestr: https://www.elektroda.pl/rtvforum/viewto... Mój kod i kolegów (at)nsvinc oraz (at)tymon_x , którzy chyba porzucili forum też się gdzieś "walały". Wystarczy skorzystać z funkcji "szukaj". Jedyny problem z I2C jest taki, że nie ma sensu używać...
Jak do tej pory wszystkie wyświetlacze z HD44780 jakie miałem, bez problemu pracowały z procesorami 3.3V. Próg 1 dla układów TTL 5V jest 2.4V, więc nie powinno być problemów z tego powodu. Dodano po 2 Jeżeli dobrze zrozumiałem to tak powinno być? Mimo tego chyba problem nie tutaj leży PUPDR dla portu E po resecie jest 0x00000000, a No pull-up pull-down...
Przykłady (wraz z definicjami potrzebnymi do bitbandingu) są w projekcie stm32_blink_led jakby co (; 4\/3!!
ten dziwaczny zapis nie jest ani trochę szybszy od normalnego testowania stanu bitu TXE bez upycia bitbandingu. Problem leży więc zapewne nie w optymalizacji kodu przez kompilator, ale w zbędnej optymalizacji przez programistę Bitbandingu używam głównie z powodu wygody zapisu. Jakiś czas temu brałem tu udział w dyskusji w której wszyscy tu zachwalali...
"Ręczne" przełączanie pinu GPIO powinno działać szybciej przy wykorzystaniu bitbandingu.
Dzięki. Nie korzystam z tych bibliotek, wg rady starszych (doświadczeniem:). Dodano po 8 Dodano po 10 Używam bitbandingu, ale w sumie nie sprawdziłem czy dla tych rejestrów jest to możliwe, bo chyba nie dla wszystkich. Może w tym jest problem?
http://lmgtfy.com/?q=bitbanding 4\/3!!
1. Plik core_cm3.h wchodzi w skład CMSIS, czyli biblioteki stworzonej przez ARM. Tamten kod ma sens (; 2. Wpisując ODR zamieniasz CAŁY port, przypisując mu nową wartość. Korzystając z BSR czy BSRR możesz po prostu właczyć/wyłączyć dany bit, nie zmieniając wartości pozostałych (które w tym przypadku w ogóle Cię nie obchodzą). Podobną funkcjonalność można...
Jeśli coś potrzebujesz zczytać z pinu to faktycznie ustawiasz go jako in floating w tym przypadku no i potem robisz funkcje odczytującą ten pin. W jaki sposób to zrobisz to Twój wybór, możesz np. do pojedynczych bitów użyć bitbandingu zależy od Ciebie. Taki przykład: załóżmy, że masz pin1 jako wejście bo z niego zbierasz dane i potem w zależności od...
Klepiemy punkty na nagłówku, który dostępny jest w milionie odmian? Np tutaj jest najnowsza wersja mojego autorstwa - z automatycznym wykrywaniem czy chodzi o region RAM czy PERIPHERAL, do ściągnięcia bez punktów (w paczce "ARM headers"): http://freddiechopin.info/pl/download/ca... Dodatkowo: - bez jakichkolwiek licencji i ograniczeń (100%...
Witam, Niestety natrafiłeś na ogólnie znany problem :-) I2C w stm32f103 jest po prostu ... nie działa najlepiej. Jeżeli dobrze pamiętam przy próbie odczytu nie ustawia mu flagi IV5 i można tak czekać i czekać. Jeżeli masz nowe biblioteki to spróbuj zmienić prędkość transmisji na 50kB. Jeżeli to nie pomoże to zostaje ci bitbanging :)
gaskoin - pytam dlatego, bo gdzieś kiedyś czytałem że w procesorach 32 bitowych dla każdego char itp. kompilator i tak rezerwuje całą komórkę 32 bit, nie używając po prostu reszty. Z tego wynika że adresowane są nie słowa 32 bit, ale pojedyńcze bajty, jeżeli dobrze rozumiem? Adresować możesz poszczególne bajty, a korzystając z bitbandingu - w ograniczonym...
I2C ma pewne ograniczenia opisane w erracie, obsługę odbioru chyba najlepiej zrobić w DMA. Jest pdf opisujący obsługę I2C [url=http://www.st.com/internet/com/TECH... STM32F10xxx I²C optimized examples Poniżej wklejam swój kod funkcji odbioru oparty o polling, bazuje ona na...
Czyli czekasz na pochwałę za swoją decyzję o używaniu SPL? (; To że "wszyscy" czegoś używają, jeszcze nie oznacza że to coś jest dobre albo lepsze od czegoś innego... Wystartowanie bez bibliotek jest trudniejsze, bo wszyscy autorzy artykułów, przykładów czy książek idą na łatwiznę i używają tej pseudo-biblioteki... A potem - tak jak ktoś pisał powyżej,...
Ja mam jedną prośbę (oprócz tej powyżej). Czy mógłbyś wklejać kod na forum jako tekst w znacznikach [syntax][/syntax] zamiast screenów ? Btw ten warunek optymalniej można napisać wstawiając po prostu else'a zamiast sprawdzać 10 razy to samo. Nawet jeśli optymalizator i tak to zoptymalizuje to jakoś szybciej się to czyta. W ogóle to ten warunek można...
Freddie Chopin , Ok, rozumiem Twój punkt widzenia, ale Ty to "ekstremista" jesteś - do mrugania LED-em zawsze używasz bitbandingu ;-). Żeby nie było całkiem OT - "dałem" Autorowi wątku formatkę, która działa i wykorzystuje te nieszczęsne SPL - da się??? Jeśli początkujący "załapie" o co w tym wszystkim chodzi, to pewnie sam zauważy niedostatki SPL-a....
Witam. Od pewnego czasu mam problem ze stworzeniem własnego szablonu projektu pod taki uC. Opieram się na opisie jaki jest tutaj: http://www.elektroda.pl/rtvforum/viewtop... Dodatkowo usunąłem też pliki hdr_bitband.h i hdr_rcc.h bo oba dotyczą bitbandingu którego w Cortex-M0 nie ma. Dodałem też nowe funkcje od PLLa do F030 (pod...
TXE_bb a to co? SPI_SR bit Transmit Buffer Empty. Sprawdzam go z użyciem bitbandingu. A zapis w SPI musi być powiązany z odczytem Nie musi być, jeżeli nie używa się odczytu. Nie potrafiłem uruchomić odczytu, dostawałem jakieś przypadkowe bajty. Nie wiem czy w tym wyświetlaczu działa odczyt. Próbowałem odczytywać ID i inne znane dane. Próbowałem i SPI...
stm32 projekty stm32 f103rb ssd1963 stm32
skontrolować wtrysk charakterystyka amplitudowo fazowy analizator saleae
diagbox lexia lodówka electrolux
Amica – reset sterownika piekarnika przy ustawianiu zegara i menu, kondensatory, zimne luty Lokalizacja przekaźnika pompy paliwa w Fiat Grande Punto 1.3 Multijet