Всем доброго вечера.
В программировании 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);
Других прерываний в системе нет, остальное крутится в мейне (опрос клавиатуры и вывод на дисплей)
Подскажите, пожалуйста, куда копать