Цитата(777777 @ Aug 26 2011, 17:41)

Инвертирование старшего бита - это и есть вычитание константы 0x8000. Кстати, если кто не знает - если данные прижаты вправо, то вычитание 0x0800 инвертирует знаковый бит и одновременно расширяет знак - но это так, к слову.
Хм... действительно, в данном случае (данные сдвинуты влево и смещение именно на 0x8000) это одно и то же. Мне просто чаще приходилось иметь дело с данными выровненными по правому краю, да и сдвиг шкалы не всегда точно равен 0x8000, вот и не сообразил сразу.
Цитата
Я пытался про них прочитать но ничего не понял. Чем они отличаются от регулярных и почему так называются?
О, это замечательная штука. Вот настроили вы регулярную оцифровку, пересылку по DMA и обработку данных для основной задачи, но остаются ещё всякие мелочи для которых тоже нужен АЦП - то температуру надо замерить, то степень заряженности батареи оценить, то ещё что-то подобное. И что теперь, раз в секунду всё перепрограммировать ради ещё одного измерения? А потом всё возвращать назад, да при этом ещё и ухитриться фазу оцифровки не сбить.
Я как-то раз на MSP430 с его ADC12 подобным занимался, всё проклял. Из-за какой-то фигни пришлось столько извращаться...
Тут-то эти injected каналы и выручают.
Если между регулярными преобразованиями есть достаточная пауза, то можно воткнуть туда дополнительное преобразование по инжектированному каналу и это вообще никак не отразится на исполнении основной задачи. Если пауза недостаточна, то, конечно, преобразование по регулярным каналам будет задержано на какое-то время, но тут уж ничего не поделаешь, другие варианты ещё хуже.
PS. Кстати, DMA у STM32 тоже не прост: на нём можно сделать аналог двухбуферной системы и смело обрабатывать одну половину буфера пока идёт пересылка в другую половину.
Russia est omnis divisa in partes octo.