ARM Embedded

Antworten
Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ARM Embedded

Beitrag von Mathias »

Ich spreche von Systick und nicht von den Timern.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ARM Embedded

Beitrag von Mathias »

Ich darf keine St-Dateien zum Download bereitstellen. In README.TXT steht, woher man die Sourcen bekommt. Zum Ausprobieren des Programmes reicht die *.elf Datei.
README.TXT:
Jetzt habe ich gesehen warum, man muss sich dort registrieren, das man was runterladen kann. :cry:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: ARM Embedded

Beitrag von mse »

Wenn du ernsthaft mit ST Chips arbeiten willst, wirst um die STM32Cube Pakete nicht herumkommen.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ARM Embedded

Beitrag von Mathias »

mse hat geschrieben:Wenn du ernsthaft mit ST Chips arbeiten willst, wirst um die STM32Cube Pakete nicht herumkommen.

Ich habe unterdessen das Cube-Paket runtergeladen, ich weis zwar nicht, was dies mit einem Würfel zu tun hat.

Das wird aber richt schwierig sein, die in Pascal umzusetzen, da für alles fertige Bibliotheken verwendet wird. Da kann man genauso gut, die Sourcen von Arduino auseinander nehmen.
Schön wären einfache Beispiele mit direkten Register-Zugriffen. Mal ein wenig googeln, dann findet man noch das einte und andere.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: ARM Embedded

Beitrag von mse »

Mathias hat geschrieben:Das wird aber richt schwierig sein, die in Pascal umzusetzen, da für alles fertige Bibliotheken verwendet wird. Da kann man genauso gut, die Sourcen von Arduino auseinander nehmen.

Oder für die C-Bibliotheken Pascal header units machen und die C-Bibliotheken linken.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ARM Embedded

Beitrag von Mathias »

Oder für die C-Bibliotheken Pascal header units machen und die C-Bibliotheken linken.

Meinst du so eine Art DLL damit ?

Direkte Registerzugriffe wären eigentlich schon lehrreicher, da sieht man, was passiert.
So wie hier im AVR-Tutorial: http://wiki.freepascal.org/AVR_Embedded_Tutorial/de

Für den AVR habe ich da mal eine sehr interessante Seite gefunden: https://sites.google.com/site/qeewiki/b ... -atmega328
Dank dieser hatte ich das AVR-Tutorial erstellen können.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: ARM Embedded

Beitrag von mse »

Mathias hat geschrieben:
Oder für die C-Bibliotheken Pascal header units machen und die C-Bibliotheken linken.

Meinst du so eine Art DLL damit ?

Nein, die aus den C-Dateien kompilierten *.o Dateien statisch linken.
Direkte Registerzugriffe wären eigentlich schon lehrreicher, da sieht man, was passiert.
So wie hier im AVR-Tutorial: http://wiki.freepascal.org/AVR_Embedded_Tutorial/de

Das kann mit den aktuellen komplizierten Bausteinen recht anspruchsvoll werden. Ich mache es allerdings ebenfalls so und erstelle massgeschneiderte Zugriffsroutinen. Die meisten Entwickler die ich kenne benützen stattdessen das Hardware-Abstraction-Layer und die Konfigurierungstools der Hersteller.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ARM Embedded

Beitrag von Mathias »

Das kann mit den aktuellen komplizierten Bausteinen recht anspruchsvoll werden.

Ist dies nicht recht ähnlich mit den AVRs, ausser das es mehr Register gibt ?
Etwa so, wie es bei den GPIOs der Fall ist ?
Wen ich zB. digitalWrite(...) der Arduino-IDE nehme, werden die Möglichkeiten von den GPIOs gar nie ausgenutzt. Dies nutzt nur BSRR, BRR oder ODR wird nie genutzt.

Ich mache es allerdings ebenfalls so und erstelle massgeschneiderte Zugriffsroutinen.
Meinst du jetzt damit die direkten Register-Zugriffe ?

Die meisten Entwickler die ich kenne benützen stattdessen das Hardware-Abstraction-Layer und die Konfigurierungstools der Hersteller.
Da wirst du recht habe, die meisten welche den Arduino coden, nehmen digitalWrite und digitalRead, obwohl dies gähnend langsam ist.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: ARM Embedded

Beitrag von mse »

Mathias hat geschrieben:
Das kann mit den aktuellen komplizierten Bausteinen recht anspruchsvoll werden.

Ist dies nicht recht ähnlich mit den AVRs, ausser das es mehr Register gibt ?
Etwa so, wie es bei den GPIOs der Fall ist ?
Wen ich zB. digitalWrite(...) der Arduino-IDE nehme, werden die Möglichkeiten von den GPIOs gar nie ausgenutzt. Dies nutzt nur BSRR, BRR oder ODR wird nie genutzt.

Vergleiche die Busstruktur, den Taktbaum, die Energiesparmodi und die Memory/Cache-Struktur der 8-Bit AVR's und der 32Bit ARM-Derivate. Da liegen Welten dazwischen.
Ich mache es allerdings ebenfalls so und erstelle massgeschneiderte Zugriffsroutinen.
Meinst du jetzt damit die direkten Register-Zugriffe ?

Ja, ich verwende in meinen Programmen direkte Registerzugriffe die oft in optimierte Hilfsroutinen eingebettet sind.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ARM Embedded

Beitrag von Mathias »

Ich habe geguckt, ob diese Constanten in der Unit stm32f10x_ld.pp schon definiert sind, aber Fehlanzeige. Es gibt nicht, was bei $E00.... anfängt.

Code: Alles auswählen

const SYSTICK_BASE_ADDRESS = $E000E010;   // Basisadresse beim STM32Fxxx
 
var STK_CTRL  : DWORD absolute SYSTICK_BASE_ADDRESS + 0;    // Steuerung interupt Clock select usw.
var STK_LOAD  : DWORD absolute SYSTICK_BASE_ADDRESS + 4;    // Zaehlerwert welcher beim Erreichen von 0 wieder geladen werden soll
var STK_VAL   : DWORD absolute SYSTICK_BASE_ADDRESS + 8;    // aktuelle Zählerstand des 24 Bit Zählers
var STC_CALIB : DWORD absolute SYSTICK_BASE_ADDRESS + 12;   // $2328 ==> 9000 dez. warum steht der Wert stanbdardmässig auf 9000 ????


So wie es scheint, ist diese Unit nicht komplett.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: ARM Embedded

Beitrag von mse »

Mathias hat geschrieben:So wie es scheint, ist diese Unit nicht komplett.

Die sind in
rtl/embedded/arm/cortexm3.pp
da im ARM Kern beheimatet.

Code: Alles auswählen

 
var STC_CALIB : DWORD absolute SYSTICK_BASE_ADDRESS + 12;   // $2328 ==> 9000 dez. warum steht der Wert stanbdardmässig auf 9000 ????
 


https://developer.arm.com/docs/dui0552/ ... e-register
und
http://www.st.com/content/ccc/resource/ ... 171190.pdf
10.1.1 SysTick calibration value register
The SysTick calibration value is set to 9000, which gives a reference time base of 1 ms with
the SysTick clock set to 9 MHz (max HCLK/8).

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ARM Embedded

Beitrag von Mathias »

Die sind in
rtl/embedded/arm/cortexm3.pp
da im ARM Kern beheimatet.

Dies macht den Code schon wieder ein wenig übersichtlicher. :wink:

Code: Alles auswählen

procedure InitTimer;
begin
  SysTick.Load := (SYSTIMER_IN_FREQ DIV SYSTIMER_INTERVAL)-1// 1 Millisekunden Interrupt
  SysTick.Ctrl := 7;                                           // counter enable, enable interrupt, use processor clock
end;


Woher hast du dein Wissen über den STM32, hast du dies in irgend einer Schule gelernt, oder alles mit Google und Datenblätter ?
So wie es es aussieht, ist der STM32 viel komplexer als ein ATTiny. Ein ATTiny es recht überschaubar.

Aber immerhin weis ich jetzt unterdessen, wie man auf die GPIOs zugreift, und wie man den SysTick als Timer nutzen kann. :wink:
Ein Multiplex habe ich mit diesem Timer schon hingekriegt, so das ich in der Loop andere Aufgabe erledigen kann.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: ARM Embedded

Beitrag von mse »

Mathias hat geschrieben:Woher hast du dein Wissen über den STM32, hast du dies in irgend einer Schule gelernt, oder alles mit Google und Datenblätter ?

Ich kenne STM32 überhaupt nicht. Ich kenne andere ARM M3 uP's und habe mein halbes Leben uP-Schaltungen entwickelt und uP programmiert. Die Informationen entnehme ich den Datenblättern und Manuals und bei Problemen und Bugs durch Anfragen beim Hersteller der uP.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ARM Embedded

Beitrag von Mathias »

habe mein halbes Leben uP-Schaltungen entwickelt und uP programmiert.

Beruflich oder privat ?

Ich sehe schon, bei den uP kann ich noch einiges lernen, mein erster Arduino habe ich erst vor gut 2 Jahren gekauft.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: ARM Embedded

Beitrag von mse »

Mathias hat geschrieben:Beruflich oder privat ?

Nach wie vor beruflich.

Antworten