ARM prvi koraki

programski jeziki in programiranje

Moderator: tilz0R

ARM prvi koraki

OdgovorNapisal/-a VolkD » 25 Jan 2017, 15:27

Saj pravzaprav ne vem kam bi tole dal. Nazadnje sem se odločil, da tule.

Na mizi imam tole več let staro čudo:
IMG_7377 (Medium).JPG

Ne me zdaj linčat.
Ker se bojim velikega koraka na ta nar ta bel ta zadnjo kockico, ki je verjeno niti rabil ne bom, ker sem tole imel že dolgo na mizi, ker imam LPC2138 na enih starih platkah, pa bi jih rad porabil, zaradi vsega tega sem vzel to. Saj kasneje se bom tudi česa drugega lotil.
Mogoče je odločitvi botrovala tudi izjava poštarja: "Saj tale paketek sem imel že včeraj, pa se mi je nekam skril", ko mi je danes izročil paket od Mucka.

Za začetek sem zadevo priključil in vanjo s sinovo pomočjo preko FlashMagica naložil blinky.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a VolkD » 25 Jan 2017, 15:36

Blinky je,... svašta je, no ampak po vrsti.
Je program, ki ga dobimo v example setu zraven ... nimam pojma česa že.
Skratka to je tole:
Koda: Izberi vse
/******************************************************************************/
/* BLINKY.C: LED Flasher                                                      */
/******************************************************************************/
/* This file is part of the uVision/ARM development tools.                    */
/* Copyright (c) 2005-2006 Keil Software. All rights reserved.                */
/* This software may only be used under the terms of a valid, current,        */
/* end user licence from KEIL for a compatible version of KEIL software       */
/* development tools. Nothing else gives you the right to use this software.  */
/******************************************************************************/
                 
#include <stdio.h>                         /* standard I/O .h-file */
#include <LPC213x.H>                       /* LPC213x definitions  */
#include <math.h>

extern void init_serial (void);            /* Initialize Serial Interface     */

int volatile timeval;


/*
 * ----- Parameters and Variables for Sine Wave Generator -----
 */
 
unsigned long OutFreq = 480l;       /* Output Frequency (Range  1Hz - 4000Hz) */
#define OutAmpl 600                 /* Output Amplitute (Range  0 - 0.99)     */
#define PI  3.1415926
#define T0_RlFreq  8000             /* Timer 0 Reload Frequency               */

struct tone  {                      /* struct for Sine Wave Generator Signal  */
  int  cos;                         /* cosine factor                          */
  long y1;                          /* y[-1] value                            */
  int  y2;                          /* y[-2] value                            */
};                                                                           

int  NewFreq;                       /* New Frequency Setup indication         */

short tval;
signed char cval;
struct tone Tone;


/*
 * Generate Sine Wave Tone
 */
static void Generate_Sine (struct tone *t)  {
  int y;
  y     = (t->cos * (t->y1 >> 14)) - t->y2;
  t->y2 = t->y1;
  t->y1 = y;
  tval  = t->y1 >> 16;
  cval  = tval;
}


/*
 * Initialize the Sine Wave Tone Generator
 */
__inline void Init_Sine (int OutFreq) {
  Tone.cos = (cos (2*PI*((float)OutFreq/T0_RlFreq))) * 32768;
  Tone.y1  = 0;
  Tone.y2  = (sin (2*PI*((float)OutFreq/T0_RlFreq)) * OutAmpl) * 32768;
}


/* Timer Counter 0 Interrupt executes each 10ms @ 60 MHz CPU Clock */
__irq void tc0 (void) {
  ++timeval;

  if (NewFreq)  {   /* The frequency changes when a new ADC value is measured */
    Init_Sine (NewFreq);
    NewFreq = 0;
  }

  Generate_Sine (&Tone);
  DACR = ((Tone.y1 >> 10) & 0xFFC0) + 0x8000;   
  T0IR        = 1;                             /* Clear interrupt flag        */
  VICVectAddr = 0;                             /* Acknowledge Interrupt       */ 
}


/* Setup the Timer Counter 0 Interrupt */
void init_timer (void) {
  T0MR0 = 1874;                                /* 0.125uSec = 1875-1 counts   */
  T0MCR = 3;                                   /* Interrupt and Reset on MR0  */
  T0TCR = 1;                                   /* Timer0 Enable               */
  VICVectAddr0 = (unsigned long)tc0;           /* set interrupt vector in 0   */
  VICVectCntl0 = 0x20 | 4;                     /* use it for Timer0 Interrupt */
  VICIntEnable = 0x00000010;                   /* Enable Timer0 Interrupt     */
}


void delay (void) {                         /* Delay function */
  unsigned int cnt;
  unsigned int val;
  static unsigned int oldval; 
  int diff;

  AD0CR |= 0x01200000;                      /* Start A/D Conversion */
  do {
    val = AD0DR;                            /* Read A/D Data Register */
  } while ((val & 0x80000000) == 0);        /* Wait for end of A/D Conversion */
  AD0CR &= ~0x01000000;                     /* Stop A/D Conversion */
  val = (val >> 6) & 0x03FF;                /* Extract AIN0 Value */

  diff = val - oldval;
  if (diff > 10 || diff < -10)  {
    oldval = val;
    NewFreq = 1200 - val;
  }
 
  printf ("\nAIN1 Result = 0x%03X", val);   /* Output A/D Conversion Result */

  val = (val >> 2) << 12;                   /* Adjust Delay Value */
  for (cnt = 0; cnt < val; cnt++);          /* Delay */
}


int main (void) {
  unsigned int n;

  IODIR1  = 0x00FF0000;                     /* P1.16..23 defined as Outputs  */
  AD0CR   = 0x00200402;                     /* Setup A/D: 10-bit AIN0 @ 3MHz */
  PINSEL1 = 0x01080000;                     /* enable DAC */

  init_serial();                            /* Initialize Serial Interface   */
  init_timer ();
 
  while (1) {                               /* Loop forever */
    for (n = 0x00010000; n <= 0x00800000; n <<= 1) {
      /* Blink LED 0, 1, 2, 3, 4, 5, 6, 7 */
      IOSET1 = n;                           /* Turn on LED */
      delay();                              /* Delay */
      IOCLR1 = 0x00FF0000;                  /* Turn off LEDs */
    }
  }
}

Pa ta program ni to, oziroma samo to za kar se izdaja. V njem je mnogo več primerov kako se kaj naredi. Na hitro kar sem opazil, drugi lahko še kaj dodate:
-jasno blinkanje LED. Ampak ne ene, temveč osem njih.
-pwm krmiljenje piskača, to je tisto kar se najbolj opazi, ker je zaradi glasnosti nemogoče zgrešiti.
-odčitovanje vrednosti napetosti na enem trimerju in seveda A/D pretvorba
-in to kar sem opazil šele, ko sem gledal po programu - pošiljanje teksta na UART.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a zanka » 25 Jan 2017, 15:57

In koliko kB zasede tak program (HEX)?
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: ARM prvi koraki

OdgovorNapisal/-a VolkD » 25 Jan 2017, 15:58

Če je še kdo, ki bi se rad lotil, lahko začne. Je idealna prilika. Sem človek, ki vse napiše in pove na forumu, sem čisti začetnik na ARM-ih, ker imam še vsaj 20 drugih interesov ne bom prehiter.
Začel sem s ploščico od keila MCB2130 in nekaj USB kablov, USB to UART prehod, potem smo pa že končali.

No pa saj tega HW tako in tako ne bom uporabljal, je tu le zato, da vidim kako vse skupaj gre.
Kasneje bom tako in tako naredil svoje enostranske stvaritve, ki bodo vsem dostopne for free ( Majoneza style).

Ko bom starino od 2138 obdelal grem pa po navdihu od tilz0R-ja. Preprosto zato, ker je pokazal največ volje, da me pelje po tej poti - torej eden od st-jev.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a VolkD » 25 Jan 2017, 16:03

No uvod je mimo, zdaj pa vprašanja

Ko gledam blinky mi ne gre skupaj par stvari. Datasheet nikjer ne omenja PINSEL1,v programu je pa uporabljen. Podobno je z IODIR.

Če sem prav razumel, potem IODIR določi le ali je določen pin izgodni ali vhodni, a to velja le, če PINSEL reče, da je ta pin GPIO. Mimogrede mi ni jasno zakaj GPIO, od kje ta meni smešna kratica.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a tilz0R » 25 Jan 2017, 16:04

VolkD je napisal/-a:Mimogrede mi ni jasno zakaj GPIO, od kje ta meni smešna kratica.


General Purpose Input/Output.
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: ARM prvi koraki

OdgovorNapisal/-a zanka » 25 Jan 2017, 16:37

VolkD je napisal/-a:Ko gledam blinky mi ne gre skupaj par stvari. Datasheet nikjer ne omenja PINSEL1,v programu je pa uporabljen. Podobno je z IODIR.

PINSEL je na strani 15 in potem podrobneje na 18.

S PINSEL poveš, kakšno vlogo ima posemezen PIN in privzeto so vsi GPIO.

Meni so najbolj čudne pri teh datasheet oznake 1:0 ... :? ampak verjetno se človek navadi branja od desne proti levi.
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: ARM prvi koraki

OdgovorNapisal/-a VolkD » 25 Jan 2017, 16:47

zanka je napisal/-a:PINSEL je na strani 15 in potem podrobneje na 18.
Nisva se razumela. V datasheetu je oznaka PINSEL, v programu blinky pa PINSEL1, je to isto ?
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a S53DZ » 25 Jan 2017, 16:55

Svetujem podroben pregled na primer tega priročnika UM10120:
Priponke
UM10120.pdf
(1.94 MiB) Prenešeno 35 krat
Uporabniški avatar
S53DZ
 
Prispevkov: 1148
Pridružen: 18 Jan 2015, 10:58
Kraj: Ljubljana
Zahvalil se je: 200 krat
Prejel zahvalo: 385 krat
Uporabnika povabil: S52O
Število neizkoriščenih povabil: 41

Re: ARM prvi koraki

OdgovorNapisal/-a VolkD » 25 Jan 2017, 16:58

S53DZ je napisal/-a:Svetujem podroben pregled na primer tega priročnika UM10120:
Hvala za link, a tudi tu ne najdem zakaj imam v blinky programčku oznako spremenljivke (ki je verjetno register) IODIR1, vsepovsod pa IODIR. Bom vzel kot da je to sta stvar.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a VolkD » 25 Jan 2017, 17:10

O še enkrat hvala za ta link. Z njegovo pomočjo sem pa le nekaj odkril.
Na strani 80 imam vse o IODIR. Tu lepo piše kako sta poimenovana ta dva registra za port0 in kako za port1. Tu torej piše da imamo IO0DIR in UI1DIR.

Če v blinky vstavim namesto IODIR1 ime IO1DIR, se bo program prevedel in tudi deloval. To kar je mene zmotilo je torej le dvojno označevanje istega registra. Nisem pa uspel najti, da bi to bilo kje razloženo. Recimo kot komentar v programu, ki naj bi bil namenjen začetnikom.
Očitno sem bom pri hoji s LPC2138 še precej spotikal.

Ps,: Po analogiji predvidevam da velja za IO0DIR ekvivalentno IODIR0.

No na srečo dela oboje.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a VolkD » 25 Jan 2017, 17:20

Koda: Izberi vse
  IO1DIR  = 0x00FF0000;                     /* P1.16..23 defined as Outputs  */
  AD0CR   = 0x00200402;                     /* Setup A/D: 10-bit AIN0 @ 3MHz */
  PINSEL1 = 0x01080000;                     /* enable DAC */

Prvo vrstico od teh treh v inicializaciji sem torej izsledil. :D Pa mi vrag ni dal miru in sem poizkusil namesto AD0CR napisati ADCR0. Naivnež! Jasno da ne gre. No pa saj ADCR0 ne najdem v nobenem tehničnem listu, torej je prav tako.

Zalomi pa se, ko po analogiji poskusim namesto PINSEL1 napisati PIN1SEL. Jasno da ne gre. :_think čudno. Ponovno iskanje v podatkovnem listu. :o PIN1SEL ni ne obstaja. Jasno PINSEL1 dela čisto spodobno, kar je tudi prav opisano. Me pa čudi tovrstna nedoslednost označevanja v datasheetu. Ampak tako je, tako treba vzeti.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a tilz0R » 25 Jan 2017, 17:24

VolkD je napisal/-a:Zalomi pa se, ko po analogiji poskusim namesto PINSEL1 napisati PIN1SEL. Jasno da ne gre. :_think čudno. Ponovno iskanje v podatkovnem listu. :o PIN1SEL ni ne obstaja. Jasno PINSEL1 dela čisto spodobno, kar je tudi prav opisano. Me pa čudi tovrstna nedoslednost označevanja v datasheetu. Ampak tako je, tako treba vzeti.


Če je čip slab, je pač slab :D #volkKnowsWhatImTalkingAbout
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: ARM prvi koraki

OdgovorNapisal/-a S53DZ » 25 Jan 2017, 17:30

Hm,

pa saj je vseeno, kako register ali pa offset do registra poimenuješ!!!
Samo, da potem to isto poimenovanje tudi uporabiš v programu!!!

To nima prav nobene zveze z dobrim ali slabim čipom. To je povezano le s programiranjem.

Če si navajen vedno vzeti kar celo listo prireditev registrov z neta ne glede na to kaj rabiš in česa ne in to brez premisleka o tem kaj kakšen register je, potem je pa križ. Potem te pa tako poimenovanje lahko zmoti.

VolkD, svetujem ti, da vedno pogledaš, kam je prirejeno kakšno ime (na kateri naslov) in potem takih vprašanj ne boš imel.

73 Bojan

Dodano:

PINSEL0 kaže na 0xE002C000
PINSEL1 kaže na 0xE002C004
PINSEL2 kaže na 0xE002C014

Torej, da dosežeš PINSEL1, je popolnoma vseeno kako.
Na primer:
PINSEL = PINSEL0
in potem
PINSEL1 = PINSEL + 4
ali pa PINSEL1
...
Zadnjič spremenil S53DZ, dne 25 Jan 2017, 17:42, skupaj popravljeno 1 krat.
Uporabniški avatar
S53DZ
 
Prispevkov: 1148
Pridružen: 18 Jan 2015, 10:58
Kraj: Ljubljana
Zahvalil se je: 200 krat
Prejel zahvalo: 385 krat
Uporabnika povabil: S52O
Število neizkoriščenih povabil: 41

Re: ARM prvi koraki

OdgovorNapisal/-a zanka » 25 Jan 2017, 17:35

VolkD je napisal/-a:
zanka je napisal/-a:PINSEL je na strani 15 in potem podrobneje na 18.
Nisva se razumela. V datasheetu je oznaka PINSEL, v programu blinky pa PINSEL1, je to isto ?

Površno sem napisal, stran 18 je PINSEL1.
Priponke
pinsel1.png
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: ARM prvi koraki

OdgovorNapisal/-a matjazkariz » 25 Jan 2017, 17:46

Kako se imenuje register je povsem odvisno od uporabljenega programabilnega okoja. Ta imena so navadno deklarirana kot fizične adrese v eni header datoteki, ki jo imaš gotovo vključeno v projektu. Torej, če bi se Keil odločil, da bo en register poimenoval pinkopalinko namesto pinsel, boš v kodi moral pisat pinkopalinko = 1;
Glede števila 1 na koncu imena registra...
Navadno je ime XXXX in XXXX1 vezano na isto adreso, torej je ista stvar. To je pa zato, ker nekateri večji mikrokontrolerji imajo lahko več registrov, ki opravljajo enako funkcijo (naprimer konfiguracija več IO, kot pa jih lahko konfiguriraš v enem registru). Naprimer en mali uC ima PINSEL register v katerem lahko spreminjaš določeno funkcionalnost za vse IOje v tem uC, večji brat pa ima zaradi večjega števila IO potrebo po več takih registrih in zato dodajo PINSEL2. PINSEL1 pa je navadno enak kot je PINSEL zaradi kompatibilnosti kode.
matjazkariz
 
Prispevkov: 299
Pridružen: 21 Feb 2015, 11:24
Zahvalil se je: 24 krat
Prejel zahvalo: 46 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 4

Re: ARM prvi koraki

OdgovorNapisal/-a VolkD » 25 Jan 2017, 18:07

Ja vse kar ste napisali drži, je pa treba to vedeti.
matjazkariz je napisal/-a: Torej, če bi se Keil odločil, da bo en register poimenoval pinkopalinko namesto pinsel, boš v kodi moral pisat pinkopalinko = 1;

True.
Ampak običaj je, da so poimenovanja taka, kot so poimenovanja v podatkovnem listu. Če temu ni tako, pride hitro do zmede.
Je pa zmeda tu predvsem zato, ker se v podatkovnem listu ne držijo striktno enoznačnega poimenovanja. To vsaj pri enem registru poskuša popraviti Keil, pri naslednjem pa že ne več. Nekonsistentnost je torej tako v podatkovnem listu, kot v definiciji okolja v keil-u (saj drugače skoraj niso mogli).
Ampak to zdaj vemo pa lahko gremo dalje.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a tilz0R » 25 Jan 2017, 18:33

Vsak CMSIS compliant vendor ti bo zraven čipa in dokumentacije za razvoj dodal tudi te datoteke:

system_imecipa.c //Startup za uro nastavit, v njem najdeš funkcijo SystemInit()
startup_imecipa.s/c/.. //Startup datoteka za IRQ vektorje, heap nastavitve, stack nastavitve
imecipa.h //Header datoteka z vsemi definicijami registrov in česa drugega.

V tvojem primeru bi moralo biti nekako tako:

system_lpc2138.c
startup_lpc2138.s
lpc2138.h

ali recimo tako:
system_lpc21xx.c
startup_lpc21xx.s
lpc21xx.h

Če se tega držiš in to uporabljaš, se nerabiš sekirat NIKOLI kako kater IDE popravlja registre.
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: ARM prvi koraki

OdgovorNapisal/-a mujo » 25 Jan 2017, 19:00

Imel sem eno enostavni pregled CMSIS v slovenščini, a ga ne najdem.
Ampak nič kaj - sem našel nekaj podobnega v angleščini- Getting started with CMSIS.

Je pa tako kot je rekel tilz0R, drži se CMSIS pa neboš imel težav. CMSIS definicije pa se (vsaj kar jaz poznam) ujemajo z datasheetom.
mujo
 
Prispevkov: 732
Pridružen: 21 Jan 2015, 10:50
Kraj: MB
Zahvalil se je: 1 krat
Prejel zahvalo: 145 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 17

Re: ARM prvi koraki

OdgovorNapisal/-a VolkD » 25 Jan 2017, 21:13

Jaz imam na začetku blinky programam tole:
Koda: Izberi vse
#include <stdio.h>                         /* standard I/O .h-file */
#include <LPC213x.H>                       /* LPC213x definitions  */
#include <math.h>

Torej se te stvari v mojo celoto prenesejo preko LPC213x.c/s/h datotek. Kje točno se nahajajo in kakšne so, pa še nisem uspel raziskati. Vem samo, da razen keila nimam kaj drugega instalirano zraven.

programček blinky je pa tule: \Keil_v5\ARM\Boards\Keil\MCB2130\Blinky
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a VolkD » 25 Jan 2017, 21:23

Naslednja stvar, ki me moti je to, da je delo na serijskem portu na nek način skrito.
Takoj mi je jasno, da se
Koda: Izberi vse
printf ("\nAIN1 Result = 0x%03X", val);
prenese preko uarta. Kje in kako je to nastavljeno pa pojma nimam.
No saj lahko bi se šel copy/paste in to uporabljal (preizkušeno). Bi pa vseeno rad vedel kje in kaj se skriva za vrstico

Koda: Izberi vse
extern void init_serial (void);
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a tilz0R » 25 Jan 2017, 21:29

printf ti pri Keilu redirecta na output stream. Funkcija ki se kliče za vsak znak posebej je fputc. Torej išči to funkcijo v sistemu.
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: ARM prvi koraki

OdgovorNapisal/-a VolkD » 25 Jan 2017, 21:36

tilz0R je napisal/-a:printf ti pri Keilu redirecta na output stream. Funkcija ki se kliče za vsak znak posebej je fputc. Torej išči to funkcijo v sistemu.

A ne bo šlo tako. Namesto, da mi pomagate mi dajete vedno težje naloge.
Komaj sem našel kam gre iskat tole
Koda: Izberi vse
#include <LPC213x.H> 
Pa še to ni komplet :(
Sem pa zraven te datoteke v istem direktoriju (philips - res je obsolete) našel tudi datoteko LPC21xx.h

S poskusi sem ugotovil da tudi to datoteko polinka zraven, a ne najdem kje in kako. Lahko pa zdaj namesto IO1DIR naredim tudi MaticekSeZeni, če bi ravno hotel.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a gumby » 25 Jan 2017, 21:38

Stdout preusmeriš na svojo funkcijo in bo printf pisal kamorkoli.
my brain hurts
Uporabniški avatar
gumby
 
Prispevkov: 2078
Pridružen: 14 Jan 2015, 19:49
Kraj: Lendava
Zahvalil se je: 94 krat
Prejel zahvalo: 458 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 50

Re: ARM prvi koraki

OdgovorNapisal/-a Kroko » 25 Jan 2017, 21:41

Ključna beseda za google je "retarget.c".
Varjamem, da boš pod tem našel vse kar potrebuješ.
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4077
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 616 krat
Prejel zahvalo: 1314 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 242

Re: ARM prvi koraki

OdgovorNapisal/-a Kroko » 25 Jan 2017, 21:45

Takole imam jaz:

Koda: Izberi vse
#include <stdio.h>
#include <rt_misc.h>
#include <LPC43xx.h>

#pragma import(__use_no_semihosting_swi)

#define LPC_USART    LPC_USART0


struct __FILE { int handle; };

FILE __stdout;
FILE __stdin;

int fputc(int c, FILE *f)
{
  while (!(LPC_USART->LSR & 0x20));
  LPC_USART->THR = c;
   return (c);
}


int fgetc(FILE *f)
{
  if (LPC_USART->LSR & 0x01)
    return (LPC_USART->RBR);

  return (-1);
}


int ferror(FILE *f)
{
   return EOF;
}


void _ttywrch(int c)
{
  while (!(LPC_USART->LSR & 0x20));
  LPC_USART->THR = c;
}


void _sys_exit(int return_code)
{
   label:  goto label;  // endless loop
}
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4077
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 616 krat
Prejel zahvalo: 1314 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 242

Re: ARM prvi koraki

OdgovorNapisal/-a VolkD » 26 Jan 2017, 17:35

Nekaj se dajem okrog boudrate. Tisto preračunavanje vsakič mi nekako ne gre v glavo. Pa sem si naredil par definicij.
Žal sem nekje nekaj spregledal.

Koda: Izberi vse
#define FOSC 12000000
#define BoudRate 115200
#define PLL_M PLLCFG & 0XF
#define PLL_P (PLLCFG & 0X30)>>4
#define   CCLK FOSC * (PLL_M+1)   
#define PCLK CCLK/4   
   
   
  printf ("\nAIN1 Result = 0x%03X", val);   /* Output A/D Conversion Result */
  printf (" PLLCFG= %d",PLLCFG);
  printf (" PLL_M= %d",PLL_M);
  printf (" FOSC= %i",FOSC);
  printf (" cclk= %i",CCLK);


Mi vrne sledeče:
Koda: Izberi vse
AIN1 Result = 0x3F7 PLLCFG= 36 PLL_M= 4 FOSC= 12000000 cclk= 0


Kje sem naredil neumnost ?
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a Sigi » 26 Jan 2017, 17:40

Priporočam da daješ vse vrednosti ki jih definiraš z #define v oklepaje. Higijena.

lp Žiga
lp Žiga
Sigi
 
Prispevkov: 143
Pridružen: 23 Jan 2015, 01:57
Kraj: Kamnik
Zahvalil se je: 45 krat
Prejel zahvalo: 47 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 12

Re: ARM prvi koraki

OdgovorNapisal/-a Sigi » 26 Jan 2017, 17:45

Recimo:
#define PLL_M PLLCFG & 0XF
#define PLL_P (PLLCFG & 0X30)>>4
#define CCLK FOSC * (PLL_M+1)

CCLK se bo raztegnil v FOSC * (PLLCFG & 0xF+1)

kar najbrž ni to kar želiš

lp Žiga
lp Žiga
Sigi
 
Prispevkov: 143
Pridružen: 23 Jan 2015, 01:57
Kraj: Kamnik
Zahvalil se je: 45 krat
Prejel zahvalo: 47 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 12

Re: ARM prvi koraki

OdgovorNapisal/-a VolkD » 26 Jan 2017, 19:04

Sigi, čestitam, točno to je bil problem. Že dela :)
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a VolkD » 27 Jan 2017, 00:31

Malo sem se poglobil v blinky programček za LPC2138. Pravzaprav sem se tokrat, bolj kot ne, poglobil le v del inicializacije serijskega porta.
Koda: Izberi vse
void init_serial (void)  {               /* Initialize Serial Interface       */
  PINSEL0 = 0x00050000;                  /* Enable RxD1 and TxD1              */
  U1LCR = 0x83;                          /* 8 bits, no Parity, 1 Stop bit     */
  U1DLL = 97;                            /* 9600 Baud Rate @ 15MHz VPB Clock  */
  U1LCR = 0x03;                          /* DLAB = 0                          */
}


Prvo kar sem opazi je bilo to, da so registri nastavljeni na neke vrednosti, za katere pojma nimam kaj pomenijo.
Vse je bilo novo in čudno. No branje pdf-ja pomaga.
Prva dva registra sem dojel skoraj takoj. Pri tretjem pa se je zataknilo.
Pregledal sem dobršen del pdfja, cukal za rokav jvolk in tilz0R in naposled spesnil nekaj, kar bo za kasnejšo uporabo bolj enostavno in ne bo treba vsakič ob spremembi hitrosti podatkov na UARTU prebrati 1/5 pdf-ja.

Koda: Izberi vse

#define FOSC          12000000
#define BaudRate       115200

#define PLL_M          (PLLCFG & 0XF)
#define PLL_P          ((PLLCFG & 0X30) >> 4)
#define CCLK            (FOSC * (PLL_M + 1))
#define APBDIVVAL      (VPBDIV & 0x03)
#define PCLK          (CCLK / (APBDIVVAL == 0 ? 4 : (APBDIVVAL == 1 ? 1 : 2)))

#define CR     0x0D

void init_serial (void)  {               /* Initialize Serial Interface       */
   
  PINSEL0 = 0x00050000;                  /* Enable RxD1 and TxD1              */
  U1LCR = 0x83;                          /* 8 bits, no Parity, 1 Stop bit     */
  U1DLL = PCLK/(BaudRate*16);
  U1LCR = 0x03;                          /* DLAB = 0                          */
}

Povsem dovolj bo povedati kakšna je frekvenca kristala v oscilatorju in željen baud rate.
Omenjen način seveda zanemari fractional del PLL-ja, a je pri običajnih kristalih dovolj blizu, da ne prihaja do napak.

Upam, da ga nisem kje polomil. Poglejte in povejte.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a s54mtb » 27 Jan 2017, 00:54

DLAB daš na 0, da računa baud rate iz registrov DLL in DLM.

LPC2138 je v keilu do potankosti podprt s simulatorjem. Če brez hardvera prevedeš in poženeš simulator boš dejansko videl kaj si naredil. Seveda velja enako tudi za debugiranje na dejanskem targetu. Nastavi break point in odpri okno od UART-a. Tam imaš registre razbite po bitih in lahko se tudi igraš s klikanjem in se ti bo vrednost registrov nastavljala. Tule imaš primere dialogov za uart: http://www.keil.com/dd/vtr/4365/8188.htm

Na cortexu pa te stvari lahko počneš celo na živo (trace).
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: ARM prvi koraki

OdgovorNapisal/-a bray » 27 Jan 2017, 12:31

tilz0R je napisal/-a:Vsak CMSIS compliant vendor ti bo zraven čipa in dokumentacije za razvoj dodal tudi te datoteke...


Samo ena opomba, da ne bo zmede. Serija LPC2000 je še iz časov par let pred Cortexi in kratica CMSIS pomeni Cortex Microcontroller Software Interface Standard tako da za LPC213x v Keilu (in verjetno tudi kje drugje) ne dobiš CMSIS datotek dobiš pa startup file in header file.

VolkD...kar pogumno naprej proti Cortexom ;)
COM port is not dead. It is virtual!
bray
 
Prispevkov: 292
Pridružen: 08 Avg 2016, 22:11
Kraj: Vransko
Zahvalil se je: 55 krat
Prejel zahvalo: 77 krat
Uporabnika povabil: forest70
Število neizkoriščenih povabil: 15

Re: ARM prvi koraki

OdgovorNapisal/-a VolkD » 27 Jan 2017, 15:59

bray je napisal/-a:VolkD...kar pogumno naprej proti Cortexom ;)
Saj grem, ampak ne nameravam spustiti nobenega koraka. Saj vem, da sem v preteklosti mnogo tega zamudi, zaradi takih in drugačnih razlogov, ampak zaradi tega ne bom nič preskakoval.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a VolkD » 27 Jan 2017, 23:01

V tem blinky programčku sem se pomaknil kako vrstico naprej. In padel v init_timer ();
Celotna rutina, ki so jo napisali je tule:
Koda: Izberi vse
void init_timer (void) {
  T0MR0 = 1874;                                /* 0.125uSec = 1875-1 counts   */
  T0MCR = 3;                                   /* Interrupt and Reset on MR0  */
  T0TCR = 1;                                   /* Timer0 Enable               */
  VICVectAddr0 = (unsigned long)tc0;           /* set interrupt vector in 0   */
  VICVectCntl0 = 0x20 | 4;                     /* use it for Timer0 Interrupt */
  VICIntEnable = 0x00000010;                   /* Enable Timer0 Interrupt     */
}

Čisto prepisano iz originala.

Zatakne se mi že pri prvi vrstici. V tem programu je clock periferije nastavljen na 15MHz. Ena perioda torej traja 6.6666666666667e-8. Ali bolj po domače 0,000000006 (s pikico zgoraj) s. Če to sedaj pomnožimo s (1874+1) dobimo 0,000125 s.
Kar znese 0,125ms ali 125us.
Komentar zgoraj v tem blinky programu pravi drugače. Kdo ima prav ?
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a zanka » 27 Jan 2017, 23:33

Morda upošteva tudi ničlo? :geek:
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: ARM prvi koraki

OdgovorNapisal/-a VolkD » 27 Jan 2017, 23:41

zanka je napisal/-a:Morda upošteva tudi ničlo? :geek:
? Katero ? in kolikokrat?
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a zanka » 28 Jan 2017, 00:10

VolkD je napisal/-a:
zanka je napisal/-a:Morda upošteva tudi ničlo? :geek:
? Katero ? in kolikokrat?

Naračunal si, da potrebuješ 1875 korakov, torej šteje od 0 do 1874, ampak res bi se moral šele pri 1875 resetirati.
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: ARM prvi koraki

OdgovorNapisal/-a VolkD » 28 Jan 2017, 01:10

zanka je napisal/-a:
VolkD je napisal/-a:
zanka je napisal/-a:Morda upošteva tudi ničlo? :geek:
? Katero ? in kolikokrat?

Naračunal si, da potrebuješ 1875 korakov, torej šteje od 0 do 1874, ampak res bi se moral šele pri 1875 resetirati.
Ma to vse razumem in je prav.
To kar mi ne gre skupaj je, da je v original blinky programu napisano 0,125us. Jaz sem pa naračunal 1000x več.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a tilz0R » 28 Jan 2017, 01:12

Pač so se zmotili, mogoče copy/paste, who knows.
Če bi hotel šteti do 0.125us z 18xx cikli bi moral biti v GHz območju ure.
Zadnjič spremenil tilz0R, dne 28 Jan 2017, 01:14, skupaj popravljeno 1 krat.
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: ARM prvi koraki

OdgovorNapisal/-a radix » 28 Jan 2017, 01:13

Po logiki ne more biti ravno 8 MHz (1/(125 ns)), saj bi pri štetju do 1875 moral števec teči s 15 GHz...

:D vidim, da me je tilz0R prehitel
radix
 
Prispevkov: 1176
Pridružen: 04 Feb 2015, 20:19
Kraj: Ljubljana
Zahvalil se je: 192 krat
Prejel zahvalo: 264 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 18

Re: ARM prvi koraki

OdgovorNapisal/-a VolkD » 28 Jan 2017, 11:31

Vse drži in vse štima, samo taka napaka v tekstu, ki je namenjen začetniku ?
Razen tega sem to jaz potegnil z izvora samega pred kakimi desetimi dnevi. In menda se ukvarjam z 10 let staro zadevo. Verjetno bi bil čas to popraviti.
Da ne bom sam šinfal, kam se take stvari javi ?
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a tilz0R » 28 Jan 2017, 14:33

VolkD je napisal/-a:Vse drži in vse štima, samo taka napaka v tekstu, ki je namenjen začetniku ?


Mislim da zaradi takšne napake nebo gorelo ozračje ;)
Se zgodi, nikjer ne piše, da morajo biti komentarji relevantni kodi (je pa fajn, če so).

Report pa narediš tam, kjer si kodo dobil..keil.com
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: ARM prvi koraki

OdgovorNapisal/-a VolkD » 29 Jan 2017, 01:35

tilz0R je napisal/-a:Mislim da zaradi takšne napake nebo gorelo ozračje ;)
Se zgodi, nikjer ne piše, da morajo biti komentarji relevantni kodi (je pa fajn, če so).

Report pa narediš tam, kjer si kodo dobil..keil.com
Ozračje ne, ni pa fino če treščiš na tako reč.

Sem pa res poslal raport na keil. To pa zato, ker če se take stvari ne sporoča, potem smo tudi sami krivi, da ni bolje.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a VolkD » 29 Jan 2017, 23:10

Tole imam:
Koda: Izberi vse
int main (void) {

  IO1DIR  = 0x00FF0000;                     /* P1.16..23 defined as Outputs  */

   while (1) {
      IOSET1 = 0x00FF0000;      
      IOCLR1 = 0x00FF0000;         
   }
}


Na vseh osmih pinih imam signal frekvence 1.6MHz. Izmerjeno precej približno s pomočjo časa periode na osciloskopu.

Je to res, ali sem kje zgrešil ?

Se da hitreje in kako ?
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a Kroko » 29 Jan 2017, 23:27

Bitbang na GPIO je precej počasen.
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4077
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 616 krat
Prejel zahvalo: 1314 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 242

Re: ARM prvi koraki

OdgovorNapisal/-a s54mtb » 29 Jan 2017, 23:51

11 ciklov ti pride tvoj program.... Takt imaš torej nekje okrog 18MHz ? Daj na 60MHz.

Koda: Izberi vse
; IOSET1 = 0x00FF0000
L1:
  MOV       R0,#0x00FF0000  ; 1 cikel
  LDR       R1,[PC,#0x0008]  ; 3 cikle
  STR       R0,[R1,#0x0014]  ; 2 cikla
; IOCLR1 = 0x00FF0000         
  STR       R0,[R1,#0x001C]  ; 2 cikla
  B         L1    ; 3 cikle
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: ARM prvi koraki

OdgovorNapisal/-a VolkD » 30 Jan 2017, 00:43

s54mtb je napisal/-a:11 ciklov ti pride tvoj program.... Takt imaš torej nekje okrog 18MHz ? Daj na 60MHz.
Takt naj bi bil na 60MHz.
V bistvu je tole skopiran blinky, le main je popravljen. Tako, da bi 60MHz moralo držati.

Ja vem, nekje nekaj ne štima, le, da jaz nimam pojma kje. Faktor razhajanja je nekje okrog 3,4.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ARM prvi koraki

OdgovorNapisal/-a Kroko » 30 Jan 2017, 00:51

Maximum, ki ga lahko dobiš takole na LPC21xx je okoli 5MHz. Poglej user manul za "fast access" oziroma nekaj v temu smislu (malo sem to že pozabil).
http://www.planet-cnc.com poskakuješ na eni nogi in žvižgaš alpske podoknice Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 4077
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 616 krat
Prejel zahvalo: 1314 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 242

Re: ARM prvi koraki

OdgovorNapisal/-a VolkD » 30 Jan 2017, 00:54

Sem v programu vključil nazaj serial / inicializacijo in pošiljanje nekaj na serijski port.
jedro in periferija dejansko delajo na 60/15 MHz, ker bi drugače boud rate ne štimal.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 28132
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 5233 krat
Prejel zahvalo: 3645 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Naslednja

Vrni se na Software

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost