Interrupt mit TMS320F2806

Gast #2195984
Lesenswert?

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 #2197331
Lesenswert?

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 #2204050
Lesenswert?

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
}

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