Datum: 19.03.2008 16:12
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
Datum: 19.03.2008 16:27
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.
Datum: 19.03.2008 18:14
Hast du in der sect30.inc die Vectoren gesetzt? Beispiel-Ausschnit:
.glb _vs_dma_isr .glb _timer_isr .glb _pwm_isr .lword dummy_int ; 25 - timer A4 .lword _timer_isr ; 26 - timer B0 .lword _pwm_isr ; 27 - timer B1 |
Und das globale freigeben der Interupts
asm("fset i"); // Interrupt freigeben, I-Flag setzen |
Datum: 20.03.2008 07:36
Hallo, Hab sie aktiviert, klappt wunderbar. Vielen dank
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel