Uvod v ARM

V tem delu bomo začetnikom milostno odpuščali vse grehe in jim pomagali, da svoje prve projekte pripeljejo do uspešnega konca

Uvod v ARM

OdgovorNapisal/-a zanka » 21 Dec 2016, 23:48

Začel bi s programiranjem ARM mikrokrmilnikov. 8-) Edina omejitev je ta, da jih je možno programirati v Linux sistemu.

Za začetek bo dovolj veselja pri utripanju LED. Brez tehtnega razmisleka sem se odločil, da bi začel pri proizvajalcu ST, kateri ponuja tudi EVAL komplete osnovane na STM32, npr. Discovery.

Katera njihova EVAL plošča se priporoča? Hvala lepa.
Uporabniški avatar
zanka
 
Prispevkov: 1814
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 93 krat
Prejel zahvalo: 155 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 30

Re: Uvod v ARM

OdgovorNapisal/-a s54mtb » 22 Dec 2016, 00:17

Najceneje prideš skozi s kakšnim nucleo. Te imajo tudi malo periferije in raje več pinov ven speljanih. Se jih da kar dobro uporabit tudi za kak projektič.

Lahko pa začneš s temle:
http://e.pavlin.si/2016/02/03/stm32f070 ... ototyping/

Pa še priporočljiv tutorial za ubuntu: http://vedder.se/2012/07/get-started-wi ... ntu-linux/
s54mtb
 
Prispevkov: 8166
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 1064 krat
Prejel zahvalo: 2604 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 62

Re: Uvod v ARM

OdgovorNapisal/-a zanka » 22 Dec 2016, 00:43

S kod je smiselno te zadeve naročati? Oziroma so kje kakšne "priporočene" cene, da dobim občutek, kaj je drago in kaj ni.
Uporabniški avatar
zanka
 
Prispevkov: 1814
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 93 krat
Prejel zahvalo: 155 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 30

Re: Uvod v ARM

OdgovorNapisal/-a s54mtb » 22 Dec 2016, 10:47

Ena opcija so seminarji st ali distributerjev, kjer to dobis zastonj. Sicer pa se ze na farnelu dobi pod 10eur, pa mekje do 30 eur za najhujse. Jaz narocam tam, ali pa pri tme.
s54mtb
 
Prispevkov: 8166
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 1064 krat
Prejel zahvalo: 2604 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 62

Re: Uvod v ARM

OdgovorNapisal/-a tilz0R » 22 Dec 2016, 16:45

Najbolj ti priporočam kakšno Nucleo-144 plato v vrednosti nekje 20-25 € (odvisno od procesorja gor).

Tutorialov na spletu je ogromno, primerov kode tudi, začetek je hiter.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1476
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 362 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Uvod v ARM

OdgovorNapisal/-a zanka » 21 Apr 2017, 13:04

Včeraj zvečer sem nadaljeval oziroma pričel s tem in v primerjavi z AVR je izgledalo neprimerljivo drugačno, kajti tam AVR-GCC poskrbi za skoraj vse. Tu pa je na voljo preveč svobode.

Za začetek sem si razpakiral razvojno verigo z naslednje povezave v mapo in si nastavil PATH.
Koda: Izberi vse
https://developer.arm.com/open-source/gnu-toolchain/gnu-rm


Čeprav sem po spletu našel kodo (nekaj v asm, nekaj v C), osnutke, cmsis in bil zmeden, kako sestaviti skupaj. Verjamem, da zaradi tega marsikdo poseže po razvojih orodjih (npr. Keil, CodeWarrior ...), ki jim vse to naredi sam.

Iz vseh podatkov sem spisal naslednji kodi, s katero sem dosegel vklop ene izmed LED na Cortex M0+. Koda je neumna, v razvoju in olepševanju, ampak pomembno je, da kljub svoji neverjetni majhnosti deluje.

Izvorna koda v C:
Koda: Izberi vse
#include <stdint.h>

typedef void (*pointer)(void);

extern uint32_t _estack;
void __startup(void);

pointer vector_table[] __attribute__ ((section(".vectors"))) = {
    (pointer)&_estack,
    __startup
};

void __startup(void) {

  *((uint32_t *)0x400ff054) =  (4 << 24); // (1 << 25)
  *((uint32_t *)0x400ff048) = (4 << 24);

  while (1);

}


Povezovalnik:
Koda: Izberi vse
OUTPUT_ARCH(arm)
OUTPUT_FORMAT("elf32-littlearm")
ENTRY(__startup)

MEMORY
{
  flash   (rx)   : ORIGIN = 0x00000000, LENGTH = 64K
  sram   (rwx)   : ORIGIN = 0x1FFFFC00, LENGTH = 4K
}

