Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Скорость смены логического значения
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
d7d1cd
Привет всем! Свой вопрос изложу на конкретном примере.

Есть МК MSP430F149. Его пин 2.6 сконфигурирован на вывод и на него выведен логический 0. В программе выполняется команда:

BIS.B #0080, &0029

то есть, на пине устанавливается логическая 1.

Вопрос такой: в какой момент на пине появится высокий уровень напряжения? Сразу после выполнения команды или необходим еще один такт МК?

MrYuran
Цитата(d7d1cd @ Nov 14 2012, 06:49) *
Вопрос такой: в какой момент на пине появится высокий уровень напряжения? Сразу после выполнения команды или необходим еще один такт МК?

Ещё, и не один такт. Порты ввода/вывода находятся на внешней шине, как и ОЗУ, и скорость доступа будет соответствующая.
А учитывая, что это ещё чтение-модификация-запись, то ещё больше. Я думаю, не меньше пяти.

Оно вроде как и жизнью подтверджается.
Ногодрыганье при DCO ~ 4.8 MГц в районе микросекунды получается.
rezident
Цитата(d7d1cd @ Nov 14 2012, 07:49) *
Вопрос такой: в какой момент на пине появится высокий уровень напряжения? Сразу после выполнения команды или необходим еще один такт МК?

Я вам уже советовал внимательно читать руководство пользователя (User's Guide) в котором есть ответы на большинство ваших вопросов. На странице 107 в руководстве есть таблица Table 3−16.Format 1 Instruction Cycles and Lengths из которой можно узнать, что выполнение команды BIS.B #0080, &0029 занимает 5 тактов MCLK - 3 такта на выборку кода команды и двух ее операндов, 1 такт на чтение источника и 1 такт на запись в приемник. Следовательно состояние пина изменится на 5-м такте выполнения команды.
d7d1cd
Цитата(rezident @ Nov 14 2012, 18:32) *
Следовательно состояние пина изменится на 5-м такте выполнения команды.

То есть, если сразу после команды проверить уровень напряжения на пине, то он будет соответствовать тому уровню, который задавался командой?P.S. Всегда следую вашему "указу" и сначала ищу информацию в руководствах, но... видимо плохо ищу sm.gif Спасибо, что помогаете!


rezident
Цитата(d7d1cd @ Nov 14 2012, 20:30) *
То есть, если сразу после команды проверить уровень напряжения на пине, то он будет соответствовать тому уровню, который задавался командой?
Конечно же сразу после выплнения команды. У MSP430 нет дополнительного конвейера команд и/или отдельной шины доступа к периферии (со своим собственным источником тактирования), которая могла бы затормозить/отложить исполнение команды.
d7d1cd
Понятно. Тогда можно еще вопрос по теме.
Я взял откомпилированную программу, дизассемблировал ее и нашел код, где программа отправляет байт в микросхему памяти. Опустив ненужные детали, привожу код с комментариями:
Код
9038       7742         MOV.B   #8,R7            Устанавливаем счетчик цикла на 8 раз
903A       F0C08000EB6F BIC.B   #0080,0029        Устанавливаем низкий уровень сигнала на пине P2.7 (вход SCK микросхем памяти)
9040       0858         ADD     R8,R8            Сдвигаем влево на 1 бит отправляемый байт
9042       0428         JNC     904C            Если очередной бит отправляемого байта низкого уровня, то переходим к адресу 0x904C
9044       F0D04000E16F BIS.B   #0040,0029        Устанавливаем высокий уровень сигнала на пине P2.6 (вход SI микросхем)
904A       033C         JMP     9052            Переходим к адресу 0x9052
904C       F0C04000D96F BIC.B   #0040,0029        Устанавливаем низкий уровень сигнала на пине P2.6 (вход SI микросхем)
9052       0343         NOP                 
9054       F0D08000D16F BIS.B   #0080,0029        Устанавливаем высокий уровень сигнала на пине P2.7 (вход SCK микросхем памяти)
905A       1783         SUB     #1,R7            Если цикл передачи байта не закончился, то...
905C       EE23         JNZ     903A            ...переходим к адресу 0x903A


Объясните, для чего нужна команда NOP после команды, устанавливающей на пине SI нужный уровень? Такое ощущение, что она нужна для гарантированного появления на пине SI нужного уровня сигнала. Но как мне пояснили выше, уровень устанавливается сразу после выполнения команды...
rezident
Возможно это просто особенность оптимизации исходного кода компилятором и особого смысла не несет. Ну либо гарантированная пауза между установкой сигнала SI и фронта SCK, требуемая в соответствии с времянками м/с EEPROM.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.