Цитата(smk @ May 18 2007, 22:55)

Мне нужно:
1) генерацию синусоиды в диапазон от 1 Гц до 35 кГц (хотябы)
2) возможность автоматической генерации с запрограммированным шагом в заданном диапазоне.
Шаг 0.1Гц?
Цитата
В разных четвертях периода синуса выполнение обработчи
ка прерывания происходит по различным веткам. Очень важно
при этом обеспечить равное время выполнения каждой ветки.
Попадая в обработчик прерывания там есть некое подобие:
<вход в обработчик>
switch( <Квадрант > )
{
case 0
...
case 1
...
case 2
...
case 3
...
}
<выдача результата в DAC>
так вот важно чтобы время выполнения от входа в обработчик до выдачи результата было всегда одинаковым (ни тактом больше ни тактом меньше) вне зависимости от case'a.
Цитата
Поскольку в системе используется только одно прерывание,
оказалось возможным расположить обработчик начиная с адреса
вектора.
На C это реализовать, увы, нельзя.
На Cи вы можете пойти другим путем, и получить ту же функциональность.
Надо только поменять алгоритм обработчика прерывания:
<вход в обработчик>
static nexdactval = 0;
<DAC = nextdacval>
switch( <квадрант>
{
case 0:
nextdacval = ....
case 1:
....
case 2:
....
case 3:
....
}
Где уже можно не заботиться о равной длительности case'ов