📄 sci.c
字号:
#include "h8s2215.h"
#include "sci.h"
extern volatile unsigned char EvRcv;
volatile unsigned char rcvdata;
void SCIInit(void)
{
SCI2.SCR.BIT.TE = 0;
SCI2.BRR = 12;
// SCI2.BRR = 14;
// SCI2.SSR.BIT.RDRF = 0;
SCI2.SCR.BIT.RIE = 1;
SCI2.SCR.BIT.RE = 1;
}
#pragma interrupt (SCI2RX_Int)
void SCI2RX_Int(void)
{
SCI2.SCR.BIT.RIE = 0;
SCI2.SCR.BIT.RE = 0;
if (SCI2.SSR.BIT.ORER | SCI2.SSR.BIT.PER | SCI2.SSR.BIT.FER)
{
rcvdata = SCI2.SSR.BYTE;
SCI2.SSR.BIT.ORER = 0;
SCI2.SSR.BIT.PER = 0;
SCI2.SSR.BIT.FER = 0;
SCI_Str("Error Occur: 0x");
SCI_HexB(rcvdata);
SCI_Str("\n");
}
else if (SCI2.SSR.BIT.RDRF==1)
{
//SCI_Str("Recive data:");
rcvdata = SCI2.RDR;
SCI2.SSR.BIT.RDRF = 0;
//SCI_HexB(rcvdata);
//SCI_Str("\n");
}
SCI2.SCR.BIT.RIE = 1;
SCI2.SCR.BIT.RE = 1;
EvRcv=TRUE;
}
void SCI_Str(char *s)
{
while(1)
{
if(*s == 0)
return;
SCI_Char(*(s++));
}
}
void SCI_Char(unsigned char c)
{
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);
}
// 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 + -