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

kavimanus

Участник
  • Публикаций

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

  • Посещение

Репутация

0 Обычный
  1. Спасибо всем откликнувшимся. Проблема решена. Хотя по прежнему значения регистров IE1 и IE2 нельзя менять вручную (в отладчике), но они (значения) стали меняться посредством программного кода, что меня вполне устраивает. К сожалению не могу сказать, что именно способствовало решению, т.к. было перепробовано куча всего и что именно повлияло на восстановление работоспособности, просто не знаю. В любом случае еще раз хочу поблагодарить не оставшихся в стороне.
  2. Имеется MSP-EXP430G2 LaunchPad с msp430g2553 на борту. Пару дней назад, после очередного рукоблудия по коду, было замечено, что не срабатывают прерывания при передаче данных по I2C (до этого всё было нормально). Решив, что в очередной раз что-то нарукожопил, полез смотреть, что говорит отладчик. И вот что он мне сказал: 1. При выполнении кода вида: bis.b #UCB0TXIE, &IE2 (bis.b #0x08, &IE2) флаг в IE2 не устанавливается, словно это не команда установки бита, а просто nop 2. При попытке установить любой бит в регистре IE2 ручками, в отладчике, происходит "гравитационный коллапс": 2.1. В логе появляются вот такие матерные сообщения: -Could not perform access, BSL memory segments are protected : (WriteMemory) , address=0x0, buffer=, count=0x2 -Fatal error: Failed to re-initialize Session aborted! -Register Window write operation to 'IE2.UCB0TXIE' failed. 2.2. Вылетает вот такое сообщение об ошибке: 2.3. IDE коллапсирует, сеанс отладчика вылетает, валятся сообщения о невозможности установить соединение. пока не будет перезагружен IDE и переподключен launchpad. Есть подозрения, что виной всему, Energia, в которую я полез, чтоб посмотреть какой оно генерит код. И хоть это чудо и выдало сообщение о том, что устройство не найдено, и код не был прошит в камень, сдается мне, что таки оно умудрилось где-то нагадить, может я ошибаюсь. Вот применительно к этой ситуации, прошу помощи знающих людей. Куда бежать? За что хвататься? Пытаться перепрошивать launchpad? Но как и чем? Конечно попытался покурить форум и мануалы, но ничего не понял ((( В заключение приведу набор используемых программ, на всякий случай - ОС: win7 32/64 (в зависимости от зависимости) - компилятор: naken_asm - программатор: Lite FET-Pro430 Elprotronic - для отладки использую IAR и вот что выдаёт Lite FET-Pro430 по поводу версии firmware: Люди добрые, спасите-помогите, пожалуйста ))
  3. прерывания таймера. прошу помощи

    Интересное замечание. Возьму на заметку, спасибо. Хотя, конечно, совсем отказываться от уже прописанных константных значений, и производить побитовую инициализацию, не очень бы хотелось )
  4. прерывания таймера. прошу помощи

    Хочу поблагодарить всех, кто оказывал помощь. Вопрос более не актуален. Всё работает. Выводы следующие: - действительно не стоит полностью полагаться на отладчик (что прискорбно); - более вдумчиво нужно читать документацию. Еще раз спасибо за посильную помощь. Все советы были полезны и способствовали решению моего вопроса.
  5. прерывания таймера. прошу помощи

    - Значения регистров смотрю в отладчике (IAR). Попытка анализа без отладчика, например включение светодиода по состоянию регистров (тому их состоянию, которое предполагается), так же положительных результатов не даёт. - При использовании активного режима (без перехода в режимы энергосбережения) результат не меняется. - Изменение значения делителя частоты (и соответственно частоты тактирующего сигнала) действительно дает ожидаемый положительный результат. Но, опять же, при различных частотах DCO появляются новые "спецэффекты" - Мне не понятно то, что прерывание, судя по всему, генерируется регистрами TACCL1 и TACCL2 (флаги CCIFG этих регистров установлены при входе в обработчик прерывания) в то время, как флаги CCIE, этих регистров изначально сброшены (т.е. чисто теоретически и прерывания от них запрещены). В то же время прерывание от TACCL0 разрешено, но не срабатывает, хотя, насколько я понимаю, имеет более высокий приоритет. - Есть подозрение, что я как-то неверно произвожу начальную инициализацию модуля синхронизации и таймера, но в чём моя ошибка, пока понять не могу. Капаю дальше )
  6. прерывания таймера. прошу помощи

    Согласен с Вами. Ощущение такое, что прерывание генерируется неким иным источником, нежели задумано (что само по себе для меня странно по ряду причин). За идею Вам большое спасибо, попробовал, в разных вариациях, но увы, пока результат тот же.
  7. прерывания таймера. прошу помощи

    Помогите разобраться новичку. Пытался самостоятельно - не вышло. Ниже кусок когда (максимально упрощенный). Суть в банальном прерывании от таймера, которое срабатывает по достижении определённого значения, но вот срабатывает оно (прерывание) очень странно. Точнее имеются странные показания регистров при делителе частоты = 1 (значения приведены ниже). .org 0xf800 ;код с этого адреса init: mov.w #WDTPW+WDTHOLD, &WDTCTL;остановить WD mov.b &0x10FC, &DCOCTL ;установка DCO mov.b &0x10FD, &BCSCTL1 ;на частоту 8МГц mov.b #0x06, BCSCTL2 ;Источник сигнала для MCLK и SMCLK - DCOCLK. делитель MCLK-1. делитель SMCLK-8. резистор внутр. mov.w #0280h, SP ;стек с адреса #0x0280 eint ;общее разрешение прерываний loop: mov.w #TASSEL_2+ID_0+MC_1+TACLR, TACTL;источник сигнала - SMCLK/делитель частоты - 1/прямой счет/сброс таймера mov.w #CM_0+CCIE, TACCTL0 ;нет захвата+разрешить прерывание (по переполнению) mov.w #10000, TACCR0 ;предел счета call #delay_proc jmp loop delay_proc: mov.w #GIE+CPUOFF,SR ;LPM0 ret TimerA_int: ;обработчик прерывания Timer_A nop ;для отладки clr.w TACTL ;остановить таймер reti ;вернуться из прерывания .org 0xfffe ;адрес вектора прерывания проц-ры сброса dw init ;обработчик прерывания .org 0xfff2 ;адрес вектора прерывания Таймера_А, по переполнению dw TimerA_int ;обработчик прерывания В таком виде прерывание от таймера срабатывает, но попав обработчик регистры имеют непонятные значения: До входа в обработчик TACTL=0x210 TA0CCTL0=0x10 TA0CCTL1=0x00 TA0CCTL2=0x00 TAR=0x00 TA0CCR0=0x2710 TA0CCR1=0x00 TA0CCR2=0x00 При входе в обработчик TACTL=0x211 TA0CCTL0=0x10 TA0CCTL1=0x01 TA0CCTL2=0x01 TAR=0x00 TA0CCR0=0x2710 TA0CCR1=0x00 TA0CCR2=0x00 Т.е. в регистре TAR значение 0x00 вместо 0x2710. И устанавливаются флаги CCIFG в регистрах TA0CCTL1 и TA0CCTL2 Стоит отметить, что при других значениях делителя частоты (ID_1, ID_2, ID_3. регистр TACLR) значения вполне адекватные. Например при значении ID_1 состояния регистров следующие: До входа в обработчик TACTL=0x250 TA0CCTL0=0x10 TA0CCTL1=0x00 TA0CCTL2=0x00 TAR=0x00 TA0CCR0=0x2710 TA0CCR1=0x00 TA0CCR2=0x00 При входе в обработчик TACTL=0x250 TA0CCTL0=0x10 TA0CCTL1=0x00 TA0CCTL2=0x00 TAR=0x2710 TA0CCR0=0x2710 TA0CCR1=0x00 TA0CCR2=0x00 Помогите пожалуйста разобраться в чём моя ошибка? P.S.: Прошу прощения за форматирование текста