Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

odczyt/zapis do flash, dla laika

Piesiu567 03 Gru 2010 17:43 1402 8
  • #1 03 Gru 2010 17:43
    Piesiu567
    Poziom 12  

    Witam. Jak narazie mam tylko doświadczenie z AVR-ami programowanymi w asemblerze i dopiero zaczynam zabawę z ARM7. Ucze się główne z książki „LPC2000” L. Bryndzy, którą nawiasem mówiąc polecam wszystkim początkującym.

    Pisze program w języku C do generowania sygnałów na LPC2129. Chce aby generował 3 podstawowe przebiegi (sinus, itp.) i czwarty dowolny przesłany z komputera przez RS232. ustaliłem sobie, że probki będą 16 bitowe i będzie ich 2500. Zrobiłem już to co uważałem za najtrudniejsze tzn. przesyłanie przebiegów z PC, ale teraz mam jeszcze większy. Jeden przebieg zajmuje około 5kB i chciałbym żeby były one przechowywane w pamięci flash zapisane w procesie programowania, a w pamięci RAM tylko ten który będzie używany w danym momencie. Dodatkowo próbki przesłane z PC mają być kopiowane do flash, aby nie były tracone po odłączeniu zasilania. Mam właśnie problem z odczytem i zapisem do flash. Znalazłem kilka kodów w internecie, ale nie mogę ich ogarnąć. Prosiłbym o jakies wytłumaczenie jak to zrobić i dodatkowo, żeby przypadkiem nie wymazać częsci programu. Myślałem, żeby zrobić jakąś wstawkę asemblerową np.
    w7seg_TAB:
    .DB 0xabcd, 0x1234

    0 8
  • #2 03 Gru 2010 20:34
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Żebyśmy się dobrze zrozumieli - chcesz w kodzie programu umieścić tablicę, która powinna być we flashu i potem ją odczytywać?

    4\/3!!

    0
  • #3 03 Gru 2010 20:51
    Piesiu567
    Poziom 12  

    dokładnie tak. I jeszcze żeby można było zapisywać do niej, ale jak ogarnę to pierwsze to z drugim powinienem sobie poradzić

    0
  • #4 03 Gru 2010 21:25
    gaskoin
    Poziom 38  

    W ARMach dane stałe umieszczane są we flashu. Stąd :

    Code:

    const float pi = 3.14;


    już zapisze pi we flashu. Można ją niestety tylko odczytywać. Da się to oczywiście oszukać przez wskaźnik, ale nie tędy droga :)

    0
  • #5 03 Gru 2010 21:45
    Freddie Chopin
    Specjalista - Mikrokontrolery

    gaskoin napisał:
    Da się to oczywiście oszukać przez wskaźnik, ale nie tędy droga :)

    To że kompilator pozwoli na taką operację nie znaczy, że cokolwiek zostanie gdziekolwiek zapisane, bo NIE zostanie, tylko w 99% przypadków skończy się na jakimś wyjątku sprzętowym.

    Wracając do głównego problemu chciałbym tylko nadmienić, że skoro nie wiedziałeś jak w C zrobić stałą, to ja bym raczej nie polecał tej książki początkującym...

    Zapis Flasha (poza procesem programowania) jest już nieco bardziej skomplikowaną sprawą i myślę ze jest w tej książce poruszony, a jeśli nie, to są noty aplikacyjne dotyczące tej kwestii.

    Kilka uwag natury ogólnej - jeśli tablicę z sygnałem masz w pamięci Flash, to nie ma najmniejszego sensu kopiowanie jej przed odczytem do RAM, bo co niby miałoby to zmienić, ułatwić lub przyspieszyć? Skoro masz 2500 16-bitowych próbek, to mam nadzieję, że jesteś świadomy tego, że np sinusa wystarczy zapisać tylko pierwszą ćwiartkę i już z 5kB robi się 1.25kB - pozostałe 3/4 sygnału da się odtworzyć z tej pierwszej ćwiartki w sposób banalny. Nie wiem jakie masz pozostałe sygnały, ale skoro są podstawowe, to myślę, że w ogóle nie ma sensu ich zapisywać, bo można je obliczyć w czasie rzeczywistym. Nawet tego sinusa obliczysz w czasie rzeczywistym jeśli sygnał nie ma mieć wysokiej częstotliwości. Obstawiam, że policzenie jednej próbki zajmie max 1000 cykli. No chyba że te inne sygnały to np cosinus, który - jak wiadomo - również jest do odtworzenia z tej samej ćwiartki sinusa. Dalej idąc - wiele sygnałów "wolno-zmiennych" (np sinus) można z powodzeniem odtwarzać z kilku próbek rzeczywistych, a wartości "pomiędzy nimi" aproksymować liniowo. Np w jednej ćwiartce zamiast x próbek masz tylko x/4, próbki leżące "pomiędzy" wartościami z tablicy obliczasz z prostej zależności liniowej (aproksymacja liniowa). Tym sposobem można wręcz zmienić częstotliwość sygnału (zachowując częstotliwość próbkowania oczywiście) na praktycznie dowolną i zrobić generator DDS.

    4\/3!!

    0
  • #6 03 Gru 2010 22:15
    Piesiu567
    Poziom 12  

    Oczywiście wiem jak zrobić stałą, ale nie miałem pojęcia, że przechowywana jest ona w pamięci flash. To rzeczywiście znacznie upraszcza sprawę. Rozważałem możliwość obliczania wartości próbek przez mikrokontroler, ale zależy mi właśnie na jak najszybszym czasie przesłania jej na port. Takie obliczanie mogłoby się odbyć zaraz przed generowaniem sygnału. Z tego co napisałeś, Freddie Chopin rozumiem, że czas wysłania z flash na port i z RAMu na port jest identyczny, tak?

    W książce niestety nic nie jest napisane o zapisywaniu do flash z działającego programu. Przydałby się chociaż jakiś przykładowy program

    0
  • #7 03 Gru 2010 22:43
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Piesiu567 napisał:
    Rozważałem możliwość obliczania wartości próbek przez mikrokontroler, ale zależy mi właśnie na jak najszybszym czasie przesłania jej na port.

    No ale skoro mówimy o sygnałach analogowych, to na jaki port je wysyłasz? Do jakiegoś przetwornika? Przecież one też mają ograniczoną częstotliwość.

    Cytat:
    Takie obliczanie mogłoby się odbyć zaraz przed generowaniem sygnału.

    No właśnie - jeśli mieszczą się w RAM, to zawsze można zrobić właśnie tak.

    Cytat:
    Z tego co napisałeś, Freddie Chopin rozumiem, że czas wysłania z flash na port i z RAMu na port jest identyczny, tak?

    Jest zbliżony.

    Cytat:
    W książce niestety nic nie jest napisane o zapisywaniu do flash z działającego programu. Przydałby się chociaż jakiś przykładowy program

    Tu jest jakaś nota o tej kwestii http://ics.nxp.com/support/documents/microcontrollers/pdf/an10256.pdf Jest też rozdział w manualu poświęcony IAP.

    4\/3!!

    0
  • #8 03 Gru 2010 23:36
    Piesiu567
    Poziom 12  

    tak, wysyłam na port do którego będzie podłączony jakiś przetwornik cyfrowo-analogowy. Posiedze jutro na tym pdf-em i zobacze co mi z tego wyjdzie. Jak narzazie dzieki wam za pomoc

    0
  • #9 03 Gru 2010 23:52
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Najlepiej posiedź od razu nad rozdziałem o IAP z manuala - w nocie nie ma nic więcej niż tam, a wręcz jest dużo mniej (prawie nic).

    4\/3!!

    0