CAN总线总结和心得_第1页
CAN总线总结和心得_第2页
CAN总线总结和心得_第3页
CAN总线总结和心得_第4页
CAN总线总结和心得_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

以MCP2510爲控制器的CAN總綫使用後心得經過對由MCP2510爲控制器的CAN匯流排的應用,大致得出了以下結論。一首先是對晶片的電路接法,MCP2510的4、5、6、10、11可以空置,第3腳(CLK輸出脚)可以接到CPU的OSC腳,以取代CPU的震蕩體,但最好不用。如果對實時要求不高的話,第12脚(中斷脚)也可以空置。還有因爲MCP2551性能不好,易損壞。連到TXCAN、RXCAN的LED和5V間的電阻阻值不宜過小,取5K以上,最好不接。MCP2551的8脚决定了晶片的工作功耗,接地是高速模式(功耗大),接5V就會進入低功耗模式,和地之間接47K電阻是斜率模式(經常是用這種方式)。第5脚的功能是輸出VDD/2的電壓,供別的晶片使用,這裏不用接。最好用PCA82C250/251取代,管脚的接法和用法和MCP2551相容。二這部分主要是對SPI和晶片的操作碼作一分析。下面的例子都是以PIC16F877爲平臺,用組合語言來編寫。對SPI介面的讀寫方法如下:初始化SPI:InitSSPBANKSELSSPSTAT; SSPSTAT = 0x94 CKE=0 for mode 00 Operation bsfSSPSTAT,6bcfSSPSTAT,7BANKSELPORT_CS2510; The PORT of CS2510 pins locationbsfCS2510BANKSELSSPCON; SSPCON = 0x20movlwb00100000; CKP=0 , Master Mode with Fosc/4 clockmovwfSSPCON returnSPI介面的讀和寫。寫:先把數傳入W,再調用Write_SPI_Byte。讀:先調用Write_SPI_Byte,讀出的資料存放在W。每次讀寫時要使CS脚爲0,讀寫完畢CS置1,下面是副程式:Write_SPI_ByteBANKSELSSPBUF movwfSSPBUFBANKSELSSPSTAT; Switch to SSPSTAT in order to test the BF FlagWait_BF btfssSSPSTAT,BFgotoWait_BFBANKSELSSPBUF; Read from SSPBUF will update BF Flag Automately !movfSSPBUF,Wreturn控制MCP2510晶片方法:先說一下MCP2510晶片的操作,共有6個操作碼,重定,位元修改,讀數據,寫資料,讀晶片的各發送器和接收器的狀態,請求發送開始。下面使各操作的副程式:重定,不需要參數,沒有返還變數:RESET_2510MACROBANKSELPORT_CS2510bcfCS2510movlwCMD_RESETcallWrite_SPI_ByteBANKSELPORT_CS2510bsfCS2510ENDM位修改,有3個參數,M_DATA:要修改的內容 M_ADD:要修改寄存器的地址M_MASK:對修改內容的遮罩寄存器,沒有返還變數:MODIFY_2510MACROM_ADD,M_MASK,M_DATABANKSELPORT_CS2510bcfCS2510movlwCMD_MODIFYcallWrite_SPI_BytemovlwM_ADDcallWrite_SPI_BytemovlwM_MASKcallWrite_SPI_BytemovlwM_DATAcallWrite_SPI_ByteBANKSELPORT_CS2510bsfCS2510ENDM讀晶片的各發送器和接收器的狀態,狀態字返還到變數STATUS_byte中:STATUS_2510MACROBANKSELPORT_CS2510bcfCS2510movlwCMD_STATUScallWrite_SPI_Bytemovlw0xffcallWrite_SPI_BytemovwfSTATUS_bytecallWrite_SPI_BytesubwfSTATUS_byte,WbtfssSTATUS,ZclrfSTATUS_byteBANKSELPORT_CS2510bsfCS2510ENDM請求發送開始,這個副程式是發送發送器0裏面的資料,如要發送1把CMD_RTS0改成CMD_RTS1,發送2把CMD_RTS0改成CMD_RTS2,沒有返還值:SEND_TXB0MACROBANKSELPORT_CS2510bcfCS2510movlwCMD_RTS0; TRansmit Buffer 0callWrite_SPI_ByteBANKSELPORT_CS2510bsfCS2510ENDM讀數據,1個參數,R_ADD:指定寄存器地址,返還的寄存器內容存入W中:READ_2510MACROR_ADDBANKSELPORT_CS2510bcfCS2510movlwCMD_READcallWrite_SPI_BytemovlwR_ADDcallWrite_SPI_Bytemovlw0xffcallWrite_SPI_ByteBANKSELPORT_CS2510bsfCS2510ENDM寫資料,2個參數,W_DATA:寫入內容W_ADD:寫入地址,W_DATA是常量。沒有返還值:WRITE_2510MACROW_ADD,W_DATABANKSELPORT_CS2510bcfCS2510movlwCMD_WRITEcallWrite_SPI_BytemovlwW_ADDcallWrite_SPI_BytemovlwW_DATAcallWrite_SPI_ByteBANKSELPORT_CS2510bsfCS2510ENDM除了這些,爲了編程方便,還擴展了幾種操作方式,寫資料(W_DATA爲變數),多位元組讀數據,多位元組寫資料。寫資料,這個副程式功能和WRITE_2510一樣,區別在于WRITE_2510的W_DATA是個常量,調用這個宏的時候W_DATA是固定不變的,WRITE_2510_DATA的W_DATA是個變數,寄存器裏的值可變化:WRITE_2510_DATAMACROW_ADD,W_DATABANKSELPORT_CS2510bcfCS2510movlwCMD_WRITEcallWrite_SPI_BytemovlwW_ADDcallWrite_SPI_BytemovfW_DATA,WcallWrite_SPI_ByteBANKSELPORT_CS2510bsfCS2510ENDM多位元組讀數據,有3個參數,FSR:讀出資料緩衝區的指標,這是個間接定址寄存器,存放指標位址,讀出來的資料就存放在FSR指定的寄存器內Addr_2510:MCP2510的讀出首地址Dlen_2510:讀出資料長度:WRITE_2510SmovlwBuf_2510movwfFSRBANKSELPORT_CS2510bcfCS2510movlwCMD_WRITE; Write command of MCP2510callWrite_SPI_ByteBANKSELAddr_2510movfAddr_2510,WcallWrite_SPI_Byte; Starting Address !WRITE_2510S_LoopmovfINDF,W; Move data from FSR to WcallWrite_SPI_Byte; Write to MCP2510incfFSR,F; Point to next addressBANKSELDlen_2510DecfszDlen_2510,F; Check the condition of end of datagotoWRITE_2510S_LoopBANKSELPORT_CS2510bsfCS2510return多位元組寫資料READ_2510S,有3個參數,FSR:寫入資料緩衝區的指標,這是個間接定址寄存器,存放指標地址,Addr_2510:MCP2510的寫入首地址Dlen_2510:寫入資料長度:READ_2510SmovlwBuf_RECmovwfFSRBANKSELPORT_CS2510bcfCS2510movlwCMD_READ; Write command of MCP2510callWrite_SPI_ByteBANKSELAddr_2510movfAddr_2510,WcallWrite_SPI_Byte; Starting Address !READ_2510S_Loopmovlw0x00callWrite_SPI_BytemovwfINDF; Write to FSRincfFSRBANKSELDlen_2510DecfszDlen_2510,F; Check the total data readgotoREAD_2510S_LoopBANKSELPORT_CS2510bsfCS2510return三接下來是如何來進行CAN匯流排資料的發送和接收。首先是對MCP2510的初始化:1 重定,緊接著延時一下,以確保進入配置模式RESET_2510callDelay_MCP2510;一個延時副程式,不用太長時間2 進入配置模式,其實在重定時已進入配置模式,可以去掉MODIFY_2510CANCTRL,b11100000,b10000000; Set to Configure Mode3 設置震蕩脚是否輸出,幷且可以設置頻率,上電重定時是晶片震蕩體的八分之一頻率MODIFY_2510CANCTRL,b00000111,b00000100; Set Clock Out Freq4 設置CAN匯流排的串列傳輸速率,下面設置是125K/SWRITE_2510CNF1,b00000111; Set CNF1 , TQ = 2*8*1/16M = 1us 125k/bps WRITE_2510CNF2,b10010000; Set CNF2 , PHASE1:3TQ,PRSEG:1TQ WRITE_2510CNF3,b00000010; Set CNF3 , PHASE2:3TQ5 設置中斷,下面設置是二個接收器中斷打開WRITE_2510CANINTE,b000000116 設置三個發送器和二個接收器的控制寄存器WRITE_2510TXB0CTRL,b00000011; TXB0CTRL , Supreme PRI WRITE_2510TXB1CTRL,b00000010; TXB1CTRL , WRITE_2510TXB2CTRL,b00000001; TXB2CTRL , The lowest PRIWRITE_2510RXB0CTRL,b00000100; RXB0CTRL , 接收滾存WRITE_2510RXB1CTRL,b00000000; RXB1CTRL ,7 配置各接收器的濾波驗收寄存器和遮罩寄存器,下面的配置是接收和RXF0SIDH寄存器相等的資料,就是和常數MESSAGE相等WRITE_2510RXF0SIDH, MESSAGE; MESSAGE is filter address WRITE_2510RXF0SIDL,0x8WRITE_2510RXF1SIDH,0xff WRITE_2510RXF1SIDL,0x8WRITE_2510RXF2SIDH,0xff WRITE_2510RXF2SIDL,0x8WRITE_2510RXF3SIDH,0xff WRITE_2510RXF3SIDL,0x8WRITE_2510RXF4SIDH,0xff WRITE_2510RXF4SIDL,0x8WRITE_2510RXF5SIDH,0xff WRITE_2510RXF5SIDL,0x8WRITE_2510RXM0SIDH,0xff WRITE_2510RXM0SIDL,0x00 WRITE_2510RXM0EID8,0x00 WRITE_2510RXM0EID0,0x00 WRITE_2510RXM1SIDH,0xff WRITE_2510RXM1SIDL,0x00 WRITE_2510RXM1EID8,0x00 WRITE_2510RXM1EID0,0x008進入正常模式MODIFY_2510CANCTRL,b11100000,b00000000; Set to Normal Mode !發送副程式:有5個參數,MESSAGE_NO1:接收方地址Dlen_2510:發送的資料長度SERIAL_NUMBER_TYPE, SERIAL_NUMBER_IDH, SERIAL_NUMBER_IDL:産品編號,這是代表自身的地址,要接收的那台設備如果在濾波驗收寄存器裏設置了和這三個參數相等的數就會收到發過去的資料:TxMsgSTATUS_2510;先讀狀態字,確定發送器是否已準備好,沒有正在發的任務BANKSELSTATUS_bytebtfscSTATUS_byte,2gotoTxMsgWRITE_2510_DATATXB0SIDH,SERIAL_NUMBER_TYPE;寫發送地址 WRITE_2510TXB0SIDL,(MESSAGE_NO1 5) & b11100000) | b00001000)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论