Generating a sine wave (or any other repetitive wave shape) isn't difficult using interrupts. The steps are:
1. Divide your waveform into enough equally spaced points that they can reasonably reconstruct the wave shape. It will never be perfect.
2. Based on the highest frequency you want to produce, find out how many points per second are needed. (max freq x number of points)
3. Set a timer to produce interrupts at that speed. In other words the interrupts are at the same rate as the points in your waveform.
4. At each interrupt, read the next value from a look-up table of the voltage at the point in your waveform.
5. Send the value to the DAC.
So the DAC produces a voltage matching the voltage at each sample point in your waveform and therefore reconstructs it.
Note: If the waveform is a sine/cosine wave or any other symmetrical waveform, you can simplify the process by making the table much smaller and re-using the values more than once. For example, in a sine wave there are four 'mirror images' of each quadrant, if you store the values only for say 0 degrees to 90 degrees, you can use (1 - table value) to get the second quadrant and so on.
Brian.