George22 0 13 февраля, 2009 Опубликовано 13 февраля, 2009 · Жалоба Скачал пример программы - часы, вторые сутки бьюсь, не работает: #include "msp430x11x1.h" ; include std defs ; RTC variables #define SEC R13 #define MIN R14 #define HR R15 ;----------------------------------------------------------------------------- ; Program RESET RSEG CODE ;----------------------------------------------------------------------------- RESET MOV #02FEh,SP ; Initialize stackpointer MOV #WDTPW+WDTHOLD,&WDTCTL ; Stop Watchdog Timer MOV #TASSEL0+TACLR, &TACTL ; ACLK for Timer_A. BIS #CCIE,&CCTL0 ; Enable CCR0 interrupt. MOV #07FFFh,&CCR0 ; load CCR0 with 32,767. BIS #MC0, &TACTL ; start TA in "up to CCR0" mode ClearRTC MOV.b #00h,SEC ; Clear SEC MOV.b #00h,MIN ; Clear MIN MOV.b #00h,HR ; Clear HR EINT ; Enable interrupts ; Mainloop Mainloop BIS #LPM3,SR ; Set SR bits for LPM3 CALL #Clock ; Update Clock JMP Mainloop ; Endless Loop ;----------------------------------------------------------------------------- ; Clock: Update clock SEC and MIN and HR ;----------------------------------------------------------------------------- Clock SETC ; Set Carry bit. DADC.b SEC ; Increment seconds decimally CMP.b #060h,SEC ; One minute elapsed? JLO Clockend ; No, return CLR.b SEC ; Yes, clear seconds DADC.b MIN ; Increment minutes decimally CMP.b #060h,MIN ; Sixty minutes elapsed? JLO Clockend ; No, return CLR.b MIN ; yes, clear minutes DADC.b HR ; Increment Hours decimally CMP.b #024h,HR ; 24 hours elapsed? JLO Clockend ; No, return CLR.b HR ; yes, clear hours Clockend RET ; ;----------------------------------------------------------------------------- ; Setup: Configure Modules and Control Registers ;----------------------------------------------------------------------------- CCR0INT BIC #LPM3,0(SP) ; Clear SR LPM3 Bits, on top of stack RETI ; ;----------------------------------------------------------------------------- ;---Interrupt vectors--------------------------------------------------------- RSEG INTVEC DW RESET ; DW RESET ; DW RESET ; DW RESET ; DW RESET ; DW RESET ; DW RESET ; DW RESET ; DW RESET ; DW CCR0INT ; Timer_A (CCIFG0) DW RESET ; Watchdog Timer DW RESET ; DW RESET ; DW RESET ; DW RESET ; NMI, Osc. fault DW RESET ; POR, ext. Reset, Watchdog END ;------------------------------------------------------------------------------ В дебаггере заходит в LPM3 и все - молчок -никаких прерываний. Варианты: 0.в программе ошибка? 1.или я тупой и надо возвращаться к AVR? 2.может настройки в IAR слишком сложные? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Elresearch 1 13 февраля, 2009 Опубликовано 13 февраля, 2009 · Жалоба А у Вас режим Debugger-a какой стоит в Options? FET Debugger или Simulator? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
George22 0 13 февраля, 2009 Опубликовано 13 февраля, 2009 · Жалоба Projects->Options->Debugger->Setup->Simulator Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 13 февраля, 2009 Опубликовано 13 февраля, 2009 · Жалоба А таймером оттикали 327хх тактов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Elresearch 1 13 февраля, 2009 Опубликовано 13 февраля, 2009 · Жалоба в Simulator у вас имхо ничего не выработается. берите плату с микроконтроллером и переключайтесь в FET Debugger и тогда смотрите. либо как предлагает MrYuran тикать таймером ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
George22 0 13 февраля, 2009 Опубликовано 13 февраля, 2009 · Жалоба Прежде, чем плату брать, хотелось бы чему-то научиться. Извините за глупые вопросы, но как это -тикать таймером, я думал он сам тикает, как в AVRStudio: процессор sleep, а таймер работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zhevak 0 13 февраля, 2009 Опубликовано 13 февраля, 2009 · Жалоба Проблема вот в этом месте: EINT ; Enable interrupts ; Mainloop Mainloop BIS #LPM3,SR ; Set SR bits for LPM3 CALL #Clock ; Update Clock <--- сюда мы никогда не попадем, т.к. проц спит JMP Mainloop ; Endless Loop CCR0INT BIC #LPM3,0(SP) ; Clear SR LPM3 Bits, on top of stack RETI ; У Вас проблема в том, что Вы подходите к прерываниям MSP430 с позиции прерываний AVR. Разница в том, что у MSP430 при входе в прерывание сохраняется слово состояния проца в стеке, а в нем поднятые биты режимов энергосбрежения. Заметьте, когда выполняется код обработчика прерывания, эти биты сброшены. Но когда проц возвращается из прерывания, он считывает слово состояни из стека и, в отличие от AVR, тут же засыпает вновь. Поэтому, команда CALL #Clock у Вас не может выполниться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 13 февраля, 2009 Опубликовано 13 февраля, 2009 · Жалоба когда проц возвращается из прерывания, он считывает слово состояни из стека и, в отличие от AVR, тут же засыпает вновь. Поэтому, команда CALL #Clock у Вас не может выполниться. Так они ж (эти биты) в прерывании сбрасываются прямо на стеке. В этом смысле вроде бы всё правильно. CCR0INT BIC #LPM3,0(SP) ; Clear SR LPM3 Bits, on top of stack RETI Единственная видимая причина - в симуляторе Я давно уже пришёл к выводу, что отладка через симулятор или житаг - пустая трата времени. Лучше контрольные точки забить и отладочные сообщения выводить наружу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 120 13 февраля, 2009 Опубликовано 13 февраля, 2009 · Жалоба я думал он сам тикает, как в AVRStudio: процессор sleep, а таймер работает. В симуляторе периферия не симулируется. Таймера не тикают, соответственно прерывания не вызываются. Можно заставить симулятор вызывать прерывания через заданное количество тактов. Поищите эту функцию в его меню. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zhevak 0 13 февраля, 2009 Опубликовано 13 февраля, 2009 · Жалоба Так они ж (эти биты) в прерывании сбрасываются прямо на стеке. В этом смысле вроде бы всё правильно. CCR0INT BIC #LPM3,0(SP); Clear SR LPM3 Bits, on top of stack RETI А-а, блин! Пропустил мимо глаз как раз эту команду! Значит тогда симулятор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться