Например TDA7294

Форум РадиоКот • Просмотр темы - PIC32 обработчик прерывания "не успевает"
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 01:07:48

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: PIC32 обработчик прерывания "не успевает"
СообщениеДобавлено: Сб окт 29, 2016 20:17:39 
Открыл глаза

Зарегистрирован: Пт дек 26, 2014 00:15:36
Сообщений: 67
Рейтинг сообщения: 0
Всем доброго вечера.
В программировании 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);


Других прерываний в системе нет, остальное крутится в мейне (опрос клавиатуры и вывод на дисплей)

Подскажите, пожалуйста, куда копать


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PIC32 обработчик прерывания "не успевает"
СообщениеДобавлено: Сб окт 29, 2016 21:22:03 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
А время входа в прерывание и выхода из него не считаете ? А сохранение и восстановление контекста ? Посмотрите дизасм и будете неприятно удивлены.
И ещё. Где Вы насчитали 0.07 мкс ? Вы каждую строку кода считаете за 1 МЦ ?
0.07 us (на кругло возьмём 0.1 us) - это 8 тактов МК. 8 тактов будет занимать только одна строка :
Код:
LATDbits.LATD1 = signalStates[curStep][0];
Если не больше.

Опять же - смотрите дизасм, шагайте по коду, используйте stopwach, ... В общем, весь инструмент у Вас в руках...


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 61


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y