13.12.2012, 15:25
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
В CCS в самой IDE собирать модульный проект - геморрой еще тот.
Используйте Mplab.
Директивами #include присоединяются только хэдеры модулей.
Сами модули включаются в компиляцию в браузере проекта.
__________________
Осторожно , злой кот
|
|
|
|
13.12.2012, 16:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 11.06.2006
Адрес: 51° 46′ 0″ N, 55° 6′ 0″ E
Сообщений: 1,975
Сказал спасибо: 370
Сказали Спасибо 1,725 раз(а) в 706 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от dosikus
|
В CCS в самой IDE собирать модульный проект - геморрой еще тот.
|
........................
Сообщение от dosikus
|
Знакомые сказки...
А на поверку всегда выходит, что руки увы кривые...
|
Последний раз редактировалось welcome61; 13.12.2012 в 16:29.
|
|
|
|
15.12.2012, 19:52
|
|
Прописка
Регистрация: 14.02.2010
Адрес: СССР
Сообщений: 286
Сказал спасибо: 141
Сказали Спасибо 51 раз(а) в 43 сообщении(ях)
|
Три поросенка: sleep, wake-up и interrupt
наткнулся на странное поведение pic12f1822 при выходе из sleep по внешнему прерыванию.
Код:
|
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOIESO //Internal External Switch Over mode disabled
#FUSES NOFCMEN //Fail-safe clock monitor disabled
#FUSES NOSTVREN //Stack full/underflow will not cause reset
#FUSES NODEBUG //Debug mode for use with ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#int_RA
void RA_isr(void)
{
if(input(PIN_A5)==0){intra5=1;}
clear_interrupt(INT_RA5);
}
void main()
{
[скипнуто]
clear_interrupt(INT_RA5);
clear_interrupt(INT_TIMER0); //судя по отладке - его юзает встроенный delay_ms();
enable_interrupts(INT_RA5_H2L);
enable_interrupts(GLOBAL);
sleep();
#asm //после выхода из сна ВСЕГДА сначала выполняется
NOP //следующая инструкция, поскольку она уже в кэше
#endasm
delay_ms(500); |
}
выход из сна по нажатию RA5, НО! Если не очищать флаг прерывания в самом обработчике прерывания - уходит в медитацию. При этом продолжает реагировать на нажатие кнопки - проверял дерганьем ноги.
отладка показала, что зацикливается на самом обработчике - не происходит очистка флага прерывания. Т.е. после RETFIE опять влетает в обработчик.
Такой вот трабл. В даташите и еррате этот феномен не описан.
Если это фича - имейте в виду, если МОЯ бага - кто может прокомментировать?
Последний раз редактировалось Old_Monster; 15.12.2012 в 19:56.
|
|
|
|
15.12.2012, 20:15
|
|
Частый гость
Регистрация: 01.03.2008
Сообщений: 37
Сказал спасибо: 3
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Что то, где то я вспоминаю.... порт надо прочесть, чтоб флаг снять
Код:
|
#INT_RA
void isr_ra(void) {
int8 changes;
changes=input_change_a();
if (bit_test(changes,5)) {
if (input(PIN_A5)==0) { ...... |
на форуме CCS тоже было, тынц
Последний раз редактировалось xDriver; 15.12.2012 в 20:27.
|
|
|
|
15.12.2012, 22:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 22.02.2008
Адрес: Ukraine, рядом с Полтавой
Сообщений: 9,700
Сказал спасибо: 5,497
Сказали Спасибо 25,125 раз(а) в 5,642 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Да это и в даташитах от Майкрочипа написано
|
|
|
|
15.12.2012, 22:18
|
|
Прописка
Регистрация: 14.02.2010
Адрес: СССР
Сообщений: 286
Сказал спасибо: 141
Сказали Спасибо 51 раз(а) в 43 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от Eddy71
|
Да это и в даташитах от Майкрочипа написано
|
ссылку, страницу плиз. Я не видел.
2xDriver
добавил в обработчик
value = input_a();
заремил очистку флага - результат всё тот же.
UPD:
балин! без слипа тот же эффект. Eddy71, ткните плиз, где это описано?
Последний раз редактировалось Old_Monster; 15.12.2012 в 22:26.
Причина: upd
|
|
|
|
15.12.2012, 22:51
|
|
Частый гость
Регистрация: 01.03.2008
Сообщений: 37
Сказал спасибо: 3
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
может тут
Цитата:
|
13.3 Interrupt Flags
13.4 Clearing Interrupt Flags
EXAMPLE 13-1:
13.5 Operation in Sleep
|
|
|
|
|
15.12.2012, 23:39
|
|
Прописка
Регистрация: 14.02.2010
Адрес: СССР
Сообщений: 286
Сказал спасибо: 141
Сказали Спасибо 51 раз(а) в 43 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от xDriver
|
может тут
|
13.3 повествует, что же происходит с флагами при возникновении прерывания.
13.4 рассказывает КАК правильно сбрасывать флаги прерываний
13.5 объясняет что прерывания IOC выводят из слипа и что регистр IOCAF при этом обновляется ДО ТОГО как будет выполнена любая инструкция.
т.е. всё не о том.
Что-то мне подумалось - а не при чём тут даташиты. Это таки обязанность компилятора - добавлять или не_добавлять команды сброса флага в обработку прерывания. И тогда - хз. Походу - возьму за привычку добавлять всегда ![Озадачен](images/smilies/icon_confused.gif)
Но как-то это ВНЕЗАПНО.
|
|
|
|
15.12.2012, 23:49
|
|
Прописка
Регистрация: 14.02.2010
Адрес: СССР
Сообщений: 286
Сказал спасибо: 141
Сказали Спасибо 51 раз(а) в 43 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от xDriver
|
Что то, где то я вспоминаю.... порт надо прочесть, чтоб флаг снять
|
насколько я понял, прочитав тему по приведенной вами ссылке - как раз наоборот. У парня проблема разделить котлеты и мухи: H-to-L и L-to-H.
Во втором посте Майк говорит что прерывание возникнет после чтения. Правда, мой английский слаб. Но тут как-будто по другому не интерпретируется.
|
|
|
|
15.12.2012, 23:51
|
|
Частый гость
Регистрация: 01.03.2008
Сообщений: 37
Сказал спасибо: 3
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
нет это не дело !
давайте разберемся до конца, привожу РАБОЧИЙ свой обработчик:
Код:
|
#INT_RA
void isr_ra(void) {
int8 changes;
changes=input_change_a();
if (bit_test(changes,3)) {
if (input(INPUT)) {
output_low(OUT_A);
i=ZADERG;while(i) i--;
output_high(OUT_A);
i=ZADERG;while(i) i--;
output_low(OUT_A);
} else {
output_low(OUT_B);
i=ZADERG;while(i) i--;
output_high(OUT_B);
i=ZADERG;while(i) i--;
output_low(OUT_B);
};
};
} |
не важно что он делает, но проблем нет
правда я использую
asm код можно глянуть на обработчик ?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:17.
|
|