This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
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的使用說明呢?
謝謝。
Hi Jeremy
感謝回覆,
請問您指的"速度很快"是指HOST_IRQ反應很快,還是FPGA Interrupt Set的值變化很快呢?
因為我使用示波器紀錄HOST_IRQ變化,但接無法看到HOST_IRQ有任何變化,在我設定FPGA Interrupt Cler為0的值後。
能否更詳細說明下這部份的操作呢?
需要MCU怎樣的讀取(0x04 or 0x00)?速度很快是多快?
謝謝。
参考中断和处理:
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();
}
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。
請問這樣理解是否正確呢?
謝謝。