|
| 1 | +/** ################################################################### |
| 2 | +** THIS BEAN MODULE IS GENERATED BY THE TOOL. DO NOT MODIFY IT. |
| 3 | +** Filename : COM0.C |
| 4 | +** Project : RTOSDemo |
| 5 | +** Processor : MC9S12DP256BCPV |
| 6 | +** Beantype : AsynchroSerial |
| 7 | +** Version : Bean 02.231, Driver 01.08, CPU db: 2.87.283 |
| 8 | +** Compiler : Metrowerks HC12 C Compiler |
| 9 | +** Date/Time : 19/06/2005, 15:07 |
| 10 | +** Abstract : |
| 11 | +** This bean "AsynchroSerial" implements an asynchronous serial |
| 12 | +** communication. The bean supports different settings of |
| 13 | +** parity, word width, stop-bit and communication speed, |
| 14 | +** user can select interrupt or polling handler. |
| 15 | +** Communication speed can be changed also in runtime. |
| 16 | +** The bean requires one on-chip asynchronous serial channel. |
| 17 | +** Settings : |
| 18 | +** Serial channel : SCI0 |
| 19 | +** |
| 20 | +** Protocol |
| 21 | +** Init baud rate : 38400baud |
| 22 | +** Width : 8 bits |
| 23 | +** Stop bits : 1 |
| 24 | +** Parity : none |
| 25 | +** Breaks : Disabled |
| 26 | +** |
| 27 | +** Registers |
| 28 | +** Input buffer : SCI0DRL [207] |
| 29 | +** Output buffer : SCI0DRL [207] |
| 30 | +** Control register : SCI0CR1 [202] |
| 31 | +** Mode register : SCI0CR2 [203] |
| 32 | +** Baud setting reg. : SCI0BD [200] |
| 33 | +** Special register : SCI0SR1 [204] |
| 34 | +** |
| 35 | +** Input interrupt |
| 36 | +** Vector name : INT_SCI0 |
| 37 | +** Priority : 1 |
| 38 | +** |
| 39 | +** Output interrupt |
| 40 | +** Vector name : INT_SCI0 |
| 41 | +** Priority : 1 |
| 42 | +** |
| 43 | +** Used pins : |
| 44 | +** ---------------------------------------------------- |
| 45 | +** Function | On package | Name |
| 46 | +** ---------------------------------------------------- |
| 47 | +** Input | 89 | PS0_RxD0 |
| 48 | +** Output | 90 | PS1_TxD0 |
| 49 | +** ---------------------------------------------------- |
| 50 | +** |
| 51 | +** |
| 52 | +** Used baud modes : |
| 53 | +** ---------------------------------------------------- |
| 54 | +** No. | Mode ID | Baud rate |
| 55 | +** ---------------------------------------------------- |
| 56 | +** 0 | Bm_38400baud | 38400baud |
| 57 | +** 1 | Bm_19200baud | 19200baud |
| 58 | +** 2 | Bm_9600baud | 9600baud |
| 59 | +** 3 | Bm_4800baud | 4800baud |
| 60 | +** ---------------------------------------------------- |
| 61 | +** Contents : |
| 62 | +** SetBaudRateMode - byte COM0_SetBaudRateMode(byte Mod); |
| 63 | +** |
| 64 | +** (c) Copyright UNIS, spol. s r.o. 1997-2002 |
| 65 | +** UNIS, spol. s r.o. |
| 66 | +** Jundrovska 33 |
| 67 | +** 624 00 Brno |
| 68 | +** Czech Republic |
| 69 | +** http : www.processorexpert.com |
| 70 | +** mail : info@processorexpert.com |
| 71 | +** ###################################################################*/ |
| 72 | + |
| 73 | +/* MODULE COM0. */ |
| 74 | + |
| 75 | +#pragma MESSAGE DISABLE C4002 /* WARNING C4002: Result not used is ignored */ |
| 76 | +#pragma MESSAGE DISABLE C4301 /* INFORMATION C4301: Inline expansion done for function call */ |
| 77 | + |
| 78 | +#include "COM0.h" |
| 79 | +#include "TickTimer.h" |
| 80 | +#include "Byte1.h" |
| 81 | + |
| 82 | +/* Definition of DATA and CODE segments for this bean. User can specify where |
| 83 | + these segments will be located on "Build options" tab of the selected CPU bean. */ |
| 84 | +#pragma DATA_SEG COM0_DATA /* Data section for this module. */ |
| 85 | +#pragma CODE_SEG COM0_CODE /* Code section for this module. */ |
| 86 | + |
| 87 | + |
| 88 | +#define OVERRUN_ERR 1 /* Overrun error flag bit */ |
| 89 | +#define FRAMING_ERR 2 /* Framing error flag bit */ |
| 90 | +#define PARITY_ERR 4 /* Parity error flag bit */ |
| 91 | +#define CHAR_IN_RX 8 /* Char is in RX buffer */ |
| 92 | +#define FULL_TX 16 /* Full transmit buffer */ |
| 93 | +#define RUNINT_FROM_TX 32 /* Interrupt is in progress */ |
| 94 | +#define FULL_RX 64 /* Full receive buffer */ |
| 95 | +#define NOISE_ERR 128 /* Noise erorr flag bit */ |
| 96 | +#define IDLE_ERR 256 /* Idle character flag bit */ |
| 97 | +#define BREAK_ERR 512 /* Break detect */ |
| 98 | + |
| 99 | +static word SerFlag; /* Flags for serial communication */ |
| 100 | + /* Bits: 0 - OverRun error */ |
| 101 | + /* 1 - Framing error */ |
| 102 | + /* 2 - Parity error */ |
| 103 | + /* 3 - Char in RX buffer */ |
| 104 | + /* 4 - Full TX buffer */ |
| 105 | + /* 5 - Running int from TX */ |
| 106 | + /* 6 - Full RX buffer */ |
| 107 | + /* 7 - Noise error */ |
| 108 | + /* 8 - Idle character */ |
| 109 | + /* 9 - Break detected */ |
| 110 | + /* 10 - Unused */ |
| 111 | +static word PrescHigh; |
| 112 | +static byte NumMode; /* Number of selected baud mode */ |
| 113 | + |
| 114 | + |
| 115 | +/* |
| 116 | +** =================================================================== |
| 117 | +** Method : HWEnDi (bean AsynchroSerial) |
| 118 | +** |
| 119 | +** Description : |
| 120 | +** This method is internal. It is used by Processor Expert |
| 121 | +** only. |
| 122 | +** =================================================================== |
| 123 | +*/ |
| 124 | +static void HWEnDi(void) |
| 125 | +{ |
| 126 | + SCI0CR2_TE = 1; /* Enable transmitter */ |
| 127 | + SCI0CR2_RE = 1; /* Enable receiver */ |
| 128 | + SCI0CR2_RIE = 1; /* Enable recieve interrupt */ |
| 129 | +} |
| 130 | + |
| 131 | +/* |
| 132 | +** =================================================================== |
| 133 | +** Method : COM0_SetBaudRateMode (bean AsynchroSerial) |
| 134 | +** |
| 135 | +** Description : |
| 136 | +** This method changes the channel communication speed (baud |
| 137 | +** rate). This method can be used only if you specify a list |
| 138 | +** of possible period settings at design time (see <Timing |
| 139 | +** dialog box> - Runtime setting - from a list of values). |
| 140 | +** Each of these settings constitutes a mode and Processor |
| 141 | +** Expert^[TM] assigns them a mode identifier. The prescaler |
| 142 | +** and compare values corresponding to each mode are |
| 143 | +** calculated at design time. You may switch modes at |
| 144 | +** runtime by referring only to a mode identifier. No |
| 145 | +** run-time calculations are performed, all the calculations |
| 146 | +** are performed at design time. |
| 147 | +** Parameters : |
| 148 | +** NAME - DESCRIPTION |
| 149 | +** Mod - Timing mode to set |
| 150 | +** Returns : |
| 151 | +** --- - Error code, possible codes: |
| 152 | +** ERR_OK - OK |
| 153 | +** ERR_SPEED - This device does not work in |
| 154 | +** the active speed mode |
| 155 | +** =================================================================== |
| 156 | +*/ |
| 157 | +byte COM0_SetBaudRateMode(byte Mod) |
| 158 | +{ |
| 159 | + static const word COM0_PrescHigh[4] = {41,81,163,326}; |
| 160 | + |
| 161 | + if(Mod >= 4) /* Is mode in baud mode list */ |
| 162 | + return ERR_VALUE; /* If no then error */ |
| 163 | + NumMode = Mod; /* New baud mode */ |
| 164 | + PrescHigh = COM0_PrescHigh[Mod]; /* Prescaler in high speed mode */ |
| 165 | + SCI0BD = PrescHigh; /* Set prescaler bits */ |
| 166 | + return ERR_OK; /* OK */ |
| 167 | +} |
| 168 | + |
| 169 | +/* |
| 170 | +** =================================================================== |
| 171 | +** Method : COM0_Init (bean AsynchroSerial) |
| 172 | +** |
| 173 | +** Description : |
| 174 | +** This method is internal. It is used by Processor Expert |
| 175 | +** only. |
| 176 | +** =================================================================== |
| 177 | +*/ |
| 178 | +void COM0_Init(void) |
| 179 | +{ |
| 180 | + PrescHigh = 41; /* Precaler in high speed mode */ |
| 181 | + SerFlag = 0; /* Reset flags */ |
| 182 | + NumMode = 0; /* Number of selected baud mode */ |
| 183 | + /* SCI0CR1: LOOPS=0,SCISWAI=1,RSRC=0,M=0,WAKE=0,ILT=0,PE=0,PT=0 */ |
| 184 | + SCI0CR1 = 64; /* Set the SCI configuration */ |
| 185 | + /* SCI0SR2: ??=0,??=0,??=0,??=0,??=0,BRK13=0,TXDIR=0,RAF=0 */ |
| 186 | + SCI0SR2 = 0; /* Set the Break Character Length and Transmitter pin data direction in Single-wire mode */ |
| 187 | + SCI0SR1; /* Reset interrupt request flags */ |
| 188 | + /* SCI0CR2: SCTIE=0,TCIE=0,RIE=0,ILIE=0,TE=0,RE=0,RWU=0,SBK=0 */ |
| 189 | + SCI0CR2 = 0; /* Disable error interrupts */ |
| 190 | + SCI0BD = PrescHigh; /* Set prescaler bits */ |
| 191 | + HWEnDi(); /* Enable/disable device according to status flags */ |
| 192 | +} |
| 193 | + |
| 194 | + |
| 195 | +/* END COM0. */ |
| 196 | + |
| 197 | + |
| 198 | +/* |
| 199 | +** ################################################################### |
| 200 | +** |
| 201 | +** This file was created by UNIS Processor Expert 03.33 for |
| 202 | +** the Motorola HCS12 series of microcontrollers. |
| 203 | +** |
| 204 | +** ################################################################### |
| 205 | +*/ |
0 commit comments