freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于fpga的rs485通信畢業(yè)論文-資料下載頁

2025-06-18 16:01本頁面
  

【正文】 NULL) { RETAILMSG(1, (TEXT(FPGA0 INT Reg map failure.\r\n)))。 }在分配完FPGA訪問空間后,就需要從OAL請求一個SYSINTR值: if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, amp。g_nFpgaIrq, sizeof(UINT32), amp。g_nFpgaSysIntr, sizeof(UINT32), NULL)) { RETAILMSG(1, (_T( failed to request sysintr value for FPGA interrupt \r\n)))。 goto exit。 }請求成功后,在驅(qū)動的初始化函數(shù)中通過CreateEvent的方式來創(chuàng)建事件對象,就可以創(chuàng)建中斷線程: g_htFpgaIST = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) FPGA_IntrThread, NULL, 0, amp。dwThreadID)。 if (g_htFpgaIST == 0) { RETAILMSG(1, (_T( create thread failed\r\n)))。 //goto exit。 return FALSE。 } g_hInterrupt = CreateEvent(NULL, FALSE, FALSE, NULL)。g_hRxEvent = CreateEvent(NULL, FALSE, FALSE, NULL)。最后在驅(qū)動的IST中,當(dāng)硬件中斷產(chǎn)生時,就通過SetEvent的方式來通知應(yīng)用程序:static DWORD WINAPI FPGA_IntrThread(LPVOID pContext){ DWORD dwRet。 if (!(InterruptInitialize(g_nFpgaSysIntr, g_hInterrupt, 0, 0))) { RETAILMSG(1, (_T( Interrupt initialize failed\r\n)))。 return 0。 } RETAILMSG(1,(LWait for interrupt0!!!!!!!!!!!!~~\r\n))。 /*中斷線程開始運行*/ while (!g_bKillIST) { dwRet = WaitForSingleObject(g_hInterrupt, INFINITE)。 if (g_bKillIST == TRUE) return 0。 SetEvent(g_hRxEvent)。 RETAILMSG(1,(Linterrupt0 happend!!!!!!!!!!!!~~\r\n))。 InterruptDone(g_nFpgaSysIntr)。 } return 0。}這樣的方式也需要應(yīng)用程序創(chuàng)建同樣的事件對象,應(yīng)用程序也可以用一個線程來等待這個事件被觸發(fā)時就讀取數(shù)據(jù)。由于FPGA中斷引腳通過GPI_2來復(fù)用,因此,定義其邏輯中斷號:UINT32 g_nFpgaIrq = OAL_INTR_IRQ_GPI_02。 /* GPI_02的物理中斷號及邏輯中斷號*/下圖是Sub2中斷控制寄存器的實際定義,可以看到,GPI_2的中斷源是在該寄存器第24位,因此為了便于使用軟件編程,設(shè)置GPI_2的掩碼為左移24位,即可以定義該中斷。define GPIO_IRQ_MASK (124) Slave2(Sub2)中斷控制寄存器定義然后在函數(shù)EINT_ConfigInterruptPin中配置外部中斷引腳并使能為上升沿觸發(fā):VOID EINT_ConfigInterruptPin(VOID){ pINTCRegsatr |= GPIO_IRQ_MASK。 //上升沿或者高電平觸發(fā) pINTCRegsapr |= GPIO_IRQ_MASK。 //上升沿觸發(fā)}由于pINTCRegs是INTC_REGS_T類型的實例,而INTC_REGS_T定義如下:/* Interrupt Controller Module Register Structure */ typedef struct { volatile UNS_32 er。 /* Enable Register */ volatile UNS_32 rsr。 /* Raw Status Register */ volatile UNS_32 sr。 /* Status Register */ volatile UNS_32 apr。 /* Activation Polarity select Register */ volatile UNS_32 atr。 /* Activation Type select Register */ volatile UNS_32 itr。 /* Interrupt Type select Register */} INTC_REGS_T。其中,APR寄存器表示中斷極選擇:0表示通過低電平或者下降沿產(chǎn)生,1表示通過高電平或者上升沿產(chǎn)生;ATR寄存器表示中斷激活類型選擇:0表示電平敏感,1表示邊沿敏感;將兩者都設(shè)置為1,則表示GPI_2中斷是由上升沿產(chǎn)生。在完成FPGA以及中斷的初始化和相關(guān)寄存器的設(shè)置后,下面的工作就是具體通過DeviceIO Control函數(shù)和相應(yīng)的IO_Control Code來執(zhí)行具體的讀寫操作。用戶模式下的DeviceIO Control函數(shù)可以發(fā)送特定的IO_Control Code給一個特定的設(shè)備驅(qū)動程序,使相應(yīng)的設(shè)備執(zhí)行該動作。實現(xiàn)的具體函數(shù)為PGA_IOControl。分別為讀取FPGA寄存器和寫入FPGA寄存器功能。switch(dwCode) { case IOCTL_FPGA_WRITE_REG: mreg=(FPGA_DATA*)pBufIn。 if(mregRegAdr 0 || mregRegAdr 15) { RETAILMSG(1,(L[FPGA0] wrong reg number,0~15 please!\n\r))。 return FALSE。 } pBuff = mreg pBuff。 for(WriteLen = 0。WriteLen mregBufferLengh。WriteLen ++) { g_lpBaseFPGA[mregRegAdr * 2] = pBuff[WriteLen]。 } break 。 case IOCTL_FPGA_READ_REG: mReadReg = (FPGA_DATA_READ*)pBufIn。 pRDBuff = mReadRegpBuff。 for(ReadLen=0。ReadLenmReadRegReadLen。ReadLen++) pRDBuff[ReadLen]=g_lpBaseFPGA[mReadRegRegAdr * 2]。 break。 }第六章 實驗1、FPGA收發(fā)數(shù)據(jù)測試FPGA的RS485通信模塊測試采用方法:一臺主DCS控制站通過RS485模塊向從DCS控制站發(fā)送0~49共50個數(shù)據(jù),從DCS控制站的RS485模塊收到數(shù)據(jù)后,將數(shù)據(jù)發(fā)送到PC機并顯示,顯示如下圖: FPGA收發(fā)數(shù)據(jù)測試終端顯示在接收數(shù)據(jù)過程中,F(xiàn)PGA能夠準(zhǔn)確的接收到來自RS485通信協(xié)議傳輸?shù)臄?shù)據(jù),并且能夠判斷數(shù)據(jù)接收完成,能夠?qū)崿F(xiàn)RS485的雙通道冗余功能。在FPGA發(fā)送數(shù)據(jù)過程中,能夠正常的FIFO清零,然后能夠正確的發(fā)送準(zhǔn)確的數(shù)據(jù)。 RS485總線波形通過示波器顯示的RS485總線波形,發(fā)送控制信號的寬度基本與數(shù)據(jù)信號的寬度一致,所以保證了發(fā)送數(shù)據(jù)的正確和發(fā)送和接收數(shù)據(jù)。 RS485傳輸距離測試通過對RS485傳輸距離的測試,可以得知RS485在100m的距離上能夠?qū)崿F(xiàn)10Mb/s的數(shù)據(jù)傳輸,總的來說RS485作為一種串行通信的接口,它的傳輸距離還是比較的長的,滿足DCS控制站與現(xiàn)場I/O模塊之間的通信需求。2、FPGA中斷測試 FPGA采用中斷方式接收數(shù)據(jù)在實驗過程中,F(xiàn)PGA在收到中斷信號之后,能夠立即開始接受數(shù)據(jù),并能夠接收到正確的數(shù)據(jù),因此能夠?qū)崿F(xiàn)FPGA與LPC3250之間通過中斷的方式接收數(shù)據(jù)。 FPGA中斷方式WinCE測試程序3、實驗結(jié)論通過本次實驗,可以得知能夠基本完成課題的要求,完成了基于FPGA的RS485通信模塊之間的數(shù)據(jù)接收與發(fā)送的要求,以及RS485的傳輸距離的測試。同時RS485需要具有兩路獨立通道以實現(xiàn)冗余功能,F(xiàn)PGA與LPC2350之間要能夠以中斷方式接收數(shù)據(jù),并實現(xiàn)校驗。參考文獻[1] [2][3] Draft LPC32x0 User manual. Rev. 00. 27 — 20 November 2008[4] LPC3220/30/40/50 Product data sheet. Rev. 01. 01 1 April 2009.[5] [6]王常力,(DCS)[7]劉皖,何道君,[8]趙艷華,曹丙霞,Ⅱ的FPGA/[9]倪旭翔, [10]馬建國,[11]MAX3088 User 。12/05[12]Cyclone Ⅱ Device Handbook(Altera Corporation).November 2004[13]74AHC1G14 Product Feb 18[14] 桂電— 03[15]
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1