/** * 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 //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