static void init_button_pio()
{
    /* initialize the push button interrupt vector */
    alt_irq_register( BUTTON_PIO_IRQ, (void*) 0, BUTTON_ISR);

    /* Reset the edge capture register. */
    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE, 0x0);

    /* Enable all 4 button interrupts. */
    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_BASE, 0xf);

    /* Initialize Variables */
    edge_capture = 0;

}
Esempio n. 2
0
/* Initialize the button_pio. */
static void init_button_pio()
{
	/* Recast the edge_capture pointer to match the
	   alt_irq_register() function prototype. */
	void* edge_capture_ptr = (void*) &edge_capture;
	/* Enable all 4 button interrupts. */
	IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_BASE, 0xf);
	/* Reset the edge capture register. */
	IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_BASE, 0x0);

	/* Register the ISR. */
	alt_ic_isr_register(BUTTON_IRQ_INTERRUPT_CONTROLLER_ID,
			BUTTON_IRQ,
			handle_button_interrupt,
			edge_capture_ptr, 0x0);
}
Esempio n. 3
0
File: main.c Progetto: gongal/ARCap
/* The main function creates the LCD task, registers the edge counter polling interrupt,
 * and starts the OS. */
int main(void)
{
	int status;

	// Initialize components.
	lcd_init();
	queue_init();

	// Create the LCD task.
//	OSTaskCreateExt(lcd_task,
//			NULL,
//			(void *)&lcd_task_stk[TASK_STACKSIZE - 1],
//			LCD_TASK_PRIORITY,
//			LCD_TASK_PRIORITY,
//			lcd_task_stk,
//			TASK_STACKSIZE,
//			NULL,
//			0);

	// Create the IR task.
	OSTaskCreateExt(ir_task,
			NULL,
			(void *)&ir_task_stk[TASK_STACKSIZE - 1],
			IR_TASK_PRIORITY,
			IR_TASK_PRIORITY,
			ir_task_stk,
			TASK_STACKSIZE,
			NULL,
			0);

	// Register the IR pushbutton interrupt.
	status = alt_ic_isr_register(IR_PUSHBUTTON_IRQ_INTERRUPT_CONTROLLER_ID,
				IR_PUSHBUTTON_IRQ,
				isr_on_ir_pushbutton,
				NULL,
				NULL);

	// Enable key interrupts.
	IOWR_ALTERA_AVALON_PIO_IRQ_MASK(IR_PUSHBUTTON_BASE, IR_PUSHBUTTON_CAPTURE);

	// Start.
	if (status == OK) {
		OSStart();
	}

	return 0;
}
Esempio n. 4
0
void EnableKeyInterrupt(void){
    int error;
    
    // enable interrupt, 2-keybutton
    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_BASE,0x03);
    
    // clear capture flag
    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_BASE,0);
    //

    bKeyPressed = FALSE;
    // register interrupt isr    
    error = alt_irq_register (KEY_IRQ, 0, KEY_ISR);
    if (error)
        printf("Failed to register interrut\r\n");
    
}
Esempio n. 5
0
static void init_button_pio()
{
  /* Recast the edge_capture pointer to match the alt_irq_register() function
  * prototype. */
  void* edge_capture_ptr = (void*) &edge_capture;
  /* Enable all 4 button interrupts. */
  IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_BASE, 0xf);
  /* Reset the edge capture register. */
  IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE, 0x0);

#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT
  alt_ic_isr_register(BUTTON_PIO_IRQ_INTERRUPT_CONTROLLER_ID, BUTTON_PIO_IRQ,
    handle_button_interrupts, edge_capture_ptr, 0x0);
#else
  alt_irq_register( BUTTON_PIO_IRQ, edge_capture_ptr,
    handle_button_interrupts);
#endif
}
Esempio n. 6
0
File: usb.c Progetto: aguardar/wufl
/* 
 * ===  FUNCTION  ======================================================================
 *         Name:  initialize_usb
 *  Description:  
 * =====================================================================================
 */
int initialize_usb(void)
{
	PIO_USB_RD=1;
	PIO_USB_WR=1;
	PIO_USB_A0=1;
	usb.receive_ok_flag=0;

	// enable the io interrupt

	IOWR_ALTERA_AVALON_PIO_IRQ_MASK(USB_NINT_BASE,1);
	IOWR_ALTERA_AVALON_PIO_EDGE_CAP(USB_NINT_BASE,0);

	alt_irq_register(USB_NINT_IRQ,NULL,irq_usb);


	set_usb_mode(USB_DEVICE);

	return 0;
}
Esempio n. 7
0
/* The main function creates two task and starts multi-tasking */
int main(void) {
    OSInit();
    
    // Create the message queue to hold incoming MIDI msg
    qsemMsg = OSQCreate((void*)&qMessages, QMESSAGE_SIZE);
    songSem = OSSemCreate(0);
    lcd = fopen("/dev/char_lcd", "w");
    

    //Task for decoding MIDI messages.
    OSTaskCreateExt(midiDecode,
                  NULL,
                  (void *)&midi_stk[TASK_STACKSIZE-1],
                  MIDI_PRIORITY,
                  MIDI_PRIORITY,
                  midi_stk,
                  TASK_STACKSIZE,
                  NULL,
                  0);
    serial_init(31250);
    /* Enable all 8 switch interrupts. */
    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(SWITCHES_BASE, 0xff);
    /* Reset the edge capture register. */
    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(SWITCHES_BASE, 0x0);
    /* Register the interrupt handler. */
    alt_irq_register(SWITCHES_IRQ, 0, switches_isr);
    alt_irq_enable(SWITCHES_IRQ);

    OSTaskCreateExt(playSong,
                  NULL,
                  (void *)&song_stk[TASK_STACKSIZE-1],
                  SONG_PRIORITY,
                  SONG_PRIORITY,
                  song_stk,
                  TASK_STACKSIZE,
                  NULL,
                  0);           

                  
  OSStart();
  return 0;
}
Esempio n. 8
0
/*System initialization function. Should be called before your while(1)*/
void system_initialization(){
	/*Hard-code to 1 right here, you can use ISR
	 *to change the value by yourself
	*/
	uartStartRecvFlag = 1;

	 /*Open Uart port and ready to transmit and receive*/
	 uart = open(UART_NAME, O_ACCMODE);
	 if(!uart){
		 printf("failed to open uart\n");
		 //return 0;
	 } else {
		 printf("Uart ready!\n");
	 }

	 //Interrupts Registrations
	 alt_irq_register(switch0_id, (void *)&switch0, handle_switch0_interrupt);
	 alt_irq_register(switch1_id, (void *)&switch1, handle_switch1_interrupt);
	 alt_irq_register(switch2_id, (void *)&switch2, handle_switch2_interrupt);
	 alt_irq_register(switch3_id, (void *)&switch3, handle_switch3_interrupt);
	 alt_irq_register(switch4_id, (void *)&switch4, handle_switch4_interrupt);
	 alt_irq_register(switch5_id, (void *)&switch5, handle_switch5_interrupt);
	 alt_irq_register(key0_id, (void *)&key0, handle_key0_interrupt);
	 alt_irq_register(key1_id, (void *)&key1, handle_key1_interrupt);
	 alt_irq_register(key2_id, (void *)&key2, handle_key2_interrupt);
	 alt_irq_register(key3_id, (void *)&key3, handle_key3_interrupt);
	 alt_irq_register(leftready_id, (void *)&leftready, handle_leftready_interrupt_test);
	 alt_irq_register(rightready_id, (void *)&rightready, handle_rightready_interrupt_test);

	 /*Interrupt enable -> mask to enable it*/
	 IOWR_ALTERA_AVALON_PIO_IRQ_MASK(SWITCH0_BASE, 1);
	 IOWR_ALTERA_AVALON_PIO_IRQ_MASK(SWITCH1_BASE, 1);
	 IOWR_ALTERA_AVALON_PIO_IRQ_MASK(SWITCH2_BASE, 1);
	 IOWR_ALTERA_AVALON_PIO_IRQ_MASK(SWITCH3_BASE, 1);
	 IOWR_ALTERA_AVALON_PIO_IRQ_MASK(SWITCH4_BASE, 1);
	 IOWR_ALTERA_AVALON_PIO_IRQ_MASK(SWITCH5_BASE, 1);
	 IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY0_BASE, 1);
	 IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY1_BASE, 1);
	 IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY2_BASE, 1);
	 IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY3_BASE, 1);
	 IOWR_ALTERA_AVALON_PIO_IRQ_MASK(LEFTREADY_BASE, 1);
	 IOWR_ALTERA_AVALON_PIO_IRQ_MASK(RIGHTREADY_BASE, 1);

	 /*Reset edge capture bit*/
	 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(SWITCH0_BASE, 0);
	 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(SWITCH1_BASE, 0);
	 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(SWITCH2_BASE, 0);
	 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(SWITCH3_BASE, 0);
	 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(SWITCH4_BASE, 0);
	 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(SWITCH5_BASE, 0);
	 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY0_BASE, 0);
	 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY1_BASE, 0);
	 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY2_BASE, 0);
	 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY3_BASE, 0);
	 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(LEFTREADY_BASE, 0);
	 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(RIGHTREADY_BASE, 0);

	 /*turn off all LEDs*/
	 IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, 0x00);

	 /*initialize SPI transmission*/
	 IOWR_ALTERA_AVALON_PIO_DATA(CS_BASE, 1); // ~CS low
	 IOWR_ALTERA_AVALON_PIO_DATA(SCLK_BASE, 0); // Initialize SCLK to high
}
Esempio n. 9
0
int main()
{
    bool bRxVideoOn = FALSE, bTxSinkOn = FALSE, bRxModeChanged = FALSE;
    alt_u8 led_mask;
    alt_u32 BlinkTime;
    bool bHwNg = FALSE;

    // disable color depth if button1 is pressed when system boot.
    gEnableColorDepth = ((~IORD(PIO_BUTTON_BASE,0)) & 0x02)?0:1;

    OS_PRINTF("\n======== HDMI Demo REMIX by gh00st==============\n");

    //-------------------------------
    // HDMI TX init
    //-------------------------------
#ifndef TX_DISABLED
    if (!HDMITX_Init()) {
        printf("Failed to find CAT6613 HDMI-TX Chip.\n");
        bHwNg = TRUE;
        //return 0;
    }

    // init tx i2s irq
    THDMI_TX_I2S_Start();
    IOWR(I2S_TX_BASE, I2S_REG_IRQ_CLEAR, 0x00);  //clear interrupt flag

    // hdmi i2s irq
    if ((alt_irq_register(I2S_TX_IRQ, (void *)0, i2s_isr) != 0))
        OS_PRINTF("[I2S]register callback fail\n");
    else
        OS_PRINTF("[I2S]register callback success\n");

    //
    // button irq for generate audio
    // enable interrupt, button0/1

    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_BUTTON_BASE, 0x03);

    // Reset the edge capture register
    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_BUTTON_BASE,0);

    if ((alt_irq_register(PIO_BUTTON_IRQ, (void *)0, button_isr) != 0))
        OS_PRINTF("[I2S]register button callback fail\n");
    else
        OS_PRINTF("[I2S]register button callback success\n");
    //

#endif //TX_DISABLED        


    //-------------------------------
    // HDMI RX init
    //-------------------------------

#ifndef RX_DISABLED

    IOWR(HDMI_RX_HPD_N_BASE, 0, 0x03);    // pull-low hdmi connector hpd
    OS_DelayMS(1); // 1 ms
    if (!HDMIRX_Init(RX_PORT_AUTO))
        bHwNg = TRUE;
    IOWR(HDMI_RX_HPD_N_BASE, 0, 0x00); // pull-high hdmi connector hpd

#endif //RX_ENABLED    


    // gh00st
    SelectHDMIPort(CAT_HDMI_PORTA);
    InitIT6605();
//HDMIRX_DevLoopProc();
    SelectHDMIPort(CAT_HDMI_PORTB);
    InitIT6605();
//HDMIRX_DevLoopProc();
    //

    IOWR(HDMI_RX_SYNC_BASE, 0,0x00);
    led_mask = ~0x01;
    IOWR(PIO_LED_BASE, 0, led_mask);
    BlinkTime = alt_nticks() + alt_ticks_per_second()/4;

    if (bHwNg) {
        led_mask = 0x00;
        while(1) {
            if (alt_nticks() > BlinkTime) {
                IOWR(PIO_LED_BASE, 0, led_mask);
                led_mask ^= 0xFF;
                BlinkTime = alt_nticks() + alt_ticks_per_second()/4;
            }
        }
    }

    //-------------------------------
    // MAIN LOOP
    //-------------------------------

    while(1) {
#ifndef TX_DISABLED
        //========== TX
        if (HDMITX_DevLoopProc() || bRxModeChanged) {
            bTxSinkOn = HDMITX_HPD();
            if (bTxSinkOn) {
                // update state
                gDemoMode = bRxVideoOn?DEMO_LOOPBACK: DEMO_TX_ONLY;
                //
                HDMITX_DisableVideoOutput();
                if (gDemoMode == DEMO_TX_ONLY) {
                    // tx-only
                    VPG_Config(gVpgMode, gVpgColor);
                    SetupTxVIC(gVpgMode);
                }
                SetupColorSpace();
                HDMITX_EnableVideoOutput();
            } else {
                HDMITX_DisableVideoOutput();
            }
        }

#endif //

#ifndef RX_DISABLED
        //========== RX
        bRxModeChanged = HDMIRX_DevLoopProc();
        if (HDMIRX_IsVideoOn() ^ bRxVideoOn) {
            bRxVideoOn = HDMIRX_IsVideoOn();
            IOWR(HDMI_RX_SYNC_BASE, 0, bRxVideoOn?0x01:0x00);
            OS_PRINTF("[RX]Video On:%s\n", bRxVideoOn?"Yes":"No");
            // update state
            gDemoMode = !bTxSinkOn?DEMO_READY:(bRxVideoOn?DEMO_LOOPBACK:DEMO_TX_ONLY);
        }

        if (bRxModeChanged && bRxVideoOn) {
            OS_PRINTF("XXXXXX \n");
#ifndef TX_DISABLED
            // bypass AviInfoFrame from source to sink
            alt_u8 VIC, ColorMode;
            bool b16x9, bITU709;
            if (HDMIRX_GetAVIInfoFrame(&VIC, &ColorMode, &b16x9, &bITU709)) {
                OS_PRINTF("YYYYYYY \n");
                HDMITX_ChangeVideoTimingAndColor(VIC, ColorMode);
            }
            //SetupColorSpace();
#endif
        }
#endif //RX_ENABLED        

        //===== LED indication
        if (alt_nticks() > BlinkTime) {
            led_mask ^= 0x03;
            led_mask |= ~0x03;
            if (HDMITX_HPD())
                led_mask &= ~0x04;  // rx-source available (led is low-active)
            if (bRxVideoOn)
                led_mask &= ~0x08;  // rx-source available (led is low-active)

            IOWR(PIO_LED_BASE, 0, led_mask);
            //led_mask ^= 0xFF;

            BlinkTime = alt_nticks() + alt_ticks_per_second()/4;
        }

#if 0   // (DEBUG Purpose) dump register if button is pressed        
        alt_u8 mask;
        mask = (~IORD(PIO_BUTTON_BASE,0)) & 0x03;  // active low (PCI)
        if ((mask & 0x01)  == 0x01) { // BUTTON[0]
            HDMITX_DumpAllReg();
            HDMIRX_DumpAllReg();
        }
#endif


    }

}