📄 serio.c
字号:
Set_SMOD1(); //SMOD1 = 1
BRL = 191;
break;
}
case 9600:
{
Set_SMOD1(); //SMOD1 = 1
BRL = 126;
break;
}
case 4800:
{
BRL = 126;
break;
}
case 38400:
default:
{
Set_SMOD1(); //SMOD1 = 1
BRL = 223;
break;
}
}//switch( baudrate )
#else
Set_SMOD1(); //SMOD1 = 1
switch( baudrate )
{
case 57600:
{
BRL = 245;
break;
}
case 19200:
{
BRL = 223;
break;
}
case 9600:
{
BRL = 191;
break;
}
case 4800:
{
BRL = 126;
break;
}
case 38400:
default:
{
BRL = 240;
break;
}
}//switch( baudrate )
#endif//#ifdef AT89C5132_MODE_X2
REN=1;
// clear interrupt flags
TI = RI = 0;
IPH0 |= MSK_ES;
IPL0 |= MSK_ES;
ES = 1; //Enable serial interrupt
BDRCON |= 0x10; //Baud rate generator run
}//void init_serio__ (UWORD baudrate)
#endif//#ifdef EvaBoard_AT89C5132
#ifdef _C501
void init_serio__(UWORD baudrate)
{
memset(&snd_buff[0], 0, sizeof(snd_buff));
memset(&rec_buff[0], 0, sizeof(snd_buff));
write_rec_ptr = 0; // Writepointer into receive buffer
read_rec_ptr = 0; // Readpointer from receive buffer
rec_counter = 0; // Counter of byte in receive buffer
write_snd_ptr = 0; // Writepointer into send buffer
read_snd_ptr = 0; // Readpointer from send buffer
snd_counter = 0; // Counter of byte in send buffer
serial_state = ON; // shows state of serial line
thr_empty = TRUE; // Transmitter reg. empty
// set timer 2 to baudrate generator
// set default values to timer 2
// set baudrate
set_baud ( baudrate );
T2CON = 0x00;
// enable transmit and receive clock
//T2IE = T2RSE = 1;
RCLK = TCLK = 1;
// start timer 2
TR2 = 1;
// serial line configuration
// mode 3, 9bit UART
SM0 = SM1 = 1;
// port3 pins
TXD = RXD = 1;
// receive enable
REN = 1;
// clear interrupt flags
TI = RI = 0;
// enable serial interrupt
ES = 1;
// set high priority
//PS = 1;
CTS = 1 ; // Define as Input pin
RTS = 1 ; // Do not want to send yet
}//void init_serio__ (UWORD baudrate)
/*---------------------------------------------------------------------------*/
/* */
/* void set_baud ( UWORD baudrate ) */
/* */
/* function: set baudrate */
/* */
/*---------------------------------------------------------------------------*/
void set_baud (UWORD baudrate)
{
// set baudrate 24MHz
switch(baudrate)
{
case 11520:
{
//set reload value
RCAP2H = 0xFF;
RCAP2L = 0xF8;
break;
}
case 57600:
{
//set reload value
RCAP2H = 0xFF;
RCAP2L = 0xF3;
break;
}
case 38400:
{
// set reload value
RCAP2H = 0xFF;
RCAP2L = 0xED;//0xEC;
break;
}
case 19200:
{
// set reload value
RCAP2H = 0xFF;
RCAP2L = 0xD9;
break;
}
case 9600:
{
// set reload value
RCAP2H = 0xFF;
RCAP2L = 0xB2;
break;
}
default:
{
// Parameter Error
// Unknown Baudrate
break ;
}
} // end switch( baudrate )
return;
}//void set_baud (UWORD baudrate)
#endif//#ifdef _C501
/*---------------------------------------------------------------------------*/
/* */
/* void ser_isr ( void ) interrupt */
/* */
/* function: interrupt routine */
/* */
/*---------------------------------------------------------------------------*/
void ser_isr ( void ) interrupt IRQ_UART using 1 // Keil Compiler
//_interrupt(4) _using(1) void ser_isr (void) // Tasking Compiler
{
// disable interrupts
DISABLE_ALL_INTERRUPT_BIT__;
// send fifo empty
if( _testbit_( TI ))
{
//if( read_snd_ptr == write_snd_ptr )
if(snd_counter == 0)
{
// Nothing to send, set flag
thr_empty = 1;
// RTS handshake
RTS = 1;
}
else
{
// something to send
// Byte moved through the ACCU, to get the correct parity set
ACC = snd_buff [read_snd_ptr];
// even parity
TB8 = P;
// start send
SBUF = ACC;
// wraps automatically, since Byte
read_snd_ptr++;
snd_counter--;
}
}
// receive fifo full
if( _testbit_( RI ))
{
// read it in!
rec_buff [write_rec_ptr] = SBUF;
// Byte moved through the ACCU automatically, so
// is the correct parity set
parity = P;
// here, check EVEN parity
if( parity != RB8 )
{
}
else
{
// clear error
}
if(serial_state == ON)
{
// wraps automatically since byte
write_rec_ptr++;
rec_counter++;
}
else
{
// clear serial buffer, serial communication is closed
write_rec_ptr = read_rec_ptr;
rec_counter = 0;
}
}
// enable interrupts
ENABLE_ALL_INTERRUPT_BIT__;
}
#endif//#ifdef RS232_SERIO
/*****************************************************************************/
/* Copyright (C) profichip GmbH 2004. Confidential. */
/*****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -