Lin总线应用层代码
生活随笔
收集整理的這篇文章主要介紹了
Lin总线应用层代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
畢業設計做的Lin總線,關鍵代碼貼出來。
計算校驗和
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; }結構體 //FrameProgress代表從機接收幀的進度, // FrameProgress=0x00代表進度0, // FrameProgress=0x01代表進度1, // FrameProgress=0x02代表進度2, // FrameProgress=0x03代表進度3。 //每當有中斷(sci)發生,先檢測進度根據進度執行相應的代碼段 //進度0:接收0x55,接收成功則設置進度為進度1 //進度1:接收ID ,接收成功則設置進度為進度2 //進度2:接收數據字節,接收成功設置為進度3 //進度3:設置執行標志位(ReceiveLinDataCompleted)為'執行'(True),主程序檢測到執行標志位為'執行'則執行檢查校驗和解析數據字節執行相應的操作 unsigned char LinFrameByte=0x00; unsigned char FrameProgress=0x00;//LinDataProgress是接收Lin幀中的數據字節的進度 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); }
初始化鎖相環
void INIT_鎖相環(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總線應用層代碼
Lin總線應用層代碼
Lin總線應用層代碼
串口中斷接收函數
#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) { //暫時不用奇偶校驗if(ID==LinFrameByte) {FrameProgress=0x02;}return;} if(FrameProgress==0x02) { //接收數據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; }//數據接收完成 ReceiveLinDataCompleted = 1;FrameProgress=0x00;return;} } #pragma CODE_SEG DEFAULT總結
以上是生活随笔為你收集整理的Lin总线应用层代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快手:推出全店ROI新型运营机制
- 下一篇: 爱奇艺公布2022年财报:净利负1.36