Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: чудеса с mps430f2121
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
_3m
Случайно обнаружил странное поведение чипа, или не чипа а не знаю кого...
Программа опроса кнопки на порту P1.4, все просто как грабли (LocBtn - статическая переменная, которая потом анализируется)
Код
LocBtn<<=1;
LocBtn&=~1;
if ((P1IN & (1<<p1key))!=0)
{
  LocBtn|=1;
}


Железка подключена по jtag через LPT-FET. Компилирую, запускаю C-SPY, давлю F5 (GO), кнопка опрашивается как и задумано. jtag стоит в режиме Release JTAG on GO.
Отключаю отладчик, подключаю БП, все работает, но "0" на порту P1.4 программа в упор не видит. Контролирую осциллографом - на ножке ноль. Подключаю обратно отладчик, не меняя прошивки - кнопка снова работает. Используется IAR 3.42a.
Сергей Борщ
Цитата(_3m @ Nov 4 2007, 00:29) *
LocBtn&=~1;
Эта команда лишняя. В Си при сдвиге влево в младший бит уже заносится ноль. При сдвиге вправо беззнаковой переменной также заносится ноль, в знаковую заносится копия старшего бита до сдвига.
Цитата(_3m @ Nov 4 2007, 00:29) *
Отключаю отладчик, подключаю БП, все работает, но "0" на порту P1.4 программа в упор не видит.
Возможно ваша проблема кроется в уровне на ножке TEST - отладчик ее ставит в нужное положение, без него там у вас каким-то образом появляется высокий уровень и биты 4...7 переходят в режим JTAG. Поставьте подтяжку 1К к земле - должно помочь.
rezident
В таких случаях неплохо бы давать еще и код инициализации периферии. Ну и проверить в сомнительных случаях, что там компилятор накомпилировал, по асм-овому тексту это вообще святое дело.

Цитата(Сергей Борщ @ Nov 4 2007, 03:52) *
Поставьте подтяжку 1К к земле - должно помочь.

В кристаллах этой серии pull-down на пине TEST встроенный.
Цитата
RInternal Internal pull-down resistance on TEST 2.2 V/3 V 25 60 90 kΩ

ИМХО не в этом дело.
Сергей Борщ
Цитата(rezident @ Nov 4 2007, 01:07) *
В кристаллах этой серии pull-down на пине TEST встроенный.
Да, я уже сверился с даташитом (помню то обсуждение wink.gif ). Но мало ли что там у _3m снаружи подключено - может банально не туда подтянул. Поэтому и написал обтекаемо - "каким-то образом появляется". Пусть проверит, убедится.
_3m
Цитата(Сергей Борщ @ Nov 4 2007, 01:52) *
Эта команда лишняя. В Си при сдвиге влево в младший бит уже заносится ноль. При сдвиге вправо беззнаковой переменной также заносится ноль, в знаковую заносится копия старшего бита до сдвига.

Проверю по ассемблерному листингу.
Я стараюсь как можно меньше полагаться на "стандарты" языка и умолчания компилятора, так как на максимальном уровне оптимизации из-за этого возникают трудновыявляемые компиляторозависимые баги.
Цитата
Возможно ваша проблема кроется в уровне на ножке TEST - отладчик ее ставит в нужное положение, без него там у вас каким-то образом появляется высокий уровень и биты 4...7 переходят в режим JTAG. Поставьте подтяжку 1К к земле - должно помочь.

Запаяна подтяжка 10К к земле, на ножке TEST присутствует логический ноль.
Я вставил выдачу отладочных импульсов на P1.4 - оно на вывод работает.

Возможно C-SPY при старте что-то инициализирует, что в моей программе не инициализируется, однако я точно инициализирую регистры PxDIR, PxSEL, PxREN, PxIES, PxIE, PxOUT, где x=1...2
rezident
Цитата(_3m @ Nov 4 2007, 18:55) *
однако я точно инициализирую регистры PxDIR, PxSEL, PxREN, PxIES, PxIE, PxOUT, где x=1...2

Дык и приведите весь этот код инициализации. Скопипастить ведь не очень трудно.
Сергей Борщ
Цитата(_3m @ Nov 4 2007, 15:55) *
Проверю по ассемблерному листингу.
Я стараюсь как можно меньше полагаться на "стандарты" языка и умолчания компилятора
Это правильно. Заодно проверьте, что A <<=1 сдвигает именно влево и именно на один бит и при всех уровнях оптимизации.
Цитата(_3m @ Nov 4 2007, 15:55) *
, так как на максимальном уровне оптимизации из-за этого возникают трудновыявляемые компиляторозависимые баги.
У меня не возникают. Видимо потому, что ознакамливаюсь со стандартами (без кавычек) и описаниями. В следующий раз, когда найдете такой - не забудьте поделиться. Заодно узнаю, что я делаю неправильно.
Цитата(_3m @ Nov 4 2007, 15:55) *
Я вставил выдачу отладочных импульсов на P1.4 - оно на вывод работает.
Возможно C-SPY при старте что-то инициализирует, что в моей программе не инициализируется, однако я точно инициализирую регистры PxDIR, PxSEL, PxREN, PxIES, PxIE, PxOUT, где x=1...2
"Оно само" ничего не делает. C-SPY пишет в регистры при старте то, что указано ему в .mac-файле. Файл указывается в опциях проекта на вкладке дебаггера. Про этот файл тоже написано в документации. rezident прав - телепатить непросто.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.