Во-первых, в моем приборе пользователь может задавать до 10 различных скоростей преобразования АЦП. Для этого мне нужно было бы создавать таблицу соответствия скорости и интервала таймера.
Пускай таблица, разве это проблема?
И устанавливать заведомо больший интервал.
Во-первых: Если АЦП и МК тактируются
от одного источника частоты, то "заведомо больший" - не нужно. Можно точный установить.
Во-вторых: Я не читал мануал на CS5532, но по опыту работы с другими (аналогичными) АЦП знаю, что такие АЦП как правило имеют буфер результата, в котором этот результат хранится. И этот буфер продолжает его хранить и после запуска следующего преобразоваия, до тех пор пока результат следующего преобразования не перепишет предыдущий результат. Так что - в непрерывном режиме нет никакой необходимости успевать считать результат быстро, можно считать его чуть позже, во время выполнения следущего преобразования. И тогда поблема с "заведомо большим интервалом" надумана.
И вообще -
непрерывный режим он на то и
непрерывный, чтобы следущее преобразование запускать
сразу после завершения предыдущего. Если же у вас следущее преобразование запускается
только после чтения предыдущего - это уже не непрерывный режим. Да и вообще - в таком случае у вас нет никакой фиксированной и стабильной частоты преобразований. Частота преобразований получится плавающей.
или для каждого преобразования свою вторую таблицу.
Ну и что? У Вас не хватает памяти на таблицу из 20 значений что-ли????
Там все просто, никто не мешал разрешить прерывание на ножке gpio (MISO) по спаду, и АЦП, при готовности данных опускала уровень в ноль и я забирал данные с микросхемы, ну и так дальше...
Всё просто, только работаете Вы видимо поэтому без DMA, дёргаясь на каждое слово данных в прерывание. А с DMA можно было уменьшить загрузку CPU, обрабатывая данные АЦП пакетно.
Добавлено after 3 minutes:Там все просто, никто не мешал разрешить прерывание на ножке gpio (MISO) по спаду, и АЦП, при готовности данных опускала уровень в ноль и я забирал данные с микросхемы, ну и так дальше...
И что - после забирания данных Вы вручную (каким-то сигналом или командой) запускаете новое преобразование АЦП? Или всё-таки оно само его запускает?