![USBCAN適配器設(shè)計(jì)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/2/9840eec6-3b11-4697-95b3-c02a0f14c305/9840eec6-3b11-4697-95b3-c02a0f14c3051.gif)
![USBCAN適配器設(shè)計(jì)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/2/9840eec6-3b11-4697-95b3-c02a0f14c305/9840eec6-3b11-4697-95b3-c02a0f14c3052.gif)
![USBCAN適配器設(shè)計(jì)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/2/9840eec6-3b11-4697-95b3-c02a0f14c305/9840eec6-3b11-4697-95b3-c02a0f14c3053.gif)
![USBCAN適配器設(shè)計(jì)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/2/9840eec6-3b11-4697-95b3-c02a0f14c305/9840eec6-3b11-4697-95b3-c02a0f14c3054.gif)
![USBCAN適配器設(shè)計(jì)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/2/9840eec6-3b11-4697-95b3-c02a0f14c305/9840eec6-3b11-4697-95b3-c02a0f14c3055.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于USB的CAN總線適配器設(shè)計(jì)07自動(dòng)化4班 梁海森 (200730460411) 鄺巨泉 (200730460409)1、摘 要 隨著現(xiàn)場(chǎng)總線技術(shù)和計(jì)算機(jī)外設(shè)接口技術(shù)的發(fā)展,現(xiàn)場(chǎng)總線與計(jì)算機(jī)快速有效的連接又有了更多的方案,USB作為一種新型的接口技術(shù),以其簡(jiǎn)單易用、速度快等特點(diǎn)而備受青睞。本文簡(jiǎn)要提出了USB 接口與CAN總線連接方案,論述了系統(tǒng)的硬件構(gòu)成,固件開發(fā)和驅(qū)動(dòng)程序等內(nèi)容。 關(guān)鍵詞:現(xiàn)場(chǎng)總線 USB CAN總線2、引 言 現(xiàn)場(chǎng)總線作為二十世紀(jì)80年代發(fā)展起來的新興技術(shù),在工業(yè)現(xiàn)場(chǎng)已有了廣泛的應(yīng)用。隨著信息技術(shù)的飛速發(fā)展,各種數(shù)據(jù)的實(shí)時(shí)采集和處理在現(xiàn)代工業(yè)控制中已成為必不可少的部分
2、。這要求我們?cè)O(shè)計(jì)的接口簡(jiǎn)單靈活且具有較高的數(shù)據(jù)傳輸率?,F(xiàn)場(chǎng)總線是連接智能現(xiàn)場(chǎng)設(shè)備和自動(dòng)化系統(tǒng)的數(shù)字式、雙向傳輸、多分支結(jié)構(gòu)的通信網(wǎng)絡(luò)。如何將其與PC機(jī)安全可靠低成本的互連,是一個(gè)亟待解決的問題。傳統(tǒng)的外設(shè)與主機(jī)的通信接口難以滿足上述要求。這些接口一般采用PCI總線或RS-232串行總線。PCI總線雖然有很高的傳輸率(可達(dá)132Mbps),但是它們的擴(kuò)充槽相當(dāng)有限,且設(shè)計(jì)復(fù)雜。RS-232串行總線連接方便,可是它的帶寬非常有限,傳輸速度慢。USB技術(shù)正是順應(yīng)這一要求提出的一種快速的,雙向的,同步傳輸?shù)?廉價(jià)的并可以進(jìn)行熱插拔的通用串行總線。它還提供了內(nèi)置電源,可向低壓設(shè)備提供5伏的電源。正是由于
3、USB的這些特點(diǎn),使其獲得了廣泛的應(yīng)用。CAN總線是現(xiàn)場(chǎng)總線的一種有效支持分布式控制或?qū)崟r(shí)控制的串行通信網(wǎng)絡(luò),具有卓越的特性和極高的可靠性,特別適合工業(yè)過程監(jiān)控設(shè)備的互連,被公認(rèn)為幾種最有前途的現(xiàn)場(chǎng)設(shè)備總線之一。整個(gè)系統(tǒng)設(shè)計(jì)目的就是設(shè)計(jì)一個(gè)適配器,可以將CAN總線數(shù)據(jù)通過USB接口迅速轉(zhuǎn)送到PC機(jī)進(jìn)行處理分析,也可以通過它向CAN節(jié)點(diǎn)傳送數(shù)據(jù)或命令,以實(shí)現(xiàn)計(jì)算機(jī)與現(xiàn)場(chǎng)設(shè)備的通訊。3、硬件電路的設(shè)計(jì)該系統(tǒng)主要由AT89C52控制電路、USB 接口電路、CAN總線電路、掛起復(fù)位電路、光電隔離電路等組成,本設(shè)計(jì)系統(tǒng)主要部件結(jié)構(gòu)圖如下:圖1 硬件電路結(jié)構(gòu)圖圖2 硬件仿真原理圖3.1 AT89C52控制
4、電路AT89C52 是一個(gè)低電壓,高性能CMOS 8位單片機(jī),片內(nèi)置8k bytes的可反復(fù)擦寫的Flash存儲(chǔ)單元和256 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),功能強(qiáng)大。89C52是該接口電路的控制核心,其中P0,P2口用做16位數(shù)據(jù)I/O口,P1,P3口用做控制。3.2 CAN總線在本系統(tǒng)中,CAN控制器采用Philips公司生產(chǎn)的SJA1000,它作為一個(gè)發(fā)送、接受緩沖器,實(shí)現(xiàn)主控制器和總線之間的數(shù)據(jù)傳輸;CAN收發(fā)器采用TJA1050芯片,它是CAN控制器和物理總線的接口,主要可以提供對(duì)總線的差動(dòng)發(fā)送能力和對(duì)CAN控制器的差動(dòng)接受能力。 在CAN總線結(jié)構(gòu)中,總線的兩端還要配置兩個(gè)
5、120的電阻,其作用是總線匹配阻抗,可以增加總線傳輸?shù)姆€(wěn)定性和抗干擾能力,減少數(shù)據(jù)傳輸中的出錯(cuò)率。為了增強(qiáng)CAN總線節(jié)點(diǎn)的抗干擾能力,SJA1000的TXO和RX0可通過高速光耦6N137與TJA1050相連,這樣就很好的實(shí)現(xiàn)了總線上各節(jié)點(diǎn)的電氣隔離。光耦部分電源與CAN_V必須用小功率電源隔離模塊進(jìn)行隔離,這樣就提高了節(jié)點(diǎn)的穩(wěn)定性和安全性。3.3 USB接口本設(shè)計(jì)中的PDIUSBD12是一個(gè)性能優(yōu)化的USB器件,通常用于基于微控制器的系統(tǒng)并與微控制器通過高速通用并行接口進(jìn)行通信。PDIUSBD12與MCU的接口有2種方式:多路地址/數(shù)據(jù)總線方式、單地址/數(shù)據(jù)總線方式。在這個(gè)系統(tǒng)中,我們采用的
6、是前一種方式:使用了AT89C52的INT0、ALE、WR、RD和P0口,A0 腳接地,當(dāng)PDIUSBD12接收到主機(jī)的有效信息時(shí),會(huì)產(chǎn)生一個(gè)中斷通知89C52進(jìn)行處理。若單片機(jī)的輸出地址為奇數(shù),則表示對(duì)PDIUSBD12發(fā)送指令;若輸出地址為偶數(shù),則表示對(duì)PDIUSBD12進(jìn)行數(shù)據(jù)傳輸。AT89C52將數(shù)據(jù)經(jīng)PDIUSBD12的并行接口送入FIFO存儲(chǔ)器。對(duì)一個(gè)單片機(jī)而言,PDIUSBD12看起來就像1個(gè)帶8位數(shù)據(jù)總線和1個(gè)地址位的存儲(chǔ)器件??刂艭LKOUT 時(shí)鐘輸出為SJA1000提供時(shí)鐘輸入。由于在USB的信號(hào)傳遞過程中會(huì)摻雜進(jìn)瞬間的高壓噪聲,這些噪聲對(duì)USB口的收發(fā)電路將產(chǎn)生致命的危害
7、,因此需要對(duì)這些噪聲電壓進(jìn)行抑制。在USB接口電路中使用了SN75240,它可以對(duì)USB接口中的不正常電壓進(jìn)行有效的抑制,以保證硬件設(shè)備的安全。4、微控制器的固件編程4.1 CAN總線的軟件設(shè)計(jì)CAN總線的三層結(jié)構(gòu)模型為:物理層、數(shù)據(jù)鏈路層和應(yīng)用層。其中物理層和數(shù)據(jù)鏈路層的功能由SJA1000完成,系統(tǒng)的開發(fā)主要在應(yīng)用層軟件的設(shè)計(jì)上,它主要由三個(gè)子程序:初始化子程序、發(fā)送數(shù)據(jù)和接收數(shù)據(jù)程序。同時(shí),還包括一些數(shù)據(jù)溢出中斷以及幀出錯(cuò)的處理。SJA1000在上電硬件復(fù)位之后,必須對(duì)其進(jìn)行軟件初始化之后才可以進(jìn)行數(shù)據(jù)通訊,初始化過程主要包括對(duì)其復(fù)位模式下配置時(shí)鐘分頻寄存器CDR、總線定時(shí)寄存器BTR0
8、和BTR1、驗(yàn)收代碼寄存器ACR、驗(yàn)收屏蔽寄存器AMR及輸出控制寄存器OCR等,實(shí)現(xiàn)對(duì)總線的速率、驗(yàn)收屏蔽碼、輸出引腳驅(qū)動(dòng)方式、總線模式及時(shí)鐘分頻進(jìn)行定義。下面為SJA1000發(fā)送和接收數(shù)據(jù)的流程,基本過程為主控制器將數(shù)據(jù)保存到SJA1000發(fā)送緩沖器,然后對(duì)命令寄存器的發(fā)送請(qǐng)求TR標(biāo)志位進(jìn)行置位開始發(fā)送;接收過程為SJA1000將從總線上接收到的數(shù)據(jù)存入接收緩沖器,通過其中斷標(biāo)志位通知主控制器來處理接收到的信息,接收完畢之后清空緩沖器,等待下次接收3。 圖3 CAN的發(fā)送數(shù)據(jù)流程 圖4 CAN接收數(shù)據(jù)的流程圖 發(fā)送數(shù)據(jù)子程序代碼(例):int can_tran_file(int id ,ch
9、ar *f)void far *ptr;char ch;int i,j,re_comd,length;FILE *fp; get_ram_access_right(); /*獲得雙口RAM控制權(quán)*/ ptr=MK-FP(oxd000,0); /*將命令、文件名、文件長(zhǎng)度和文件內(nèi)存 入雙口RAM*/FP_OFF(ptr)+=ox100; pokeb(FP_SEG(ptr),FP_OFF(ptr),02); FP_OFF(ptr)+; pokeb(FP SEG(ptr),FP OFF(ptr),id); FP_OFF(ptr)+; pokeb(FP_SEG(ptr),FP_OFF(ptr),1);
10、 FP_OFF(ptr)+; i=0; while(fi!='0') pokeb(FP_SEG(ptr),FP_OFF(ptr),fi); FP_OFF(ptr)+; i+; pokeb(FP_SEG(ptr),FP_OFF(ptr),fi); ptr=MK_FP(oxd000,0);FP_OFF(ptr)+=ox120;if(!(fp=fopen(f,"rb")release_ram_acces_right();return(6); i=0; while(!feof(fp) fread(&ch,sizeof(char),1,fp); pokeb(F
11、P_SEG(ptr),FP_OFF(ptr),ch); FP_OFF(ptr)+; i+; fclose(fp); length=i-1; ptr=MK_FP(oxd000,0); FP_OFF(ptr)+=0x114; poke(FP_SEG(ptr),FP_OFF(ptr),length); release_ram_acces_right(); /*釋放雙口RAM控制權(quán)*/ inportb(0x218); /*延時(shí)*/ for(i=0;i<6000;i+)ch='0' /*獲得雙口RAM控制權(quán)*/ get_ram_access_right(); prt=MK_FP(o
12、xd000,0); FP_OFF(ptr)+=ox4000; re_comd=peekb(FP_SEG(ptr),FP_OFF(ptr); if(re_comd=0x12) /*查詢傳送文件是否成功*/ pokeb(FP_SEG(ptr),FP_OFF(ptr),0); release_ram_acces_right(); return(1); /*傳送成功,返回1*/ else ptr=MK_FP(oxd000,0); FP_OFF(ptr)+=ox4020; i=peekb(FP_SEG(ptr),FP_OFF(ptr); release_ram_acces_right(); return
13、(i); 接收數(shù)據(jù)子程序代碼(例):int can_recv_file(int id,char *f) void fra *ptr; char ch; int i,j,re_comd,length; file *fp; get_ram_access_right();/*得到雙口ram控制權(quán)*/ ptr=mk_fp(oxd000,0); fp_off(ptr)+=ox100; pokeb(fp_seg(ptr),fp_off(ptr),01); fp_off(ptr)+; pokeb(fp_seg(ptr),fp_off(ptr),id); fp_off(ptr)+; pokeb(fp_seg(
14、ptr),fp_pff(ptr),1); fp_off(ptr)+; i=0; while(fi!='0') pokeb(fp_seg(ptr),fp_off(ptr),fi); fp_off(ptr)+; i+; pokeb(fp_seg(ptr),fp_off(ptr),fi);release_ram_acces_right();/*釋放雙口ram控制權(quán)*/inportb(ox218); for(i=0;i<6000;i+)ch='0'get_ram_access_right(); /*得到雙口ram控制權(quán)*/ptr=mk_fp(oxd000,0);f
15、p_off(ptr)+=ox4000;re_comd=peekb(fp_seg(ptr),fp_off(ptr);if(re_comd=ox11) pokeb(fp_seg(ptr),fp_off(ptr),0); if(!(fp=fopen(f,"wb") release_ram_accea_right(); /*釋放雙口ram控制權(quán)*/ return(6); ptr=mk_fp(oxd000,0); fp_off(ptr)+=ox4014; lenght=peek(fp_seg(ptr),fp_off(ptr); ptr=mk_fp(oxd000,0); fp_off(
16、ptr)+=ox4020;fwrite(ptr,sizeof(char),length,fp);fclose(fp);release_ram_acces_right();return(1); /*接收成功,返回1*/else ptr=mk_fp(oxd000,0); fp_off(ptr)+=ox4020; i=peekb(fp_seg(ptr),fp_off(ptr);release_ram_acces_right(); return(i);/*接收失敗,返回出錯(cuò)內(nèi)容*/ CAN初始化程序:void init_can()large unsigned int data i; for (i=0;
17、i<512;i+) _nop_() con_reg=ox41; /*設(shè)置軟件復(fù)位*/ for(i=0;i<512;i+) _nop_() cpu_inter_reg=ox41; /*設(shè)置cpu接口reg*/ clk_out_reg=ox30; bus_config_reg=0; g_m_s_reg0=oxff; /*設(shè)置標(biāo)準(zhǔn)標(biāo)識(shí)符屏蔽reg*/ g_m_s_reg1=ox1f; g_m_e_reg0=oxff; g_m_e_reg1=oxff;g_m_e_reg2=oxff; g_e_s_reg3=oxff; m15_m_reg0=oxff;/*設(shè)置15號(hào)信息塊*/ m15_m_r
18、eg1=ox1f; m15_m_reg2=oxff; m15_m_reg3=oxff; tim0_reg=ox87; tim1_reg=oxc8; mesg_reg10=ox55;/*設(shè)置1到15好信息塊的控制reg*/mesg_reg20=ox55;mesg_reg30=ox55;mesg_reg40=ox55;mesg_reg50=ox55;mesg_reg60=ox55;mesg_reg70=ox55;mesg_reg80=ox55;mesg_reg90=ox55;mesg_rega0=ox55;mesg_regb0=ox55;mesg_regc0=ox55;mesg_regd0=ox5
19、5;mesg_rege0=ox55;mesg_regf0=ox55; mesg_reg16=ox88;/*將1號(hào)信息塊設(shè)置成傳輸方式*/mesg_reg12=oxf3;mesg_reg13=0;mesg_reg14=0;mesg_reg15=0;mesg_reg10=ox95;mesg_reg26=ox80;/*將2號(hào)信息塊設(shè)置成接收方式*/mesg_reg22=oxf0;mesg_reg24=0;mesg_reg25=0;mesg_reg21=ox55;mesg_reg20=ox99;mesg_regf6=ox80;/*將15號(hào)信息塊設(shè)置成接收方式*/mesg_regf1=ox55;mesg
20、_regf0=ox99;con_reg=ox02;/*設(shè)置控制reg*/5、 USB總線的軟件設(shè)計(jì)1、USB驅(qū)動(dòng)程序設(shè)計(jì):在Windows環(huán)境下,不允許用戶在應(yīng)用程序中直接訪問硬件設(shè)備,應(yīng)用程序必須通過一個(gè)中間橋梁才能訪問硬件設(shè)備,這個(gè)中間橋梁就是設(shè)備驅(qū)動(dòng)程序。驅(qū)動(dòng)程序是一個(gè)軟件,是連接應(yīng)用程序、硬件以及操作系統(tǒng)的橋梁,裝入后成為操作系統(tǒng)內(nèi)核的一部分。在這里應(yīng)用DriverStudio軟件來編寫驅(qū)動(dòng)程序,DriverStudio把那些每個(gè)驅(qū)動(dòng)程序都需要的代碼都封裝成類庫。庫代碼自動(dòng)地處理例行的操作,這極大地簡(jiǎn)小了任務(wù)的復(fù)雜度。而且,C+編譯器提供了ANSIC 所不具備的優(yōu)點(diǎn):包括改進(jìn)的類型安全
21、檢查,內(nèi)連函數(shù)優(yōu)化,以及更好的代碼組織。下面為用DriverStudio開發(fā)一個(gè)USB驅(qū)動(dòng)程序的過程。寫這個(gè)驅(qū)動(dòng)程序只要用到DriverWorks。1) 首先打開VC+6.0軟件在菜單中選擇DriverStudio選項(xiàng)中的DriverWorks。2) 選擇其中的Start aNew Driver Project選項(xiàng),創(chuàng)建一個(gè)新工程。3) 命名工程,保存,點(diǎn)擊next。4) 選擇驅(qū)動(dòng)程序的類型。由于USB設(shè)備驅(qū)動(dòng)程序是WDM類型的,所以選擇第一項(xiàng),并在下邊選擇Driverworks C+語言框架點(diǎn)擊按鈕“Next”。5) 選擇類型,由于的USB設(shè)備驅(qū)動(dòng)是要控制的硬件設(shè)備的,所以我們選擇第一項(xiàng),單
22、擊“Next”。6) 選擇的驅(qū)動(dòng)程序所操作的總線類型。這里選擇USB。在USB Vendor ID和USB Product ID中填入U(xiǎn)SB設(shè)備的VID和PID。點(diǎn)擊對(duì)話框中的,可以選擇電腦中連接的USB設(shè)備。在這里可以找到要識(shí)別的USB實(shí)驗(yàn)板,可以點(diǎn)擊select來選擇這個(gè)硬件。在接下來的對(duì)話框中,需要加入Endpoint1和Endpoint2的定義。點(diǎn)“Add”按鈕,彈出一個(gè)的對(duì)話框,按照USB的規(guī)定,對(duì)于端點(diǎn),它的地址是1;按照前面說明的設(shè)備的特點(diǎn),Endpoint1的最大的包大小為16字節(jié),因此在“Max Transer Size”中填入16;Endpoint Name可以通過“Sug
23、gest Name”得到。按照這些原則,繼續(xù)設(shè)置其他的配置,接下來繼續(xù)按“Next”按鈕。 7) 給驅(qū)動(dòng)程序增加一些IOCTL接口,然后點(diǎn)擊“Next”按鈕。 在接下來的對(duì)話框不需要?jiǎng)?chuàng)建任何注冊(cè)表項(xiàng),所以直接按“Next”按鈕,接下來為電源設(shè)置,選擇第1項(xiàng),按“Next”按鈕。8) 設(shè)置本驅(qū)動(dòng)程序的提供商,廠商的名字及設(shè)備描述,服務(wù)描述等。按“Next”按鈕。附加選項(xiàng),直接點(diǎn)“Next”按鈕。9) 最后得到確認(rèn)框圖,確認(rèn)無誤后選擇“Finish”完成了USB設(shè)備的驅(qū)動(dòng)程序的初步設(shè)置。從驅(qū)動(dòng)中讀數(shù)據(jù)的程序如下:void rec_data(unsigned char *can_rec) unsig
24、ned char outbuf105; HANDLE hFile, hDevice=0; BOOL bResult; ULONG nBytes = 0; nBytes =25; hFile = open_file("PIPE02"); if(hFile = INVALID_HANDLE_VALUE) return; hDevice = open_dev(); bResult = ReadFile(hFile,outbuf,10,&nBytes,NULL);if(bResult=FALSE) DeviceIoControl(hFile,IOCTL_D12_RESET_
25、PIPE,0,0,0,0,&nBytes,NULL); CloseHandle(hFile); CloseHandle(hDevice);2、PDIUSBD12程序設(shè)計(jì): PDIUSBD12 是一款帶有并行總線和局部DMA傳輸能力的高速USB 接口器件,它支持USB1.1協(xié)議的所有傳輸方式,在本設(shè)計(jì)中用到了控制傳輸,中斷傳輸和批量傳輸。控制傳輸處理主機(jī)到USB設(shè)備的控制信息,固定使用端點(diǎn)0。中斷傳輸用來傳送數(shù)據(jù)量很小,但需要及時(shí)處理,以達(dá)到實(shí)時(shí)效果的數(shù)據(jù),使用端點(diǎn)1。批量傳輸用來實(shí)現(xiàn)CAN節(jié)點(diǎn)與主機(jī)之間大數(shù)據(jù)快傳送,使用主端點(diǎn)(端點(diǎn)2),一次最大可發(fā)送64字節(jié)。PDIUSBD12 的固
26、件設(shè)計(jì)成完全的中斷驅(qū)動(dòng),當(dāng)MCU 處理前臺(tái)任務(wù)時(shí)USB 的傳輸可在后臺(tái)進(jìn)行。這就確保了最佳的傳輸速率和更好的軟件結(jié)構(gòu),同時(shí)簡(jiǎn)化了編程和調(diào)試。后臺(tái)ISR 中斷服務(wù)程序和前臺(tái)主程序循環(huán)之間的數(shù)據(jù)交換通過事件標(biāo)志和數(shù)據(jù)緩沖區(qū)來實(shí)現(xiàn),當(dāng)PDIUSBD12 從USB 收到一個(gè)數(shù)據(jù)包那么就對(duì)MCU 產(chǎn)生一個(gè)中斷請(qǐng)求,MCU立即響應(yīng)中斷,在ISR中固件將數(shù)據(jù)包從PDIUSBD12 內(nèi)部緩沖區(qū)移到數(shù)據(jù)緩沖區(qū),并在隨后清零PDIUSBD12 的內(nèi)部緩沖區(qū),以使能接收新的數(shù)據(jù)包。MCU 可以繼續(xù)它當(dāng)前的前臺(tái)任務(wù),返回到主循環(huán)檢查循環(huán)緩沖區(qū)內(nèi)是否有新的數(shù)據(jù)。 圖5 PDIUSBD12固件編程結(jié)構(gòu)圖這部分程序結(jié)構(gòu)可包
27、括:1) 請(qǐng)求處理程序?qū)SB的標(biāo)準(zhǔn)設(shè)備請(qǐng)求進(jìn)行處理和對(duì)用戶添加的廠商請(qǐng)求進(jìn)行處理;USB設(shè)備接入主機(jī)后要進(jìn)入復(fù)雜的設(shè)備列舉過程,并安裝正確的驅(qū)動(dòng)程序。2)硬件提取層對(duì)單片機(jī)的I/O口、數(shù)據(jù)總線等硬件接口進(jìn)行操作,該層包含最底層的函數(shù),這些函數(shù)在不同的MCU 平臺(tái)上需要進(jìn)行改變,void outportb(unsigned char port,unsigned char val);void inportb(unsigned char port);對(duì)PDIUSBD12 所有的I/O 訪問都可由它們實(shí)現(xiàn);3)PDIUSBD12 命令接口對(duì)PDIUSBD12器件進(jìn)行操作的模塊子程序集,以簡(jiǎn)化器件的編
28、程;4)中斷服務(wù)程序當(dāng)PDIUSBD12向單片機(jī)發(fā)出中斷請(qǐng)求時(shí),讀取PDIUSBD12的中斷傳輸來的數(shù)據(jù),并設(shè)定事件標(biāo)志和Setup包數(shù)據(jù)緩沖區(qū),傳輸給主循環(huán)。5)主循環(huán)發(fā)送USB請(qǐng)求,處理USB總線事件和用戶功能處理等。MCU 一旦上電就需要初始化其所有端口存儲(chǔ)區(qū),中斷服務(wù)程序。在主循環(huán)程序中MCU 對(duì)事件進(jìn)行輪詢,如有CAN總線發(fā)來的數(shù)據(jù),則送往PDIUSBD12進(jìn)行發(fā)送,如有USB總線數(shù)據(jù),則啟動(dòng)CAN發(fā)送程序,它們?cè)诮涌诘慕邮展ぷ鞣謩e由各自的中斷程序完成。要注意的是,我們?cè)谟昧薖DIUSBD12的端口最大一次可發(fā)送64字節(jié),SJA1000一次最多能發(fā)8字節(jié), 如果端口1傳輸?shù)拈L(zhǎng)度大于8
29、 字節(jié),MCU 在傳輸階段就必須根據(jù)數(shù)據(jù)大小,分?jǐn)?shù)次完成CAN數(shù)據(jù)的發(fā)送工作。PDIUSBD12初始化程序:void D12_init() D12_SetAddressEnable(0,1); D12_SetEndpointEnable(1); Disconnect(); Delay(2); Connect();D12_ReadInterruptRegister();6、上位機(jī)軟件的設(shè)計(jì) 在這里,我們采用Microsoft Visual C+6.0進(jìn)行主機(jī)程序設(shè)計(jì),具體操作步驟如下: 首先,新建一個(gè)文件,在彈出的對(duì)話框中選擇工程中的MFC AppWizard(exe)工程名為MFCApp,找到放置文
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)于砂石購(gòu)買標(biāo)準(zhǔn)合同范本
- 出版社教材出版合同范本
- 2025年食品級(jí)甘氨酸鈉項(xiàng)目投資可行性研究分析報(bào)告
- 中國(guó)勞動(dòng)合同范本
- 內(nèi)墻磁粉合同范例
- 2025年度城市供水排水工程承包合同書范本
- 2025年度國(guó)際食品飲料代理銷售合同
- 2025年度公路施工質(zhì)量檢測(cè)合同范本
- 2019-2025年中國(guó)勞動(dòng)保護(hù)服行業(yè)市場(chǎng)調(diào)研分析及投資戰(zhàn)略咨詢報(bào)告
- 2025年度建筑廢棄物綜合利用合同范本-@-2
- 政府資金項(xiàng)目(榮譽(yù))申報(bào)獎(jiǎng)勵(lì)辦法
- JJF 1069-2012 法定計(jì)量檢定機(jī)構(gòu)考核規(guī)范(培訓(xùn)講稿)
- 最新如何進(jìn)行隔代教育專業(yè)知識(shí)講座課件
- 當(dāng)前警察職務(wù)犯罪的特征、原因及防范,司法制度論文
- 計(jì)算機(jī)文化基礎(chǔ)單元設(shè)計(jì)-windows
- 創(chuàng)建動(dòng)物保護(hù)家園-完整精講版課件
- 廣東省保安服務(wù)監(jiān)管信息系統(tǒng)用戶手冊(cè)(操作手冊(cè))
- DNA 親子鑒定手冊(cè) 模板
- DB33T 1233-2021 基坑工程地下連續(xù)墻技術(shù)規(guī)程
- 天津 建設(shè)工程委托監(jiān)理合同(示范文本)
- 部編一年級(jí)語文下冊(cè)教材分析
評(píng)論
0/150
提交評(píng)論