/** | |
* sci.c controls SCI for GCC/HCS12 version of FreeRTOS Demo | |
* Parts taken from the CodeWarrior Demo in order to work similar. | |
* | |
* Author Jefferson L Smith, Robotronics Inc. | |
*/ | |
#include "sci.h" | |
#include <sys/ports.h> | |
//static word SerFlag; /* Flags for serial communication */ | |
/* Bits: 0 - OverRun error */ | |
/* 1 - Framing error */ | |
/* 2 - Parity error */ | |
/* 3 - Char in RX buffer */ | |
/* 4 - Full TX buffer */ | |
/* 5 - Running int from TX */ | |
/* 6 - Full RX buffer */ | |
/* 7 - Noise error */ | |
/* 8 - Idle character */ | |
/* 9 - Break detected */ | |
/* 10 - Unused */ | |
static word PrescaleValue; | |
//static byte NumMode; /* Number of selected baud mode */ | |
/** | |
* SCI_SetBaudRateMode | |
* | |
* Changes the speed (baud rate). | |
*/ | |
byte SCI_SetBaudRateMode(byte Mod) | |
{ | |
// wired for 24 MHz bus --jeffs | |
static const word SCI_Presc[4] = {39,78,156,313}; | |
if(Mod >= 4) /* Is mode in baud mode list */ | |
return ERR_VALUE; /* If no then error */ | |
//NumMode = Mod; /* New baud mode */ | |
PrescaleValue = SCI_Presc[Mod]; /* Prescaler in high speed mode */ | |
/* SCI0CR1: LOOPS=0,SCISWAI=0,RSRC=0,M=0,WAKE=0,ILT=0,PE=0,PT=0 */ | |
SCICR1 = 0x00; /* Set the SCI configuration */ | |
/* SCI0SR2: ??=0,??=0,??=0,??=0,??=0,BRK13=0,TXDIR=0,RAF=0 */ | |
SCISR2 = 0x00; /* Set the Break Character Length and Transmitter pin data direction in Single-wire mode */ | |
SCISR1; /* Reset interrupt request flags */ | |
SCIBD = PrescaleValue; /* Set prescaler bits */ | |
/* SCI0CR2: SCTIE=0,TCIE=0,RIE=1,ILIE=0,TE=1,RE=1,RWU=0,SBK=0 */ | |
SCICR2 = 0x2c; /* Disable error interrupts */ | |
return ERR_OK; /* OK */ | |
} | |
#if 0 //(not used) | |
/** | |
* SCI_Init (bean AsynchroSerial) | |
* | |
* This enables SCI. | |
*/ | |
void SCI_Init(void) | |
{ | |
PrescaleValue = 39; /* Precaler in high speed mode */ | |
/* SCI0CR1: LOOPS=0,SCISWAI=0,RSRC=0,M=0,WAKE=0,ILT=0,PE=0,PT=0 */ | |
SCICR1 = 0x00; /* Set the SCI configuration */ | |
/* SCI0SR2: ??=0,??=0,??=0,??=0,??=0,BRK13=0,TXDIR=0,RAF=0 */ | |
SCISR2 = 0x00; /* Set the Break Character Length and Transmitter pin data direction in Single-wire mode */ | |
SCISR1; /* Reset interrupt request flags */ | |
SCIBD = PrescaleValue; /* Set prescaler bits */ | |
/* SCI0CR2: SCTIE=0,TCIE=0,RIE=1,ILIE=0,TE=1,RE=1,RWU=0,SBK=0 */ | |
SCICR2 = 0x2c; /* Disable error interrupts */ | |
} | |
#endif | |