]> begriffs open source - cmsis-freertos/blob - Demo/HCS12_CodeWarrior_banked/CODE/_COM0.C
Update cmsis_os2.c
[cmsis-freertos] / Demo / HCS12_CodeWarrior_banked / CODE / _COM0.C
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 */