Hallo,
kann mir jemand ein Tutorial empfehlen. Ich möchte mich näher mit den
SAM-Controllern beschäftigen und habe mir erstmal den SAMD10 ausgesucht.
Leider scheitere ich bereits am Datenblatt. Ich möchte es vorerst ohne
ASF versuchen. Irgendwie will es nicht in meinen Kopf, wie das mit den
"Multiplexed Signals" funktioniert. Habe schon ein Knoten im Kopf. Mir
fehlt der Einstiegspunkt.
Das wäre genau was ich meine. Ohne ASF. Aber wie findet man die ganzen
Parameter für die Einstellung des SAM? Das ist schon, wie ich finde,
sehr komplex. Das Datenblatt gibt mir hier keinen mir einleuchtenden Weg
vor. Vielleicht sehe ich ihn nur nicht. So ein "Fahrplan" wäre schon
toll.
BlaBla schrieb:> Aber wie findet man die ganzen Parameter für die Einstellung des SAM?
Die Tabelle "PORT Function Multiplexing" nennt dir dir
Alternativbelegung des jeweiligen Portpins. In meinem Fall steht das
Gewünschte im Kommentar über dem Codeblock: "PB16 = TC6/WO[0], function
E". (Timer/Counter 6, Waveform output 0)
Vielleicht beschreibst du ja mal eine Funktionalität, die du suchen
würdest, und ich finde dir dann, wie man diese konfigurieren würde.
Oder meinst du all die anderen Namen wie
TC_CTRLA_WAVEGEN(TC_CTRLA_WAVEGEN_NPWM_Val) etc.? Dafür habe ich im
Editor typischerweise das Headerfile in einem Fenster geöffnet.
Fabian F. schrieb:> Warum ohne AFS?
AFS sagt mir jetzt nichts. Ich möchte vorerst ohne das Framework (ASF
oder Start) arbeiten. Ich halte den Lerneffekt für größer. Jetzt drucke
ich mir erst einmal einige, wie ich hoffe, für mich relevante Seiten
aus.
Jörg W. schrieb:> Vielleicht beschreibst du ja mal eine Funktionalität, die du suchen> würdest, und ich finde dir dann, wie man diese konfigurieren würde.
Werde ich machen...Danke!
Fabian F. schrieb:> Jörg W. schrieb:>> Fabian F. schrieb:>>> Warum ohne AFS?>>>> Several layers of obfuscation and additional delays …>> Compileroptimierung kürzt das raus.
Nein. Du hast dir das Zeug vermutlich noch nicht angesehen.
Wenn man zum Setzen eines Bits erstmal eine Struktur ausfüllen muss,
damit dann anschließend alles in einem Subsystem entsprechend
eingestellt wird, dann kürzt das eben keine Optimierung mehr raus.
Schließlich sind die IO-Register volatile, da darf der Compiler gar
nichts dran ändern.
ASF (und auch vergleichbare Obfuscation layers anderer Hersteller) sind
eher ein Beispiel, wie man solch eine Abstraktion besser nicht machen
sollte.
Habe mir das angesehen und (für den dienstlichen Gebrauch) dankend drauf
verzichtet. Da zimmere ich mir meinen Salat lieber selbst, dann blicke
ich erstens noch durch und muss mich zweitens nur dann ausbremsen
lassen, wenn es wirklich nicht anders geht.
Ich benutze ASF lediglich als Referenz, wenn ich mal nachschauen will,
wie das Problem, welches ich gerade lösen möchte, denn bei Atmicrochip
umgesetzt worden wäre.
Hier: https://github.com/ataradov/mcu-starter-projects
Gibt es einige schöne Repos, die man als Ausgangspunkt für eigene
Hackereien um die SAMs nutzen kann, ohne ASF, allerdings mit korrekt
eingebunden Headern für Registerdefinitionen etc.
Hallo martin,
Das ist ein tolles Repo! Das gibt mir gleich Lust mit meinem
selbstgemachten SAME70 Board loszulegen.
Momentan wollte ich darauf warten, dass Microchip endlich den ASF
Sourcecode in Harmony anbietet. Aber insgeheim hasse ich eh diesen
ganzen Frameworkmist. Ein bisschen Abstraktion ist ja gut auf
Mikrocontrollerebene, aber bei Harmony hast du überhaupt keine Idee
mehr, was überhaupt noch vorgeht.
Die frühere Peripheral Library von Microchip fand ich eigentlich perfekt
für meinen Gebrauch: für jedes Modul (UART, SPI, ...) gab es einen
Header und ein Sourcefile und die Funktionen/Argumente waren gut
beschrieben (bzw selbsterklärend ihrer Namen wegen) und machten auch
nichts weiter als die Register zu beschreiben.
Gibt es irgendwo in ASF ein äquivalent zu der Peripheral Library? Ich
kenne mich mit ASF nicht so gut aus, aber alleine die Ordnerstruktur
kommt mir extrem groß vor.
mfG macload1
Okay,
Ich habe mir das Repo nochmal angeschaut, und eigentlich ist alles drin
was soll. Beim ersten Blick fehlten mir die Funktionen wie "OpenSPI" ...
aber wie schon oben gesagt, die beschrieben ja eh nur die verschiedenen
Register und beim zweiten hinschauen sind diese Register auch relativ
gut beschrieben in dem Repo.
Vielen Dank für den Link!
macload1
martin schrieb:> Hier: https://github.com/ataradov/mcu-starter-projects
Alexander Taradov, wusste gar nicht, dass er jetzt bei den SAMs gelandet
ist. ;-) Hatte früher Support für unsere AT86RFxxx-Chips gemacht, auf
jeden Fall ein helles Köpfchen. Bei avrfreaks.net heißt er "alexru".
Ich habe gerade einen ATSAMD10-XMINI angeschlossen und das
Beispielprogramm "DEMO" aus dem Ordner
"ATSAMD10\mcu-starter-projects-master\mcu-starter-projects-master\samd10
" von Alexander Taradov gestartet. Läuft bestens!! Hierauf kann ich
aufbauen. Spitze!
C-Grundlagen … line continuation
Braucht man in normalen Quelltexten natürlich nicht, weil dort die
Zeilenaufteilung egal ist. Eine Makrodefinition muss sich allerdings
komplett auf einer (logischen) Zeile befinden. Wenn man sie auf mehrere
physische Zeilen aufteilen möchte, muss man die innerhalb des Makros
befindlichen Newlines durch einen Backslash unwirksam machen.
Beim Analysieren der Datei hal_gpio.h (SAMD10) ist mir eine Zeile
aufgefallen, die ich an dieser Stelle nicht erwartet hätte. Das Makro
sollte doch nur den Pin auf Output schalten. Warum wird der INEN für den
Pin gesetzt?
Vielleicht willst du ja trotzdem den Pin-Zustand auch mal rücklesen
können?
Der wesentliche Grund für PINEN = 0 ist es doch, wenn man an den Pin ein
Analogsignal anschließt, dass die Eingangstransistoren dann nicht
laufend hin und her schalten (und dabei Stom ziehen). Sowie der Portpin
für ein reines Digitalsignal benutzt wird (egal ob Ein- oder Ausgang),
ist es OK, das Einganggatter auch mit dem Pin zu verbinden.
Jörg W. schrieb:> Sowie der Portpin> für ein reines Digitalsignal benutzt wird (egal ob Ein- oder Ausgang),> ist es OK, das Einganggatter auch mit dem Pin zu verbinden.
Verstanden. Steht ja sogar im Datenblatt unter *Totem-Pole Output with
Enabled Input*. Hätte mal nur ein paar Seiten weiterlesen soll 8-).