Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Wiznet W7500P

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Dumitru



Založen: Dec 11, 2015
Příspěvky: 139
Bydliště: Slovensko,Bratislava

PříspěvekZaslal: so leden 20 2024, 11:22    Předmět: Wiznet W7500P Citovat

Ahojte po prací s w5500 chcel by som vyskúšať ich W7500P kde je CotexM0+PHY v jednom puzdre, tak som si pozeral možnosti programovania na
ich stránke je uvedený príklad pomocou KEIL W7500_KEIL čo je ale platený SW a free verzia je obmedzená na 32Kb ďalej je tam uvedené GNU GCC 7500_GNUGCC free.

Skúsil som si postaviť projekt v CodeBlocks na stránke je možne stiahnuť knižnice a projekty Library pre jednotlivé periférie nalinkoval som knižnice stiahol GNUWIN32 a ARM GCC a pomocou ich makefile ktorý je v každom projekte uvedený sa mi to podarilo jeden z projektov pre UART perifériu úspešné skompilovať

Chcel by som dodať že v tomto smere nie som zdatný vždy som používal veci priamo od výrobcu MCU : AtmelStudio, MicrochipStudio, Stm32Ide.

Ja by som nechcel používať externý makefile a preto som skúsil to skompilovať len pomocou CodeBlock a tam som narazil na jednu chybu s ktorou neviem pohnúť sú tam dva súbory gcc_W7500.ld a startup_W7500.S .ld je ako som zistil nejaký skript no a samozrejme .S assembler v tom asseblernom súbore sú premenne ktoré CodeBlocks nevidí a vyhadzuje ako chybu a s tým .ld súborom netuším ako pracovať Very Happy a v ich makefile sa tieto dva subori linkujú ale neviem ako ich nalinkovať aby to videl aj CodeBlock

kód:


-------------- Build: Debug in hello_world (compiler: GNU GCC Compiler for ARM)---------------

2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib\libc.a(lib_a-exit.o): In function `exit':
exit.c:(.text.exit+0x2c): undefined reference to `_exit'
obj\Debug\main.o: In function `main':
c:/program files (x86)/gnu tools arm embedded/5.4 2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib\libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
sbrkr.c:(.text._sbrk_r+0x18): undefined reference to `_sbrk'
c:/program files (x86)/gnu tools arm embedded/5.4 2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib\libc.a(lib_a-closer.o): In function `_close_r':
closer.c:(.text._close_r+0x18): undefined reference to `_close'
c:/program files (x86)/gnu tools arm embedded/5.4 2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib\libc.a(lib_a-lseekr.o): In function `_lseek_r':
lseekr.c:(.text._lseek_r+0x24): undefined reference to `_lseek'
c:/program files (x86)/gnu tools arm embedded/5.4 2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib\libc.a(lib_a-readr.o): In function `_read_r':
readr.c:(.text._read_r+0x24): undefined reference to `_read'
c:/program files (x86)/gnu tools arm embedded/5.4 2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib\libc.a(lib_a-fstatr.o): In function `_fstat_r':
fstatr.c:(.text._fstat_r+0x20): undefined reference to `_fstat'
c:/program files (x86)/gnu tools arm embedded/5.4 2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib\libc.a(lib_a-isattyr.o): In function `_isatty_r':
isattyr.c:(.text._isatty_r+0x18): undefined reference to `_isatty'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second(s))
14 error(s), 0 warning(s) (0 minute(s), 0 second(s))
 



gcc_W7500.ld&startup_W7500.S&makefile.zip
 Komentář:

Stáhnout
 Soubor:  gcc_W7500.ld&startup_W7500.S&makefile.zip
 Velikost:  5.4 kB
 Staženo:  33 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Dumitru



Založen: Dec 11, 2015
Příspěvky: 139
Bydliště: Slovensko,Bratislava

PříspěvekZaslal: út leden 23 2024, 8:19    Předmět: Citovat

Ešte ak by niekto plánoval pracovať s týmto čipom ako ja upozorňujem vopred si pozorne preštudovať datasheet a aj erratasheet a nenechať sa uniesť úvodnou stránkou a popisom periférie.

Tu je prvý problém na ktorý som narazil HW I2C nepodporuje
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Mahoney



Založen: Oct 26, 2019
Příspěvky: 381

PříspěvekZaslal: so leden 27 2024, 17:06    Předmět: Citovat

Pokud používají makefile tak ho použít musíš, je to soubor s parametry pro GNU Make který mu říká, jak a s čím má být co zkompilováno, ovšem pokud máš dobře nakonfigurovaný toolchain, tak by mu to Code::Block měl předhodit sám.

Code::Block, GNU Make, GNU GCC atd. jsou primárně linuxové věci, což řešíš hned na začátku instalací gnuwin32, což je v podstatě jen jakýsi framework pro Win pro svobodný software (navíc dost starý, co jsem se tak díval, i on pod 64bit systémy poběží v emulaci), což ale dle mého názoru není optimální cesta (ta lomítka v cestách, co jsi vložil jako ukázku, jsou mimochodem dost zjevná nápověda pro toho, kdo ví jak mají POSIXové systémy uspořádán filesystém). Wiznet i STM dost podporují Linux a otevřené projekty, a vývojáři Wiznetu z věcí od STM dost vychází - možná bys udělal líp. kdyby sis nainstaloval (nebo spustil live z USB) nějakou Linuxovou distribuci, která má v repozitáři Code::Block, (což je dnes v podstatě asi každá) a co má v repozitáři arm-none-eabi balíček (Debian, Ubuntu, Fedora, Alt Linux, případně dokompilovat) a zkusil to nativně pod ní (neslibuju nic, nutno vyzkoušet).

Ty soubory s příponou .ld nejsou scripty (nepatří to k programu LD z Binutils, ten má příponu .lds), ale co jsem tak pochopil tak jsou to soubory s parametry, které používá STM32CubeIDE prostředí. Pro Code::Block to bude zřejmě potřeba nějak upravit, tohle přesně ale nevím jak, nevím jak a čím STM32CubeIDE kompiluje projekty (a nechtělo se mi to hledat).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Dumitru



Založen: Dec 11, 2015
Příspěvky: 139
Bydliště: Slovensko,Bratislava

PříspěvekZaslal: ne leden 28 2024, 21:45    Předmět: Citovat

Ahoj, som si upravil makefile nech pracuje len zo súbormi ktoré ma v projekte a teraz ak si vytvorím noví project alebo si ho prenesiem na iný pc tak ho len nakopírujem a pôjde skompilovať pretože sa neodkazuje na žiadne súbory mimo a tak tiež som pridal nech zobrazuje veľkosť použitých dát v mcu.

kód:

#-----------------------------------------------------------------------------
#
# W7500 compilation make file
#
#-----------------------------------------------------------------------------
#
#  Configurations
#
# Choose the core instantiated, can be
#  - CORTEX_M0
#  - CORTEX_M0PLUS
#CPU_PRODUCT = CORTEX_M0PLUS
CPU_PRODUCT = CORTEX_M0
TOOL_CHAIN   = gcc
CPU_TYPE   = -mcpu=cortex-m0

GNU_CC      = arm-none-eabi-gcc
GNU_OBJDUMP = arm-none-eabi-objdump
GNU_OBJCOPY = arm-none-eabi-objcopy
GNU_SIZE    = arm-none-eabi-size

GNU_CC_FLAGS = -g -O3 -mthumb $(CPU_TYPE)

TESTNAME      = main

# ---------------------------------------------------------------------------------------
all: all_$(TOOL_CHAIN)

# ---------------------------------------------------------------------------------------
# ---------------------------------------------------------------------------------------
# gcc :
all_gcc:
   $(GNU_CC) $(GNU_CC_FLAGS)\
      startup_W7500.S \
      *.c \
      $(USER_DEFINE) -T gcc_W7500.ld -o obj\Debug\$(TESTNAME).o \

    # Generate disassembly code
   $(GNU_OBJDUMP) -S  obj\Debug\$(TESTNAME).o > obj\Debug\$(TESTNAME).lst
    # Generate binary file
   $(GNU_OBJCOPY) -S  obj\Debug\$(TESTNAME).o -O binary  bin\Debug\$(TESTNAME).bin
    # Generate hex file
   $(GNU_OBJCOPY) -S  obj\Debug\$(TESTNAME).o -O verilog  bin\Debug\$(TESTNAME).hex

   arm-none-eabi-size obj\Debug\$(TESTNAME).o



# ---------------------------------------------------------------------------------------
# Clean
clean :
   @rm -rf *.o
   @if [ -e bin\Debug\$(TESTNAME).hex ] ; then \
      rm -rf bin\Debug\$(TESTNAME).hex ; \
   fi
   @if [ -e obj\Debug\$(TESTNAME).lst ] ; then \
      rm -rf obj\Debug\$(TESTNAME).lst ; \
   fi
   @if [ -e bin\Debug\$(TESTNAME).ELF ] ; then \
      rm -rf bin\Debug\$(TESTNAME).ELF ; \
   fi
   @if [ -e bin\Debug\$(TESTNAME).bin ] ; then \
   rm -rf bin\Debug\$(TESTNAME).bin ; \
   fi
   @rm -rf *.crf
   @rm -rf *.plg
   @rm -rf *.tra
   @rm -rf *.htm
   @rm -rf *.dep
   @rm -rf *.d
   @rm -rf *.lnp
   @rm -rf *.bak
   @rm -rf *.lst
   @rm -rf *.axf
   @rm -rf *.sct
   @rm -rf *.__i
   @rm -rf *._ia
SHELL=C:\Windows\System32\cmd.exe



Čo som zatiaľ zistil počas prace s MCU.
Na ich evaluation board schéma v prílohe, je nutne vyspajkovať R11 a na spájkovať na pozíciu R10 inak bude potrebne pri každom reprograme vypnúť zapnúť napájanie pcb


Interne hodiny je nutne kalibrovať inak periférie ako UART (dosť ma to zamestnalo až kým som nepozrel ako majú spravene wiznet funkciu
kód:
SystemInit();
) od neskalibrovaných interných hodín nebu fungovať, nikde to v datasheete ani reference manuály nie je písané že je potrebne niečo kalibrovať našiel som to u nich na fóre keď sa nato vypytoval jeden korejec.


Ich
kód:
SystemInit();
v podstate okrem tej kalibrácie nič viac nerobí Very Happy takže som musel napísať svoju funkciu ktorá umožni inicializovať interne alebo externe hodiny nastaviť variabilne frekvenciu jadra a zapínať Clk deliť, pre jednotlivé periférie ktoré chcem použiť a ostatne vypnúť nakoľko defaultne je všetko zapnute


kód:

#define F_XTAL 8000000UL
#define F_INTO 8000000UL
uint32_t clk_init( const uint8_t M, const uint8_t N, const uint8_t OD, const uint8_t oscilator_select)
{
    uint32_t temporary_freq = 0;
    CRG->PLL_PDR = CRG_PLL_PDR_NRMLOP; // PLL power up

    if (!oscilator_select) // internal oscilator set
    {
//*************************************** Calibrate internal VCO calibrate value is write from factory in W7500x_INFO_BGT and W7500x_INFO_OSC *******************************
        (*((volatile uint32_t *)(W7500x_TRIM_BGT))) = (*((volatile uint32_t *)(W7500x_INFO_BGT)));
        (*((volatile uint32_t *)(W7500x_TRIM_OSC))) = (*((volatile uint32_t *)(W7500x_INFO_OSC)));
//*************************************** END Calibrate internal VCO ********************************************************************************************************
        temporary_freq = F_INTO;
        CRG->PLL_IFSR = CRG_PLL_IFSR_RCLK; // PLL input clock internal oscilator

    }
    else // set external oscilator
    {
        temporary_freq = F_XTAL;
        CRG->PLL_IFSR = CRG_PLL_IFSR_OCLK; // PLL input clock external oscilator
    }


    //CRG->OSC_PDR = CRG_OSC_PDR_PD; // internal osc  power down

    // F_CPU = F_XTAL * M/N * 1/OD see reference manual page 44
    CRG->PLL_FCR = ((uint32_t)M << 16) | ((uint32_t)N << 8) | (uint32_t) OD; // ad value in pll calculate register

    CRG->PLL_OER = CRG_PLL_OER_EN; // PLL output clk enable

    CRG->PLL_BPR = CRG_PLL_BPR_DIS; // PLL bypass disable if bypass enable PLL CLKIN ==  PLL CLKOUT;

//******************************************************* set FLCK ***********************************************
    CRG->FCLK_SSR = CRG_FCLK_SSR_MCLK;// select source clock FCLK [ PLL = MCLK , INT OSC = RCLK, EXTERNAL OSC = OCLK ]
    CRG->FCLK_PVSR = CRG_FCLK_PVSR_DIV1; // prescaler for FLCK clock
//*************************************************** End set FLCK ***********************************************

//******************************************************* set ADCCLK ***********************************************
    CRG->ADCCLK_SSR = CRG_ADCCLK_SSR_DIS;// select source clock ADCCLK [ Disable, PLL = MCLK , INT OSC = RCLK, EXTERNAL OSC = OCLK ]
    CRG->ADCCLK_PVSR = CRG_ADCCLK_PVSR_DIV1; // prescaler for ADCCLK clock
//*************************************************** End set ADCCLK ***********************************************

//******************************************************* set SSPCLK ***********************************************
    CRG->SSPCLK_SSR = CRG_SSPCLK_SSR_DIS;// select source clock SSPCLK [ Disable, PLL = MCLK , INT OSC = RCLK, EXTERNAL OSC = OCLK ]
    CRG->SSPCLK_PVSR = CRG_SSPCLK_PVSR_DIV1; // prescaler for SSPCLK clock
//*************************************************** End set SSPCLK ***********************************************

//******************************************************* set UARTCLK ***********************************************
    CRG->UARTCLK_SSR = CRG_UARTCLK_SSR_MCLK;// select source clock UARTCLK [ Disable, PLL = MCLK , INT OSC = RCLK, EXTERNAL OSC = OCLK ]
    CRG->UARTCLK_PVSR = CRG_UARTCLK_PVSR_DIV1; // prescaler for UARTCLK clock
//*************************************************** End set UARTCLK ***********************************************

//******************************************************* set TIMER0CLK ***********************************************
    CRG->TIMER0CLK_SSR  = CRG_TIMERCLK_SSR_DIS;// select source clock TIMER0CLK [ Disable, PLL = MCLK , INT OSC = RCLK, EXTERNAL OSC = OCLK ]
    CRG->TIMER0CLK_PVSR =  CRG_TIMERCLK_PVSR_DIV1; // prescaler for TIMER0CLK clock
//*************************************************** End set TIMER0CLK ***********************************************

//******************************************************* set TIMER1CLK ***********************************************
    CRG->TIMER1CLK_SSR  = CRG_TIMERCLK_SSR_DIS;// select source clock TIMER1CLK [ Disable, PLL = MCLK , INT OSC = RCLK, EXTERNAL OSC = OCLK ]
    CRG->TIMER1CLK_PVSR =  CRG_TIMERCLK_PVSR_DIV1; // prescaler for TIMER1CLK clock
//*************************************************** End set TIMER1CLK ***********************************************

//******************************************************* set PWM0CLK ***********************************************
    CRG->PWM0CLK_SSR = CRG_PWMCLK_SSR_DIS;// select source clock PWM0CLK [ Disable, PLL = MCLK , INT OSC = RCLK, EXTERNAL OSC = OCLK ]
    CRG->PWM0CLK_PVSR = CRG_PWMCLK_PVSR_DIV1; // prescaler for PWM0CLK clock
//*************************************************** End set PWM0CLK ***********************************************

//******************************************************* set PWM1CLK ***********************************************
    CRG->PWM1CLK_SSR = CRG_PWMCLK_SSR_DIS;// select source clock PWM1CLK [ Disable, PLL = MCLK , INT OSC = RCLK, EXTERNAL OSC = OCLK ]
    CRG->PWM1CLK_PVSR = CRG_PWMCLK_PVSR_DIV1; // prescaler for PWM1CLK clock
//*************************************************** End set PWM1CLK ***********************************************

//******************************************************* set PWM2CLK ***********************************************
    CRG->PWM2CLK_SSR = CRG_PWMCLK_SSR_DIS;// select source clock PWM2CLK [ Disable, PLL = MCLK , INT OSC = RCLK, EXTERNAL OSC = OCLK ]
    CRG->PWM2CLK_PVSR = CRG_PWMCLK_PVSR_DIV1; // prescaler for PWM2CLK clock
//*************************************************** End set PWM2CLK ***********************************************

//******************************************************* set PWM3CLK ***********************************************
    CRG->PWM3CLK_SSR = CRG_PWMCLK_SSR_DIS;// select source clock PWM3CLK [ Disable, PLL = MCLK , INT OSC = RCLK, EXTERNAL OSC = OCLK ]
    CRG->PWM3CLK_PVSR = CRG_PWMCLK_PVSR_DIV1; // prescaler for PWM3CLK clock
//*************************************************** End set PWM3CLK ***********************************************

//******************************************************* set PWM4CLK ***********************************************
    CRG->PWM4CLK_SSR = CRG_PWMCLK_SSR_DIS;// select source clock PWM4CLK [ Disable, PLL = MCLK , INT OSC = RCLK, EXTERNAL OSC = OCLK ]
    CRG->PWM4CLK_PVSR = CRG_PWMCLK_PVSR_DIV1; // prescaler for PWM4CLK clock
//*************************************************** End set PWM4CLK ***********************************************

//******************************************************* set PWM5CLK ***********************************************
    CRG->PWM5CLK_SSR = CRG_PWMCLK_SSR_DIS;// select source clock PWM5CLK [ Disable, PLL = MCLK , INT OSC = RCLK, EXTERNAL OSC = OCLK ]
    CRG->PWM5CLK_PVSR = CRG_PWMCLK_PVSR_DIV1; // prescaler for PWM5CLK clock
//*************************************************** End set PWM5CLK ***********************************************

//******************************************************* set PWM6CLK ***********************************************
    CRG->PWM6CLK_SSR = CRG_PWMCLK_SSR_DIS;// select source clock PWM6CLK [ Disable, PLL = MCLK , INT OSC = RCLK, EXTERNAL OSC = OCLK ]
    CRG->PWM6CLK_PVSR = CRG_PWMCLK_PVSR_DIV1; // prescaler for PWM6CLK clock
//*************************************************** End set PWM6CLK ***********************************************

//******************************************************* set PWM7CLK ***********************************************
    CRG->PWM7CLK_SSR = CRG_PWMCLK_SSR_DIS;// select source clock PWM7CLK [ Disable, PLL = MCLK , INT OSC = RCLK, EXTERNAL OSC = OCLK ]
    CRG->PWM7CLK_PVSR = CRG_PWMCLK_PVSR_DIV1; // prescaler for PWM7CLK clock
//*************************************************** End set PWM7CLK ***********************************************


    //CRG->PLL_FCR = 0x50200; default value


    // OD = (1 << (OD & 0x02)) * (1 << (OD & 0x01));

    return temporary_freq * M/N * 1/(1 << (OD & 0x02)) * (1 << (OD & 0x01)); // return value of PLL frequency this value is use in peripherals for calculate
}


UART2 funguje z ich knižnice v poriadku .... takže idem sa venovať TOE nakoľko oni tam majú univerzálnu knižnicu pre W5500 W5501 W7500 .... a je to dosť neprehľadné



WIZwiki-W7500P_SCH_V100.PDF
 Komentář:

Stáhnout
 Soubor:  WIZwiki-W7500P_SCH_V100.PDF
 Velikost:  207.92 kB
 Staženo:  22 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.24 sekund