|
Миландр 1986ВЕ1Т |
|
|
|
Mar 23 2017, 09:55
|
Группа: Участник
Сообщений: 7
Регистрация: 23-03-17
Пользователь №: 95 986

|
Всех приветствую. Работал ли кто с Миландрами? Никак не могу настроить прерывания от таймера (ни одного). Код такой: CODE int cnt1, cnt2, cnt3;
/* * Прерывание таймера 1 (14) * Смещение в таблице векторов 0x40 + 14 * 4 = 0x78 */ void Vector78(void) { cnt1 += 1;
MDR_TIMER1->STATUS = (uint32_t) 0; }
/* * Прерывание таймера 2 (15) * Смещение в таблице векторов 0x40 + 15 * 4 = 0x7C */ void Vector7C(void) { cnt2 += 1;
MDR_TIMER2->STATUS = (uint32_t) 0; }
/* * Прерывание таймера 3 (16) * Смещение в таблице векторов 0x40 + 16 * 4 = 0x80 */ void Vector80(void) { cnt3 += 1;
MDR_TIMER3->STATUS = (uint32_t) 0; }
int main(void) {
int cnt4 = 0; cnt1 = cnt2 = cnt3 = 0; ... Код включения тактирования ядра и таймеров в другом модуле ... MDR_TIMER1->CNTRL = (uint32_t) 0; MDR_TIMER1->CNT = (uint32_t) 0; MDR_TIMER1->PSG = (uint32_t) 0; MDR_TIMER1->ARR = (uint32_t) 4095; MDR_TIMER1->IE = TIMER_IE_CNT_ARR_EVENT_IE | TIMER_IE_CNT_ZERO_EVENT_IE; MDR_TIMER1->STATUS = (uint32_t) 0; MDR_TIMER1->CNTRL = (uint32_t) 1; MDR_TIMER3->CNTRL = (uint32_t) 0; MDR_TIMER3->CNT = (uint32_t) 0; MDR_TIMER3->PSG = (uint32_t) 0; MDR_TIMER3->ARR = (uint32_t) 4095; MDR_TIMER3->IE = TIMER_IE_CNT_ARR_EVENT_IE | TIMER_IE_CNT_ZERO_EVENT_IE; MDR_TIMER3->STATUS = (uint32_t) 0; MDR_TIMER3->CNTRL = (uint32_t) 1;
MDR_TIMER2->CNTRL = (uint32_t) 0; MDR_TIMER2->CNT = (uint32_t) 0; MDR_TIMER2->PSG = (uint32_t) 0; MDR_TIMER2->ARR = (uint32_t) 4095; MDR_TIMER2->IE = TIMER_IE_CNT_ARR_EVENT_IE | TIMER_IE_CNT_ZERO_EVENT_IE; MDR_TIMER2->STATUS = (uint32_t) 0; MDR_TIMER2->CNTRL = (uint32_t) 1;
NVIC_EnableIRQ(TIMER1_IRQn); NVIC_EnableIRQ(TIMER2_IRQn); NVIC_EnableIRQ(TIMER3_IRQn);
while (true) { cnt4 += 1; } } Смотрю по GDB - МК в прерывания не заходит, счетчики cnt1..3 не инкриментируются ни разу. Что уже проверял: 1. Все таймеры точно затактировались и считают: Код (gdb) p *0x40070000 // Регистр TIMER1->CNT $82 = 3285 $83 = 1406 $84 = 2573 $85 = 1891 2. Вектора в таблице правильные: Код (gdb) p Vector78 $86 = {void (void)} 0x300 <Vector78> (gdb) p *0x00000078 $87 = 769 // 0x300 == (769 & 1) 3. Флаги статуса прерываний подняты: Код (gdb) p *0x40070058 // Регистр TIMER1->IE $88 = 3 // Прерывания по 0 и по ARR разрешены (gdb) p *0x40070054 // Регистр TIMER1->STATUS $89 = 3 // Оба события 4. В NVIC прерывания разрешены: Код (gdb) p *0xE000E100 $90 = 114688 // Биты 14,15,16 5. Всяко пробовал таскать строку включения прерывания таймера (до включения счетчика и после). Безрезультатно. 6. Что я упускаю?
Сообщение отредактировал IgorKossak - Mar 23 2017, 15:45
Причина редактирования: [codebox] для длинного кода. [code]-для короткого!!!
|
|
|
|
|
 |
Ответов
|
Mar 24 2017, 07:39
|
Группа: Участник
Сообщений: 7
Регистрация: 23-03-17
Пользователь №: 95 986

|
Цитата(AVR @ Mar 23 2017, 15:34)  Рад что вопрос темы успешно решен. Я работаю сейчас с одним Миландром, пытаюсь настроить SSP в режиме SPI, Вам приходилось работать с этим интерфейсом? Есть вопросы. Да я по сути ни с чем еще и не работал на нем. Был приказ импортозамещать - вот и развлекаюсь  . Сейчас портирую драйвера для ChibiOS HAL (ибо вся прикладуха под ней), но до spi пока не добрался. Но Вы спрашивайте - хотя бы будет ясно какими граблями по лбу получать.
|
|
|
|
|
Mar 25 2017, 16:57
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(AVR @ Mar 25 2017, 19:26)  один бит 450 нс (это ~2.2 МГц) Это мало. Я сталкивался с проблемой на максимальной скорости SPI (правда, на STM32F1). У миландров есть предделитель частоты для блоков. Например, у таймеров нужно вставлять NOP-ы, чтобы дать время на запись регистров, если частота тактирования таймера ниже процессорной. Код можете показать?
|
|
|
|
Сообщений в этой теме
Captain Миландр 1986ВЕ1Т Mar 23 2017, 09:55 adnega Цитата(Captain @ Mar 23 2017, 12:55) Кодi... Mar 23 2017, 10:08 HardEgor Цитата(Captain @ Mar 23 2017, 16:55) Смот... Mar 23 2017, 10:17 Captain Спасибо за ответы. Могу, конечно ошибаться, но vol... Mar 23 2017, 10:26 novikovfb Цитата(Captain @ Mar 23 2017, 14:26) Спас... Mar 23 2017, 10:42      AVR Цитата(adnega @ Mar 25 2017, 19:57) Код м... Mar 25 2017, 17:24   jcxz Цитата(AVR @ Mar 25 2017, 17:33) Не, там ... Mar 26 2017, 09:34    AVR Цитата(jcxz @ Mar 26 2017, 12:34) Если мо... Mar 26 2017, 09:39     jcxz Цитата(AVR @ Mar 26 2017, 11:39) Спасибо ... Mar 26 2017, 09:57    adnega Цитата(jcxz @ Mar 26 2017, 12:34) Пауза м... Mar 26 2017, 21:09     jcxz Цитата(adnega @ Mar 26 2017, 23:09) Это к... Mar 26 2017, 21:27      adnega Цитата(jcxz @ Mar 27 2017, 00:27) Не знаю... Mar 27 2017, 07:43       jcxz Ещё раз повторю - дело не в фифо (естественно он п... Mar 27 2017, 07:56     AVR Цитата(adnega @ Mar 27 2017, 00:09) В Док... Mar 27 2017, 13:12      jcxz Цитата(AVR @ Mar 27 2017, 15:12) Я понима... Mar 27 2017, 19:48      KRS Цитата(AVR @ Mar 27 2017, 16:12) Я понима... Mar 28 2017, 04:09       jcxz Цитата(KRS @ Mar 28 2017, 06:09) Вот у At... Mar 28 2017, 06:25 KRS Цитата(AVR @ Mar 23 2017, 15:34) Миландро... Mar 24 2017, 12:27 KRS пауза из-за CS
посмотрите на картинку SPI там видн... Mar 27 2017, 12:52 jcxz Цитата(KRS @ Mar 27 2017, 14:52) пауза из... Mar 27 2017, 13:09 Captain Вот дошли руки до ДМА и что-то второй день ни в ка... Apr 6 2017, 09:42 HardEgor Там на форуме есть ссылки на SPL с готовыми пример... Apr 6 2017, 09:56  Captain Цитата(HardEgor @ Apr 6 2017, 12:56) Там ... Apr 6 2017, 10:50   HardEgor Цитата(Captain @ Apr 6 2017, 17:50) Да, н... Apr 6 2017, 11:25    Captain Цитата(HardEgor @ Apr 6 2017, 14:25) Такж... Apr 6 2017, 11:55    AVR Цитата(HardEgor @ Apr 6 2017, 14:25) Там ... Apr 6 2017, 16:57
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|