Differences between DSP programming vs MPU programming
first of all, you certainly can use an ARM or Intel or Arduino or whatever.  DSP chips are MPUs that are optimized for the most common DSP operations.

consider an FIR filter.

$$ y[n] = \sum\limits_{i=0}^{N-1} h[i] x[n-i] $$

to perform that in $N$ instructions the DSP has to do, in one instruction, the following:


multiply coefficient $h[i]$ and sample $x[n-i]$.
add the product $h[i] x[n-i]$ into an accumulator.
pre-fetch, for the next instruction both $h[i+1]$ and $x[n-(i+1)]$ and
post-increment the pointers to point to $h[i+2]$ and $x[n-(i+2)]$


if the accumulator is fixed-point, the width of it should be wide enough that there is no rounding on the right and with enough guard bits on the left for overflow.  then there should be a saturate instruction (or the saturation is done automatically when the word is moved to the output).

finally, the pointer that points to $x[n-i]$ must have a circular or modulo-addressing mode so that it "wraps around" since the data in the $x[n]$ is stored in a circular FIFO buffer.

now, a DSP chip will probably do all that with its specialized hardware, but you need not use a DSP as long as you, the programmer, are willing to deal with these details.  given that some MPUs run at a much faster clock rate than most inexpensive DSPs, even if you must do all of these operations with multiple instructions, it still might run faster on, say, an ARM than on a SHArC.  maybe not.

in doing circular addressing, the simplest way to do that is to use a regular array (like in C) but define the size of that array to be a power of 2 (say $2^p$).  then use the AND operation (like "&amp;" in C) to mask off all but the lower $p$ bits.  that will accomplish the modulo arithmetic on the index or address of the data.

other than that, it's mostly a matter of knowing the math for DSP, understanding a little about the numerical issues regarding finite-width words, whether they be fixed or floating point and being careful.  DSP programming is really no different than any other mathematical programming.