?? dsp_com.h
字號:
/*Designed by lizw 04/11/18*/
#ifndef DSP_COM_H
#define DSP_COM_H
int i_com;
int send_len=0;
int send_index;
int rec_len;
int rand_num=0;
int start_index=-1,end_index=-1;
#include "real_time.h"
void disable_int(){
asm(" setc INTM");
asm(" setc SXM");
}
void enable_int(){
asm(" clrc INTM");
}
void init_com(int a){
disable_int();
*IFR=0xffff;
*SCSR1=0x81de;
*WDCR=0xE8;
*SCICCR=0x07;
*SCICTL1=0x13;
*SCICTL2=0x03;//0X03
*SCIHBAUD=0x01;
*SCILBAUD=0x04;
*SCICTL1=0x33;
*SCIPRI=0x60;
*MCRA=0x03;
*PADATDIR=0x100;
*IMR=(*IMR)|0x10;
enable_int();
}
void init_SRbuf(int a){
int i;
if((a&0x01)!=0){
*p_sendbuf=0x7c;
*(p_sendbuf+1)=0xd2;
*(p_sendbuf+2)=0x15;
*(p_sendbuf+3)=0xd8;
*(p_sendbuf+4)=0x41;
*(p_sendbuf+5)=0x42;
*(p_sendbuf+6)=0x39;
for(i=0;i<4;i++)
*(p_sendbuf+11-i)=*(p_sendbuf+i);
send_index=0;
send_len=12;
end_index=-1;
}
if((a&0x02)!=0){
for(i=0;i<512;i++)
*(p_recbuf+i)='\0';
rec_len=0;
start_index=-1;
end_index=-1;
}
i_com=0;
}
void com_send(){
if(send_index>=send_len) return;
*SCITXBUF=*(p_sendbuf+send_index);
send_index++;
*IFR=0x0010;
enable_int();
}
void send_data(){
send_index=1;
*SCITXBUF=*(p_sendbuf+send_index-1);
*IFR=0x0010;
enable_int();
}
void com_recieve(){
BYTE rec_temp;
int i;
rec_temp=*SCIRXBUF;
if(rec_len<1023)
p_recbuf[rec_len]=rec_temp;
rec_len++;
*IFR=0x0010;
enable_int();
i_delay=0;
//init_SRbuf(1);
if(rec_len>=4){
if((p_recbuf[rec_len-1]==0xd8)&&(p_recbuf[rec_len-2]==0x15)&&(p_recbuf[rec_len-3]==0xd2)&&(p_recbuf[rec_len-4]==0x7c)){ ////////+CMTI:
if((start_index==-1)&&(end_index==-1))
start_index=rec_len;
i_com=1;
}
}
if(rec_len>=8){
if((p_recbuf[rec_len-4]==0xd8)&&(p_recbuf[rec_len-3]==0x15)&&(p_recbuf[rec_len-2]==0xd2)&&(p_recbuf[rec_len-1]==0x7c)){ ////////+CMTI:
if((end_index==-1)&&(start_index>0))
end_index=rec_len-5;
}
}
}
void AT_init(){
*p_sendbuf='A';
*(p_sendbuf+1)='T';
*(p_sendbuf+2)='S';
*(p_sendbuf+3)='0';
*(p_sendbuf+4)='=';
*(p_sendbuf+5)='1';
*(p_sendbuf+6)=13;
*(p_sendbuf+7)=10;
send_index=0;
send_len=8;
send_data();
}
void AT_ack(BYTE i){
init_SRbuf(1);
*(p_sendbuf+6)=i;
*(p_sendbuf+7)=*(p_sendbuf+7)+1;
if(*(p_sendbuf+7)>0x39)
*(p_sendbuf+7)=0x30;
if(*(p_sendbuf+7)<0x30)
*(p_sendbuf+7)=0x30;
send_len=12;
my_delay(1);
send_data();
}
/////////
void load_crc_table(){
*(p_crc+0)=0x0000;
*(p_crc+1)=0xC1C0;
*(p_crc+2)=0x81C1;
*(p_crc+3)=0x4001;
*(p_crc+4)=0x01C3;
*(p_crc+5)=0xC003;
*(p_crc+6)=0x8002;
*(p_crc+7)=0x41C2;
*(p_crc+8)=0x01C6;
*(p_crc+9)=0xC006;
*(p_crc+10)=0x8007;
*(p_crc+11)=0x41C7;
*(p_crc+12)=0x0005;
*(p_crc+13)=0xC1C5;
*(p_crc+14)=0x81C4;
*(p_crc+15)=0x4004;
*(p_crc+16)=0x01CC;
*(p_crc+17)=0xC00C;
*(p_crc+18)=0x800D;
*(p_crc+19)=0x41CD;
*(p_crc+20)=0x000F;
*(p_crc+21)=0xC1CF;
*(p_crc+22)=0x81CE;
*(p_crc+23)=0x400E;
*(p_crc+24)=0x000A;
*(p_crc+25)=0xC1CA;
*(p_crc+26)=0x81CB;
*(p_crc+27)=0x400B;
*(p_crc+28)=0x01C9;
*(p_crc+29)=0xC009;
*(p_crc+30)=0x8008;
*(p_crc+31)=0x41C8;
*(p_crc+32)=0x01D8;
*(p_crc+33)=0xC018;
*(p_crc+34)=0x8019;
*(p_crc+35)=0x41D9;
*(p_crc+36)=0x001B;
*(p_crc+37)=0xC1DB;
*(p_crc+38)=0x81DA;
*(p_crc+39)=0x401A;
*(p_crc+40)=0x001E;
*(p_crc+41)=0xC1DE;
*(p_crc+42)=0x81DF;
*(p_crc+43)=0x401F;
*(p_crc+44)=0x01DD;
*(p_crc+45)=0xC01D;
*(p_crc+46)=0x801C;
*(p_crc+47)=0x41DC;
*(p_crc+48)=0x0014;
*(p_crc+49)=0xC1D4;
*(p_crc+50)=0x81D5;
*(p_crc+51)=0x4015;
*(p_crc+52)=0x01D7;
*(p_crc+53)=0xC017;
*(p_crc+54)=0x8016;
*(p_crc+55)=0x41D6;
*(p_crc+56)=0x01D2;
*(p_crc+57)=0xC012;
*(p_crc+58)=0x8013;
*(p_crc+59)=0x41D3;
*(p_crc+60)=0x0011;
*(p_crc+61)=0xC1D1;
*(p_crc+62)=0x81D0;
*(p_crc+63)=0x4010;
*(p_crc+64)=0x01F0;
*(p_crc+65)=0xC030;
*(p_crc+66)=0x8031;
*(p_crc+67)=0x41F1;
*(p_crc+68)=0x0033;
*(p_crc+69)=0xC1F3;
*(p_crc+70)=0x81F2;
*(p_crc+71)=0x4032;
*(p_crc+72)=0x0036;
*(p_crc+73)=0xC1F6;
*(p_crc+74)=0x81F7;
*(p_crc+75)=0x4037;
*(p_crc+76)=0x01F5;
*(p_crc+77)=0xC035;
*(p_crc+78)=0x8034;
*(p_crc+79)=0x41F4;
*(p_crc+80)=0x003C;
*(p_crc+81)=0xC1FC;
*(p_crc+82)=0x81FD;
*(p_crc+83)=0x403D;
*(p_crc+84)=0x01FF;
*(p_crc+85)=0xC03F;
*(p_crc+86)=0x803E;
*(p_crc+87)=0x41FE;
*(p_crc+88)=0x01FA;
*(p_crc+89)=0xC03A;
*(p_crc+90)=0x803B;
*(p_crc+91)=0x41FB;
*(p_crc+92)=0x0039;
*(p_crc+93)=0xC1F9;
*(p_crc+94)=0x81F8;
*(p_crc+95)=0x4038;
*(p_crc+96)=0x0028;
*(p_crc+97)=0xC1E8;
*(p_crc+98)=0x81E9;
*(p_crc+99)=0x4029;
*(p_crc+100)=0x01EB;
*(p_crc+101)=0xC02B;
*(p_crc+102)=0x802A;
*(p_crc+103)=0x41EA;
*(p_crc+104)=0x01EE;
*(p_crc+105)=0xC02E;
*(p_crc+106)=0x802F;
*(p_crc+107)=0x41EF;
*(p_crc+108)=0x002D;
*(p_crc+109)=0xC1ED;
*(p_crc+110)=0x81EC;
*(p_crc+111)=0x402C;
*(p_crc+112)=0x01E4;
*(p_crc+113)=0xC024;
*(p_crc+114)=0x8025;
*(p_crc+115)=0x41E5;
*(p_crc+116)=0x0027;
*(p_crc+117)=0xC1E7;
*(p_crc+118)=0x81E6;
*(p_crc+119)=0x4026;
*(p_crc+120)=0x0022;
*(p_crc+121)=0xC1E2;
*(p_crc+122)=0x81E3;
*(p_crc+123)=0x4023;
*(p_crc+124)=0x01E1;
*(p_crc+125)=0xC021;
*(p_crc+126)=0x8020;
*(p_crc+127)=0x41E0;
*(p_crc+128)=0x01A0;
*(p_crc+129)=0xC060;
*(p_crc+130)=0x8061;
*(p_crc+131)=0x41A1;
*(p_crc+132)=0x0063;
*(p_crc+133)=0xC1A3;
*(p_crc+134)=0x81A2;
*(p_crc+135)=0x4062;
*(p_crc+136)=0x0066;
*(p_crc+137)=0xC1A6;
*(p_crc+138)=0x81A7;
*(p_crc+139)=0x4067;
*(p_crc+140)=0x01A5;
*(p_crc+141)=0xC065;
*(p_crc+142)=0x8064;
*(p_crc+143)=0x41A4;
*(p_crc+144)=0x006C;
*(p_crc+145)=0xC1AC;
*(p_crc+146)=0x81AD;
*(p_crc+147)=0x406D;
*(p_crc+148)=0x01AF;
*(p_crc+149)=0xC06F;
*(p_crc+150)=0x806E;
*(p_crc+151)=0x41AE;
*(p_crc+152)=0x01AA;
*(p_crc+153)=0xC06A;
*(p_crc+154)=0x806B;
*(p_crc+155)=0x41AB;
*(p_crc+156)=0x0069;
*(p_crc+157)=0xC1A9;
*(p_crc+158)=0x81A8;
*(p_crc+159)=0x4068;
*(p_crc+160)=0x0078;
*(p_crc+161)=0xC1B8;
*(p_crc+162)=0x81B9;
*(p_crc+163)=0x4079;
*(p_crc+164)=0x01BB;
*(p_crc+165)=0xC07B;
*(p_crc+166)=0x807A;
*(p_crc+167)=0x41BA;
*(p_crc+168)=0x01BE;
*(p_crc+169)=0xC07E;
*(p_crc+170)=0x807F;
*(p_crc+171)=0x41BF;
*(p_crc+172)=0x007D;
*(p_crc+173)=0xC1BD;
*(p_crc+174)=0x81BC;
*(p_crc+175)=0x407C;
*(p_crc+176)=0x01B4;
*(p_crc+177)=0xC074;
*(p_crc+178)=0x8075;
*(p_crc+179)=0x41B5;
*(p_crc+180)=0x0077;
*(p_crc+181)=0xC1B7;
*(p_crc+182)=0x81B6;
*(p_crc+183)=0x4076;
*(p_crc+184)=0x0072;
*(p_crc+185)=0xC1B2;
*(p_crc+186)=0x81B3;
*(p_crc+187)=0x4073;
*(p_crc+188)=0x01B1;
*(p_crc+189)=0xC071;
*(p_crc+190)=0x8070;
*(p_crc+191)=0x41B0;
*(p_crc+192)=0x0050;
*(p_crc+193)=0xC190;
*(p_crc+194)=0x8191;
*(p_crc+195)=0x4051;
*(p_crc+196)=0x0193;
*(p_crc+197)=0xC053;
*(p_crc+198)=0x8052;
*(p_crc+199)=0x4192;
*(p_crc+200)=0x0196;
*(p_crc+201)=0xC056;
*(p_crc+202)=0x8057;
*(p_crc+203)=0x4197;
*(p_crc+204)=0x0055;
*(p_crc+205)=0xC195;
*(p_crc+206)=0x8194;
*(p_crc+207)=0x4054;
*(p_crc+208)=0x019C;
*(p_crc+209)=0xC05C;
*(p_crc+210)=0x805D;
*(p_crc+211)=0x419D;
*(p_crc+212)=0x005F;
*(p_crc+213)=0xC19F;
*(p_crc+214)=0x819E;
*(p_crc+215)=0x405E;
*(p_crc+216)=0x005A;
*(p_crc+217)=0xC19A;
*(p_crc+218)=0x819B;
*(p_crc+219)=0x405B;
*(p_crc+220)=0x0199;
*(p_crc+221)=0xC059;
*(p_crc+222)=0x8058;
*(p_crc+223)=0x4198;
*(p_crc+224)=0x0188;
*(p_crc+225)=0xC048;
*(p_crc+226)=0x8049;
*(p_crc+227)=0x4189;
*(p_crc+228)=0x004B;
*(p_crc+229)=0xC18B;
*(p_crc+230)=0x818A;
*(p_crc+231)=0x404A;
*(p_crc+232)=0x004E;
*(p_crc+233)=0xC18E;
*(p_crc+234)=0x818F;
*(p_crc+235)=0x404F;
*(p_crc+236)=0x018D;
*(p_crc+237)=0xC04D;
*(p_crc+238)=0x804C;
*(p_crc+239)=0x418C;
*(p_crc+240)=0x0044;
*(p_crc+241)=0xC184;
*(p_crc+242)=0x8185;
*(p_crc+243)=0x4045;
*(p_crc+244)=0x0187;
*(p_crc+245)=0xC047;
*(p_crc+246)=0x8046;
*(p_crc+247)=0x4186;
*(p_crc+248)=0x0182;
*(p_crc+249)=0xC042;
*(p_crc+250)=0x8043;
*(p_crc+251)=0x4183;
*(p_crc+252)=0x0041;
*(p_crc+253)=0xC181;
*(p_crc+254)=0x8180;
*(p_crc+255)=0x4040;
}
//////////////////////////////////////
//////////////
BYTE getNUM(volatile unsigned int index){
int i;
int j;
BYTE temp;
i=index/2;
j=index%2;
if(j==0)
temp=(BYTE)(p_crc[i]>>8);
else
temp=(BYTE)p_crc[i];
return temp;
}
unsigned int cal_crc(volatile unsigned char *ptr,volatile unsigned int len) {
unsigned int crc;
BYTE cccc0,cccc1,cccc2,cccc3;
unsigned int i2;
/* CRC余式表 */
load_crc_table();
cccc0=0;
cccc1=0;
cccc2=0;
cccc3=0;
for(i2=0;i2<len;i2++){
cccc0=getNUM( ( ptr[i2] ^ cccc2)*2 );
cccc0=cccc0&0xff;
cccc1=getNUM( (( ptr[i2]^ cccc2)*2)+1) ;
cccc1=cccc1&0xff;
cccc2=cccc0^cccc3;
cccc2=cccc2&0xff;
cccc3=cccc1;
}
crc=(cccc2<<8)+cccc3;
return(crc);
}
///////////////
int crc_YesNo(){
unsigned int crc;
unsigned int com_data;
if(start_index<0)
return -1;
if(end_index<0)
return -1;
com_data=( ((*(p_recbuf+end_index-1)))<<8 )+((*(p_recbuf+end_index))&0xff);
crc=cal_crc(p_recbuf+start_index,end_index-start_index-1);
if(com_data!=crc)
return 0;
return 1;
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -