На шестом году работы с TMS320LF2407 обнаружил забавную проблему в системе команд + транслятор:

Работаю в CCS 3.1 на C.

Оказалось, что TMS не может за одну команду изменить значение одного бита в байте регистра ввода вывода. Следовательно, если я управляю ножками одного регистра из обработчика прерывания и из фоновой программы, то для изменения одного бита в фоновой программе необходимо закрывать прерывания на 3 команды. Гиморой!!!

Ладно, готов я был в макре, которая управляет портами закрыть прерывания, но тогда макро разное для фоновой программы и для секций с закрытыми уже масками прерывания. Надо сохранять занчение регистра ST0 перед закрыванием прерывания, а сохранить текущее значения флага разрешения прерывания (in ST0) можно только через ассемблер, да и то не одной командой, да еще делать это надо аккуратно, чтобы не нарушить состояние регистров важных для процедуры С.

Я на это наткнулся через 6 лет после начала работы с этим процессором, и до этого ни разу эта проблема меня не беспокоила... (ну причина правда простая - Я крайне редко ножками процессора дергал, обычно за это отвечала встроенная перефферия).

Так вот, кто и как решает эту проблему под С? Наверное, есть готовое решение?