Lin总线应用层代码
生活随笔
收集整理的這篇文章主要介紹了
Lin总线应用层代码
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
畢業(yè)設(shè)計(jì)做的Lin總線,關(guān)鍵代碼貼出來。
計(jì)算校驗(yàn)和
unsigned char LINCalcChecksum(unsigned char *data) {unsigned int sum = 0;unsigned char i;for(i = 0; i < 4; i++){sum += data[i];if(sum&0xFF00)sum = (sum&0x00FF) + 1;}sum ^= 0x00FF; return (unsigned char)sum; }結(jié)構(gòu)體 //FrameProgress代表從機(jī)接收幀的進(jìn)度, // FrameProgress=0x00代表進(jìn)度0, // FrameProgress=0x01代表進(jìn)度1, // FrameProgress=0x02代表進(jìn)度2, // FrameProgress=0x03代表進(jìn)度3。 //每當(dāng)有中斷(sci)發(fā)生,先檢測(cè)進(jìn)度根據(jù)進(jìn)度執(zhí)行相應(yīng)的代碼段 //進(jìn)度0:接收0x55,接收成功則設(shè)置進(jìn)度為進(jìn)度1 //進(jìn)度1:接收ID ,接收成功則設(shè)置進(jìn)度為進(jìn)度2 //進(jìn)度2:接收數(shù)據(jù)字節(jié),接收成功設(shè)置為進(jìn)度3 //進(jìn)度3:設(shè)置執(zhí)行標(biāo)志位(ReceiveLinDataCompleted)為'執(zhí)行'(True),主程序檢測(cè)到執(zhí)行標(biāo)志位為'執(zhí)行'則執(zhí)行檢查校驗(yàn)和解析數(shù)據(jù)字節(jié)執(zhí)行相應(yīng)的操作 unsigned char LinFrameByte=0x00; unsigned char FrameProgress=0x00;//LinDataProgress是接收Lin幀中的數(shù)據(jù)字節(jié)的進(jìn)度 unsigned char LinDataProgress =0x00; Bool ReceiveLinDataCompleted = 0;struct LinMessageStruct{unsigned char LinData[5];}; struct LinMessageStruct LinMessage;
串口接收 unsigned char SCI接收(void) {while(!SCI0SR1_RDRF); return(SCI0DRL); }
初始化鎖相環(huán)
void INIT_鎖相環(huán)(void) {CLKSEL &= 0x7f; PLLCTL &= 0x8F; CRGINT &= 0xDF;#if(BUS_CLOCK == 40000000) SYNR = 0x44;#elif(BUS_CLOCK == 32000000)SYNR = 0x43; #elif(BUS_CLOCK == 24000000)SYNR = 0x42;#endif REFDV = 0x81; PLLCTL =PLLCTL|0x70; asm NOP;asm NOP;while(!(CRGFLG&0x08)); CLKSEL |= 0x80; }Lin總線應(yīng)用層代碼
Lin總線應(yīng)用層代碼
Lin總線應(yīng)用層代碼
串口中斷接收函數(shù)
#pragma CODE_SEG __NEAR_SEG NON_BANKED interrupt void Receivedata(void) { LinFrameByte = SCI_receive(); if(FrameProgress==0x00) { if(LinFrameByte !=0x55){ return; } if(LinFrameByte ==0x55){ FrameProgress=0x01; return; } }if(FrameProgress==0x01) { //暫時(shí)不用奇偶校驗(yàn)if(ID==LinFrameByte) {FrameProgress=0x02;}return;} if(FrameProgress==0x02) { //接收數(shù)據(jù)if(LinDataProgress==0x00){ LinMessage.LinData[0]=LinFrameByte;LinDataProgress=0x01; return; }if(LinDataProgress==0x01){ LinMessage.LinData[1]=LinFrameByte;LinDataProgress=0x02; return; }if(LinDataProgress==0x02){ LinMessage.LinData[2]=LinFrameByte;LinDataProgress=0x03; return; }if(LinDataProgress==0x03){ LinMessage.LinData[3]=LinFrameByte;LinDataProgress=0x04; return; }if(LinDataProgress==0x04){ LinMessage.LinData[4]=LinFrameByte;LinDataProgress=0x00; }//數(shù)據(jù)接收完成 ReceiveLinDataCompleted = 1;FrameProgress=0x00;return;} } #pragma CODE_SEG DEFAULT總結(jié)
以上是生活随笔為你收集整理的Lin总线应用层代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快手:推出全店ROI新型运营机制
- 下一篇: 爱奇艺公布2022年财报:净利负1.36