Para ser honesto, a linha entre os dois está quase acabando hoje em dia e existem processadores que podem ser classificados como ambos (por exemplo, o AD Blackfin).
De um modo geral:
Microcontroladores são processadores matemáticos inteiros com um subsistema de interrupção. Alguns podem ter unidades de multiplicação de hardware, outros não, etc. O ponto é que eles foram projetados para matemática simples e principalmente para controlar outros dispositivos.
Os DSPs são processadores otimizados para processamento de sinal de streaming. Eles geralmente têm instruções especiais que aceleram tarefas comuns, como acumular multiplicar em uma única instrução. Eles também costumam ter outras instruções de vetor ou SIMD. Historicamente, eles não eram sistemas baseados em interrupção e operavam com sistemas de memória não padrão otimizados para seus objetivos, tornando-os mais difíceis de programar. Eles geralmente eram projetados para operar em um grande loop processando um fluxo de dados. Os DSPs podem ser projetados como processadores de número inteiro, ponto fixo ou ponto flutuante.
Historicamente, se você quisesse processar fluxos de áudio, fluxos de vídeo, fazer controle rápido do motor, qualquer coisa que exigisse o processamento de um fluxo de dados em alta velocidade, você procuraria um DSP.
Se você deseja controlar alguns botões, medir uma temperatura, executar um LCD de caracteres, controlar outros ICs que estão processando coisas, você usaria um microcontrolador.
Hoje, você encontra principalmente processadores do tipo microcontrolador de uso geral, com instruções integradas do tipo DSP ou co-processadores integrados para lidar com dados de streaming ou outras operações DSP. Você não vê DSPs puros mais usados, exceto em setores específicos.
O mercado de processadores é muito mais amplo e embaçado do que costumava ser. Por exemplo, eu dificilmente considero um SoC ARM córtex-A8 um micro controlador, mas provavelmente se encaixa na definição padrão, especialmente em um pacote PoP.
Edição: Figurado eu adicionaria um pouco para explicar quando / onde eu usei DSPs, mesmo nos dias de processadores de aplicativos.
Um produto recente que eu projetei estava processando áudio com canais X de entrada e canais X de saída por 'zona'. O uso pretendido para o produto significava que muitas vezes ficava sentado ali, processando os canais de áudio por anos sem que ninguém o tocasse. O processamento de áudio consistia em vários filtros e funções acústicas. O sistema também era "plugável a quente", com a capacidade de adicionar algum número de 'zonas' independentes, tudo em uma caixa. Foi um total de 3 projetos de PCB (placa principal, um backplane e um módulo plug-in) e o backplane suportou 4 módulos plug-in. Um projeto bastante divertido, como eu fazia sozinho, eu fiz o design do sistema, o esquema, o layout da placa de circuito impresso e o firmware.
Agora eu poderia ter feito a coisa toda com um único núcleo ARM volumoso, eu só precisava de cerca de 50MIPS de trabalho DSP em números de ponto fixo de 24 bits por zona. Mas porque eu sabia que esse sistema funcionaria por um tempo extremamente longo e sabia que era fundamental que ele nunca clique ou pop ou algo assim. Optei por implementá-lo com um DSP de baixa potência por zona e um único microcontrolador PIC que desempenhava o papel de gerenciamento do sistema. Dessa forma, mesmo que uma das funções do uC travasse, talvez um ataque DDOS em sua porta Ethernet, o DSP continuaria feliz e provavelmente nunca saberia.
Assim, o microcontrolador desempenhou o papel de executar o LCD de 2 linhas, alguns botões, monitoramento de temperatura e controle do ventilador (havia também alguns amplificadores de áudio de alta potência em cada placa) e até serviu uma página da web no estilo AJAX via Ethernet. Ele também gerenciava os DSPs por meio de uma conexão serial.
Então isso é uma situação em que, mesmo nos dias em que eu poderia ter usado um único núcleo ARM para fazer tudo, o design ditava um IC de processamento de sinal dedicado.
Outras áreas em que eu encontrei DSPs:
* Áudio de ponta - Receptores de ponta muito alta e equipamentos de mixagem e processamento de qualidade de concerto
* Processamento de radar - Eu também usei núcleos ARM para isso em aplicativos low-end.
* Processamento de sonar
* Visão computacional em tempo real
Na maioria das vezes, as extremidades baixa e média do espaço de áudio / vídeo / similar foram assumidas pelos processadores de aplicativos que combinam uma CPU de uso geral com mecanismos de descarregamento co-proc para várias aplicações.