_estack = ORIGIN(sram) + LENGTH(sram);

SECTIONS {
  . = ORIGIN(flash);

  .text :
  {

    . = ALIGN(4);
    * (.vectors);
    * (.text);

  } > flash

  .data :
  {
    . = ALIGN(4);
    _sdata = .;
    *(.data)
    *(.data*)

    . = ALIGN(4);
    _edata = .;
  } > sram

}


Nadalje sem prevedel in pretvoril.
Koda: Izberi vse
arm-none-eabi-gcc -mcpu=cortex-m0plus -mlittle-endian -mthumb -nostdlib -T prva.ld -g prvi.c
arm-none-eabi-objcopy -O srec a.out a.srec

Nalaganje na razvojno ploščico je neumno preprosto. Pri priklopu se pojavi USB mass storage, v katero se srec datoteko le skopira. Potem se program že požene. :D

Vmes sem še preveril, če je prvih 8 bajtov pravih.
Koda: Izberi vse
arm-none-eabi-objdump -S a.out
a.out:     file format elf32-littlearm
Disassembly of section .text:

00000000 <vector_table>:
   0:   00 0c 00 20 09 00 00 00


Sedaj imam nekaj vprašanj za poznavalce. V povezovalniku sem ustvaril spremenljivko _estack, ki kaže na konec pomnilnika. Čemu moram v C pisati & pred _estack? Ta spremenljivka ne obstaja nikjer v pomnilniku, zato mi ni jasno kako lahko dobimo naslov te. Verjetno je to kakšen trik, da C misli, da je kazalec kot funkcija.
Uporabniški avatar
zanka
 
Prispevkov: 1814
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 93 krat
Prejel zahvalo: 155 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 30

Re: Uvod v ARM

OdgovorNapisal/-a tilz0R » 21 Apr 2017, 13:08

Pa si ti prepričan, da hočeš tako programirat? Ker imaš ST, uporabi SW4STM32 in bo rešeno vse zate že v štartu.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1476
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 362 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Uvod v ARM

OdgovorNapisal/-a zanka » 21 Apr 2017, 14:06

Nekje je potrebno začeti. Vzel sem GCC.


1. Ta ARM je Freescale in dvomim, če ga to okolje podpira.
2. Čeprav obstaja ~1000 različnih ARM procesorjev (tipov, proizvajalcev) me je presenetilo, da ni nekih posebnosti.
Uporabniški avatar
zanka
 
Prispevkov: 1814
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 93 krat
Prejel zahvalo: 155 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 30

Re: Uvod v ARM

OdgovorNapisal/-a zanka » 14 Jun 2017, 06:18

Kolikor sem dojel, se programira, potem ko je mikroprocesor že v veziju, preko SWD, kar pomeni 2 vodnika SWDCLK in CWDIO. Potem se na priklop pelje tudi reset. Konec koncev z napajanjem, to pomeni 5 vodnikov, torej 6 pinski priklop na veziju. In to je to?
Uporabniški avatar
zanka
 
Prispevkov: 1814
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 93 krat
Prejel zahvalo: 155 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 30

Re: Uvod v ARM

OdgovorNapisal/-a tilz0R » 14 Jun 2017, 07:18

Ja, to je to.

4 so dovolj, saj RST-ja ne potrebuješ, če SWDCLK in SWDIO pinov ne skonfiguriraš v nekaj tretjega v software-ju.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1476
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 362 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Uvod v ARM

OdgovorNapisal/-a zanka » 14 Jun 2017, 08:21

Čemu se pin imenuje NRST namesto RST.
Uporabniški avatar
zanka
 
Prispevkov: 1814
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 93 krat
Prejel zahvalo: 155 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 30

Re: Uvod v ARM

OdgovorNapisal/-a tilz0R » 14 Jun 2017, 08:22

zanka je napisal/-a:Čemu se pin imenuje NRST namesto RST.


Če se gremo pravilno, potem je nRST. Pomeni, da je reset aktiven, kadar je logičen nivo 0.
n = NOT.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1476
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 362 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Uvod v ARM

OdgovorNapisal/-a zanka » 14 Jun 2017, 08:24

tilz0R je napisal/-a:
zanka je napisal/-a:Čemu se pin imenuje NRST namesto RST.


Če se gremo pravilno, potem je nRST. Pomeni, da je reset aktiven, kadar je logičen nivo 0.
n = NOT.

Aja, eni pa narišejo črto preko napisa.
Uporabniški avatar
zanka
 
Prispevkov: 1814
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 93 krat
Prejel zahvalo: 155 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 30


Vrni se na Elektronika za začetnike

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost