Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
TespolTespol
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Eclipse + CodeSourcery + LPC2478 - jak zacząć?

atom1477 15 Jun 2009 21:56 16711 103
  • #31
    atom1477
    Level 43  
    Widziałem to. Ale wcale nie widać że to to bo adres jest jakiś niedomyślny.
    Ale wpadłem na to i wstawiałem tam adresy moich portów.
    Niestety bez skutecznie. No nic. Jeszcze raz (4-ty raz) zresetuję kompa.


    Jeszcze raz zrobiłem instalację give_io. Sprawdziłem czy adres w pliku parport.cfg jest dobrze wpisany, zresetowałem kompa i niestety nic.

    Dodano po 43 [minuty]:

    Było tak jak myślałem.
    Giveio się nie zainstalowało.
    Ściągnąłem sobie GiveIO z tąd:
    https://www.elektroda.pl/rtvforum/topic790941.html


    I teraz mam:
    Code:

    Open On-Chip Debugger 0.1.0 (2009-01-21-21:15) Release


    BUGS? Read http://svn.berlios.de/svnroot/repos/openocd/trunk/BUGS


    $URL: https://kc8apf@svn.berlios.de/svnroot/repos/openocd/tags/openocd-0.1.0/src/openocd.c $
    jtag_speed: 0
    Info : JTAG tap: lpc2148.cpu tap/device found: 0x5e1e1e1f (Manufacturer: 0x70f, Part: 0xe1e1, Version: 0x5)
    Error: JTAG tap: lpc2148.cpu             got: 0x5e1e1e1f (mfg: 0x70f, part: 0xe1e1, ver: 0x5)
    Error: JTAG tap: lpc2148.cpu expected 1 of 1: 0xffffffff (mfg: 0x7ff, part: 0xffff, ver: 0xf)
    Error: trying to validate configured JTAG chain anyway...
    Error: unknown EmbeddedICE version (comms ctrl: 0x00000000)
    Warn : no tcl port specified, using default port 6666
    Warn : Tap/Device does not have IDCODE
    Error: JTAG tap: lpc2148.cpu             got: 0x00000000 (mfg: 0x000, part: 0x0000, ver: 0x0)
    Error: JTAG tap: lpc2148.cpu expected 1 of 1: 0xffffffff (mfg: 0x7ff, part: 0xffff, ver: 0xf)
    Error: trying to validate configured JTAG chain anyway...
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    Runtime error, file "command.c", line 457:
       



    Czyli chyba dobrze, bo procesor to LPC2478 a ja próbuję go zaprogramowac jako LPC2148.
    Więc wielkie dzięki.
    Teraz będę przerabiał program na LPC2478.


    Zmieniłem procesor na LPC2249 i teraz mam:
    Code:

    Open On-Chip Debugger 0.1.0 (2009-01-21-21:15) Release


    BUGS? Read http://svn.berlios.de/svnroot/repos/openocd/trunk/BUGS


    $URL: https://kc8apf@svn.berlios.de/svnroot/repos/openocd/tags/openocd-0.1.0/src/openocd.c $
    jtag_speed: 0
    Info : JTAG tap: lpc2294.cpu tap/device found: 0x4f1f0f0f (Manufacturer: 0x787, Part: 0xf1f0, Version: 0x4)
    Error: JTAG tap: lpc2294.cpu             got: 0x4f1f0f0f (mfg: 0x787, part: 0xf1f0, ver: 0x4)
    Error: JTAG tap: lpc2294.cpu expected 1 of 1: 0xffffffff (mfg: 0x7ff, part: 0xffff, ver: 0xf)
    Error: trying to validate configured JTAG chain anyway...
    Warn : EmbeddedICE version 7 detected, EmbeddedICE handling might be broken
    Warn : no tcl port specified, using default port 6666
    Warn : DBGACK set while target was in unknown state. Reset or initialize target.
    target state: halted
    target halted in ARM state due to breakpoint, current mode: Supervisor
    cpsr: 0xa00000d3 pc: 0x000723b4
    Info : JTAG tap: lpc2294.cpu tap/device found: 0x4f1f0f0f (Manufacturer: 0x787, Part: 0xf1f0, Version: 0x4)
    Error: JTAG tap: lpc2294.cpu             got: 0x4f1f0f0f (mfg: 0x787, part: 0xf1f0, ver: 0x4)
    Error: JTAG tap: lpc2294.cpu expected 1 of 1: 0xffffffff (mfg: 0x7ff, part: 0xffff, ver: 0xf)
    Error: trying to validate configured JTAG chain anyway...
    target state: halted
    target halted in Thumb state due to breakpoint, current mode: Supervisor
    cpsr: 0x000000f3 pc: 0x20242014
    auto erase enabled
    Error: couldn't open lpc2103_blink_led.bin



    Czyli znowy trochę lepiej bo już nie ma błędu "Runtime error" ;p
    Ale jest za to: "Error: couldn't open lpc2103_blink_led.bin"
  • TespolTespol
  • TespolTespol
  • #33
    atom1477
    Level 43  
    Jak na razie to zastanawiam się jaki plik wskazać żeby programowanie ruszyło.
    Był podany LPC2103.cfg ale takiego nawet nie ma, był LPC2249.cfg ale ten tez zły.
    A LPC2478 też nie widzę.

    Dodano po 2 [minuty]:

    OPenOCD chyba nie patrzy na kod programu. Więc wystarczy że znajdę plik LPC2478.cfg i programowanie ruszy? (OpenOCD po samym pliku BIN chyba się nie pozna że kod jest nie na ten procesor - oczywiście program nie ruszy ale na razie chcę tylko przeprowadzić programowanie (czymkolwiek - może być i jakiś film przerobiony na plkik BIN ;p) i potem np. przeprowadzić weryfikację.)
  • Helpful post
    #34
    Freddie Chopin
    MCUs specialist
    Code:

    # Testing feeedback wanted!
    set _CHIPNAME lpc2478
    set _ENDIAN little
    set _CPUTAPID 0x4f1f0f0f

    # Use RCLK. If RCLK is not available fall back to 500kHz.
    #
    # Depending on cabling you might be able to eek this up to 2000kHz.
    jtag_rclk 500

    jtag_nsrst_delay 200
    jtag_ntrst_delay 200

    #use combined on interfaces or targets that can't set TRST/SRST separately
    reset_config trst_and_srst srst_pulls_trst


    jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID

    set _TARGETNAME [format "%s.cpu" $_CHIPNAME]
    target create $_TARGETNAME arm7tdmi -endian $_ENDIAN -chain-position $_TARGETNAME -variant arm7tdmi-s_r4
    $_TARGETNAME configure -work-area-virt 0 -work-area-phys 0x40000000 -work-area-size 0x4000 -work-area-backup 0


    $_TARGETNAME configure -event reset-init {
       # Force target into ARM state
       soft_reset_halt
       # FIX!!!! should we remap the range below??? Is this applicable to
       # Copied from LPC2148.
       #do not remap 0x0000-0x0020 to anything but the flash
       mwb 0xE01FC040 0x01
    }


    flash bank lpc2000 0x0 0x7D000 0 0 0 lpc2000_v2 4000 calc_checksum


    Stwórz w folderze /target plik lpc2478.cfg i wrzuć do niego tą zawartość - zobaczymy co z tego wyjdzie. Plik z tego ci widzę nie jest przetestowany, więc masz zaszczyt go przetestować jako pierwszy [;

    Daj znać koniecznie jakie są efekty, to stworzę finalny pliczek.

    Tak w ogólę to ładuj lepiej plik hex, a nie bin.

    4\/3!!
  • #35
    atom1477
    Level 43  
    Wiesz, jakąś godzinę temu zrobiłem bliźniaczo podobny plik ;p Tylko ze miał jakieś znaki "+" pododawane na początku (plik stworzyłem z jakiegoś innego z internetu). I wywalało mi mnóstwo błędów w związku z tym.


    Teraz użyłem Twojego pliku.
    Wywaliło mnóstwo błędów.
    Przede wszystkim sygnatura procesora sie nie zgadzałą (co ciekawe przy plikach .cfg dla innych procesorów sygnatura mojego procesora była odczytywana poprawnie).
    Wtedy się zgapłem że pewnie linie RESET i TRST mam podmienione (w H-JTAG mogłem sobie inaczej zadeklarować a tutaj nie mogę).
    Więc przelutowałem przewody i od razu błędów mniej ;p

    Code:

    Open On-Chip Debugger 0.1.0 (2009-01-21-21:15) Release


    BUGS? Read http://svn.berlios.de/svnroot/repos/openocd/trunk/BUGS


    $URL: https://kc8apf@svn.berlios.de/svnroot/repos/openocd/tags/openocd-0.1.0/src/openocd.c $
    jtag_speed: 0
    RCLK - adaptive
    Error: Translation from khz to jtag_speed not implemented
    Info : JTAG tap: lpc2478.cpu tap/device found: 0x4f1f0f0f (Manufacturer: 0x787, Part: 0xf1f0, Version: 0x4)
    Info : JTAG Tap/device matched
    Warn : EmbeddedICE version 7 detected, EmbeddedICE handling might be broken
    Warn : no tcl port specified, using default port 6666
    Info : JTAG tap: lpc2478.cpu tap/device found: 0x4f1f0f0f (Manufacturer: 0x787, Part: 0xf1f0, Version: 0x4)
    Info : JTAG Tap/device matched
    target state: halted
    target halted in Thumb state due to debug-request, current mode: Supervisor
    cpsr: 0xa00000f3 pc: 0x7fffe152
    auto erase enabled
    Error: couldn't open lpc2103_blink_led.hex


    Plik lpc2103_blink_led.hex jest w katalogu “Out”. Może trzeba podać plik jako „Out/ lpc2103_blink_led.hex”?

    Dodano po 11 [minuty]:

    Chyba jednak nie.

    Dodano po 3 [minuty]:

    Nie ukrywam że podczas przerabiania Twojego programu do mrugania diodą na mój procesor LPC2478 także liczę na Twoją pomoc. Jak na razie to dziękuję za dotychczasową.
  • Helpful post
    #36
    Freddie Chopin
    MCUs specialist
    No więc po pierwsze widzę, że plik konfiguracyjny działą prawidłowo! <: Warnami się nie przejmuj, są nieistotne. Profilaktycznie ustaw jtag_speed na 2, albo nawet na 4 - będzie wolniej, ale na przyspieszanie przyjdzie czas później. Zmień ten parametr w konfiguracji wigglera (parport.cfg) i zakomentuj (#) linijkę z jtag_rclk w pliku dla lpc24xx.

    Po drugie
    Twój procek wchodzi po resecie w bootloader, a więc cokolwiek do niego wgrasz nie będzie działać po resecie na 99% - poczytaj w manualu który pin trzeba do którego potencjału podciągnąć, aby do owego bootloadera nie wchodził. Często jest to pin P0.14, ale w LPC23 i LPC24 chyba jest zupełnie inny. Taką informację znajdziesz w manualu w rozdziale typu "Flash memory system and programming" albo w opisie wszystkich pinów (zwykle "Pin configuration"). Nie wiem czy masz jakąś firmową makietę, czy sam montowałeś sobie coś, więc rozwiązania mogą być różne - na firmowej makiecie trzeba pewnie przestawić zworkę o nazwie typu IAP, ISP albo coś takiego.

    Po trzecie
    Jeśli chcesz ładować przez OpenOCD spod Eclipse to musisz mu podać "katalog roboczy" - jest to katalog z którego OpenOCD zostanie uruchomione. Jeśli wybierzesz katalog "out" twojego projektu, to nie musisz podawać ścieżki. Jeśli wybierzesz katalog projektu, to będzie potrzebne "out/", jesli nie podasz tego katalogu to musisz wprowadzić pełną ścieżkę do pliku (np. "C:/arm/projekt/out/..."). Na 99% wszystko jest czułe na wielkość liter, więc proponuję pisać out, a nie Out

    Po czwarte
    Pomogę Ci przerobić program na LPC24xx, nie będzie to bardzo dużo roboty raczej [;

    4\/3!!
  • #37
    atom1477
    Level 43  
    1. Zrobione.

    2. No właśnie czytałem o tym bootloaderze i nie bardzo rozumiem. Chodzi o to że bootloader jest tam fabrycznie? Nawet w niezaprogramowanym procu?
    Wiem tylko tyle, że na stronie 677 User Manuala do LPC2478 pisze że jest to pin P2.10.
    Więc podłączę go rezystorem 10k do VCC.
    Eclipse + CodeSourcery + LPC2478 - jak zacząć?

    3. Nie bardzo wiedziałem co wpisać bo nijak nie działało więc podałem pełną ścieźkę.
    I mam:
    Code:

    Open On-Chip Debugger 0.1.0 (2009-01-21-21:15) Release


    BUGS? Read http://svn.berlios.de/svnroot/repos/openocd/trunk/BUGS


    $URL: https://kc8apf@svn.berlios.de/svnroot/repos/openocd/tags/openocd-0.1.0/src/openocd.c $
    jtag_speed: 4
    Info : JTAG tap: lpc2478.cpu tap/device found: 0x4f1f0f0f (Manufacturer: 0x787, Part: 0xf1f0, Version: 0x4)
    Info : JTAG Tap/device matched
    Warn : EmbeddedICE version 7 detected, EmbeddedICE handling might be broken
    Warn : no tcl port specified, using default port 6666
    Warn : BUG: keep_alive() was not invoked in the 1000ms timelimit. GDB alive packet not sent! (1109)
    Warn : DBGACK set while target was in unknown state. Reset or initialize target.
    target state: halted
    target halted in ARM state due to breakpoint, current mode: Supervisor
    cpsr: 0x200000d3 pc: 0x00000020
    Info : JTAG tap: lpc2478.cpu tap/device found: 0x4f1f0f0f (Manufacturer: 0x787, Part: 0xf1f0, Version: 0x4)
    Info : JTAG Tap/device matched
    target state: halted
    target halted in ARM state due to breakpoint, current mode: Supervisor
    cpsr: 0x200000d3 pc: 0x00075f48
    auto erase enabled
    Warn : BUG: keep_alive() was not invoked in the 1000ms timelimit. GDB alive packet not sent! (1078)
    wrote 1236 byte from file F:/software/arm_eclipse/lpc2103/out/lpc2103_blink_led.hex in 1.952888s (0.618075 kb/s)


    Czyli chyba działa.


    4. Niestety domyślam się że będzie z tym dużo roboty. Może to tylko mruganie diodą, ale skoro nawet do tego jest aż tyle plików to będzie trochę roboty. Oczywiście jak dla mnie. Dla Ciebie to co innego – bo widzę że jesteś expert w tej dziedzinie (w ogóle w dziedzinie C, czy mikrokontrolerów).

    Dodano po 13 [minuty]:

    Chm.
    Kolejne próby zaprogramowania dają taki efekt:
    Code:

    Open On-Chip Debugger 0.1.0 (2009-01-21-21:15) Release


    BUGS? Read http://svn.berlios.de/svnroot/repos/openocd/trunk/BUGS


    $URL: https://kc8apf@svn.berlios.de/svnroot/repos/openocd/tags/openocd-0.1.0/src/openocd.c $
    jtag_speed: 4
    Info : JTAG tap: lpc2478.cpu tap/device found: 0x4f1f0f0f (Manufacturer: 0x787, Part: 0xf1f0, Version: 0x4)
    Info : JTAG Tap/device matched
    Warn : EmbeddedICE version 7 detected, EmbeddedICE handling might be broken
    Warn : no tcl port specified, using default port 6666
    Warn : BUG: keep_alive() was not invoked in the 1000ms timelimit. GDB alive packet not sent! (1109)
    Warn : DBGACK set while target was in unknown state. Reset or initialize target.
    target state: halted
    target halted in ARM state due to breakpoint, current mode: Supervisor
    cpsr: 0x200000d3 pc: 0x00000020
    Info : JTAG tap: lpc2478.cpu tap/device found: 0x4f1f0f0f (Manufacturer: 0x787, Part: 0xf1f0, Version: 0x4)
    Info : JTAG Tap/device matched
    target state: halted
    target halted in ARM state due to breakpoint, current mode: Supervisor
    cpsr: 0x200000d3 pc: 0x00075f48
    auto erase enabled
    Warn : BUG: keep_alive() was not invoked in the 1000ms timelimit. GDB alive packet not sent! (1078)
    wrote 1236 byte from file F:/software/arm_eclipse/lpc2103/out/lpc2103_blink_led.hex in 1.952888s (0.618075 kb/s)
    target state: halted
    target halted in ARM state due to breakpoint, current mode: Supervisor
    cpsr: 0x600000d3 pc: 0xe0064018
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    Warn : TAP lpc2478.cpu:
    Warn : value captured during scan didn't pass the requested check:
    Warn : captured: 0x0f check_value: 0x01 check_mask: 0x0f
    Warn : in_handler: w/o "in_value", mismatch in SIR
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    Warn : TAP lpc2478.cpu:
    Warn : value captured during scan didn't pass the requested check:
    Warn : captured: 0x0f check_value: 0x01 check_mask: 0x0f
    Warn : in_handler: w/o "in_value", mismatch in SIR
    Warn : TAP lpc2478.cpu:
    Warn : value captured during scan didn't pass the requested check:
    Warn : captured: 0x0f check_value: 0x01 check_mask: 0x0f
    Warn : in_handler: w/o "in_value", mismatch in SIR
    Warn : TAP lpc2478.cpu:
    Warn : value captured during scan didn't pass the requested check:
    Warn : captured: 0x0f check_value: 0x01 check_mask: 0x0f
    Warn : in_handler: w/o "in_value", mismatch in SIR
    Warn : TAP lpc2478.cpu:
    Warn : value captured during scan didn't pass the requested check:
    Warn : captured: 0x0f check_value: 0x01 check_mask: 0x0f
    Warn : in_handler: w/o "in_value", mismatch in SIR
    Warn : TAP lpc2478.cpu:
    Warn : value captured during scan didn't pass the requested check:
    Warn : captured: 0x0f check_value: 0x01 check_mask: 0x0f
    Warn : in_handler: w/o "in_value", mismatch in SIR
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    Warn : TAP lpc2478.cpu:
    Warn : value captured during scan didn't pass the requested check:
    Warn : captured: 0x0f check_value: 0x01 check_mask: 0x0f
    Warn : in_handler: w/o "in_value", mismatch in SIR
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    Warn : TAP lpc2478.cpu:
    Warn : value captured during scan didn't pass the requested check:
    Warn : captured: 0x0f check_value: 0x01 check_mask: 0x0f
    Warn : in_handler: w/o "in_value", mismatch in SIR
    Warn : TAP lpc2478.cpu:
    Warn : value captured during scan didn't pass the requested check:
    Warn : captured: 0x0f check_value: 0x01 check_mask: 0x0f
    Warn : in_handler: w/o "in_value", mismatch in SIR
    Warn : TAP lpc2478.cpu:
    Warn : value captured during scan didn't pass the requested check:
    Warn : captured: 0x0f check_value: 0x01 check_mask: 0x0f
    Warn : in_handler: w/o "in_value", mismatch in SIR
    Warn : TAP lpc2478.cpu:
    Warn : value captured during scan didn't pass the requested check:
    Warn : captured: 0x0f check_value: 0x01 check_mask: 0x0f
    Warn : in_handler: w/o "in_value", mismatch in SIR
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    target state: halted
    target halted in ARM state due to breakpoint, current mode: Abort
    cpsr: 0x800000d7 pc: 0x0080fc88
    Warn : TAP lpc2478.cpu:
    Warn : value captured during scan didn't pass the requested check:
    Warn : captured: 0x0f check_value: 0x01 check_mask: 0x0f
    Warn : in_handler: w/o "in_value", mismatch in SIR
    target state: halted
    target halted in ARM state due to breakpoint, current mode: Abort
    cpsr: 0x800000d7 pc: 0x0080fd48
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    Warn : TAP lpc2478.cpu:
    Warn : value captured during scan didn't pass the requested check:
    Warn : captured: 0x0f check_value: 0x01 check_mask: 0x0f
    Warn : in_handler: w/o "in_value", mismatch in SIR
    Error: invalid mode value encountered
    Error: cpsr contains invalid mode value - communication failure
    Warn : DBGACK set while target was in unknown state. Reset or initialize target.
    target state: halted
    target halted in Thumb state due to breakpoint, current mode: Abort
    cpsr: 0x200000f7 pc: 0xfffffffc
    Warn : TAP lpc2478.cpu:
    Warn : value captured during scan didn't pass the requested check:
    Warn : captured: 0x0f check_value: 0x01 check_mask: 0x0f
    Warn : in_handler: w/o "in_value", mismatch in SIR
    target state: halted
    target halted in ARM state due to breakpoint, current mode: Abort
    cpsr: 0x200000d7 pc: 0x00000130
    target state: halted
    target halted in ARM state due to breakpoint, current mode: Abort
    cpsr: 0x200000d7 pc: 0x200000bf
    target state: halted
    target halted in ARM state due to breakpoint, current mode: Abort
    cpsr: 0x200000d7 pc: 0x0000005c


    Podłączyłem ten rezystor i nic się nie zmieniło. Ale chyba nie powinno bo ten rezystor nie ma chyba wpływu na programowanie (no chyba że JTAG potem sprawdza czy program sie uruchamia).

    Dodano po 2 [minuty]:

    Zacząłem przerabiać program, a dokładnie wymieniłem plik LPC214x.h na jakiś bardziej odpowiedni.
    Chyba.


    LPC2478 nie ma rejestru ABPDIV i ma inny układ PLL.
    Więc zrobiłem tak:
    Code:

    static void pll_start(uint32_t crystal,uint32_t frequency)
    {
       uint32_t m,p=0,fcco;

       mam_start(frequency);               // reconfigure/enable MAM before changing speed


       //N = 1          4MHz / 1 = 4MHz
       //M = 54         4MHz * 54*2 = 432MHz
       //CCLKSEL = 5    432MHz / (5+1) = 72MHz

       PLLCON = 0;      //Disable PLL
       pll_feed();

       CCLKCFG = 5;     //Divide FCCO by 6 (moze troche za wczesnie ale to chyba nie przeszkadza)

       PLLCFG = 53 | (0 < 16);
       pll_feed();

       PLLCON = PLLCON_PLLE;                  //Enable PLL
       pll_feed();

       while( !( PLLSTAT & (1<<26)) );        //Wait for PLL Lock

       PLLCON = PLLCON_PLLE | PLLCON_PLLC;    //Enable and Connect PLL
       pll_feed();



       //APBDIV=APBDIV_APBDIV_1;               // set APB clock ratio to 1:1
       CCLKCFG = 0;
       PCLKSEL0 = 55515555;                   //All 1:1, RTC 1:4
       PCLKSEL1 = 55555555;                   //All 1:1
    }
  • Helpful post
    #38
    Freddie Chopin
    MCUs specialist
    We wszystkich LPC (w zasadzie we wszystkich ARMach) jest "fabryczny" bootloader.

    Po podłączeniu rezystora wiele się zmieniło, bo teraz nie wchodzi do bootloadera [; Warningi które otrzymujesz mogą wynikać z wielu rzeczy. Zasadniczo po zaprogramowaniu układu powinieneś zamknąć sesję OpenOCD, bo gdy będzie ona działać w tle, to będzie tylko przeszkadzać. No chyba że jednak już używasz GDB do debuggowania. W przeciwnym wypadku Po zaprogramowaniu układu najlepiej byłoby nawet odłączyć JTAGa, aby nic na pewno nie przeszkadzało.

    Konfigurację PLLa i reszty możesz sobie na początku darować - skup się na razie na diodce [; W ogóle olej na razie te funkcje od MAM i PLL - zakomentuj je całe i ich na razie nie używaj, no chyba że już wszystko inne działą [;

    W sumie to nawet nie wiem dalej, czy coś Ci działa, czy nic... ?

    4\/3!!
  • #39
    atom1477
    Level 43  
    Też myślałem żeby się pozbyć PLL bo to na razie nie potrzebne.
    Na razie nic nie działa.
    W sumie nawet nie wiem czy już wszystko mam.
    Czy rystarczy plik LPC24xx.h? I reszta zmian dotyczy tylko kodu?
    Czy może trzeba jeszcze jakiś plik specjalny do LPC2478? (jakieś deklaracje przerwań (deklaracje miejsca gdzie mają być wektory przerwań czy coś takiego)).

    Dodano po 1 [godziny] 54 [minuty]:

    Ok. Po kilku przeróbkach uzyskałem mruganie diody.
    Ale po odkomentowaniu części z PLL nie mogę zaprogramować procesora.
    Code:

    Open On-Chip Debugger 0.1.0 (2009-01-21-21:15) Release


    BUGS? Read http://svn.berlios.de/svnroot/repos/openocd/trunk/BUGS


    $URL: https://kc8apf@svn.berlios.de/svnroot/repos/openocd/tags/openocd-0.1.0/src/openocd.c $
    jtag_speed: 4
    Info : JTAG tap: lpc2478.cpu tap/device found: 0x4f1f0f0f (Manufacturer: 0x787, Part: 0xf1f0, Version: 0x4)
    Info : JTAG Tap/device matched
    Warn : EmbeddedICE version 7 detected, EmbeddedICE handling might be broken
    Warn : no tcl port specified, using default port 6666
    Info : JTAG tap: lpc2478.cpu tap/device found: 0x4f1f0f0f (Manufacturer: 0x787, Part: 0xf1f0, Version: 0x4)
    Info : JTAG Tap/device matched
    Error: timed out while waiting for target halted
    Runtime error, file "command.c", line 457: 


    Nawet odłączyłem rezystor od pinu P2.10 żeby procesor wchodził do Bootloadera zamiast wykonywać (prawdopodobnie winny) kod od PLL, ale nic to nie daje.

    Dodano po 30 [minuty]:

    Czytałem że taktowanie procesora w ogóle nie jest potrzebne do zkomunikowania sie z procesorem za pomocą JTAGa, więc zły sygnał z PLL też nie powinien być chyba problemem.

    Ale dlaczego nie może zatrzymać rdzenia? (w końcu przy złym sygnale zegarowym on i tak pewnie nie bardzo pracuje).

    Zmieniałem prędkośc JTAGa, zwierałem pin P2.10 do GND jak i do VCC i dalej nic.
  • Helpful post
    #40
    Freddie Chopin
    MCUs specialist
    Zasadniczo wypadałoby zmienić skrypt linkera, tak aby rozmiar oraz adresy RAM i ROM odpowiadał twojemu układowi. Niemniej jednak nie ma to wielkiego znaczenia, bo adresy są takie same, a rozmiaru pełnego i tak nie wykorzystujesz w takim prostym programie - początkowo więc możesz tego pliku nie ruszać.

    W startupie będzie również inne przesunięcie dla wektora z VIC (w LPC23xx i LPC24xx są inne adresy z tego co pamiętam), ale skoro nie używasz przerwań, to nie ma znaczenia również, więc możesz to też olać.

    EDIT:
    Bootloader ma być wyłączony jeśli nie korzystasz z niego - jego włączanie nic nie pomoże.

    Jeśli nie możesz się połączyć przez JTAG to będziesz musiał skasować procka przez bootloader. Jeśli zaś możesz się łączyć (a widze, że chyba możesz), to trzeba kombinować inaczej. Spróbuj zamiast komendy reset halt wydać najpierw reset, a potem "soft_reset_halt".

    4\/3!!
  • #41
    atom1477
    Level 43  
    Czasami wyskakuje też inny błąd:
    Code:

    ...
    ...
    Info : JTAG tap: lpc2478.cpu tap/device found: 0x4f1f0f0f (Manufacturer: 0x787, Part: 0xf1f0, Version: 0x4)
    Info : JTAG Tap/device matched
    auto erase enabled
    Error: Target not halted
    Error: failed erasing sectors 0 to 0 (-304)




    Zmieniłem ten Reset tak jak napisałeś ale nic to nie dało. Ciągle poprzedni albo ten podany wyżej błąd.

    Dodano po 48 [minuty]:

    Po wielku próbach programowania załapało.
    Nie wiem co było źle i co się stało że ruszyło.
    W każdym razie teraz nie dotykam się do PLL ;p
  • Helpful post
    #42
    Freddie Chopin
    MCUs specialist
    Mam prośbę - sprawdź u siebie czy plik konfiguracyjny o takiej zawartości działa prawidłowo i daj mi znać. Warto się upewnić zanim wyślę go na listę dyskusyjną OpenOCD.

    Z racji tego, że używasz Wiggler'a to wywal tą ostatnią linijkę ("jtag_rclk...").

    Code:

    # NXP LPC2478 ARM7TDMI-S with 512kB Flash and 64kB Local On-Chip SRAM (98kB total), clocked with 4MHz internal RC oscillator

    if { [info exists CHIPNAME] } {
       set  _CHIPNAME $CHIPNAME
    } else {
       set  _CHIPNAME lpc2478
    }

    if { [info exists ENDIAN] } {
       set  _ENDIAN $ENDIAN
    } else {
       set  _ENDIAN little
    }

    if { [info exists CPUTAPID ] } {
       set _CPUTAPID $CPUTAPID
    } else {
       set _CPUTAPID 0x4f1f0f0f
    }

    #delays on reset lines
    jtag_nsrst_delay 100
    jtag_ntrst_delay 100

    # LPC2000 -> SRST causes TRST
    reset_config trst_and_srst srst_pulls_trst

    jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID

    set _TARGETNAME [format "%s.cpu" $_CHIPNAME]
    target create $_TARGETNAME arm7tdmi -endian $_ENDIAN -chain-position $_TARGETNAME -variant arm7tdmi-s_r4

    # LPC2478 has 64kB of SRAM on its main system bus (so-called Local On-Chip SRAM)
    $_TARGETNAME configure -work-area-virt 0 -work-area-phys 0x40000000 -work-area-size 0x10000 -work-area-backup 0

    $_TARGETNAME configure -event reset-init {
       # Force target into ARM state
       soft_reset_halt
       # Do not remap 0x0000-0x0020 to anything but the Flash
       mwb 0xE01FC040 0x01
    }

    # LPC2378 has 512kB of FLASH, but upper 8kB are occupied by bootloader.
    # After reset the chip uses its internal 4MHz RC oscillator.
    # flash bank lpc2000 <base> <size> 0 0 <target#> <variant> <clock> [calc checksum]
    flash bank lpc2000 0x0 0x7D000 0 0 0 lpc2000_v2 12000 calc_checksum

    # Try to use RCLK, if RCLK is not available use "normal" mode. 4MHz / 6 = 666kHz, so use 500.
    jtag_rclk 500



    4\/3!!
  • #43
    atom1477
    Level 43  
    Chyba działa.
    Wali czymś takim:
    Code:

    Open On-Chip Debugger 0.1.0 (2009-01-21-21:15) Release


    BUGS? Read http://svn.berlios.de/svnroot/repos/openocd/trunk/BUGS


    $URL: https://kc8apf@svn.berlios.de/svnroot/repos/openocd/tags/openocd-0.1.0/src/openocd.c $
    jtag_speed: 4
    Info : JTAG tap: lpc2478.cpu tap/device found: 0x4f1f0f0f (Manufacturer: 0x787, Part: 0xf1f0, Version: 0x4)
    Info : JTAG Tap/device matched
    Warn : EmbeddedICE version 7 detected, EmbeddedICE handling might be broken
    Warn : no tcl port specified, using default port 6666
    Info : JTAG tap: lpc2478.cpu tap/device found: 0x4f1f0f0f (Manufacturer: 0x787, Part: 0xf1f0, Version: 0x4)
    Info : JTAG Tap/device matched
    target state: halted
    target halted in Thumb state due to debug-request, current mode: Supervisor
    cpsr: 0xa00000f3 pc: 0x7fffe152
    auto erase enabled
    wrote 448 byte from file F:/software/arm_eclipse/lpc2103/out/lpc2103_blink_led.hex in 1.609375s (0.271845 kb/s)





    Freddie Chopin wrote:

    EDIT:
    Bootloader ma być wyłączony jeśli nie korzystasz z niego - jego włączanie nic nie pomoże.



    No to muszę Cię trochę zdziwić.
    Wcześniej pomyliłem pin i zwierałem do masy jakiś inny pin niż ten od BootLoadera.
    Teraz zwieram już ten dobry.
    I jak włączę Bootloadera (i zresetuję zasilanie) to mogę zaprogramować procesor.
    A jak nie włączę Bootloadera to nie mogę.
    Dotyczy to przypadku jak wcześniej zaprogramuję procesor kodem który czepia się PLL.
    Gdy wcześniej nie kombinuję to można programować i z włączonym i z wyłączonym BootLoaderem.

    Wcześniej waliło błędami że nie może zatrzymać rdzenia (przy wyłączonym BootLoaderze i wcześniej wgranym kodzie z PLL).

    Niestety zrobiłem jakieś zwarcie i upaliłem procesor :(

    Na drugim procesorze mam tak samo. Jak czepię się PLL to programować mogę tylko wtedy gdy jest włączony BootLoader.
    Tylko że teraz bez włączonego BootLoadera wali ostrzejszymi błędami, bo nawet sam JTAG w procesorze nie działa.

    W obydwu przypadkach po zaprogramowaniu przy włączonym BootLoaderze program nie ruszał. Po kilku próbach jednak na starym procesorze w końcu ruszał.
    I było tak kilka razy, bo jednak znowu czepiłem się PLL. Po każdej takiej próbie i „zablokowaniu” procesora jednak dawało się odzyskać komunikację.
    Na nowym nie. Męczę się już od kilku godzin. Programować mogę ale dioda nie miga (a kodu nie zmieniałem). Nie wywala żadnego błędu, ale jak i komunikacja JTAG po wyłączeniu BootLoadera nie rusza.

    Widział ktoś takie cuda?


    PS. Na pinach (na przykład tych od diod LED - u mnie P1.12) występuje napięcie około 1,5V (sprawdziłem oscyloskopem i jest to napięcie stałe a nie żadne impulsy które mają 1,5V RMS). Tak jak by Pull-Up i Pull-Downy były jednocześnie włączone. Gdy procesor wstanie to wszystko wraca do normy (tzn. wcześniej wracało bo ten nowy egzemplarz jakiś oporny jest i jeszcze nie wstał).
  • #44
    Rgatek
    Level 10  
    Witam!
    Może i ten temat był dawno poruszany ale jestem ciekaw czy udało ci sie ten problem rozwiązać? Ja od tygodnia zacząłem walkę z ARM-ami i mam dokładnie ten sam problem. Napisałem prosty programik żeby świecił kilkoma diodkami i za pomocą H-Jtaga wgrałem soft. Wszystko działało i już się cieszyłem ale gdy go zmodyfikowałem (dodałem funcje do PLL) i załadowałem przestało działać a na dodatek nie moge nawet połączać się z H-Jtag-iem:( też mi na poczatku wykrywa sygnature ale jak flash chce załadować wyskakuje ten sam problem co Atomowi...Jak to rozwiazać?
  • #45
    atom1477
    Level 43  
    Za kilka dni miałem odpisać, ale skoro pytasz to odpowiem teraz.
    Nie udało się.

    Za to znalazłem kilka dni temu program którego szukałem od miesiąca.
    Chodzi o program do obsługi LCD przez LPC2478.
    Znalazłem go kiedyś ale myślałem że przesiądę się na AVR32 i go gdzieś zawieruszyłem.
    Moje dwa procesory uległy całkowitemu uszkodzeniu po takich zabiegach z PLL. Teraz pobierają około 1A prądu i się strasznie grzeją. Na moje oko jest jakiś bug w krzemie i nieodpowiednia konfiguracja robi jakieś zwarcie i coś się uszkadza.

    Jak by nie było, mam teraz nowy kod do LPC2478 i mam nadzieję że zadziała.


    OT:
    {
    Niestety pomimo długiego oczekiwania nie mogę zakupić LPC2478, bo KAMAMI robi klientów w h**a.
    Ciągle anulowują moje zamówienia bo nie mają LC2478 na stanie.
    A pisałem do nich żeby nie anuliwywali, lecz po prostu poczekali aż dostaną procesory od producenta i wtedy zrealizowali moje zamówienie. Ale nie, muszę codziennie zamawiać i łaskawie czekać aż nie anulują tylko mi przyślą.
    Obniecali że 27 (czyli jutro już będą mieli). Więc za kilka dni tak jak mówiłem, odezwę się.

    Ale mniejsza o to.
    }
    EOT


    Oto ten kod.
    Funkcja do PLL jest w pliku „low_level_init.c”.
    Program ściągnąłem około pół roku temu ze strony (chyba) NXP. Teraz nie mogę go tam znaleźć.
    To jest pod kompilator IAR i zastosowanie tego pod Eclipe wymaga modyfikacji. Są inne nazwy niektórych rejestrów. Ale to mała strata, bo ja zamierzam jedynie skopiować niektóre drobne elementy (przede wszystkim to cholerne PLL).


    PS. Jak załadować program za pomocą BootLoadera po RS232? Szukam i szukam w necie i nie widzę. Dokładnie to chodzi mi o to jakim programem.





    Zaraz Freddie Chopin powie że nie ma żądnego buga ;p
    Ale owszem, może być. Innym to działa bo poprawnie konfigurują.
    My: nie ;p

    Jak by jakiś pin był podłączony do GND a ja na nim bym wymuszał stan wysoki (a raczej próbował wymusić) i procesor by się palił to bym zrozumiał.
    Ale na nieodpowiednią konfigurację w środku, w Czesiu, to procesor powinien być odporny. Co bym nie wpisał do rejestrów to nie powinien się palić ani nie powinno blokować się programowanie, a już na pewnie nie to przez JTAG.

    Swoją drogą zawsze myślałem że nie ma nic lepszego niż JTAG. A tutaj lipa. To z AVRami z zablokowanymi Fusebitami nie ma takich problemów.
    Naczytałem się że JTAG jest całkowicie niezależny od taktowania procesora (i jego braku). A tutaj jak jest? A może to nie brak taktowania przeszkadza?
    Do tego u mnie działa się jeszcze jedna ciekawa rzecz. Po odzyskaniu możliwości programowania, programowanie przebiegało poprawnie, ale procesor nie wykonywał programu. Zresztą już o tym pisałem. Robiłem różne mniej twarde i bardziej twarde resety i nic.
    A wcześniej, przed zabawą z PLL, żadne resety czy coś nie były potrzebne jak zmieniałem program. Chociaż oczywiście po przeprowadzeniu resetu też działało.
  • Helpful post
    #46
    Freddie Chopin
    MCUs specialist
    atom1477 wrote:
    PS. Jak załadować program za pomocą BootLoadera po RS232? Szukam i szukam w necie i nie widzę. Dokładnie to chodzi mi o to jakim programem.

    Program nazywa się Flash Magic
    http://www.flashmagictool.com/

    Quote:
    Jak by jakiś pin był podłączony do GND a ja na nim bym wymuszał stan niski (a raczej próbował wymusić) i procesor by się palił to bym zrozumiał.

    Akurat tutaj założę się, że by przeżył bez problemów takie operacje (zakładając że chodziło ci o wymuszanie stanu wysokiego na pinie zwartym do masy).

    Quote:
    Zaraz Freddie Chopin powie że nie ma żądnego buga ;p
    Ale owszem, może być. Innym to działa bo poprawnie konfigurują. [...]
    Ale na nieodpowiednią konfigurację w środku, w Czesiu, to procesor powinien być odporny. Co bym nie wpisał do rejestrów to nie powinien się palić ani nie powinno blokować się programowanie, a już na pewnie nie to przez JTAG.

    Swoją drogą zawsze myślałem że nie ma nic lepszego niż JTAG. A tutaj lipa. To z AVRami z zablokowanymi Fusebitami nie ma takich problemów.
    Naczytałem się że JTAG jest całkowicie niezależny od taktowania procesora (i jego braku). A tutaj jak jest? A może to nie brak taktowania przeszkadza?
    DO tego u mnie działa się jeszcze jedna ciekawa rzecz. Po odzyskaniu możliwości programowania, programowanie przebiegało poprawnie, ale procesor nie wykonywał programu. Zresztą już o tym pisałem. Robiłem różne mniej twarde i bardziej twarde resety i nic.
    A wcześniej, przed zabawą z PLL, żadne resety czy coś nie były potrzebne jak zmieniałem program. Chociaż oczywiście po przeprowadzeniu resetu też działało.

    Komunikację z JTAGiem zablokować jest bardzo prosto i musi być to możliwe. Jak wyobrażasz sobie zablokowanie odczytu procesora gdyby JTAG zawsze był aktywny i robił wszystko co mu każesz? W NXP zrealizowane jest to przez kod bootloadera, który włącza się ZAWSZE po resecie. Ten kod sprawdza czy JTAG może być włączony i dopiero wtedy go włącza. Pozatym przeważnie na problemy z JTAGiem pomaga skasowanie procka przez bootloader po UART.

    Co do całkowitego uszkodzenia procesora przez PLL również nie jestem przekonany [; Po prostu sam experymentowałem z kilkoma LPC i wcale nie było tak, że od razu od pierwszego razu ustawiałem wszystko dobrze. Jakoś wszystkie żyją... Za to STM32 udało mi się sfajczyć już dwa <: 12V na porcie tego procesora kończy się jego natychmiastowym przejściem w stan... "zombie"... Procesor działa, wykonuje program, można go nawet debuggować, tyle tylko, że ciągnie jakieś 3A prądu i ma pernamentne zwarcie zasilania z masą <:

    NXP chyba powinno zacząć mi płacić <:

    4\/3!!
  • #47
    atom1477
    Level 43  
    Tak tak. Chodziło o wymuszanie stanu wysokiego.

    O JTAG to oczywiście chodziło mi o normalne operacje.
    Blokowanie za pomocą specjalnych rejestrów albo za pomocą LockBitów jak najbardziej rozumiem.
    Ale blokowanie podczas grzebania przy PLL już nie bardzo.
    Chodziło mi o to że w takich (normalnych) przypadkach nie powinien się blokować.
    Całe szczęście że jest ten Bootloader. Jeżeli on zawsze po zablokowaniu JTAGa pozwoli mi odzyskać procesor, to może znowu przekonam się do ARMów.

    Ale swoją drogą, Bootloader uruchamiający się zawsze i wszędzie też nie jest mile widziany.
    Oczywiście są LockBity.
    Ale twierdzenie że JTAG powinien miec możliwość blokowania do mnie nie przemawia, bo jak już to tak samo Bootloader powinien mieć możliwość blokowania.
    A najlepiej aby żaden z nich nie miał takiej możliwości. Jedynie powinna być możliwość zablokowania debugowania i odczytu pamięci programu.
    Po co od razu blokować JTAGa? To tylko uniemożliwia zastosowanie procesora do czegoś innego. Normalnie nie mógł bym odczytać pamięci programu, ale mógł bym ją skasować i procesor wykorzystać. A tak JTAG nie działa i nawet skasować nie można.

    A dlaczego NXP miało by Ci płacić? Może raczej STM?

    Takie przypadki z procesorami pracującymi na zwarciu na zasilaniu a mimo to wykonującymi program to znam. Miałem tak już ze wszystkim na czym robiłem. Na '51 i na AVRach.
    Tyle że jak wykryję coś takiego, to wymieniam procesor na nowy (nawet jak układ jest zasilany z sieci i mocy do grzania nie braknie ;p). Po prostu nie chcę ryzykować że kiedyś się całkowicie spali.

    Pozatym to dzięki za info. O tym FlashMagic-u to coś kiedyś słyszałem. Ale jak zwykle to co mi potrzebne krąży wokół mnie ale ja o tym nie wiem.

    Dodano po 7 [minuty]:

    A wiesz że jednego LPC2478 mogłem uszkodzić podłączając do niego 12V?
    Ale drugi jest raczej uśmiercony programowo, a objawy są takie same.
    Na niektórych pinach jest 1,5V i to bardzo stabilne. Można prąd pobierać jak i wpuszczać a napięcie niewiele się zmienia (sprawdziłem oscyloskopem więc wiem że to nie przebieg prostokątny).
    Czyli jest permanentne zwarcie.

    Dodano po 41 [minuty]:

    Ale cyrk. FlashMagic-a miałem nawet na dysku ;p Ciekawe kąd go kiedyś wziąłem i po co.
  • Helpful post
    #48
    Freddie Chopin
    MCUs specialist
    atom1477 wrote:
    Ale swoją drogą, Bootloader uruchamiający się zawsze i wszędzie też nie jest mile widziany.

    Zawsze i wszędzie uruchamia się jego KOD, jeśli stwierdzi on, że odczyt/zapis nie jest zablokowany, to dopiero później na niego zezwala.

    Quote:
    Ale twierdzenie że JTAG powinien miec możliwość blokowania do mnie nie przemawia, bo jak już to tak samo Bootloader powinien mieć możliwość blokowania.

    No i ma [;

    Quote:
    Po co od razu blokować JTAGa?

    Bo zajmuje bardzo dużo linii. TDO, TDI, TMS, TCK, TRST - to aż 5 pinów, które mogłyb być zastosowane do czegoś innego.

    Quote:
    A dlaczego NXP miało by Ci płacić? Może raczej STM?

    Moge się zgodzić na obydwie [;

    4\/3!!
  • #49
    atom1477
    Level 43  
    Freddie Chopin wrote:
    atom1477 wrote:
    Ale swoją drogą, Bootloader uruchamiający się zawsze i wszędzie też nie jest mile widziany.

    Zawsze i wszędzie uruchamia się jego KOD, jeśli stwierdzi on, że odczyt/zapis nie jest zablokowany, to dopiero później na niego zezwala.


    Tak tak. To była tylko taka mała prowokacja ;p Tak samo JTAG zamiast blokowania go, powinien mieć mechanizm sprawdzający LockBity. Wtedy bez blokowania JTAGu można by zabronić coś tam.



    Quote:
    Po co od razu blokować JTAGa?

    Bo zajmuje bardzo dużo linii. TDO, TDI, TMS, TCK, TRST - to aż 5 pinów, które mogłyby być zastosowane do czegoś innego.

    W AVRach można wykorzystywać linie programujące do innych celów. Jedynie RESET nie.
    Ale widocznie JTAG to inny interfejs i zrobili inaczej.



    Quote:
    A dlaczego NXP miało by Ci płacić? Może raczej STM?

    Moge się zgodzić na obydwie [;


    ;p




    No więc tak.
    Dostałem te procesory. I zamontowałem na PCB.
    Po wielu problemach typu „wystąpił problem z aplikacją Openocd.exe i zostanie ona zamknięta”, „wystąpił problem z aplikacją sh.exe i zostanie ona zamknięta”, ... w końcu zmusiłem eclipse do pracy.

    Na podstawie tego (podobno działającego) kodu ze strony NXP stworzyłem coś takiego:
    Code:

       //N = 2          16MHz / 2 = 8MHz
       //M = 27         8MHz * 27*2 = 432MHz
       //CCLKSEL = 5    432MHz / (5+1) = 72MHz

       PLLCON = 0;      //Disable PLL
       pll_feed();


        SCS = SCS | (1<<5); /* Enable main OSC */
        while( !( SCS & (1<<6)) ); /* Wait until main OSC is usable */

        CLKSRCSEL = 0x01;




       PLLCFG = 26 | (1 < 16);
       pll_feed();

       PLLCON = PLLCON_PLLE;                  //Enable PLL
       pll_feed();

       CCLKCFG = 5;

       while( !( PLLSTAT & (1<<26)) );        //Wait for PLL Lock

       while ((PLLCFG & 0x00FF8FFF) != (PLLSTAT & 0x00FF8FFF));

       //PLLCON = PLLCON_PLLE | PLLCON_PLLC;    //Enable and Connect PLL
       //pll_feed();

       //while( !( PLLSTAT & (1<<25)) );

    I program działa do momentu aż odkomentuje się ostatnie 3 linijki.
    Przy czym program uruchamiałem stopniowo. Przy włączeniu zewnętrznego oscylatora program przyspieszył 4 razy (było na wewnętrznym generatorze RC 4MHz i przełącza na zewnętrzny 16MHz).
    Potem działa dzielnik przez 6 (program trochę spowalnia).
    I na koniec konfiguruje i włącza się PLL. To znaczy przechodzi przez warunki while, czyli pętla PLL łapie, albo z nieznanych przyczyn odczytywany bit PLLC ma wartość „1” mimo niezałapania pętli.

    Na szczęście tym razem po zablokowaniu procesora, gdy założę zworkę od BootLoadera to od razu odzyskiwana jest kontrola nad procesorem, oraz po przeprogramowaniu od razu mam nowy kod.
    Wcześniej tak jak pisałem kontrola wracała dopiero po wielu resetach zasilania oraz po wielu przeprogramowaniach.
    Ale ogólnie z pętlą PLL jest tak jak było – nie działa.
  • Helpful post
    #50
    Freddie Chopin
    MCUs specialist
    Tak apropo to bez MAM nie można osiągnąć tak wysokich prędkości, bo Flash nie wyrabia i procesor się wysypuje... Z tego też powodu MAM należy włączyć PRZED uruchomieniem PLLa.

    Taki kod działałby jedynie z RAM, bo tego typu pamięć wyrobi się z taką częstotliwością.

    4\/3!!
  • #52
    Freddie Chopin
    MCUs specialist
  • #54
    Freddie Chopin
    MCUs specialist
    Wrzuć cały twój kod (najlepiej ograniczony do istotnej części) - najlepiej ze startupem i Makefile'm (chyba że to te z mojej strony) i napisz dokładne objawy niedziałania.

    4\/3!!
  • #55
    atom1477
    Level 43  
    Jest z Twojej strony.
    Mało zmieniałem ale wrzucam całość.
    Zmieniłem plik lpc2103_rom.ld bo chcę dodać obsługę SDRAM. Na razie jedynie chcę żeby kompilator zobaczył tą pamięć, konfigurowanie rejestrów w LPC żeby ta pamięć sprzętowo ruszyła zostawiłem sobie na koniec.

    No więc program miga diodą do momentu aż odkomentuję linie:
    Code:

       //PLLCON = PLLCON_PLLE | PLLCON_PLLC;    //Enable and Connect PLL
       //pll_feed();


    Pobór prądu zaraz zmierzę.
  • #56
    Freddie Chopin
    MCUs specialist
    Zrób jeszcze taką operację:
    Gdy twój kod nie działa (w sensie po odkomentowaniu tych linijek i puszczeniu całości) połącz się z OpenOCD przez telnet (telnet localhost 4444) i wpisz "poll" - zobaczysz w jakim stanie jest procesor.

    4\/3!!
  • #57
    atom1477
    Level 43  
    Chyba zapomniałm dodać że z procesorem nie ma wtedy komunikacji przez JTAG.

    Dodano po 11 [minuty]:

    17ma gdy dioda miga (dioda pobiera z 0,5mA)
    125mA gdy nie działa.

    Dodano po 2 [minuty]:

    Oczywiście mierzyłem gdy wtyk JTAG był odłączony.
    Przy 125mA procesor zaczyna się grzać ;p
  • Helpful post
    #58
    Freddie Chopin
    MCUs specialist
    Tak na szybko:

    SCS = 0xFFFFFFFF;

    a w manualu:

    31:7 - - Reserved. User software should not write ones to reserved bits. The value
    read from a reserved bit is not defined.

    Zasadniczo jednak odkomentowałbym linijkę powyżej, bo tylko to jest Ci potrzebne, a reszta może (i powinna) pozostać domyślnie

    while ((PLLCFG & 0x00FF8FFF) != (PLLSTAT & 0x00FF8FFF));

    Rejestr PLLCFG ma jedynie 15 najmłodszych bitów i bity od 16 do 23. Odpowiada to 0xFF7FFF. Nie jest to specjalnie istotne, bo ten warunek nie jest konieczny do działania IMHO.

    //while( !( PLLSTAT & (1<<25)) );

    zbędne - po co odczytywać aktualną wartość PLLC?

    4\/3!!
  • #59
    atom1477
    Level 43  
    Właśnie chodziło mi o bity 0...14 i 16...23. Po prostu machnąłem się w przeliczaniu na wartość szesnastkową ;p

    //while( !( PLLSTAT & (1<<25)) ); - nie wiem.
    Tak było w kodzie który podobno działa.

    Dodano po 4 [minuty]:

    Nie wiem o co mi chodziło z tym SCS. Oczywiście zrobiłem błąd.
    Pewnie chciałem aktywować szybki dostęp do wszystkich linii i nie zauważyłem że robi się to jednym bitem.

    Dodano po 10 [minuty]:

    Poprawiłem i nic.
    Mam chęć dac sobie z tym spokój.
    Może spróbuje uruchomic pamięć SDRAM
    Przeczytałem to:
    https://www.elektroda.pl/rtvforum/topic1179275.html

    Ale jedyne co na podstawie tego zrobiłem to to:
    Code:

    MEMORY
    {
       rom (rx)   : org = 0x00000000, len = 512k
       ram (rwx)   : org = 0x40000000, len = 64k   
        sdram0 (rwx) : org = 0xA0000000, len = 8192k      /* External SDRAM Bank0: 8M */
    }



    Czy teraz wystarczy że gdzieś w tym samym pliku dopiszę:
    Code:

    SECTIONS
    {
    ...
    .ext_mem : { *(.ext_mem) } > sdram0
    ...
    }


    ?

    Dodano po 5 [minuty]:

    Niestety nie wystraczy :(
  • Helpful post
    #60
    Freddie Chopin
    MCUs specialist
    Musisz jeszcze dane / funkcje które chcesz umieścić w tym regionie oznaczyć przez __attribute__ ((section(".ext_mem")))

    A co do wpisu w skrypcie:

    .ext_mem : { *(.ext_mem) } > sdram0 AT > sdram0

    4\/3!!