Hallo Zusammen
Ich habe ein eigenes Board erstellt, auf welchem ich den AT32UC3C064C
32-Bit Controller von Atmel verwende. Nun suche ich einen Beispielcode
fürs Atmel Studio 6, mit welchem ich jeder IO's nur als GPIO verwenden
kann.
Ich kenne mich nur mit den 8bit Controllern von AVR aus und komme mit
den 32bit Controllern überhaupt nicht zu schlag. Mit dem Atmel Framework
und den dazugehörigen Beispielen komme ich auch nicht viel weiter. Zudem
sind auch im Internet sehr wenige (für mich geeignete) Tipps vorhanden.
Vor allem die korrekte Initialisierung (CPU, Clock etc) gibt mir zu
schaffen.
Immerhin wird der uC schon einmal via JTAG am PC erkannt. Für weitere
Details, bzw uC Belegung (quarz, power etc) kann ich gerne Auskunft
geben.
Hat jemand von euch bereits so einen verwendbaren und übersichtlichen
Code oder hilfreiche Tipps? Am liebsten wäre mir ein Projekt dazu.
Ich wäre euch sehr dankbar.
Freundliche Grüsse Manuel
Sers,
ich hatte das Selbe Problem. Deshalb habe ich mein erarbeitet Wissen in
einem Tutorial zusammengefasst :)
http://www.mikrocontroller.net/articles/AVR32-Tutorial
Jedoch habe ich versucht komplett auf das ASF zu verzichten.
Hoffe das hilft dir soweit weiter und sollte dir was einfallen, wie man
es verbessern könne melde dich einfach
Grüße
basti
Nochmals Hallo Basti
Ich habe kurz dein tolles Tutorial angeschaut.
Viele Infos waren mir nützlich, allerdings würde mich gerne
interessieren wie du dein uC initialisiert hast. Welcher Clock-Eingang
(Quarz etc.) hast du verwendet und welche #includes sind notwendig?
Hast du eine Vorlage dazu fürs Atmel Studio 6? Ich scheitere schon an
der Erstellung eines entsprechenden Projekts.
Ich wäre dir sehr dankbar
Gruss Manuel
Manuel Z. schrieb:> (Quarz etc.) hast du verwendet und welche #includes sind notwendig?> Hast du eine Vorlage dazu fürs Atmel Studio 6? Ich scheitere schon an> der Erstellung eines entsprechenden Projekts.>> Ich wäre dir sehr dankbar> Gruss Manuel
Hallo Manuel
Am besten du beginnst zuert mal damit eine LED Blinken zu lassen.
Wenn du es schon nicht fertig bringst, ein eigenes Projekt zu erstellen,
dann wird das mit dem konfigurieren der Clocks nie was!
Ausserdem erwartest du mal wieder von der Community, dass diese dir
alles auf einem Silbertablett serviert! "Vorlage für Studio 6"...
Arbeite dich erst einmal in die Grundlagen der Mikrocontroller ein.
Dazu nimmst du am besten einen Atmega8.
Wenn du diese einmal verstanden hast, dann kannst du dich mal an einen
Atxmega heranwagen.
Und erst dann einen 32Bitter wie den UC3...
Erst krabbeln dann gehen!
Nachtrag zur Register Repräsentation. Ich habe zwar statt des uc3 damals
den ap7000 im Fokus gehabt, aber das sollte nichts ändern. Ich fand
deine Beschreibung der Registerzugriffe etwas zu "handwerklich".
Natürlich kannst du auch anders auf die Register zugreifen. Wenn du die
Adresse weißt (sei es durch eigenes Ausrechnen oder sonstwoher)
Das Beispiel des Timers. Die Basisadresse von z.B. Timer0 steht im (ok
jetzt falschen) ap7001.h: Da kannst du wenn du lustig bist schon mit
auskommen.
Um es leichter zu machen gibt es dann in den Perepherieheadern noch mal
exaktere Strukturen zur Hardware. Für den Timer z.B. in tc_221.h:
1
typedefstructavr32_tc_t{
2
avr32_tc_channel_tchannel[3];//0x0
3
union{
4
unsignedlongbcr;//0x00c0
5
avr32_tc_bcr_tBCR;
6
};
7
union{
8
unsignedlongbmr;//0x00c4
9
avr32_tc_bmr_tBMR;
10
};
11
unsignedint:32;//0x00c8
12
unsignedint:32;//0x00cc
13
unsignedint:32;//0x00d0
14
unsignedint:32;//0x00d4
15
unsignedint:32;//0x00d8
16
unsignedint:32;//0x00dc
17
unsignedint:32;//0x00e0
18
unsignedint:32;//0x00e4
19
unsignedint:32;//0x00e8
20
unsignedint:32;//0x00ec
21
unsignedint:32;//0x00f0
22
unsignedint:32;//0x00f4
23
unsignedint:32;//0x00f8
24
union{
25
constunsignedlongversion;//0x00fc
26
constavr32_tc_version_tVERSION;
27
};
28
}avr32_tc_t;
Da siehst du dann direkt woher die Schreibweise kommt. das halte ich für
besser als das als Kochrezept anzugeben.
Interessant/hilfreich/wichtig finde ich auf jeden Fall hinzuweisen, das
in der Struktur avr32_tc_t ein Register in den Unions einmal groß- und
einmal klein geschrieben auftaucht. Zu merken wäre, dass KLEINES
Register dem 32 register entspricht und das Register in GROSS ein
Bitfeld repräsentiert, wo die bits ausgeschrieben angeschprochen werden
können.
also AVR32_TC0.chanel[1].ccr = 1<<8;
gegen AVR32_TC0.chanel[1].CCR.clken = 1;
Aber echt Daumen hoch fürs anpacken!!! Die avr32 sind wirklich etwas
schlecht präsent für Ein- und Umsteiger. Halte ich für eine sehr gute
Idee die auch im Wiki einzupflegen. Ich werde mit dem Framework von
Atmel allerdings nicht so schrecklich warm (das mag an meiner
Begriffsstutzigkeit liegen oder an der Art der Dokumentation und
Erklärung oder an sonstwas - ist ja auch egal) und daher benutze ich sie
gar nicht mehr.
Die Offsetadressen sind in Headern erfreulicherweise angegeben. Das kann
man direkt mit den Angaben im User Interface vergleichen.
Bei einiger Hardware war die Beschreibung im Datenblatt was Kanäle und
Adressen geht echt mäßig. Der Timer ist sehr gut zum Einstieg.
Holger Krähenbühl schrieb:> Ausserdem erwartest du mal wieder von der Community, dass diese dir> alles auf einem Silbertablett serviert! "Vorlage für Studio 6"...
Hallo Krähe Holger
Ich kenne mich mit den 8bit Controllern von Atmel mittel bis gut aus,
jedoch habe ich nirgends geschrieben das ich eine Lösung ERWARTE.
Schon nur eine LED zu blinken, wie du vorschlägst, wäre mir extrem
nützlich. Aber Atmel muss dafür ja zirka 100 .c & .h sowie diverse
#includes verwenden, die einen Einstieg in die 32Bit Welt extrem
erschweren.
Erst überlegen dann reklamieren!
So und als letztes: doch noch etwas vom uc3 gefunden :-) Ich hatte mir
einmal so ein kleines Breakout Board von Alvidi gekauft. Aus o.g.
Gründen ist das aber verstaubt.
Ich teile schon die Ansichten, dass man nicht alles aus dem Nichts
können wollen kann. Aber ich weiß auch wie beschissen es ist wenn man
hängt und Starthilfe braucht. Der Code benutzt aber das api. Also z.B.
hinter configure_clocks stecjt eine ganze Menge.
Vielleicht kannst du mit dem Testprogramm was anfangen. Ich habe es
nicht mehr durchgesehen. Aber besser als nichts.
gpio_port->gpers=0xffffffff;//periph controller ist chef
73
gpio_port->oders=0xffffffff;//init an
74
gpio_port->ovrs=bla;//output driver
75
76
while(1){
77
//for(i=0; i<CLK_CNT; i++);
78
wait_ms(10);
79
if(hin)
80
{
81
bla=bla<<1;
82
if(bla>=0x800000)
83
hin=0;
84
}
85
else
86
{
87
bla=bla>>1;
88
if(bla<=0x7)
89
hin=1;
90
}
91
gpio_port->ovr=bla;
92
}
93
}
Vielleicht etabliert sich der avr32 ja hier im Forum wie die 8 bitter.
Vielleicht werde ich ja zu Kreuze kriechen und meinen Ausstieg von den
Prozessoeren revidieren :-)
lerner schrieb:> So und als letztes: doch noch etwas vom uc3 gefunden :-) Ich hatte mir> einmal so ein kleines Breakout Board von Alvidi gekauft. Aus o.g.> Gründen ist das aber verstaubt.
Dankeschön! Schaue mir dies an
Gruss Manuel
Ahm,
ich schlage mich auch schon seit Monaten mit den AVR32UC3 rum. Hab hier
ein ein EVK1100-Board von Atmel.
Wenn man das AtmelSoftwareFramework verwendet ist es ein wenig leichter,
weil man in den AppNotes für alles Beispiele findet.
Prinzipiell funktioniert alles wie auf einem 8Bit-µc, es ist nur alles
ein "wenig" komplexer. Man hat seine Register, beschreibt die und wenn
man alles richtig gemacht hat funktioniert es. (Vielleicht)
Hab mal ein Projekt angehängt, welches nur LEDs steuert und Tasten
abfragt. (Ja, die Tastenabfrage ist noch ohne Entprellung.)
@Sebastian:
Tolles Tutorial! Hätte mir ein Haufen Zeit gespart, wenn ich es gekannt
hätte. Vor allem der rot umrahmte Hinweis bei Hardwarefunktionen den
Gper-Pin zu deaktivieren. Ich war am verzweifeln, bis endlich die
SPI-Schnittstelle lief.
Arbeitest du noch weiter an dem Tutorial?
Damit du die Clock erst einmal initialisieren kann must du Verstehen,
wie die Register aufgebaut sind. dann musst du dich mit dem Teils
Schlecht dokumentieren Datenblatt herumschlagen.
hier der Code für den RC Oscillator:
//Rc enable
AVR32_SCIF.unlock = 0x0058 << AVR32_SCIF_UNLOCK_ADDR|
0xAA<<AVR32_SCIF_UNLOCK_KEY;
AVR32_SCIF.rc120mcr = 0xff; //enable 120mhz oszilator
AVR32_PM.unlock = 0xAA << AVR32_PM_UNLOCK_KEY | 0x004 <<
AVR32_PM_UNLOCK_ADDR;
AVR32_PM.cpusel = 1<< AVR32_PM_CPUSEL_CPUDIV | 2<<
AVR32_PM_CPUSEL_CPUSEL; //pba auf ein 6 von mainclock hier ist auch twi
drinnen
AVR32_PM.unlock = 0xAA << AVR32_PM_UNLOCK_KEY | 0x000 <<
AVR32_PM_UNLOCK_ADDR;
AVR32_PM.mcctrl = 3; //clocksurce auf RC-oszilator umstellen
Und uc3a. Also wenn sich der thread um exklusive Hardware der Neueren
dreht, natürlich irgendwie weniger hilfreich... Hoffe ich habe jetzt
nicht noch Verwirrung gestiftet.
Sebastian B. schrieb:> Damit du die Clock erst einmal initialisieren kann must du Verstehen,> wie die Register aufgebaut sind. dann musst du dich mit dem Teils> Schlecht dokumentieren Datenblatt herumschlagen.> hier der Code für den RC Oscillator:
Danke!
Tom74 schrieb:> Hab mal ein Projekt angehängt, welches nur LEDs steuert und Tasten> abfragt. (Ja, die Tastenabfrage ist noch ohne Entprellung.)
Vielen Dank dafür!
Hallo Zusammen
Ich habe es nun tatsächlich unter anderem dank Tom74's Code geschafft
eine LED zum leuchten zu bringen.
Ich danke euch sehr für all eure Tipps & Tricks.
Nun sollte ich selbst zu schlag kommen mit den weiteren Pins (TWI etc.).
Gruss Manuel