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.