Форум РадиоКот https://radiokot.ru/forum/ |
|
PIC32 обработчик прерывания "не успевает" https://radiokot.ru/forum/viewtopic.php?f=58&t=137381 |
Страница 1 из 1 |
Автор: | kaws03 [ Сб окт 29, 2016 20:17:39 ] |
Заголовок сообщения: | PIC32 обработчик прерывания "не успевает" |
Всем доброго вечера. В программировании PIC новичок, всего пару месяцев "играюсь". Имеется МК PIC32MX440F256H и задача для него Задача состоит в выдаче импульсов на двух ножках (позже они будут положительным и отрицательным) с заданными временными параметрами (К примеру 1- Положительный импульс = 4мкс, 2- Задержка до отрицательного = 5мкс, 3- Отрицательный импульс= 2мкс, 4- финальная задержка, для обеспечения заданной частоты импульсов). Но это, впрочем, не так важно. МК работает на 80mhz (проверено) Проблема в том, что при установке времени в 1мкс- вся эта хубалда зависает (а точнее только таймер), не смотря на то, что обработка прерывания происходит всего за 5 строк кода Код: void setOuts(){ LATDbits.LATD1 = signalStates[curStep][0]; LATGbits.LATG6 = signalStates[curStep][1]; } void signalProcessor(){ curStep = signalSequence[curStep]; //Picking up next state number setOuts(); //Setting outs with new state PR4 = signalDelaysInt[curStep]; //Setting timing of next state } void __ISR(_TIMER_5_VECTOR, IPL3SOFT) signalIntHandler (void){ signalProcessor(); IFS0bits.T5IF = 0; //Reset interrupt flag } По-идее, чисто математически, время обработки не должно превышать и 0,07 мкс (чего хватает с головой). Ведь насколько я понял из даташита МК выполняет машинный цикл за один период частоты Так выглдит инициализация Код: //setup clock = 80000000 #pragma config FPLLMUL = MUL_16 // PLL Multiplier #pragma config FPLLIDIV = DIV_2 // PLL Input Divider #pragma config FPLLODIV = DIV_1 // PLL Output Divider #pragma config FPBDIV = DIV_1 // Peripheral Clock divisor #pragma config POSCMOD = HS // Primary Oscillator #pragma config FSOSCEN = OFF // Secondary Oscillator Enable (KLO was off) #pragma config FNOSC = PRIPLL // Oscillator Selection // setup pbdiv, pre-fetch cache and wait time SYSTEMConfigPerformance(80000000); Других прерываний в системе нет, остальное крутится в мейне (опрос клавиатуры и вывод на дисплей) Подскажите, пожалуйста, куда копать |
Автор: | Аlex [ Сб окт 29, 2016 21:22:03 ] |
Заголовок сообщения: | Re: PIC32 обработчик прерывания "не успевает" |
А время входа в прерывание и выхода из него не считаете ? А сохранение и восстановление контекста ? Посмотрите дизасм и будете неприятно удивлены. И ещё. Где Вы насчитали 0.07 мкс ? Вы каждую строку кода считаете за 1 МЦ ? 0.07 us (на кругло возьмём 0.1 us) - это 8 тактов МК. 8 тактов будет занимать только одна строка : Код: LATDbits.LATD1 = signalStates[curStep][0]; Если не больше.Опять же - смотрите дизасм, шагайте по коду, используйте stopwach, ... В общем, весь инструмент у Вас в руках... |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |