Пример #1
0
//*****************************************************************************
//
// This function is called to handle the GPIO edge interrupt from the
// quadrature encoder.
//
//*****************************************************************************
void
EncoderIntHandler(void)
{
    unsigned long ulNow;

    //
    // Save the time.
    //
    ulNow = ROM_SysTickValueGet();

    //
    // Clear the encoder interrupt.
    //
    ROM_GPIOPinIntClear(QEI_PHA_PORT, QEI_PHA_PIN);

    //
    // Determine the number of system clocks between the previous edge and this
    // edge.
    //
    if(g_ulEncoderPrevious > ulNow)
    {
        g_ulEncoderClocks = g_ulEncoderPrevious - ulNow;
    }
    else
    {
        g_ulEncoderClocks = (16777216 - ulNow) + g_ulEncoderPrevious;
    }

    //
    // Save the time of the current edge as the time of the previous edge.
    //
    g_ulEncoderPrevious = ulNow;

    //
    // Indicate that an edge has been seen.
    //
    HWREGBITH(&g_usEncoderFlags, ENCODER_FLAG_EDGE) = 1;

    //
    // If the previous edge time was valid, then indicate that the time between
    // edges is also now valid.
    //
    if(HWREGBITH(&g_usEncoderFlags, ENCODER_FLAG_PREVIOUS) == 1)
    {
        HWREGBITH(&g_usEncoderFlags, ENCODER_FLAG_VALID) = 1;
    }

    //
    // Indicate that the previous edge time is valid.
    //
    HWREGBITH(&g_usEncoderFlags, ENCODER_FLAG_PREVIOUS) = 1;
}
Пример #2
0
void task_ads()
{
	if(HWREGBITW(&g_ulFlags, FLAG_ADS_INT) == 1)
	{
		HWREGBITW(&g_ulFlags, FLAG_ADS_INT) = 0;

		ADS_START_CLR();
		Ads_Read();
		ADS_START();

		ROM_GPIOPinIntClear(ADS_DRY_PORT, 0xff);
		MAP_IntEnable(INT_GPIOC);
		MAP_GPIOPinIntEnable(ADS_DRY_PORT, ADS_DRY_PIN);
	}
}
Пример #3
0
static void _isr_gpio(uint32_t port_num){
    const uint32_t port_addr = _port_base[port_num];
    uint32_t isr = ROM_GPIOPinIntStatus(port_addr, true);
    uint8_t i;

    for (i=0; i<8; i++, isr>>=1) {
        if ((isr & 0x1) == 0){
            continue;
        }

        ROM_GPIOPinIntClear(port_addr, 1 << i);

        if (gpio_config[port_num][i].cb){
            gpio_config[port_num][i].cb(gpio_config[port_num][i].arg);
        }
    }
    cortexm_isr_end();
}
Пример #4
0
char stop()
{
    ROM_IntMasterDisable();
    ROM_IntDisable(INT_TIMER0A);
    ROM_TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
    ROM_TimerIntDisable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
    ROM_TimerDisable(TIMER0_BASE, TIMER_A);
    ROM_GPIOPinIntClear(GPIO_PORTB_BASE, 0xff);
    ROM_GPIOPinIntDisable(GPIO_PORTB_BASE, 0xff);
    ROM_IntDisable(INT_GPIOB);
    ROM_IntPendClear(INT_TIMER0A);
    ROM_IntPendClear(INT_GPIOB);

    sampling = SAMPLING_OFF;
    tick = 0;

    led(0,1,0);

    return STATE_GET_COMMAND;
}
Пример #5
0
void GPIOBIntHandler()
{
    ROM_GPIOPinIntClear(GPIO_PORTB_BASE, 0xff);
    ROM_IntPendClear(INT_GPIOB);

    if (mode == MODE_INTERVAL)
    {
        ROM_GPIOPinIntDisable(GPIO_PORTB_BASE, 0xff);
        ROM_TimerEnable(TIMER0_BASE, TIMER_A);
    }
    else if (mode == MODE_EVENT)
    {
        buffer_data[sample] = GPIO_PORTB_DATA_R;
        buffer_time[sample] = tick;
        UARTprintf("%02x\r\n", buffer_data[sample]);

        if (++sample >= EVENT_BUFFER_LEN)
        {
            stop();
        }
    }
}
Пример #6
0
char run()
{
    unsigned long period = (SysCtlClockGet() / multi2hz(interval)) / 2;

    stop();

    led(1,0,0);

    clear_buf();

    if (mode == MODE_INTERVAL)
    {
        ROM_IntEnable(INT_TIMER0A);
        ROM_TimerLoadSet(TIMER0_BASE, TIMER_A, period - 1);
        ROM_TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
        ROM_TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
 
        if (trigger == TRIGGER_IMMEDIATE)
        {
            ROM_TimerEnable(TIMER0_BASE, TIMER_A);
        }
        else if (trigger == TRIGGER_PIN_RISING)
        {
            ROM_GPIOIntTypeSet(GPIO_PORTB_BASE, trigger_pins, GPIO_RISING_EDGE);
            ROM_GPIOPinIntClear(GPIO_PORTB_BASE, 0xff);
            ROM_GPIOPinIntEnable(GPIO_PORTB_BASE, trigger_pins);
            ROM_IntEnable(INT_GPIOB);
        }
        else if (trigger == TRIGGER_PIN_FALLING)
        {
            ROM_GPIOIntTypeSet(GPIO_PORTB_BASE, trigger_pins, GPIO_FALLING_EDGE);
            ROM_GPIOPinIntClear(GPIO_PORTB_BASE, 0xff);
            ROM_GPIOPinIntEnable(GPIO_PORTB_BASE, trigger_pins);
            ROM_IntEnable(INT_GPIOB);
        }
        else if (trigger == TRIGGER_PIN_BOTH)
        {
            ROM_GPIOIntTypeSet(GPIO_PORTB_BASE, 1, GPIO_BOTH_EDGES);
            ROM_GPIOPinIntClear(GPIO_PORTB_BASE, 0xff);
            ROM_GPIOPinIntEnable(GPIO_PORTB_BASE, trigger_pins);
            ROM_IntEnable(INT_GPIOB);
        }
    }
    else if (mode == MODE_EVENT)
    {
        if (trigger == TRIGGER_PIN_FALLING)
        {
            ROM_GPIOIntTypeSet(GPIO_PORTB_BASE, trigger_pins, GPIO_FALLING_EDGE);
            ROM_GPIOPinIntClear(GPIO_PORTB_BASE, 0xff);
            ROM_GPIOPinIntEnable(GPIO_PORTB_BASE, trigger_pins);
            ROM_IntEnable(INT_GPIOB);
        }
        else if (trigger == TRIGGER_PIN_RISING)
        {
            ROM_GPIOIntTypeSet(GPIO_PORTB_BASE, trigger_pins, GPIO_RISING_EDGE);
            ROM_GPIOPinIntClear(GPIO_PORTB_BASE, 0xff);
            ROM_GPIOPinIntEnable(GPIO_PORTB_BASE, trigger_pins);
            ROM_IntEnable(INT_GPIOB);
        }
        else if (trigger == TRIGGER_PIN_BOTH)
        {
            ROM_GPIOIntTypeSet(GPIO_PORTB_BASE, trigger_pins, GPIO_BOTH_EDGES);
            ROM_GPIOPinIntClear(GPIO_PORTB_BASE, 0xff);
            ROM_GPIOPinIntEnable(GPIO_PORTB_BASE, trigger_pins);
            ROM_IntEnable(INT_GPIOB);
        }

        HWREG(NVIC_ST_CURRENT) = 0;
    }
    ROM_IntMasterEnable();

    sampling = SAMPLING_ON;

    return STATE_GET_COMMAND;
}
Пример #7
0
//*****************************************************************************
//
// The interrupt handler for the PB4 pin interrupt.  When triggered, this will
// toggle the JTAG pins between JTAG and GPIO mode.
//
//*****************************************************************************
void
GPIOBIntHandler(void)
{
    //
    // Clear the GPIO interrupt.
    //
    ROM_GPIOPinIntClear(GPIO_PORTB_BASE, GPIO_PIN_4);

    //
    // Toggle the pin mode.
    //
    g_ulMode ^= 1;

    //
    // See if the pins should be in JTAG or GPIO mode.
    //
    if(g_ulMode == 0)
    {
        //
        // Change PC0-3 into hardware (i.e. JTAG) pins.
        //
        HWREG(GPIO_PORTC_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;
        HWREG(GPIO_PORTC_BASE + GPIO_O_CR) = 0x01;
        HWREG(GPIO_PORTC_BASE + GPIO_O_AFSEL) |= 0x01;
        HWREG(GPIO_PORTC_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;
        HWREG(GPIO_PORTC_BASE + GPIO_O_CR) = 0x02;
        HWREG(GPIO_PORTC_BASE + GPIO_O_AFSEL) |= 0x02;
        HWREG(GPIO_PORTC_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;
        HWREG(GPIO_PORTC_BASE + GPIO_O_CR) = 0x04;
        HWREG(GPIO_PORTC_BASE + GPIO_O_AFSEL) |= 0x04;
        HWREG(GPIO_PORTC_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;
        HWREG(GPIO_PORTC_BASE + GPIO_O_CR) = 0x08;
        HWREG(GPIO_PORTC_BASE + GPIO_O_AFSEL) |= 0x08;
        HWREG(GPIO_PORTC_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;
        HWREG(GPIO_PORTC_BASE + GPIO_O_CR) = 0x00;
        HWREG(GPIO_PORTC_BASE + GPIO_O_LOCK) = 0;

        //
        // Turn on the LED to indicate that the pins are in JTAG mode.
        //
        ROM_GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0, GPIO_PIN_0);
    }
    else
    {
        //
        // Change PC0-3 into GPIO inputs.
        //
        HWREG(GPIO_PORTC_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;
        HWREG(GPIO_PORTC_BASE + GPIO_O_CR) = 0x01;
        HWREG(GPIO_PORTC_BASE + GPIO_O_AFSEL) &= 0xfe;
        HWREG(GPIO_PORTC_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;
        HWREG(GPIO_PORTC_BASE + GPIO_O_CR) = 0x02;
        HWREG(GPIO_PORTC_BASE + GPIO_O_AFSEL) &= 0xfd;
        HWREG(GPIO_PORTC_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;
        HWREG(GPIO_PORTC_BASE + GPIO_O_CR) = 0x04;
        HWREG(GPIO_PORTC_BASE + GPIO_O_AFSEL) &= 0xfb;
        HWREG(GPIO_PORTC_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;
        HWREG(GPIO_PORTC_BASE + GPIO_O_CR) = 0x08;
        HWREG(GPIO_PORTC_BASE + GPIO_O_AFSEL) &= 0xf7;
        HWREG(GPIO_PORTC_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;
        HWREG(GPIO_PORTC_BASE + GPIO_O_CR) = 0x00;
        HWREG(GPIO_PORTC_BASE + GPIO_O_LOCK) = 0;
        ROM_GPIOPinTypeGPIOInput(GPIO_PORTC_BASE, (GPIO_PIN_0 | GPIO_PIN_1 |
                                                   GPIO_PIN_2 | GPIO_PIN_3));

        //
        // Turn off the LED to indicate that the pins are in GPIO mode.
        //
        ROM_GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0, 0);
    }
}