Direkte Programmierung des Arduino Micro

OP #4999173
Lesenswert?

Als 16 Jähriger Blag habe ich auf einem C64 einen Auerswald DLC 4830
inklusive allen Bitmustern aus dem ROM des DLC so gut es ging in 
Assembler
nachgebaut. Die Ansteuerung lief damals über den Userport der über 
Transistoren Solid State Relais ansteuerte.

Heute bin ich 42 und dachte es ist Zeit sich endlich mal mit µC zu 
befassen.
Naiv wie ich bin dachte ich besogst du dir ein Arduino Mikro Board.
Nach der Instalation und dem ersten Wechselblinken von LEDs vermisse ich 
aber doch das direkte programmieren der Hardware.

Nehmen wir an ich habe IO Ports 0-7 als Ausgang definiert und möchte
nun meine Bitmuster aus dem RAM/ROM oder Flashspeicher auslesen und 
direkt in die IO Register der Ports schreiben.

Am C64 habe ich das so relativ simpel lösen können..

LDA $#4000 ; Lädt Akkumulator mit Wert aus RAM Adresse 4000 Hex
STA $#DD00 ; Schreibt Akkumulator in D0-D7 des Userports....

Wie bekomme ich nun dieses C Derivat dazu einen Wert aus dem 
RAM/ROM/Flaschspeicher auszulesen und direkt in die Datenregister zu 
Schreiben.

Kann jemand das vielleicht mittels Beispiel erklären.
#4999189
Lesenswert?

Hi

Wenn Du zuvor schon in Assembler programmiert hast - gibt's hier auch.
Was wo im µC zu finden ist, gibt's im Datenblatt.

C64 - das waren Zeiten (größten Respekt den Leuten, Die Den 
programmieren konnten!!)

... bei mir reichte es nur zum voll-poken des Bildschirm-Speicher - und 
wenn man die Grenzen überschritt, bootete die Kiste einfach neu oder 
fror ein.

Auf dem PC dann unter DOS mit 'debug'
... aber mit ähnlichem 'Erfolg' :)

MfG
OP #4999214
Lesenswert?

Nichts spricht gegen die Verwendung von C, bis auf die Tatsache das ich 
dann wohl einen C Kurs machen muß. 6502 Assembler hatte ich damals ganz 
gut im Griff. Und bei C müste ich von vorne anfangen....

Egal. Der Weg ist das Ziel. Aber ich werde euch bestimmt noch mit 
einigen Fragen nerven müssen :-)

LG Marco
Gast #4999246
Lesenswert?

Marco W. schrieb:
> 6502 Assembler hatte ich damals ganz
> gut im Griff. Und bei C müste ich von vorne anfangen....
6502 hatte ich auf eigener Hardware als Europakarte, Makroassembler und 
sogar einen Hardware-Emulator dazu ... lange ist's her.

Nach vielen Jahren ohne Prozessor habe ich mir Arduino angetan. Die 
C-Syntax und Semikolon / Klammern kosten einige Nerven, im Endeffekt 
komme ich bei kleinen Dingen aber dennoch schneller ans Ziel als früher.
Gast #4999412
Lesenswert?

Der Micro hat doch sicher keinen ATMeg328P drauf, sondern einen 
ATMega32U4

Aber das tut der Sache keinen Abbruch.
C, C++ und Assembler ist leicht möglich mit dem Atmel Studio

Die Arduino IDE möchte C++, kann aber auch, wenn man es geschickt 
anstellt, C und Assembler Dateien kompilieren.
Direkte Register- und Portzugriffe, keine Problem.

Marco W. schrieb:
> Am C64 habe ich das so relativ simpel lösen können..
>
> LDA $#4000 ; Lädt Akkumulator mit Wert aus RAM Adresse 4000 Hex
> STA $#DD00 ; Schreibt Akkumulator in D0-D7 des Userports....
>
> Wie bekomme ich nun dieses C Derivat dazu einen Wert aus dem
> RAM/ROM/Flaschspeicher auszulesen und direkt in die Datenregister zu
> Schreiben.

Arduino:
1
void setzePortdAufOutput()
2
{
3
  const byte data = 0xff; // diese Daten landen im Flash(ROM). 
4
  DDRD = data;    // Register direkt beschreiben, pinMode() vermeiden
5
}
Gast #4999434
Lesenswert?

Du könntest auch eine BluePill ( STM32F103 ) zusammen mit der 
Arduino-Umgebung nutzen und dann auf die Register Bare Metal zugreifen.

Das sieht dann so aus
1
// STM32F103 IO register
2
#define GPIOPort_B_ADDRESS 0x40010C00
3
#define GPIOPort_C_ADDRESS 0x40011000
4
#define BSRR_REGISTER_OFFSET 0x10 // port bit set/reset register
5
#define BRR_REGISTER_OFFSET 0x14 // port bit reset register
6

7
void blink()
8
{
9
  *(volatile uint16_t *) (GPIOPort_C_ADDRESS + BSRR_REGISTER_OFFSET) = 1 << 13; // LEDON: write direct into GPIO memory
10

11
  delay(1000);
12

13
  *(volatile uint16_t *) (GPIOPort_C_ADDRESS + BRR_REGISTER_OFFSET)  = 1 << 13; // LEDOFF
14

15
  delay(1000);
16
}
#4999445
Lesenswert?

Marco W. schrieb:
> Naiv wie ich bin dachte ich besogst du dir ein Arduino Mikro Board.
> Nach der Instalation und dem ersten Wechselblinken von LEDs vermisse ich
> aber doch das direkte programmieren der Hardware.

Also da versteht man die Welt nicht mehr. Du möchtest hardwarenah 
programmieren, aber bügelst dir erst mal das ganze Arduino Zeug drauf 
und dann wird rumgeheult? AVRs bieten jede Möglichkeit in Assembler oder 
in C direkt programmiert zu werden. Ganz wie es beliebt.
Gast #4999449
Lesenswert?

Cyblord -. schrieb:
> Also da versteht man die Welt nicht mehr.

Er muss ja erst mal Orientierung finden. Das wirst du ihm
schon zugestehen können  dürfen  müssen.

Nur mal so als Beispiel:
Er spricht von einem "C Derivat", das wäre ein spezieller Dialekt
von C, er meint aber wohl die IDE oder den Prozessor.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren