Forum: Mikrocontroller und Digitale Elektronik ARM7 TMS470 Board (Keil) Problem


von Michael T. (_mike_)


Lesenswert?

Habe wieder mal ein Problem mit meinem TMS470 Board.
Benötige einen ganz simplen Timer Interrupt.
Komme aber mit dem HET einfach nicht zurande. Der ist zwar unglaublich 
mächtig, nur für mich einfach zu komplex.

Würde mich freuen, wenn wer eine simple Lösung für einen einfachen Timer 
Interrupt zur Hand hätte.
Das IAR Beispiel (tms470r1b1m_HET_INT_02) welches genau diese 
Funktionalität offeriert, bekomm ich nicht zum Laufen unter Keil mit 
meinem RV Compiler.

lg mike

von Ralph (Gast)


Lesenswert?

Hallo

Poste mal das komplette IAR Beispiel, am besten als zip, oder den 
Downloadlink.

Im HET musst du für einen Timer nur einen einzelnen CNT Befehl mit 
Interuptfähigkeit einrichten. Über den DATA Wert gibts du in 
Abhängigkeit von der HET LoopTime die Zeit für den Interupt ein.


Alle weiteren Dinge geschehen auf dem ARM7 Core und nicht im HET.

gruß
Ralph

von Michael T. (_mike_)


Angehängte Dateien:

Lesenswert?

Bei mir scheiterts bei diesem Beispiel an der Umsetzung.
Im konkreten Fall haperts daran, dass ich nicht nicht weiß wie ich 
diesen einen Befehl richtig ins HET RAM kopiere.

Ich finde dieses Beispiel nicht sehr übersichtlich gestaltet, es 
verwirrt mich eher als dass es mir hilft.

Danke vorerest für deine rasche Antwort.

lg mike

von Ralph (Gast)


Lesenswert?

Übersichtlichkeit ist wirklich was anderes.


das HET Programm steht in der Struktur :

const HET_INIT0_PST[3]
jeder Befehl im HET besteht aus 4 * U32
welcher Befehl in welcher 4 er Gruppe steht, siehst du in der Datei 
tms470r1b1m_HET_INT_02_H.het

Um den Hetcode in der struct HET_INIT0_PST zu erzeugen gibt es von TI 
einen speziellen Compiler, es geht aber auch gut mit der Hand( ist nur 
eine Sauarbeit).

mit der Zeile
  MemCopy32((void *)&e_HETPROGRAM0_UN, (void *)HET_INIT0_PST,
            sizeof(HET_INIT0_PST));

wird der Hetcode aus der Struct in den Het Memory copiert, der HET 
Memory liegt bei 0x00800000


hier wird die Looptime und die Highresolution des Het eingestellt. Die 
Abhängigkeit von Systemtakt ist leider nicht sichtbar, aber vorhanden.
HETPFR  = 0x00000309;                   // Set LR Div = 8, HR Div = 10

und das hier schaltet den HET ein
  HETGCR |= ON;                           // Start HET


Mit diesen Einstellungen in den Files sollte der HET laufen. Überprüfen 
kannst du das mit einem Jtag, indem du ab Adresse 0x800000 den Memory 
ansieht.
Du wirst in den ersten 4 U32 ab dieser Adresse den ansteigenden Counter 
sehen.

Allerdings wirst du keinen Interrupt vom HET bekommen, da dieser nicht 
aktiviert ist.

Um den Interupt zu aktivieren musst du :

1. im Hetcode des ersten Befehls das IRQ bit setzen
   /* L00_0 */
  {
    0x00001600,
    0x00001CCB,
    0x00000000,
    0x00000000

2. Im Arm Core die Interuptquelle HET aktivieren

3. eine IRQ Routine schreiben, die im HET abfragt welcher HET Befehl den 
IRQ ausgelöst hat.


Der HET hat bis zu 128 Befehle und kann dazu bis zu 32 unterschiedliche 
IRQ erzeugen.


Gruß
Ralph

von Michi (Gast)


Lesenswert?

danke für die extrem ausführliche und kompetente antwort!

hat mir sehr weitergeholfen!
werd mich jetzt dahinterklemmen und die infos verarbeiten!

thanx und gute nacht

lg mike

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.