Wire lib operations both inside & outside an ISR causes system hanging

MCP4725 (DAC) and MPR121 (touch sensor) both are on i2c bus using the Wire lib.
The code below outputs a voltage sweep. If I fly my finger on the mpr121 pads (triggering ISR), it can easily hang the whole thing. Any help appreciated! Thanks!

#include "mpr121.h"
#include <Wire.h>
#include <Adafruit_MCP4725.h>;

Adafruit_MCP4725 dac0;

void setup() {
  attachInterrupt(4, readTouchInputs, FALLING);

void loop() {
  for (int i = 1000; i < 4095; i++) {
    dac0.setVoltage(i, false);

void readTouchInputs() {
  Wire.requestFrom(0x5A, 2);

Generally, in an interrupt routine, doing anything much more complicated than setting a flag is dubious practice. Try refactoring your code to use a volatile flag variable and check it in your for loop.

Turning interrupts on in an ISR is generally NOT a good idea. Deal with the interrupt and get out. Then, allow the other interrupts to happen.

Thank you for the help! Now I've rewritten the code (just setting a flag), now it runs no problem. 8)