Forum: Projekte & Code M32C83 Mitsubishi Microcontroller


von Dietmar (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

hatte mit o.g. Microcontroller Probleme bei der Timerprogrammierung.
Hatte die im Forum Allgemein beschrieben.
Nun Habe ich Fehler gefunden ( M32C83 unterstützt nicht mehr die
Clockdivision durch 32 ,siehe TA0MR Register ) Es funzt mit
TA0MR = 0x40
Hier kompletter Code: ( falls jemand mal sowas braucht )

/*********************************************************************** 
***/
/*********************************************************************** 
***/
/*                                                 */
/*  Name:        timer.c
*/
/*  Part of:                                                 */
/*  Description: Main-modul                           */
/*  Date  :      29.08.2003
  */
/*  Author:
  */
/*  Change:      (Date)      (Author)  (Description)
  */
/*                31.8.2003  Dietmar    test timer function
  */
/*  Evaluation Board mit M30833FJFP
  */
/*********************************************************************** 
***/
#include    <stdio.h>
#define public
#include  "sfr_3083.h"
#undef public

#define public extern
#include   "int_3083.h"
#undef public
#define enableInterrupts() asm( "fset I" )
#define disableInterrupts() asm( "fclr I" )
#define ledan  5       // wert * 10msec
#define ledaus  5       // wert *10msec
#pragma INTERRUPT  timer_a0_interrupt

/********************************************
*   proto-type declaration
********************************************/
void  timer_a0_interrupt();
void  main(void);
void initTimerA0(void);
long t;
int z;
volatile unsigned int timer10msec = 0;

void initTimerA0(void)
{
      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 //

     TA0IC = 0x07;  // ---- XXXX  7 höchster level
                        //      ||||
                        //      |||+-- 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

      TA0 = 0x9276;      // Set up Timer A0 Reload Register for 10msec
interval interrupt
    UDF = 0x00;      // Timer count down
    TABSR = 0x01;          // Timer start flag bit ( 8bit Register; ta0s
= 1 start counting )
}

void timer_a0_interrupt(void)
{
  if(timer10msec != 0) {timer10msec--;}
}
void delay(unsigned short t) // Zweck Zeitverzögerung um time*10msec
{
  timer10msec=t;
  while (timer10msec != 0) {} // Solange noch nicht heruntergezählt ist,
warten
}
/*********************************************************************** 
***
*       Function : main()
*       program section
************************************************************************ 
**/
void main (void)
{
// PMO, PM1, CM0, CM1 and MCD register setting is done in ncrt0.a30

PD5 = 0xFF;         /* Port P5 output    */
  while (1)            // endless while loop start
  {
  P5 = 0xFF;
  disableInterrupts();
  initTimerA0();
  enableInterrupts(); // enable all interrupts

  delay(ledan);
  P5 = 0x00;
  delay(ledaus);
  // your code here
  asm("NOP");
  }
 }
/*********************************** E O F
********************************/

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.