Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2017-дек-16 21:47

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




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: BRK в таймере
СообщениеДобавлено: 2016-фев-29 14:07 
Не в сети

Зарегистрирован: 2011-сен-20 11:53
Сообщения: 56
Я как-то предполагал что BRK просто сбросит REF в ноль, если REF был равен 1, а оказывается он держит его в нуле до конца счета.
В документации написано только это "Сигнал REF может быть очищен с использованием внешнего сигнала с входа ETR или внешнего триггерированного по PCLK сигнала с входа BRK". Что значит триггерированного? Я так понимаю что фронты BRK привязываются к PCLK.

Как это выглядит у меня:
Частота PCLK таймера 128МНz, counter считает частоту 8MHz со входа ETR, сигнал BRK длительностью 100нс.
ШИМ формирую по ССR и CCR1, т.е. OCCM[2:0] = 011 - переключение REF, если CNT =CCR или CNT =CCR1.
Дополнительно по сигналу BRK в прерывании происходить сброс счетчика в ноль.
Если включаю сброс REF по BRK, т.е. BRKEN=1, тогда REF сбрасывается в ноль до конца счета counter, т.е. ШИМ на выходе вообще нет.
Если выключаю сброс REF по BRK, т.е. BRKEN=0, тогда REF нормальный и ШИМ есть.

Исходный код:
Код:
void Setup_TIMER ( void ) {
/* TIM3 Configuration ----------------------------------------------- */
    RST_CLK_PCLKcmd(RST_CLK_PCLK_TIMER3, ENABLE);
    TIMER_BRGInit(MDR_TIMER3, TIMER_HCLKdiv1);
   TIMER_DeInit(MDR_TIMER3);
   
    // Initializes the TIMER3 Counter ------------------------------------
    sTIM_CntInit.TIMER_Prescaler                = 16-1;
    sTIM_CntInit.TIMER_Period                   = 390;
    sTIM_CntInit.TIMER_CounterMode              = TIMER_CntMode_EvtFixedDir;
    sTIM_CntInit.TIMER_CounterDirection         = TIMER_CntDir_Up;
    sTIM_CntInit.TIMER_EventSource              = TIMER_EvSrc_ETR;
    sTIM_CntInit.TIMER_ARR_UpdateMode           = TIMER_ARR_Update_Immediately;
    sTIM_CntInit.TIMER_ETR_Prescaler            = TIMER_ETR_Prescaler_None;
    sTIM_CntInit.TIMER_ETR_Polarity             = TIMER_ETRPolarity_NonInverted;
    sTIM_CntInit.TIMER_BRK_Polarity             = TIMER_BRKPolarity_NonInverted;
    sTIM_CntInit.TIMER_FilterSampling           = TIMER_FDTS_TIMER_CLK_div_1;
    sTIM_CntInit.TIMER_ETR_FilterConf           = TIMER_Filter_1FF_at_TIMER_CLK;
    TIMER_CntInit (MDR_TIMER3,&sTIM_CntInit);

    //Initialization Channel 1 for output VIDEO1
    TIMER_ChnStructInit(&sTIM_ChnInit);
   
    sTIM_ChnInit.TIMER_CH_Mode                  =   TIMER_CH_MODE_PWM; 
    sTIM_ChnInit.TIMER_CH_REF_Format         =   TIMER_CH_REF_Format3;
    sTIM_ChnInit.TIMER_CH_Number                =   TIMER_CHANNEL1 ;
   sTIM_ChnInit.TIMER_CH_CCR1_Ena            =   ENABLE ;
   sTIM_ChnInit.TIMER_CH_BRK_Reset            =   TIMER_CH_BRK_RESET_Disable ;
    TIMER_ChnInit(MDR_TIMER3,&sTIM_ChnInit);

   TIMER_SetChnCompare (MDR_TIMER3, TIMER_CHANNEL1, 100);
   TIMER_SetChnCompare1(MDR_TIMER3, TIMER_CHANNEL1, 120);

     //Enable channel 1 TIMER3 output  TEST
    TIMER_ChnOutStructInit(&sTIM_ChnOutInit);
    sTIM_ChnOutInit.TIMER_CH_DirOut_Polarity          = TIMER_CHOPolarity_NonInverted;
    sTIM_ChnOutInit.TIMER_CH_DirOut_Source            = TIMER_CH_OutSrc_REF;
    sTIM_ChnOutInit.TIMER_CH_DirOut_Mode              = TIMER_CH_OutMode_Output;
    sTIM_ChnOutInit.TIMER_CH_NegOut_Polarity          = TIMER_CHOPolarity_NonInverted;
    sTIM_ChnOutInit.TIMER_CH_NegOut_Source            = TIMER_CH_OutSrc_REF;
    sTIM_ChnOutInit.TIMER_CH_NegOut_Mode              = TIMER_CH_OutMode_Output;
    sTIM_ChnOutInit.TIMER_CH_Number                   = TIMER_CHANNEL1;
    TIMER_ChnOutInit(MDR_TIMER3, &sTIM_ChnOutInit);
   
    TIMER_ITConfig(MDR_TIMER3, TIMER_STATUS_BRK, ENABLE);

}
void TIMER3_IRQHandler(void) {
   if (TIMER_GetFlagStatus(MDR_TIMER3, TIMER_STATUS_BRK)) {
      MDR_TIMER3->STATUS &= ~TIMER_STATUS_BRK;
      MDR_TIMER3->CNT = 0;
   }
}




Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

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


Кто сейчас на конференции

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


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

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB