Interrupt mit TMS320F2806

Gast #2195984
Hallo zusammen,

ich wollte die Interrupts aktivieren. Habe den Beispielcode von TI 
benutzt.
http://blog.21ic.com/uploadfile-/2008-1/51217.78775422.pdf

habe einfach den C-Code für TMS320C25 übernommen, benutze Code Composer 
Studio mit C2000 Mikrocontroller Familie für die Programmierung.
Ich bekomme einen Fehler in der Funktion "void initInts(void)" in der 
Zeile
1
globalEnableInt();

und zwar, "Expected an asm string, unrecognized token"

Habe mich außerdem bei der Definition gewundert, dass ich im C-Code auf 
einmal Teile des Assmebler Codes benutze,
1
#define globalEnableInt() asm(”\t EINT”);

muss ich hier was beachten??

Wäre für nen Tipp dankbar.
Gast
Hallo,

danke euch für die Tipps. Muss zugeben, dass ich nicht so viel Erfahrung 
mit embedded Programmierung habe. Hatte bisher nur ein bisschen mit 
ATmega uC gearbeitet, der von TI ist aber ein ganz anderes Kaliber.

Ich werd mir erstmal die Beispiele reinziehen.

Grüß
Gast
Hallo nochmals, hab immer noch n paar Schwierigkeiten mit dem Interrupt,

habe folgenden Code für die Initialisierung, größtenteils von der TI 
homepage,
1
void DeviceInit(void)
2
{
3
  WDogDisable();   // Disable the watchdog initially
4
  DINT;      // Global Disable all Interrupts
5
  IER = 0x0000;  // Disable CPU interrupts
6
  IFR = 0x0000;  // Clear all CPU interrupt flags
7

8
// SYSTEM CLOCK speed based on Crystal = 20 MHz
9
// 0xA =  100  MHz    (10)
10
// 0x9 =  90  MHz    (9)
11
// 0x8 =  80  MHz    (8)
12
// 0x7 =  70  MHz    (7)
13
// 0x6 =  60  MHz    (6)
14
// 0x5 =  50  MHz    (5)
15
// 0x4 =  40  MHz    (4)
16
// 0x3 =  30  MHz    (3)
17
// 0x2 =  20  MHz    (2)
18

19
  PLLset(0xA);  // choose from options above
20

21
// Initialise interrupt controller and Vector Table
22
// to defaults for now. Application ISR mapping done later.
23
  PieCntlInit();    
24
  PieVectTableInit();
25

26
   EALLOW; // below registers are "protected", allow access.
27

28
// HIGH / LOW SPEED CLOCKS prescale register settings
29
   SysCtrlRegs.HISPCP.all = 0x0002;    // Sysclk / 4 (25 MHz)
30
   SysCtrlRegs.LOSPCP.all = 0x0002;    // Sysclk / 4 (25 MHz)
31
   SysCtrlRegs.XCLK.bit.XCLKOUTDIV=2;
32
.
33
.
34
.
35
}

Vektor initialisierung,
1
// This function initializes the PIE control registers to a known state.
2
//
3
void PieCntlInit(void)
4
{
5
    // Disable Interrupts at the CPU level:
6
    DINT;
7

8
    // Disable the PIE
9
    PieCtrlRegs.PIECTRL.bit.ENPIE = 0;
10

11
  // Clear all PIEIER registers:
12
  PieCtrlRegs.PIEIER1.all = 0;
13
  PieCtrlRegs.PIEIER2.all = 0;
14
  PieCtrlRegs.PIEIER3.all = 0;  
15
  PieCtrlRegs.PIEIER4.all = 0;
16
  PieCtrlRegs.PIEIER5.all = 0;
17
  PieCtrlRegs.PIEIER6.all = 0;
18
  PieCtrlRegs.PIEIER7.all = 0;
19
  PieCtrlRegs.PIEIER8.all = 0;
20
  PieCtrlRegs.PIEIER9.all = 0;
21
  PieCtrlRegs.PIEIER10.all = 0;
22
  PieCtrlRegs.PIEIER11.all = 0;
23
  PieCtrlRegs.PIEIER12.all = 0;
24

25
  // Clear all PIEIFR registers:
26
  PieCtrlRegs.PIEIFR1.all = 0;
27
  PieCtrlRegs.PIEIFR2.all = 0;
28
  PieCtrlRegs.PIEIFR3.all = 0;  
29
  PieCtrlRegs.PIEIFR4.all = 0;
30
  PieCtrlRegs.PIEIFR5.all = 0;
31
  PieCtrlRegs.PIEIFR6.all = 0;
32
  PieCtrlRegs.PIEIFR7.all = 0;
33
  PieCtrlRegs.PIEIFR8.all = 0;
34
  PieCtrlRegs.PIEIFR9.all = 0;
35
  PieCtrlRegs.PIEIFR10.all = 0;
36
  PieCtrlRegs.PIEIFR11.all = 0;
37
  PieCtrlRegs.PIEIFR12.all = 0;
38
}  
39

40

41
void PieVectTableInit(void)
42
{
43
  int16  i;
44
  Uint32 *Source = (void *) &ISR_ILLEGAL;
45
  Uint32 *Dest = (void *) &PieVectTable;
46
    
47
  EALLOW;  
48
  for(i=0; i < 128; i++)
49
    *Dest++ = *Source;  
50
  EDIS;
51

52
  // Enable the PIE Vector Table
53
  PieCtrlRegs.PIECTRL.bit.ENPIE = 1;  
54
}

theoretisch wenn ich nun die Interrupt Funktion aufrufe, sollte das 
funktionieren, habe einiges rumprobiert, laufe aber momentan gegen die 
Wand,
1
interrupt void INT1_ISR(void)     // INT13 or CPU-Timer1
2
{
3
  
4
int_cntr_1++;//Zähler hochzählen
5

6
GpioDataRegs.GPASET.bit.GPIO15 = 1;//LED an
7

8
}
Außerdem fehlt in der ISR:
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;

Hast du dir die Beispiele (siehe meinen Link oben) angesehen?
Dort gibt es doch die Beispielprogramme. Da ist z.B. ein Beispiel 
CPU-Timer dabei. Da ist doch alles wunderbar erklärt!?


Viele Grüße
Gast
Hallo, den Timer habe ich auch schon ausprobiert. Bin irgendwie zu blöd 
dafür, ich weiss nicht. Werde morgen versuchen das ganze nochmals zu 
implementieren.

Adios!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.