(c) 2011 Silenergo ltd

Freescale ColdeFire V2 family microprocessor MCF52259

Communication Features for M52259DEMOKIT


CodeWarrior development studio, version 7.2,
special edition, code and data size restricted to 128KB

MCF52259

M52259DEMO - set right speed.

Insert this code, see images below :
setReg8(OCLR, 0xC0); // Turn on crystal, External crystal oscillator enabled.
// External oscillator running in external crystal mode.
// External oscillator running in normal power mmode.
// Support external crystal of 32kHz.
setReg8(CCLR, 0x00); // Switch to crystal.
setReg8(OCHR, 0x00); // Turn off relaxation oscillator
MCF52259
MCF52259


MCF52259 - Asynchronous Serial Port
Communication


MCF52259

Binary buffer - binary data from measurements,etc...

byte DATAnBUFFER[MAXBUFFER];//ID0 ID1 DLC  D0  D1  D2  D3 ... D7 


  for(;;)

  {

      // Message identifikator

      DATAnBUFFER[0] = 0xEE;//ID0

      DATAnBUFFER[1] = WhatToSERIAL;//ID1

      // Data length = 8, D0,D1, . . . D8

      DATAnBUFFER[2] = 0x08;//DLC

      // Data

      DATAnBUFFER[3] = 0x01;//D0

      DATAnBUFFER[4] = 0x02;

      DATAnBUFFER[5] = 0x03;

      DATAnBUFFER[6] = 0x04;

      DATAnBUFFER[7] = 0x05;

      DATAnBUFFER[8] = 0x06;

      DATAnBUFFER[9] = 0x07;

      DATAnBUFFER[10]= 0x08;//D8

 

      StoreEightBinCharTo16Serial(DATAnBUFFER);

  }


Convert bin.data to ASCII protocol


void StoreEightBinCharTo16Serial(byte *DATAnBUFFER)

{

  char i=0;

  unsigned char *addrBuff = 0,

                  dlc = DATAnBUFFER[2];   

  if( TXnSERIALBUFF[0]==STX )

    return; // neni odeslano cekat

 

  WhatToSERIAL++;

  if(WhatToSERIAL>128) WhatToSERIAL=0;

 

  dlc = dlc * 2;// 2 chars         for one data bin char

  dlc = dlc + 1;// 1 chars         for one STX  bin chars

  dlc = dlc + 4;// 4 chars         for two id   bin chars

  dlc = dlc + 2;// 2 chars         for one dlc  bin chars

  dlc = dlc + 2;// 2 chars         for one SUM  bin chars

  for(i=0;i<dlc;i++)

  {

      switch(i)

      {

          case  0:break;// na TXn...[0]  prijde STX,na konci funkce

          case  1:Heasc( DATAnBUFFER[0]/*ID0*/,&TXnSERIALBUFF[i] );break;

          case  2:break;

          case  3:Heasc( DATAnBUFFER[1]/*ID1*/,&TXnSERIALBUFF[i] );break;

          case  4:break;

          case  5:Heasc( DATAnBUFFER[2]/*DLC*/,&TXnSERIALBUFF[i] );break;

          case  6:break;

          case  7:Heasc( DATAnBUFFER[3]/* D0*/,&TXnSERIALBUFF[i] );break;

          case  8:break;

          case  9:Heasc( DATAnBUFFER[4]/* D1*/,&TXnSERIALBUFF[i] );break;

          case 10:break;

          case 11:Heasc( DATAnBUFFER[5]/* D2*/,&TXnSERIALBUFF[i] );break;

          case 12:break;

          case 13:Heasc( DATAnBUFFER[6]/* D3*/,&TXnSERIALBUFF[i] );break;

          case 14:break;

          case 15:Heasc( DATAnBUFFER[7]/* D4*/,&TXnSERIALBUFF[i] );break;

          case 16:break;

          case 17:Heasc( DATAnBUFFER[8]/* D5*/,&TXnSERIALBUFF[i] );break;

          case 18:break;

          case 19:Heasc( DATAnBUFFER[9]/* D6*/,&TXnSERIALBUFF[i] );break;

          case 20:break;

          case 21:Heasc(DATAnBUFFER[10]/* D7*/,&TXnSERIALBUFF[i] );break;

          case 22:break;

          default:TXnSERIALBUFF[i] = 0x30;break;

      }     

  }

  addrBuff = &TXnSERIALBUFF[dlc - 2];

  CounSum(&TXnSERIALBUFF[0],1,dlc-2,addrBuff);

  TXnSERIALBUFF[dlc] = ETX;dlc++;

  TXnSERIALBUFF[dlc] = 0x0C; //Clear HyperTrem

  if( WhatToSERIAL>0)   

      TXnSERIALBUFF[dlc] = ETY;

 

 

  TXnSERIALBUFF[0] = STX; //STX Povolit odesilani

  IndexTx = 0;// Set Index to first element of Array TXn...

}


Send ASCII pr. to a.serial port

Called from IRQ timer void TI1_OnInterrupt(void)

/*********************************************************/

void SendOneCharFromTxBuffer(void)

{

    if( IndexTx<MAXTxBUFF )

    {     

        if(TXnSERIALBUFF[0]==STX)

        {

            if( SendTxEnabled==1 )// nahodi, set IRQ AS1_OnTxChar   

            {

                SendTxEnabled = 0;

                  AS1_SendChar( TXnSERIALBUFF[IndexTx] );

                  IndexTx++;

                  WatchDogTx = MAXWDTX;               

            }

        }

    }

    else

    {

      TXnSERIALBUFF[0] = NUL;//All sended. Nuluj/reset STX.Enable insert new data / Povolit vkladani novych dat           

    }

}

/*********************************************************/


ASCII protocol in HyperTerminal


*EE0308010203040506070879
* STX- 0x02
EE - ID0 message, hexa 0x45 0x45
03 - ID1 message, hexa 0x30 0x33
08 - DLC lenght data, hexa 0x30 0x38
01 - D0, hexa 0x30 0x31
02 - D1, hexa 0x30 0x32
03 - D2, hexa 0x30 0x33
04 - D3, hexa 0x30 0x34
05 - D4, hexa 0x30 0x35
06 - D5, hexa 0x30 0x36
07 - D6, hexa 0x30 0x37
08 - D7, hexa 0x30 0x38
79 - SUM,hexa 0x37 0x39
ETX- end0
0xc- end1
MCF52259