Part Number:DLP2021-Q1
Dear
我想讓 HOST_IRQ 腳位在每次影片撥放結束的時候有所動作,
依照 FPGA User's Guide 中 4.4 Host IRQ Interrupt Signal 所述,以及 4.1.6 Example 5: Display 3+ Videos/Images Seamlessly 的步驟嘗試:
但都沒有效果,只要Interrupt Enable 有任何一個被設置,HOST_IRQ 就都維持是High,無埨我如何設置 FPGA Interrupt Set or Clear……
請問是不是只要將FPGA Interrupt Clear設置為1或0,應該就可以清除FPGA Interrupt Set的狀態,HOST_IRQ也就會再下一次中斷響應時改變狀態呢?還是我理解錯誤呢?
還是此動作無法藉由DLP Control Program 15.1.0.26來模擬達成,一定要使用MCU呢?
請問是否有更詳細有關中斷操作與HOST_IRQ的使用說明呢?
謝謝。
Jeremy_Wu:
需要MCU读FPGA状态配置,因为速度很快.
,
Johns Chuang:
Hi Jeremy
感謝回覆,
請問您指的"速度很快"是指HOST_IRQ反應很快,還是FPGA Interrupt Set的值變化很快呢?
因為我使用示波器紀錄HOST_IRQ變化,但接無法看到HOST_IRQ有任何變化,在我設定FPGA Interrupt Cler為0的值後。
能否更詳細說明下這部份的操作呢?
需要MCU怎樣的讀取(0x04 or 0x00)?速度很快是多快?
謝謝。
,
Jeremy_Wu:
参考中断和处理:
while(1) { if(isHostMuted() == false) { enableSPIPins(); if(isfpgainterrupt) { isfpgainterrupt = false; uint32_t interrupts; bool success = false; //interrupt register read must have valid checksum while(!success) { success = spiread(FPGA_ADDR_INTSET, &interrupts); } spiwrite(FPGA_ADDR_INTCLR, interrupts); //Clear interrupts that are set so host irq goes low if(interrupts & INT_INIT_DONE) { __delay_cycles(800000); //50ms delay fpgaInitTemp(); initTimer(); //if(!eeprom_data_valid) //{ redpwm = RED_DEFAULT_PWM & 0x3FF; greenpwm = GREEN_DEFAULT_PWM & 0x3FF; bluepwm = BLUE_DEFAULT_PWM & 0x3FF; //} enableFPGAInterupts(INT_BROWNOUT | INT_LOOP_COMP); fpgaStopVideo(); //Must stop video prior to trying to access flash via registers getVideoCount(&videoCount); getAllVideoInfo(videos, videoCount); fpgaSetFramerate(VIDEO_FRAMERATE); // If there is a video in flash play the first video found, if not then load the first image found for(uint8_t i = 0; i < videoCount; i++){ if(videos[i].frameCount > 1){ fpgaSetVideo1(videos[i].address, VIDEO1_1_LOOPS, videos[i].frameCount); fpgaSetVideo2(videos[i].address, VIDEO1_2_LOOPS, videos[i].frameCount); break; } else{ fpgaSetVideo1(videos[0].address, VIDEO1_1_LOOPS, videos[0].frameCount); fpgaSetVideo2(videos[0].address, VIDEO1_2_LOOPS, videos[0].frameCount); } } fpgaPlayVideo(VIDEO_AUTOSTOP, 0, VIDEO_LOOPCONFIGS, VIDEO_TOGGLECONFIGS);
} if(interrupts & INT_BROWNOUT) { //delay 1ms to give time to complete DMD park __delay_cycles(PARK_DELAY1); disableFPGAPower(); } if(interrupts & INT_VID_COMP) { //Do something when each video is complete } if(interrupts & INT_LOOP_COMP) { //Do something when each video loop is complete } } if(istimerinterrupt) { istimerinterrupt = false; int16_t dmdtemp; fpgaReadDMDTemp(&dmdtemp); checkParkDMD(dmdtemp); } if(isuartinterrupt) { isuartinterrupt = false; uartProcessByte(); }
,
Johns Chuang:
Hi Jeremy
以下動作與您確認,請問我這樣認知是否正確呢?謝謝。
1. MCU 的 MOSI 送出讀取 FPGA Interrupt SET 的指令:{0x01 0x04 0x00 0x00 0x00 0x00 0x00 0x00 0x00}。
2. MCU 的 MISO 接收 FPGA 回送的 FPGA Interrupt SET資料:{0x00 0x01 0x04 0x00 0x00 0x00 0x00 0x00 0x05}。
3. MCU 的 MOSI 送出清除 FPGA Interrupt CLR 的指令:{0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x01}。
4. 此時 HOST_IRQ 會被拉 Low,直到 Interrupt Enable (0x08) 所設定的條件達成後,HOST_IRQ會恢復 High。
假設 FPGA Interrupt Enable (0x08) 的 VID LOP COMP IRQ 為 High ,然後反覆上述 1~3 動作,
那在每部影片撥放完畢的時候 HOST_IRQ 就會被拉回 High。
請問這樣理解是否正確呢?
謝謝。
,
Jeremy_Wu:
对的,您也可以联系Eliza直接讨论