mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik M32 C83 Mitsubishi Microcontroller


Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich teste gerade mein Evaluation Board ( Mitsubishi CPU M30833).
Diese wird extern mit 30Mhz betrieben.
Um eine Led am Port p5 zum Blinken zu bringen habe ich eine
Timerfunktion benutzt. Leider funktioniert es noch nicht so richtig.
Die LED brennt ständig. Ich vermute, daß die Timerfunktion nicht
funzt.
Könnt Ihr mir einen Tip geben , woran es liegen könnte.

Gruß

Dietmar








/*  Evaluation Board mit M30833FJFP
                   */
/*********************************************************************** 
***/

#include    <stdio.h>
/*********************************************************************** 
***
*   Special Function Registers
************************************************************************ 
**/
#pragma ADDRESS p5  3e9H  /* Port P0 register */
#pragma ADDRESS pd5  3ebH  /* Port P0 direction register */
#pragma ADDRESS tabsr  340H  /* Count start flag */
#pragma ADDRESS udf  344H  /* Up-down flag */
#pragma ADDRESS ta0  346H  /* Timer A0 register */
#pragma ADDRESS ta0mr  356H  /* Timer A0 mode register */
#pragma ADDRESS ta0ic  6cH  /* Timer A0 interrupt control register */
unsigned char        p5, pd5;
unsigned char        tabsr, udf, ta0mr, ta0ic;
unsigned int         ta0;

/********************************************
*   proto-type declaration
********************************************/
void  ta0int();
#pragma INTERRUPT  ta0int
void  main(void);
void   indicate(void);

/*********************************************************************** 
***
*       Function : main()
*       program section
************************************************************************ 
**/

void main()
{
        p5 = 0xFF;
        pd5 = 0xff;

        udf = 0x01;      // Timer increment

        ta0mr = 0x00;    // 0000 0000  also durch 1
              // XX0X XX00
                            // |||| |||+- must always be 0 in timer
mode
                            // |||| ||+-- must always be 0 in timer
mode
                            // |||| |+--- 0: pulse is not output at pin
TA0out
                            // |||| |     1: pulse is output at pin
TA0out
                            // |||| |        TA0out is automatically
output
                            // |||| +---- 0: gate function: timer
counts only
                            // ||||          when TA0in is held "L"
                            // ||||       1: gate function: timer
counts only
                            // ||||          when TA0in is held "H"
                            // |||+------ 0: gate function not
available
                            // |||        1: gate function available
                            // ||+------- must always be 0 in timer
mode
                            // |+-------- count source select bits:
                            // +--------- count source select bits:
                            //            00:  f1
                            //            01:  f8
                            //            10:  f32
                            //            11:  fc32

        ta0 = 0xffff;    // Set up Timer A0 Reload Register

        ta0ic = 0x07;    // ---- XXXX hier interruptlevel 7
                            //      ||||
                            //      |||+-- Interupt priority level
select bit
                            //      ||+--- Interupt priority level
select bit
                            //      |+---- Interupt priority level
select bit
                            //      |      000: Level 0 (interrupt
disabled)
                            //      |      001: Level 1
                            //      |      010: Level 2
                            //      |      011: Level 3
                            //      |      100: Level 4
                            //      |      101: Level 5
                            //      |      110: Level 6
                            //      |      111: Level 7
                            //      +----- Interupt request bit
                            //             0: Interrupt not requested
                            //             1: Interrupt requested

        tabsr = 0x01;    // Timer start flag bit

  asm( "\tFSET  I");


        while(1);
}

/*********************************************************************** 
***
*       Function : ta0int()
*       program section
************************************************************************ 
**/

void ta0int()
{
        p5 ^= 0x00;
    //p5 = 0x00;
        indicate();
}

/*********************************************************************** 
***
*       Function : indicate()
*       program section
************************************************************************ 
**/

void indicate()
{
  return;
}

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wir sind nicht taub !!!


Peter

Autor: xxxx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Halloo
warum taub???

Autor: edi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,



     wir haben keinen hunger??





random message!
ed

Autor: MooseC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was soll denn da blinken?

        p5 ^= 0x00;

mit 0x00 xor'n ändert doch nichts.

Eine 1 zum Bitkippen muß da schon drin sein.


MooseC

Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für Hinweis.
Hab Fehler jetzt selber gefunden ( nach langem Grübeln ).
Und zwar liegt das Problem in der Initialisierung der Timervariablen.
Der M32C83 hat nicht mehr die f32 Clocksource. D.h mit einem
Teilungsfaktor von 8 und entsprechender Änderung des TA0 Registers
funktioniert es.

Hier ein kleiner Ausschnitt. Werde kompletten Code ins Forum
Codesammlung stellen.

Gruß Dietmar


TA0MR = 0x40;         // 0100 0000  also durch 8
          // XX0X XX00
                      // |||| |||+- must always be 0 in timer mode
                      // |||| ||+-- must always be 0 in timer mode
                      // |||| |+--- 0: pulse is not output at pin
TA0out
                      // |||| |     1: pulse is output at pin TA0out
                      // |||| |        TA0out is automatically  output
                      // |||| +---- 0: gate function: timer counts only

                      // ||||          when TA0in is held "L"
                      // ||||       1: gate function: timer counts
only
                      // ||||          when TA0in is held "H"
                      // |||+------ 0: gate function not available
                      // |||        1: gate function available
                      // ||+------- must always be 0 in timer mode
                      // |+-------- count source select bits:
                      // +--------- count source select bits:
                      //            00:  f1
                      //            01:  f8
                      //            10:  f32  // funktioniert bei M32
nicht mehr
            //            11:  fc32 //

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.