📄 as1.c
字号:
/** ###################################################################
** THIS BEAN MODULE IS GENERATED BY THE TOOL. DO NOT MODIFY IT.
** Filename : AS1.C
** Project : text
** Processor : 56F8346
** Beantype : AsynchroSerial
** Version : Bean 02.333, Driver 01.21, CPU db: 2.87.097
** Compiler : Metrowerks DSP C Compiler
** Date/Time : 2009-1-10, 11:18
** 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 : 9600baud
** Width : 8 bits
** Stop bits : 1
** Parity : none
** Breaks : Disabled
**
** Registers
** Input buffer : SCI0_SCIDR [62084]
** Output buffer : SCI0_SCIDR [62084]
** Control register : SCI0_SCICR [62081]
** Mode register : SCI0_SCICR [62081]
** Baud setting reg. : SCI0_SCIBR [62080]
**
**
**
** Used pins:
** ----------------------------------------------------------
** Function | On package | Name
** ----------------------------------------------------------
** Input | 5 | GPIOE1_RxD0
** Output | 4 | GPIOE0_TxD0
** ----------------------------------------------------------
**
**
**
** Contents :
** RecvChar - byte AS1_RecvChar(AS1_TComData *Chr);
** SendChar - byte AS1_SendChar(AS1_TComData Chr);
** GetCharsInRxBuf - word AS1_GetCharsInRxBuf(void);
** GetCharsInTxBuf - word AS1_GetCharsInTxBuf(void);
**
** (c) Copyright UNIS, spol. s r.o. 1997-2005
** UNIS, spol. s r.o.
** Jundrovska 33
** 624 00 Brno
** Czech Republic
** http : www.processorexpert.com
** mail : info@processorexpert.com
** ###################################################################*/
/* MODULE AS1. */
#include "AS1.h"
#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 - Unused */
/* 6 - Full RX buffer */
/* 7 - Noise error */
/* 8 - Idle character */
/* 9 - Break detected */
/* 10 - Unused */
/* 11 - Unused */
/*
** ===================================================================
** Method : HWEnDi (bean AsynchroSerial)
**
** Description :
** Enables or disables the peripheral(s) associated with the bean.
** The method is called automatically as a part of the Enable and
** Disable methods and several internal methods.
** This method is internal. It is used by Processor Expert only.
** ===================================================================
*/
static void HWEnDi(void)
{
setRegBits(SCI0_SCICR, (SCI0_SCICR_TE_MASK | SCI0_SCICR_RE_MASK)); /* Enable device */
}
/*
** ===================================================================
** Method : AS1_RecvChar (bean AsynchroSerial)
**
** Description :
** If any data is received, this method returns one
** character, otherwise it returns an error code (it does
** not wait for data). This method is enabled only if the
** receiver property is enabled.
** DMA mode:
** If DMA controller is available on the selected CPU and
** the receiver is configured to use DMA controller then
** this method only sets the selected DMA channel. Then the
** status of the DMA transfer can be checked using
** GetCharsInRxBuf method. See an example of a typical usage
** for details about the communication using DMA.
** Parameters :
** NAME - DESCRIPTION
** * Chr - Pointer to a received character
** Returns :
** --- - Error code, possible codes:
** ERR_OK - OK
** ERR_SPEED - This device does not work in
** the active speed mode
** ERR_RXEMPTY - No data in receiver
** ERR_BREAK - Break character is detected(only when <Interrupt service> property
** is disabled)
** ERR_COMMON - common error occurred (the
** GetError method can be used for error
** specification)
** DMA mode:
** If DMA controller is available on the
** selected CPU and the receiver is
** configured to use DMA controller then
** only ERR_OK, ERR_RXEMPTY, and ERR_SPEED
** error code can be returned from this
** method.
** ===================================================================
*/
byte AS1_RecvChar(AS1_TComData *Chr)
{
register byte Result = ERR_OK; /* Return error code */
register word StatReg = getReg(SCI0_SCISR); /* Read status register */
setReg(SCI0_SCISR, 0); /* Reset error request flags */
if (StatReg & (SCI0_SCISR_OR_MASK|SCI0_SCISR_NF_MASK|SCI0_SCISR_FE_MASK|SCI0_SCISR_PF_MASK)) { /* Is any error set? */
Result = ERR_COMMON; /* If yes then set common error value */
} else if (!(StatReg & SCI0_SCISR_RDRF_MASK)) { /* Is the reciver empty and no error is set? */
return ERR_RXEMPTY; /* If yes then error */
}
*Chr = (AS1_TComData)getReg(SCI0_SCIDR); /* Read data from the receiver */
return Result; /* Return error code */
}
/*
** ===================================================================
** Method : AS1_SendChar (bean AsynchroSerial)
**
** Description :
** Sends one character to the channel. If the bean is
** temporarily disabled (Disable method) SendChar method
** only stores data into an output buffer. In case of a zero
** output buffer size, only one character can be stored.
** Enabling the bean (Enable method) starts the transmission
** of the stored data. This method is available only if the
** transmitter property is enabled.
** DMA mode:
** If DMA controller is available on the selected CPU and
** the transmitter is configured to use DMA controller then
** this method only sets selected DMA channel. Then the
** status of the DMA transfer can be checked using
** GetCharsInTxBuf method. See an example of a typical usage
** for details about communication using DMA.
** Parameters :
** NAME - DESCRIPTION
** Chr - Character to send
** Returns :
** --- - Error code, possible codes:
** ERR_OK - OK
** ERR_SPEED - This device does not work in
** the active speed mode
** ERR_TXFULL - Transmitter is full
** ===================================================================
*/
byte AS1_SendChar(AS1_TComData Chr)
{
if (!getRegBit(SCI0_SCISR, TDRE)) /* Is the transmitter empty? */
return ERR_TXFULL; /* If yes then error */
setReg(SCI0_SCIDR, Chr); /* Store char to transmitter register */
return ERR_OK; /* OK */
}
/*
** ===================================================================
** Method : AS1_GetCharsInRxBuf (bean AsynchroSerial)
**
** Description :
** Returns the number of characters in the input buffer.
** This method is available only if the receiver property is
** enabled.
** DMA mode:
** If DMA controller is available on the selected CPU and
** the receiver is configured to use DMA controller then
** this method returns the number of characters in the
** receive buffer.
** Parameters : None
** Returns :
** --- - The number of characters in the input
** buffer.
** ===================================================================
*/
word AS1_GetCharsInRxBuf(void)
{
return (getRegBit(SCI0_SCISR, RDRF) != 0)? (word)1 : (word)0; /* Return number of chars in receive buffer */
}
/*
** ===================================================================
** Method : AS1_GetCharsInTxBuf (bean AsynchroSerial)
**
** Description :
** Returns the number of characters in the output buffer.
** This method is available only if the transmitter property
** is enabled.
** DMA mode:
** If DMA controller is available on the selected CPU and
** the transmitter is configured to use DMA controller then
** this method returns the number of characters in the
** transmit buffer.
** Parameters : None
** Returns :
** --- - The number of characters in the output
** buffer.
** ===================================================================
*/
word AS1_GetCharsInTxBuf(void)
{
return (getRegBit(SCI0_SCISR, TDRE) == 0)? (word)1 : (word)0; /* Return number of chars in the transmitter buffer */
}
/*
** ===================================================================
** Method : AS1_Init (bean AsynchroSerial)
**
** Description :
** Initializes the associated peripheral(s) and the beans
** internal variables. The method is called automatically as a
** part of the application initialization code.
** This method is internal. It is used by Processor Expert only.
** ===================================================================
*/
void AS1_Init(void)
{
SerFlag = 0; /* Reset flags */
/* SCI0_SCICR: LOOP=0,SWAI=0,RSRC=0,M=0,WAKE=0,POL=0,PE=0,PT=0,TEIE=0,TIIE=0,RFIE=0,REIE=0,TE=0,RE=0,RWU=0,SBK=0 */
setReg(SCI0_SCICR, 0); /* Set the SCI configuration */
setReg(SCI0_SCIBR, 391); /* Set prescaler bits */
HWEnDi(); /* Enable/disable device according to status flags */
}
/* END AS1. */
/*
** ###################################################################
**
** This file was created by UNIS Processor Expert 2.97 [03.74]
** for the Freescale 56800 series of microcontrollers.
**
** ###################################################################
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -