|
(c) 2011 Silenergo ltd |
Freescale ColdeFire V2 family microprocessor MCF52259Communication Features for M52259DEMOKITCodeWarrior development studio, version 7.2, special edition, code and data size restricted to 128KB |
|
|
|
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 - Asynchronous Serial Port |
|
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 protocolvoid 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 portCalled 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
|