//***************************************************************************** // // 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; }
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); } }
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(); }
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; }
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(); } } }
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; }
//***************************************************************************** // // 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); } }