blob: e575af48ce930af368be090fbe161934f1ddd0d9 [file] [log] [blame]
/** ###################################################################
** THIS BEAN MODULE IS GENERATED BY THE TOOL. DO NOT MODIFY IT.
** Filename : COM0.C
** Project : RTOSDemo
** Processor : MC9S12DP256BCPV
** Beantype : AsynchroSerial
** Version : Bean 02.231, Driver 01.08, CPU db: 2.87.283
** Compiler : Metrowerks HC12 C Compiler
** Date/Time : 19/06/2005, 15:07
** Abstract :
** This bean "AsynchroSerial" implements an asynchronous serial
** communication. The bean supports different settings of
** parity, word width, stop-bit and communication speed,
** user can select interrupt or polling handler.
** Communication speed can be changed also in runtime.
** The bean requires one on-chip asynchronous serial channel.
** Settings :
** Serial channel : SCI0
**
** Protocol
** Init baud rate : 38400baud
** Width : 8 bits
** Stop bits : 1
** Parity : none
** Breaks : Disabled
**
** Registers
** Input buffer : SCI0DRL [207]
** Output buffer : SCI0DRL [207]
** Control register : SCI0CR1 [202]
** Mode register : SCI0CR2 [203]
** Baud setting reg. : SCI0BD [200]
** Special register : SCI0SR1 [204]
**
** Input interrupt
** Vector name : INT_SCI0
** Priority : 1
**
** Output interrupt
** Vector name : INT_SCI0
** Priority : 1
**
** Used pins :
** ----------------------------------------------------
** Function | On package | Name
** ----------------------------------------------------
** Input | 89 | PS0_RxD0
** Output | 90 | PS1_TxD0
** ----------------------------------------------------
**
**
** Used baud modes :
** ----------------------------------------------------
** No. | Mode ID | Baud rate
** ----------------------------------------------------
** 0 | Bm_38400baud | 38400baud
** 1 | Bm_19200baud | 19200baud
** 2 | Bm_9600baud | 9600baud
** 3 | Bm_4800baud | 4800baud
** ----------------------------------------------------
** Contents :
** SetBaudRateMode - byte COM0_SetBaudRateMode(byte Mod);
**
** (c) Copyright UNIS, spol. s r.o. 1997-2002
** UNIS, spol. s r.o.
** Jundrovska 33
** 624 00 Brno
** Czech Republic
** http : www.processorexpert.com
** mail : info@processorexpert.com
** ###################################################################*/
/* MODULE COM0. */
#pragma MESSAGE DISABLE C4002 /* WARNING C4002: Result not used is ignored */
#pragma MESSAGE DISABLE C4301 /* INFORMATION C4301: Inline expansion done for function call */
#include "COM0.h"
#include "TickTimer.h"
#include "Byte1.h"
/* Definition of DATA and CODE segments for this bean. User can specify where
these segments will be located on "Build options" tab of the selected CPU bean. */
#pragma DATA_SEG COM0_DATA /* Data section for this module. */
#pragma CODE_SEG COM0_CODE /* Code section for this module. */
#define OVERRUN_ERR 1 /* Overrun error flag bit */
#define FRAMING_ERR 2 /* Framing error flag bit */
#define PARITY_ERR 4 /* Parity error flag bit */
#define CHAR_IN_RX 8 /* Char is in RX buffer */
#define FULL_TX 16 /* Full transmit buffer */
#define RUNINT_FROM_TX 32 /* Interrupt is in progress */
#define FULL_RX 64 /* Full receive buffer */
#define NOISE_ERR 128 /* Noise erorr flag bit */
#define IDLE_ERR 256 /* Idle character flag bit */
#define BREAK_ERR 512 /* Break detect */
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 PrescHigh;
static byte NumMode; /* Number of selected baud mode */
/*
** ===================================================================
** Method : HWEnDi (bean AsynchroSerial)
**
** Description :
** This method is internal. It is used by Processor Expert
** only.
** ===================================================================
*/
static void HWEnDi(void)
{
SCI0CR2_TE = 1; /* Enable transmitter */
SCI0CR2_RE = 1; /* Enable receiver */
SCI0CR2_RIE = 1; /* Enable recieve interrupt */
}
/*
** ===================================================================
** Method : COM0_SetBaudRateMode (bean AsynchroSerial)
**
** Description :
** This method changes the channel communication speed (baud
** rate). This method can be used only if you specify a list
** of possible period settings at design time (see <Timing
** dialog box> - Runtime setting - from a list of values).
** Each of these settings constitutes a mode and Processor
** Expert^[TM] assigns them a mode identifier. The prescaler
** and compare values corresponding to each mode are
** calculated at design time. You may switch modes at
** runtime by referring only to a mode identifier. No
** run-time calculations are performed, all the calculations
** are performed at design time.
** Parameters :
** NAME - DESCRIPTION
** Mod - Timing mode to set
** Returns :
** --- - Error code, possible codes:
** ERR_OK - OK
** ERR_SPEED - This device does not work in
** the active speed mode
** ===================================================================
*/
byte COM0_SetBaudRateMode(byte Mod)
{
static const word COM0_PrescHigh[4] = {41,81,163,326};
if(Mod >= 4) /* Is mode in baud mode list */
return ERR_VALUE; /* If no then error */
NumMode = Mod; /* New baud mode */
PrescHigh = COM0_PrescHigh[Mod]; /* Prescaler in high speed mode */
SCI0BD = PrescHigh; /* Set prescaler bits */
return ERR_OK; /* OK */
}
/*
** ===================================================================
** Method : COM0_Init (bean AsynchroSerial)
**
** Description :
** This method is internal. It is used by Processor Expert
** only.
** ===================================================================
*/
void COM0_Init(void)
{
PrescHigh = 41; /* Precaler in high speed mode */
SerFlag = 0; /* Reset flags */
NumMode = 0; /* Number of selected baud mode */
/* SCI0CR1: LOOPS=0,SCISWAI=1,RSRC=0,M=0,WAKE=0,ILT=0,PE=0,PT=0 */
SCI0CR1 = 64; /* Set the SCI configuration */
/* SCI0SR2: ??=0,??=0,??=0,??=0,??=0,BRK13=0,TXDIR=0,RAF=0 */
SCI0SR2 = 0; /* Set the Break Character Length and Transmitter pin data direction in Single-wire mode */
SCI0SR1; /* Reset interrupt request flags */
/* SCI0CR2: SCTIE=0,TCIE=0,RIE=0,ILIE=0,TE=0,RE=0,RWU=0,SBK=0 */
SCI0CR2 = 0; /* Disable error interrupts */
SCI0BD = PrescHigh; /* Set prescaler bits */
HWEnDi(); /* Enable/disable device according to status flags */
}
/* END COM0. */
/*
** ###################################################################
**
** This file was created by UNIS Processor Expert 03.33 for
** the Motorola HCS12 series of microcontrollers.
**
** ###################################################################
*/