hallo zusammen, ich besitze seit kurzem ein ZigBee Demo mit einem M16C. Ich bin ziemlicher Anfänger. Habe mir den Sample code, z.b einen Event-Timer, für Led blinken, angeschaut und auf das Board geladen. So funktioniert er, aber wenn ich ein neues Projekt erstelle und den gleichen Timer aus dem Sample-Code verwende funktioniert das nicht. weiß nicht warum, die c, h, a30 und inc Dateien sind gleich. Weiß jemand woran es liegen könnte. ich häng den code mal mit ran #include "skp_bsp.h" #define TMR_CONFIG 0x01 #define CNTR_IPL 0x03 int count; void mcu_init(void); void timer_init(void); #pragma INTERRUPT ta2_irq void ta2_irq(void); /****************************************/ void main (void) { mcu_init(); ENABLE_LEDS; count = 0; YLW_DDR = 1; timer_init(); while (1); } /*************************************/ void timer_init() { ta2 = 100; ta2mr = TMR_CONFIG; trgsr = 0x0c; ta3mr = 0x84; ta3 = (int)(((f1_CLK_SPEED/32)*5e-3)-1); DISABLE_IRQ; ta2ic |= CNTR_IPL; ENABLE_IRQ; ta2s = 1; ta3s = 1; } /***************************************/ void ta2_irq(void) { int delaycntr; delaycntr = 0; count++; YLW_LED = LED_ON; while(delaycntr <0xffff) delaycntr++; YLW_LED = LED_OFF; } Vielen Dank
Hallo, es ist schon etwas länger her, dass ich mich mit der HEW beschäftigt habe, aber soweit ich mich erinnere musste ich die Interrupts zuvor in einer Systemdatei *.inc erst anwählen (freischalten) . Daher mein Tip, suche mal nach "INTERRUPT" bzw. "VECTOR" in den Dateien des funktionierenden Beispiels. Wenn Du den E8 als Emulator/Debugger einsetzen solltest, so gibt es hier auch eine Voreinstellung zu beachten (Vergabe eines bestimmten RAM-Bereiches!!!) Evtl. habe ich heute abend bzw. morgen die Möglichkeit in meinen "alten" Projekten mal nachzuschauen.
Hast du in der sect30.inc die Vectoren gesetzt? Beispiel-Ausschnit:
1 | .glb _vs_dma_isr |
2 | .glb _timer_isr |
3 | .glb _pwm_isr |
4 | |
5 | .lword dummy_int ; 25 - timer A4 |
6 | .lword _timer_isr ; 26 - timer B0 |
7 | .lword _pwm_isr ; 27 - timer B1 |
Und das globale freigeben der Interupts
1 | asm("fset i"); // Interrupt freigeben, I-Flag setzen |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.