Перейти к содержанию
    

ListenReality

Участник
  • Постов

    19
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о ListenReality

  • Звание
    Участник
    Участник
  • День рождения 20.09.1992

Информация

  • Город
    Array
  1. Спасибо всем за помощь. Впредь буду детальнее читать Help На всякий случай оставлю пример. Программа считает количество WatchDog'ов #pragma NOINIT (x ); int x; int main(void) { /*настройка сторожевого таймера*/ WDTCTL = WDTPW // ключ защиты //+ WDTNMI // 0 - Вход аппаратного сброса, 1 - вход прервания //+ WDTTMSEL // 0 - режим сторожевого таймера, 1 - интервальный таймер + WDTCNTCL // Обнуляем таймер + WDTSSEL; // 0 - тактовый сигнал от SMCLK, 1 - ACLK //+ WDTIS0; //+ WDTIS1; IE1 = WDTIE;// разрешаем прерывания от сторожевого таймера BCSCTL3 = LFXT1S_2;//задаем для ACLK источник тактирования VLO DCOCTL = CALDCO_1MHZ; BCSCTL1 = CALBC1_1MHZ; if((IFG1&WDTIFG)==WDTIFG)//сбросились по собаке { IFG1&=~WDTIFG;//обнуляем флаг x++; } else x=0; }
  2. Вы видимо не правильно поняли. 1) Включение МК по питанию(сигнал POR и PUC) 2) Сброс МК по WatchDog(только сигнал PUC). Программа начинает выполняться с начала, но есть бит, который указывает, что мы сбросились именно по WatchDog. if((IFG1&WDTIFG)==WDTIFG)//сбросились по собаке { IFG1&=~WDTIFG;//обнуляем флаг countWatchDog++; } Поставлю вопрос тогда так. Где и как мне объявить переменную countWatchDog, чтобы: 1) Если включились по питанию, countWatchDog=0; 2) Если сброс по WatchDog, то countWatchDog++; По сути нужно посчитать кол-во сбросов по WatchDog. Пробовал: Объявлял переменную за функцией main по-разному: int countWatchDog; static int countWatchDog; При этом main выглядит примерно так: int main(void) { /*настройка сторожевого таймера*/ WDTCTL = WDTPW // ключ защиты + WDTCNTCL // Обнуляем таймер + WDTSSEL; // 0 - тактовый сигнал от SMCLK, 1 - ACLK IE1 = WDTIE;// разрешаем прерывания от сторожевого таймера BCSCTL3 = LFXT1S_2;//задаем для ACLK источник тактирования VLO if((IFG1&WDTIFG)!=WDTIFG)//по питанию { countWatchDog=0; } if((IFG1&WDTIFG)==WDTIFG)//сбросились по собаке { IFG1&=~WDTIFG;//обнуляем флаг countWatchDog++; } } При этом в случае, когда "int countWatchDog;" переменная всегда = 0 В случае, когда "static int countWatchDog;" переменная всегда равна 0х261. И в отладчике, после прохождения строчки "countWatchDog=0;" - значение переменной не меняется.
  3. А можете подсказать как в CCS решить эту проблему ?
  4. mcheb, k155la3 Спасибо за ваши ответы. Не вижу файла "lnk430F149.xcl" или подобного для моего МК. Есть только "lnk_msp430f2012.cmd", но содержимое его не похоже на то, что писали вы. MEMORY { SFR : origin = 0x0000, length = 0x0010 PERIPHERALS_8BIT : origin = 0x0010, length = 0x00F0 PERIPHERALS_16BIT : origin = 0x0100, length = 0x0100 RAM : origin = 0x0200, length = 0x0080 INFOA : origin = 0x10C0, length = 0x0040 INFOB : origin = 0x1080, length = 0x0040 INFOC : origin = 0x1040, length = 0x0040 INFOD : origin = 0x1000, length = 0x0040 FLASH : origin = 0xF800, length = 0x07E0 INT00 : origin = 0xFFE0, length = 0x0002 INT01 : origin = 0xFFE2, length = 0x0002 INT02 : origin = 0xFFE4, length = 0x0002 INT03 : origin = 0xFFE6, length = 0x0002 INT04 : origin = 0xFFE8, length = 0x0002 INT05 : origin = 0xFFEA, length = 0x0002 INT06 : origin = 0xFFEC, length = 0x0002 INT07 : origin = 0xFFEE, length = 0x0002 INT08 : origin = 0xFFF0, length = 0x0002 INT09 : origin = 0xFFF2, length = 0x0002 INT10 : origin = 0xFFF4, length = 0x0002 INT11 : origin = 0xFFF6, length = 0x0002 INT12 : origin = 0xFFF8, length = 0x0002 INT13 : origin = 0xFFFA, length = 0x0002 INT14 : origin = 0xFFFC, length = 0x0002 RESET : origin = 0xFFFE, length = 0x0002 } /****************************************************************************/ /* SPECIFY THE SECTIONS ALLOCATION INTO MEMORY */ /****************************************************************************/ SECTIONS { .bss : {} > RAM /* GLOBAL & STATIC VARS */ .data : {} > RAM /* GLOBAL & STATIC VARS */ .sysmem : {} > RAM /* DYNAMIC MEMORY ALLOCATION AREA */ .stack : {} > RAM (HIGH) /* SOFTWARE SYSTEM STACK */ .text : {} > FLASH /* CODE */ .cinit : {} > FLASH /* INITIALIZATION TABLES */ .const : {} > FLASH /* CONSTANT DATA */ .cio : {} > RAM /* C I/O BUFFER */ .pinit : {} > FLASH /* C++ CONSTRUCTOR TABLES */ .init_array : {} > FLASH /* C++ CONSTRUCTOR TABLES */ .mspabi.exidx : {} > FLASH /* C++ CONSTRUCTOR TABLES */ .mspabi.extab : {} > FLASH /* C++ CONSTRUCTOR TABLES */ .infoA : {} > INFOA /* MSP430 INFO FLASH MEMORY SEGMENTS */ .infoB : {} > INFOB .infoC : {} > INFOC .infoD : {} > INFOD /* MSP430 INTERRUPT VECTORS */ .int00 : {} > INT00 .int01 : {} > INT01 PORT1 : { * ( .int02 ) } > INT02 type = VECT_INIT PORT2 : { * ( .int03 ) } > INT03 type = VECT_INIT USI : { * ( .int04 ) } > INT04 type = VECT_INIT ADC10 : { * ( .int05 ) } > INT05 type = VECT_INIT .int06 : {} > INT06 .int07 : {} > INT07 TIMERA1 : { * ( .int08 ) } > INT08 type = VECT_INIT TIMERA0 : { * ( .int09 ) } > INT09 type = VECT_INIT WDT : { * ( .int10 ) } > INT10 type = VECT_INIT .int11 : {} > INT11 .int12 : {} > INT12 .int13 : {} > INT13 NMI : { * ( .int14 ) } > INT14 type = VECT_INIT .reset : {} > RESET /* MSP430 RESET VECTOR */ }
  5. Всем привет. Проблема такая: Необходимо завести такую переменную, которая после сброса МК по WatchDog сохранит свое значение. Пробовал через static. Но видимо я чего-то глубоко не понимаю. Если переменную не инициализировать, то в ней рандомное значение, которое нельзя никак изменить. (А писать static int i=0 глупо, т.к. оно каждый раз будет обнуляться). Вообще возможно ли это? или МК после сброса по WatchDog затирает память?
  6. Может кому пригодится. Проблема решена так: Приобрел MSP-FET оригинальный http://www.ti.com/tool/msp-fet Соединил все, как здесь: http://processors.wiki.ti.com/index.php ... pinout.JPG только R2 сделал перемычкой. Прожигаю с помощью CCSv6, через FET-Pro430 не пробовал еще(жалко жечь МК зря). Думаю, через FET-Pro430 тоже будет работать.
  7. Но при этом, если схема полностью собрана(стоит R2 и соединены TEST/VPP с TEST/SBWTCK), то результат FAIL, как на скрине выше. В чем может быть причина ? Схема собрана не правильно - разультат "PASS", схема собрана правильно - результат "FAIL".
  8. Note C в схеме: R2 = 0, а TEST/VPP не соединяется. Или я не так что-то понял ? Окно программы, если все-таки соединить TEST/VPP и TEST/SBWTCK.
  9. Ребята, проблема не решена Поправьте меня, если что не так. Собираю следующую схему Только сопротивление R2 убираю и разрываю соединение TEST/VPP и TEST/SBWTCK. Подключаю к компу MSP-FET430UIF (правда китайская копия). Открываю программу FETPro430. Память МК читаю без проблем, зашиваю прошивку в Hex-виде. При попытка прожига перемычки программа выглядит так: Но фактически перемычка не пережигается. Пожалуйста, без троллинга, типа "твоя прошивка никому не нужна".
  10. slavokhire5 МК msp430f2012, на сколько мне известно в нем нет BSL (если я правильно понял о чем вы говорите)
  11. Fet-Pro430

    на сколько мне известно JTAG только перемычкой отключается(хотя где-то читал, что все зависит от МК, и есть серии, где JTAG паролится) Меня интересует, BSL. На всех ли МК он есть?
  12. jcxz, Смешно Программу будет писать другой человек, мне просто поставили задачу научиться защищать прошивку от копирования.
  13. Это все делал, IAR говорит, что устройство не найдено На сколько мне известно, есть просто Spy-by-Wire, а есть JTAG Spy-by-Wire. В некоторых утилитках их разделяют. Может и зря Проект будет делать другой человек, я лишь должен научиться защищать прошивку. http://electronix.ru/forum/lofiversion/index.php/t78846.html 6-той пост В английском не силен, даташиты на русском не встречал. Поэтому и лазию по форумам, собирая инфу.
  14. Obam Есть то он есть, но программатор видеть отказывается. Возможно из-за конфликта библиотек с CCS, где то слышал что такое бывает. А в ССS найти подобную штучку немогу И у меня кстати вот так:
  15. Спасибо, что подтвердили мои предположения. Рядом сидит коллега и говорит "Как это в одну сторону можно( Си->Hex), а в другую нельзя?". А у меня откуда то сложилось мнение, что если код откомпилирован, то с ним уже ничего не поделать (если правильно понимаю, в пример можно привести *.exe, обратно в Си же его не переведешь). E.V.G выше все написал :rolleyes: В общем после двухдневных танцов с бубном, библиотеками и разного рода утилитками, получилось считать прошивку МК с помощью "FET-Pro430". Остальные утилитки отказывались работать напрочь (пришел к выводу, что скорее всего конфликты библиотек, т.к. на ПК установлены CCSv6 и 2 IARa). Прошивку я сам у себя украл, а значит может украсть и кто-то другой. Теперь вопрос, который я уже задавал, но до конца так и не разобрался. Сейчас, если я пережгу у МК fuse, я потеряю возможность работы по JTAG(программирование, отладка и самое главное считывание прошивки), правильно? После этого смогу ли я прошивать по Spy-by-Wire? Смогу ли я прошивать по BSL, а главное считывать прошивку? Если да, то как защититься от такого считывания по BSL?
×
×
  • Создать...