?? sci.c
字號:
#include "h8s2215.h"
#include "sci.h"
extern volatile unsigned char EvRcv;
extern void WaitTime( unsigned short ms);
//extern void send_lcd_register(unsigned short index, unsigned short data );
extern void S1d13715_init();
extern void win_RGB_Test();
unsigned char bFsError;
volatile unsigned char rcvdata;
RxBuf g_rxBuf;
unsigned short dwTimeOut=3;
void SCIInit(void)
{
g_rxBuf.wCount = 0;
g_rxBuf.wEnd = 0;
g_rxBuf.wStart = 0;
SCI2.SCR.BIT.TE = 0;
SCI2.BRR = 12;
SCI2.SCR.BIT.RIE = 1;
SCI2.SCR.BIT.RE = 1;
}
#pragma interrupt (SCI2RX_Int)
void SCI2RX_Int(void)
{
SCI2.SSR.BIT.RDRF = 0;
g_rxBuf.bData[g_rxBuf.wEnd] = SCI2.RDR; // get recieve data from RDR
g_rxBuf.wCount++;
g_rxBuf.wEnd++;
if(g_rxBuf.wEnd == MAX_RX_BUF_LEN)
g_rxBuf.wEnd = 0x0000;
}
void SCI_Str(char *s)
{
while(1)
{
if(*s == 0)
return;
SCI_Char(*(s++));
}
}
void SCI_buf_hex(unsigned char *s, unsigned short len)
{
int i;
for( i =0; i< len; i++ )
{
SCI_HexB( *(s++) );
}
}
void SCI_Char(unsigned char c)
{
while(SCI2.SSR.BIT.TDRE == 0);
SCI2.TDR = c;
SCI2.SCR.BIT.TE = 1;
SCI2.SSR.BIT.TDRE = 0;
while(SCI2.SSR.BIT.TEND == 0);
// SCI2.SCR.BIT.TE = 0;
}
void SCI_Hex(unsigned long val)
{
unsigned char i;
unsigned char j;
LONGBYTE lb;
lb.Long = val;
for(j=0;j<4;j++)
{
i = lb.Byte[j]/16;
if(i >= 10)
i += 'A'-10;
else
i += '0';
SCI_Char(i);
i = lb.Byte[j]%16;
if(i >= 10)
i += 'A'-10;
else
i += '0';
SCI_Char(i);
}
}
void SCI_HexS(unsigned short val)
{
register unsigned char i, j, k;
i = val/0x100;
j = val%0x100;
k = i/16;
if(k >= 10)
k += 'A'-10;
else
k += '0';
SCI_Char(k);
k = i%16;
if(k >= 10)
k += 'A'-10;
else
k += '0';
SCI_Char(k);
k = j/16;
if(k >= 10)
k += 'A'-10;
else
k += '0';
SCI_Char(k);
k = j%16;
if(k >= 10)
k += 'A'-10;
else
k += '0';
SCI_Char(k);
}
void SCI_HexB(unsigned char val)
{
register unsigned char k;
k = val/16;
if(k >= 10)
k += 'A'-10;
else
k += '0';
SCI_Char(k);
k = val%16;
if(k >= 10)
k += 'A'-10;
else
k += '0';
SCI_Char(k);
}
unsigned char get_rx_data( unsigned long dwNumByte )
{
unsigned char err;
unsigned long i;
bFsError = SYS_OK;
if(g_rxBuf.wCount >= dwNumByte)
return TRUE;
else
{
for(i = 0; i < dwTimeOut; i++)
{
if(g_rxBuf.wCount == dwNumByte)
{
break;
}
WaitTime( 1 );
}
if(g_rxBuf.wCount < dwNumByte)
{
return FALSE;
}
}
return TRUE;
}
#define TYPE_CMD 1
#define TYPE_ERR 2
#define TYPE_OTHER 3
int check_rx_data( )
{
if( TRUE == get_rx_data( 1 ) )
{
if( g_rxBuf.bData[0] == RX_COMM_HEADER )
{
return TYPE_CMD;
}
else
{
// SCI_Str( "Error Cmd:" );
// SCI_HexB( g_rxBuf.bData[0] );
return TYPE_ERR;
}
}
else
{
return TYPE_ERR;
}
}
void LCD_register_send( unsigned short *pbuf )
{
unsigned short tmp;
//send_lcd_register( *pbuf,*(pbuf+1) );
}
void process_rs232_data( )
{
if ( (TYPE_CMD != check_rx_data()) || (TRUE != get_rx_data(2)) )
{
if( 0 == g_rxBuf.wCount )
return;
bFsError = 1;
goto End;
}
else
{
SCI_HexB( g_rxBuf.bData[0] );
SCI_HexB( g_rxBuf.bData[1] );
}
switch( g_rxBuf.bData[1] )
{
case 1:
SCI_Str("\r\nLCD Register sned!");
if( get_rx_data( 6 ) )
{
SCI_buf_hex(g_rxBuf.bData, 6);
index_out(g_rxBuf.bData[2]); //8BIT
index_out(g_rxBuf.bData[3]); //8BIT
data_out(g_rxBuf.bData[4]); //8BIT
data_out(g_rxBuf.bData[5]); //8BIT
// LCD_register_send( (unsigned short*)(g_rxBuf.bData+2) );
}
break;
case 2:
SCI_Str("\r\nInit LCD!");
// S1d13715_init( );
break;
case 3:
SCI_Str("\r\nRGB Test!");
// win_RGB_Test( );
break;
default:
SCI_buf_hex(g_rxBuf.bData, 6);
}
End:
g_rxBuf.wCount = 0;
g_rxBuf.wEnd = 0;
g_rxBuf.wStart = 0;
}
// SCI0 high speed UART
void SCI0Init(void)
{
volatile unsigned char delay;
SCI0.SCR.BYTE = 0x02; // external clock
SCI0.SEMR.BYTE = 0x85; // 115.196Kbps, enable SSE, 16 times transfer rate
//SCI0.SEMR.BYTE = 0x86; // 460.784Kbps, enable SSE, 16 times transfer rate
//SCI0.SEMR.BYTE = 0x8F; // 720Kbps, enable SSE, 16 times transfer rate
for (delay=0;delay>100;delay++);
SCI0.SCR.BIT.RIE = 1;
SCI0.SCR.BIT.RE = 1;
}
void SCI0_Str(char *s)
{
while(1)
{
if(*s == 0)
return;
SCI0_Char(*(s++));
}
}
void SCI0_Char(unsigned char c)
{
SCI0.TDR = c;
SCI0.SCR.BIT.TE = 1;
SCI0.SSR.BIT.TDRE = 0;
while(SCI0.SSR.BIT.TEND == 0);
}
void SCI0_HexB(unsigned char val)
{
register unsigned char k;
k = val/16;
if(k >= 10)
k += 'A'-10;
else
k += '0';
SCI0_Char(k);
k = val%16;
if(k >= 10)
k += 'A'-10;
else
k += '0';
SCI0_Char(k);
}
#pragma interrupt (SCI0RX_Int)
void SCI0RX_Int(void)
{
register unsigned char data;
SCI0_Str("-");
if (SCI0.SSR.BIT.ORER | SCI0.SSR.BIT.PER | SCI0.SSR.BIT.FER)
{
data = SCI0.SSR.BYTE;
SCI0.SSR.BIT.ORER = 0;
SCI0.SSR.BIT.PER = 0;
SCI0.SSR.BIT.FER = 0;
SCI0_Str("Error Occur 0x");
SCI0_HexB(data);
SCI0_Str("\r\n");
}
else if (SCI0.SSR.BIT.RDRF==1)
{
data = SCI0.RDR;
SCI0.SSR.BIT.RDRF = 0;
SCI0_HexB(data);
SCI0_Str("\r\n");
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -