📄 main.c
字号:
t1 = c&0xff;
// t2 = (c>>8)&0xff;
// SBUF=t2;
// while(TI==0);
// TI=0;
SBUF=t1;
while(TI==0);
TI=0;
for(i=0;i<LEN_COM;i++)
{
SBUF = MSendBuff[i];
while(TI==0);
TI=0;
}
}
#endif
#if CPU_DO_AS_TX
/********************************************************************/
void SerialSendInterrupt(void) interrupt 12 // UART SEND INTERRUPT
{
if(TI)
{
if(s_ucMSendBuffTail != s_ucMSendBuffTop)
{
SBUF = MSendBuff[s_ucMSendBuffTail++];
s_ucMSendBuffTail %= SEND_BUFF_LEN;
}
}
TI =0;
}
#endif
#if CPU_DO_AS_RX
void SerialReceiveInterrupt(void) interrupt 4 //UART interrupt 接收数据
{
uchar tmp;
static uchar ucCount = 0;
// EA=0;
if(RI)
{
tmp = SBUF;
if(Flag_First)
{
if(tmp==FrameHead1)
{
Flag_First=0;
Flag_Second=1; //start rev 2nd byte
}
}
else if(Flag_Second)
{
if(tmp==FrameHead2)
{
Flag_Second=0; //start rev 3rd byte,COm No
Flag_Third=1;
}
}
else if(Flag_Third)
{
//这里假定了在以桢头开始的后面len个数据都是来自同一个串口。
ComNo= tmp>>4; // com no is high 4 bit
len = tmp&0x0F;
g_tMRevBuff[ComNo].port = ComNo;
// g_tMRevBuff[ComNo].len =len;
if( (len >0) && (len < RECEIVE_BUFFER_LENGTH))
{
Flag_Data = TRUE;
Flag_Third=0;
}
else
{
Flag_First = 1;
Flag_Third = 0;
}
}
else if(Flag_Data)
{
#if 0
if(len <= LEN_COM)
{
g_tMRevBuff[ComNo].aucData[g_tMRevBuff[ComNo].len++] = tmp;
if(len == g_tMRevBuff[ComNo].len)
{
g_tMRevBuff[ComNo].flag = TRUE;
Flag_First = 1;
Flag_Data = 0;
}
}
#endif
g_tMRevBuff [ComNo].aucData[g_tMRevBuff[ComNo].ucTop++] = tmp;
g_tMRevBuff[ComNo].ucTop %= RECEIVE_BUFFER_LENGTH;
/*
if(g_tMRevBuff[ComNo].ucTop == g_tMRevBuff[ComNo].ucTail)
{
// LED =~LED;
}
*/
ucCount++;
if(len == ucCount)
{
Flag_First = 1;
Flag_Data = 0;
ucCount = 0;
}
}
RI=0;
}
// EA=1;
}
#endif
/***********************************************************
Function:
Describe:
Input:
Output:
record:
* wan 9/10/2007 config for vk3224
***********************************************************/
void Vk3224Init(void)
{
uchar temp1,temp2,tmp;
uchar baudrate,framelen,parity;
// uint Back;
//reset VK3224,low
RST_VK =0;
Delay(10);
RST_VK =1;
Delay(2000);
//config com1
temp1=C1BAUD1;
temp2=C1BAUD0;
tmp=(temp1<<1) | temp2;
switch(tmp)
{
case 0x00: baudrate = BAUDRATE_300;break;
case 0X01: baudrate = BAUDRATE_600; break;
case 0X02: baudrate = BAUDRATE_1200;break;
default: baudrate = BAUDRATE_1200;break;
}
if(C1CHK_EXIT)
{
framelen = FRAME_LEN_11;
if(C1CHK) //奇校验
{
parity = PARITY_ODD;
}
else
{
parity = PARITY_EVEN;
}
}
else
{
framelen = FRAME_LEN_10;
}
SoftCountNum[0] = baudrate; //cdy, ((10bit*1000ms)/baudrate)*length*timer0
SetComXBaudrate(0, baudrate);
SetComXConfig(0,PARITY_NONE, FRAME_LEN_10);
Delay(10);
// Back = ReadComXConfig(0);
// TestSent(Back); //test
//config com2
temp1=C2BAUD1;
temp2=C2BAUD0;
tmp=(temp1<<1) | temp2;
switch(tmp)
{
case 0x00: baudrate = BAUDRATE_300; break;
case 0X01: baudrate = BAUDRATE_600; break;
case 0X02: baudrate = BAUDRATE_1200;break;
default:baudrate = BAUDRATE_1200;break;
}
if(C2CHK_EXIT)
{
framelen = FRAME_LEN_11;
if(C2CHK) //奇校验
{
parity = PARITY_ODD;
}
else
{
parity = PARITY_EVEN;
}
}
else
{
framelen = FRAME_LEN_10;
}
SoftCountNum[1] = baudrate; //cdy, ((10bit*1000ms)/baudrate)*length*timer0
SetComXBaudrate(1, baudrate);
SetComXConfig(1,PARITY_NONE, FRAME_LEN_10 );
Delay(10);
// Back = ReadComXConfig(1);
// TestSent(Back); //test
//config com3
temp1=C3BAUD1;
temp2=C3BAUD0;
tmp=(temp1<<1) | temp2;
switch(tmp)
{
case 0x00: baudrate = BAUDRATE_300; break;
case 0X01: baudrate = BAUDRATE_600; break;
case 0X02: baudrate = BAUDRATE_1200;break;
default: baudrate = BAUDRATE_1200;break;
}
if(C3CHK_EXIT)
{
framelen = FRAME_LEN_11;
if(C3CHK) //奇校验
{
parity = PARITY_ODD;
}
else
{
parity = PARITY_EVEN;
}
}
else
{
framelen = FRAME_LEN_10;
}
SoftCountNum[2] = baudrate; //cdy, ((10bit*1000ms)/baudrate)*length*timer0
SetComXBaudrate(2, baudrate);
SetComXConfig(2,PARITY_NONE, FRAME_LEN_10);
Delay(10);
// Back = ReadComXConfig(2);
// TestSent(Back); //test
//config com4
temp1=C4BAUD1;
temp2=C4BAUD0;
tmp=(temp1<<1) | temp2;
switch(tmp)
{
case 0x00: baudrate = BAUDRATE_300; break;
case 0X01: baudrate = BAUDRATE_600; break;
case 0X02: baudrate = BAUDRATE_1200;break;
default: baudrate = BAUDRATE_1200;break;
}
if(C4CHK_EXIT)
{
framelen = FRAME_LEN_11;
if(C4CHK) //奇校验
{
parity = PARITY_ODD;
}
else
{
parity = PARITY_EVEN;
}
}
else
{
framelen = FRAME_LEN_10;
}
SoftCountNum[3] = baudrate; //cdy, ((10bit*1000ms)/baudrate)*length*timer0
SetComXBaudrate(3, baudrate);
SetComXConfig(3,PARITY_NONE, FRAME_LEN_10 );
Delay(10);
// Back = ReadComXConfig(3);
// TestSent(Back); //test
// do other inital work for VK3224
config_vk32();
}
/***********************************************************
Function:vk3224 interrupt,
Describe:
Input:
Output:
***********************************************************/
void VK3224_IRQ() interrupt 0
{
//receive data to buffer.
}
//***********************************************************
/***********************************************************
Function: HandleComXTask
Describe: 处理子串口的任务,如果是接收fifo触点中断,表示收到数据,读取数据
放入缓冲区,如果是发送fifo中断,置相应标志,通知主程序可以往相应子串口写数据。
Input: void
Output: TFIFO state data
***********************************************************/
#if 0
uchar HandleComXTask(uchar port)
{
uchar ucTemp,i;
ucTemp = GetComXStatus(port);
//如果收到数据,and buff is empty ,把数据放入缓冲区。
if( (ucTemp&RFINT_MASK) &&(RevDataCount[i] ==0 ))
{
for(i = 0; i < LEN_COM; i++)
{
SRevBuff[port][i] = ReadDataFromFIFO(port);
// TestSent(SRevBuff[port][i]);
RevDataCount[port]++;
}
return 1;
}
return 0;
}
#endif
/***********************************************************
Function: HandleComXTask
Describe: put data to master com send buff, it is rounting pool
Input: void
Output: TFIFO state data
***********************************************************/
#if CPU_DO_AS_TX
uchar PutDataToMComBuff(uchar port,uchar * pdsr, uchar length)
{
if(length >0)
{
MSendBuff[s_ucMSendBuffTop++] = FrameHead1;
s_ucMSendBuffTop %= SEND_BUFF_LEN;
MSendBuff[s_ucMSendBuffTop++] = FrameHead2;
s_ucMSendBuffTop %= SEND_BUFF_LEN;
MSendBuff[s_ucMSendBuffTop++] = (port <<4) + length; // com no is high 4 bit, length is low 4 bit.
s_ucMSendBuffTop %= SEND_BUFF_LEN;
while(length--)
{
MSendBuff[s_ucMSendBuffTop++] = *pdsr++;
s_ucMSendBuffTop %= SEND_BUFF_LEN;
}
}
return 1;
}
#endif
//***********************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -