📄 modbusfdl.c.svn-base
字号:
CHARACTER31=0x8000;
CHARACTER32=0x8000;
CHARACTER33=0x8000;
CHARACTER34=0x8000;
CHARACTER35=0x8000;
CHARACTER36=0x8000;
CHARACTER37=0x8000;
CHARACTER38=0x8000;
SCCE3=0xFFFF;
SCCM3=0x0000;
GSMR_H3=0x00000020;
GSMR_L3=0x00028004; //UART,16X RX\TX clock
switch(SCC_PARITY[2]) //0:no parity,1 stop; 1:even 1 stop; 2:odd 1 stop;
{
case 0:
PSMR3=0x3040;
break;
case 1:
PSMR3=0x305A;
break;
case 2:
PSMR3=0x3050;
break;
default:
PSMR3=0x3040;
break;
}
CR=RESTART_TX|CPM_CR_CH_SCC3|CPM_CR_FLG;
while(CR & CPM_CR_FLG);
}
void Init_SCC4_Config(void)
{
BRGC4=BRGC_code[SCC_BAUD[3]]; //设置SCC4波特率
RBASE4=SCC4_RX_BD_BASE;
TBASE4=SCC4_TX_BD_BASE;
CR=0x00C1; //INIT_TRX_PARAMS|CPM_CR_FLG|CPM_CR_CH_SCC1;
while(CR & CPM_CR_FLG);
RFCR4=0x18; //set Receive FCR to normal
TFCR4=0x18; //set Transmit FCR to normal
MRBLR4=0x00FF; //set max no of bytes to 8
MAX_IDL4=30;
BRKCR4=0x0000; //if a stop transmit command is issued,one break character will be sent
PAREC4=0;
FRMEC4=0;
NOSEC4=0;
BRKEC4=0;
RCCM4=0xC0FF;
UADDR41=0;
UADDR42=0;
TOSEQ4=0;
CHARACTER41=0x8000;
CHARACTER42=0x8000;
CHARACTER43=0x8000;
CHARACTER44=0x8000;
CHARACTER45=0x8000;
CHARACTER46=0x8000;
CHARACTER47=0x8000;
CHARACTER48=0x8000;
SCCE4=0xFFFF;
SCCM4=0x0000;
GSMR_H4=0x00000020;
GSMR_L4=0x00028004; //UART,16X RX\TX clock
switch(SCC_PARITY[3]) //0:no parity,1 stop; 1:even 1 stop; 2:odd 1 stop;
{
case 0:
PSMR4=0x3040;
break;
case 1:
PSMR4=0x305A;
break;
case 2:
PSMR4=0x3050;
break;
default:
PSMR4=0x3040;
break;
}
CR=RESTART_TX|CPM_CR_CH_SCC4|CPM_CR_FLG;
while(CR & CPM_CR_FLG);
}
void inittimer1(void)
{
TGCR&=0xFFF0;
TMR1=0x0e1a; //ORI: bit 4, =1 enable interrupt;
//FRR: bit 3, =1 restart after the reference value is reached;
//ICLK:bit 2-1, =01 system clock; =10 system clock divided by 16
TCN1=0x0000;
TRR1=0x3a98; //10ms
TER1=0xFFFF;
CIMR|=CIMR_TIMER1;
TGCR|=0x0001;
//system clock/16: 1ms--0x5dc
}
void inittimer2(void)
{
TGCR&=0xFF0F;
TMR2=0x0e1a;
TCN2=0x0000;
TRR2=0x5dc; //1ms
//TRR2=0xBB8; //2MS
TER2=0xFFFF;
CIMR|=CIMR_TIMER2;
TGCR|=0x0010; //开始计数
com_led=0;
}
#pragma interrupt()
void SCC1_IntProcess()
{
struct SCCE SCCEtmp;
SCCEtmp=*((struct SCCE*)(&SCCE1));
SCCE1=0xFFFF; //Clear the SCCE1.
if(SCCEtmp.BSY) //BSY - Busy Condition (bit 2) A character was received and discarded due to lack of buffers.
{
SCC1_RX_BD0_ST=0xB000;
SCC1_RX_BD0_LN=0;
}
if(SCCEtmp.RX) //RX - RX Buffer (bit 0) A buffer has been received over the PROFIBUS channel.
{
if(!(SCC1_RX_BD0_ST&0x8000)) SCC_INTFLAG[0]=1;
}
if ((*(unsigned short*)(&SCCEtmp)) & 0xFEF8) cpm_other_error();
CISR=CISR_SCC1; //Clear the SCC1 bit in the CISR.
}
#pragma interrupt()
void SCC2_IntProcess()
{
struct SCCE SCCEtmp;
SCCEtmp=*((struct SCCE*)(&SCCE2));
SCCE2=0xFFFF; //Clear the SCCE1.
if(SCCEtmp.BSY) //BSY - Busy Condition (bit 2) A character was received and discarded due to lack of buffers.
{
SCC2_RX_BD0_ST=0xB000;
SCC2_RX_BD0_LN=0;
}
if(SCCEtmp.RX) //RX - RX Buffer (bit 0) A buffer has been received over the PROFIBUS channel.
{
if(!(SCC2_RX_BD0_ST&0x8000)) SCC_INTFLAG[1]=1;
}
if ((*(unsigned short*)(&SCCEtmp)) & 0xFEF8) cpm_other_error();
CISR=CISR_SCC2; //Clear the SCC1 bit in the CISR.
}
#pragma interrupt()
void SCC3_IntProcess()
{
struct SCCE SCCEtmp;
SCCEtmp=*((struct SCCE*)(&SCCE3));
SCCE3=0xFFFF; //Clear the SCCE1.
if(SCCEtmp.BSY) //BSY - Busy Condition (bit 2) A character was received and discarded due to lack of buffers.
{
SCC3_RX_BD0_ST=0xB000;
SCC3_RX_BD0_LN=0;
}
if(SCCEtmp.RX) //RX - RX Buffer (bit 0) A buffer has been received over the PROFIBUS channel.
{
if(!(SCC3_RX_BD0_ST&0x8000)) SCC_INTFLAG[2]=1;
}
if ((*(unsigned short*)(&SCCEtmp)) & 0xFEF8) cpm_other_error();
CISR=CISR_SCC3; //Clear the SCC1 bit in the CISR.
}
#pragma interrupt()
void SCC4_IntProcess()
{
struct SCCE SCCEtmp;
SCCEtmp=*((struct SCCE*)(&SCCE4));
SCCE4=0xFFFF; //Clear the SCCE1.
if(SCCEtmp.BSY) //BSY - Busy Condition (bit 2) A character was received and discarded due to lack of buffers.
{
SCC4_RX_BD0_ST=0xB000;
SCC4_RX_BD0_LN=0;
}
if(SCCEtmp.RX) //RX - RX Buffer (bit 0) A buffer has been received over the PROFIBUS channel.
{
if(!(SCC4_RX_BD0_ST&0x8000)) SCC_INTFLAG[3]=1;
}
if ((*(unsigned short*)(&SCCEtmp)) & 0xFEF8) cpm_other_error();
CISR=CISR_SCC4; //Clear the SCC1 bit in the CISR.
}
#pragma interrupt()
void cpm_error_interrupt()
{
}
#pragma interrupt()
void Timer1_IntProcess()
{
TER1=0xFFFF; //Clear interrupt event
CISR=CISR_TIMER1;
}
#pragma interrupt()
void Timer2_IntProcess()
{
TER2=0xFFFF;
com_led++;
if(com_led>100)
{
WDI=!WDI;
com_led=0;
}
READY_WORDLINE=0;
if(!(READY_WORDLINE&0x01))
if(WORDLINE_NEWFLAG == NEW_WRITE) console();
READY_WORDLINE=1;
comproc();
CISR=CISR_TIMER2;
}
void cpm_other_error()
{
}
/**********************************************************************************************/
void memsetchar ( unsigned char *s1, unsigned char ch, unsigned short n )
{
register unsigned char *src = (unsigned char *)s1;
register unsigned char *end = src;
end += n;
while ( src < end ) *src++ = ch;
}
/**********************************************************************************************/
void SCC1_TxDATA(unsigned char Len,unsigned char *s)
{
short i;
((struct GSMR_L*)(&GSMR_L1))->ENT=0;
if (TBPTR1 != SCC1_TX_BD_BASE)
{
CR=0x0201; //INIT_TX_PARAMS|CPM_CR_FLG|CPM_CR_CH_SCC1;
}
SCC1_TX_BD0_ST=0xB000;
SCC1_TX_BD0_LN=Len;
for(i=0;i<Len;i++)
SCC_TBUF[0][i]=*(s+i);
((struct GSMR_L*)(&GSMR_L1))->ENT=1;
//while(SCC1_TX_READY==1); //不可靠,只是都放入了FIFO,未必发送完.用中断来判断同样不可靠,存疑
}
void SCC2_TxDATA(unsigned char Len,unsigned char *s)
{
short i;
((struct GSMR_L*)(&GSMR_L2))->ENT=0;
if (TBPTR2 != SCC2_TX_BD_BASE)
{
CR=0x0241; //INIT_TX_PARAMS|CPM_CR_FLG|CPM_CR_CH_SCC1;
}
SCC2_TX_BD0_ST=0xB000;
SCC2_TX_BD0_LN=Len;
for(i=0;i<Len;i++)
SCC_TBUF[1][i]=*(s+i);
((struct GSMR_L*)(&GSMR_L2))->ENT=1;
}
void SCC2_Tx_char(unsigned char s)
{
((struct GSMR_L*)(&GSMR_L2))->ENT=0;
if (TBPTR2 != SCC2_TX_BD_BASE)
{
CR=0x0241; //INIT_TX_PARAMS|CPM_CR_FLG|CPM_CR_CH_SCC1;
}
SCC2_TX_BD0_ST=0xB000;
SCC2_TX_BD0_LN=1;
SCC_TBUF[1][0]=s;
((struct GSMR_L*)(&GSMR_L2))->ENT=1;
}
void SCC3_TxDATA(unsigned char Len,unsigned char *s)
{
short i;
((struct GSMR_L*)(&GSMR_L3))->ENT=0;
if (TBPTR3 != SCC3_TX_BD_BASE)
{
CR=0x0281; //INIT_TX_PARAMS|CPM_CR_FLG|CPM_CR_CH_SCC1;
}
SCC3_TX_BD0_ST=0xB000;
SCC3_TX_BD0_LN=Len;
for(i=0;i<Len;i++)
SCC_TBUF[2][i]=*(s+i);
((struct GSMR_L*)(&GSMR_L3))->ENT=1;
}
void SCC4_TxDATA(unsigned char Len,unsigned char *s)
{
short i;
((struct GSMR_L*)(&GSMR_L4))->ENT=0;
if (TBPTR4 != SCC4_TX_BD_BASE)
{
CR=0x02c1; //INIT_TX_PARAMS|CPM_CR_FLG|CPM_CR_CH_SCC1;
}
SCC4_TX_BD0_ST=0xB000;
SCC4_TX_BD0_LN=Len;
for(i=0;i<Len;i++)
SCC_TBUF[3][i]=*(s+i);
((struct GSMR_L*)(&GSMR_L4))->ENT=1;
}
/**********************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -