Forum: Mikrocontroller und Digitale Elektronik Fujitsu 8 Bit Microcontroller MB95120 - Compound Timer PWM Interrupt Problem


von Oli (Gast)


Lesenswert?

Hallo nutze einen Fujitsu 8 Bit Microcontroller genau den MB95120.
Hoffentlich kennt sich mit dieser Sonderlocke jemand aus.

Habe ein Problem mit der Interrupt Erzeugung eines Compound Timers im 
varialen PWM Modus.

Frage Low und High Puls durch Timerüberlaufinterrupt ab.
Leider bekomme ich nur einen einzigen Interrupt des Low Pulses und das 
wars dann, es kommt kein weiterer Interrupt.
Irgend jemand eine Idee woran das liegen könnte.
Oder ein Forum für Fujitsu Microcontroller.

Nachfolgend ein Auszug aus dem Sourcecode:
=========================================
void init_Compound_PWM_Timer1()
{
  T01CR1_STA = 0;    //Timer gestoppt (bei Start beginnt mit 0)
  T00CR1_STA = 0;    //Timer gestoppt (bei Start beginnt mit 0)

  T00CR1_IF = 0;    //Overflow Bit - Kein Effekt
  T00CR1_IE = 1;    //Interrupt Request - Ein
  T00CR1_HO = 0;    //Timer in run Mode  (bei Start beginnt mit letzem 
Wert im Register)

  T01CR1_IF = 0;    //Overflow Bit - Kein Effekt
  T01CR1_IE = 1;    //Interrupt Request - Ein
  T01CR1_HO = 0;    //Timer in run Mode  (bei Start beginnt mit letzem 
Wert im Register)

  T00CR0_F0  = 0;  //Modus Bit 0 - Variabler Zyklus
  T00CR0_F1  = 0;  //Modus Bit 1 - Variabler Zyklus
  T00CR0_F2  = 1;  //Modus Bit 2 - Variabler Zyklus
  T00CR0_F3  = 0;  //Modus Bit 3 - Variabler Zyklus
  T00CR0_C0  = 0;  //Clock Signal Bit 0 - mit 16 MHz
  T00CR0_C1  = 0;  //Clock Signal Bit 1 - mit 16 MHz
  T00CR0_C2  = 0;  //Clock Signal Bit 2 - mit 16 MHz
  T00CR0_IFE  = 1;  //Interrupt - an

  T01CR0_F0  = 0;  //Modus Bit 0 - Variabler Zyklus
  T01CR0_F1  = 0;  //Modus Bit 1 - Variabler Zyklus
  T01CR0_F2  = 1;  //Modus Bit 2 - Variabler Zyklus
  T01CR0_F3  = 0;  //Modus Bit 3 - Variabler Zyklus
  T01CR0_C0  = 0;  //Clock Signal Bit 0 - mit 16 MHz
  T01CR0_C1  = 0;  //Clock Signal Bit 1 - mit 16 MHz
  T01CR0_C2  = 0;  //Clock Signal Bit 2 - mit 16 MHz
  T01CR0_IFE  = 1;  //Interrupt - an

  TMCR0_FE00  = 1;  //Filter Bit 0 - H/L Einschwingen Filtern
  TMCR0_FE01  = 1;  //Filter Bit 1 - H/L Einschwingen Filtern
  TMCR0_FE10  = 1;  //Filter Bit 0 - H/L Einschwingen Filtern
  TMCR0_FE11  = 1;  //Filter Bit 1 - H/L Einschwingen Filtern
  TMCR0_T01  = 1;  //Timer Output Bit Channel 0 - Erster Teil
  TMCR0_T00  = 1;  //Timer Output Bit Channel 0 - Zweiter Teil
}

void start_Timer1()
{
  T00CR1_STA = 0;    //Timer gestoppt (bei Start beginnt mit 0)
  T01CR1_STA = 0;    //Timer gestoppt (bei Start beginnt mit 0)
  T00DR  = 0x40;   //Länge Low Puls
  T01DR  = 0x80;   //Periode des Signals
  T00CR1_STA = 1;    //Timer starten (bei Start beginnt mit 0)
  T01CR1_STA = 1;    //Timer starten (bei Start beginnt mit 0)
}


void main(void)
{
  //Interupts An
  WICR = 0XFF;
  __set_il(31);     // set global interrupt mask to allow all IRQ levels
  __DI();
  __wait_nop;
  __EI();          // global interrupt enable
  InitIrqLevels(); // initialise Interrupt level register and IRQ vector 
table

  init_Compound_PWM_Timer1();
         start_Timer1();
}
  __interrupt void PWM1_1_IRQHandler (void)
  {
    PDR4_P41 = ~PDR4_P41;
    T00CR1_IF = 0;
  }

  __interrupt void PWM1_2_IRQHandler (void)
  {
    PDR4_P43 = ~PDR4_P43 ;
    T01CR1_IF = 0;
  }

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
Noch kein Account? Hier anmelden.