Hi Stefan,
Theoretically, another bit could change, but since the chip really doesn't change the other bits in these registers dynamically (except in certain cases where the user doesn't have access to that particular functionality), they won't change unless you write them. So I don't think your concern is really anything to worry about.
You need the read, modify write unless you want to change all of the settings of the pin control register back to the default (which it doesn't sound like you do). Using PORTD_PCR4 = 1 << 24 will definitely change all of the other bits in the register (if they were something other than 0). The one thing I would suggest is that you use the masks in the Freescale header files. So if I were doing this, my code would be
if(PORTD_PCR4 & PORT_PCR_ISF_MASK){
PORTD_PCR4 |= PORT_PCR_ISF_MASK; // 1 clears, not 0...
touchFlag = TRUE;
}
This will eliminate the shift and reduce the number of instructions. It will also make your code more readable and intuitive.
Hope this helps,
Chris