Цитата(aaarrr @ May 5 2008, 14:31)

Ну, amw написал уж очень страшный вариант. На деле на одну запись в порт требуется 3 такта MCK, т.е. конструкция из 3-х записей + переход должна выполняться за 12 тактов процессора или 400 мксек.
Ну да. Это типа наихудший вариант.
Если просто 0x5555 << 16 то это просто константа, а если типа a << 16 где a - переменная, то может быть еще что-то. Например с volatile тоже вопрос.
И если это переменная, то в голову не приходит ничего лучше:
Код
ldr r1, =a
ldr r1, [r1]
Хотя конечно оптимизатор должен поработать в этом месте. Да и в приведенном примере даже для переменной, ее значение может быть загружено до цикла. Плюс инверсию тоже можно загрузить до цикла. Но это уже вопрос к компилятору и его оптимизатору.
Точно, что делают макросы из листинка я не знаю. Это попытка догадаться.
Помнится я когда-то в лоб на ассемблере проверял когда SAM7S256 изучал.
На частоте 36 МГц получил чуть больше 2МГц на пине (или 3МГц, точно не помню).
Но что это на много меньше чем хотелось бы - так это точно.
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.