реклама на сайте
подробности

 
 
> Вопрос по конфигурации входа на захват для 2012
Vladimir_T
сообщение Apr 19 2010, 05:38
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Уважаемые коллеги, подскажите, пожалуйста. Нужно мерить длительность импульса на ноге P1.1 (MSP430F2012) , самое простое - это подключить к нему таймер в режиме захвата CCI и захват делать по обоим фронтам. Но вход никак не конфигурируется, как CCIA , после инициализации он находится в третьем состоянии, хотя я его подтянул, все входные импульсы игнорирует. В чем может быть дело?
Код
/****************************************************************************
  Функция приема данных через 1-проводный интерфейс
****************************************************************************/
#define BQ2016   BIT1       // сигнал управления 1-проводным

unsigned char Init_HBQ (void)
{
  Flg_Rcv = true;
    
  P1OUT |= BQ2016;               // P1.1 Set HI    
  P1DIR &= ~BQ2016;              // P1.1 Set as Input
  P1REN |= BQ2016;                // P1.1 Pul Up Res
  P1SEL |= BQ2016;                 // P1.1 Set as CCIA input

  
  CCR0 = T_CYCH;                         // Data Hold
  TACTL = TASSEL_2 + MC_1;          // SMCLK = 1 mHz, up-mode
  TACCTL0 = CM_3 + CAP + CCIE;   // Capture on the both edge, CCIA + CCIFG
  
return 1;
} //
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Vladimir_T
сообщение May 12 2010, 07:03
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Уважаемые, коллеги, в продолжении начатой темы. Спасибо rezidentу, показал мне, где нужно читать внимательно. Но в ревизии D процессора эта ошибка будет исправлена.
Сейчас вход таймера конфигурируется для захвата и прерывания нормально идут, Но не пойму, почему в прерывании из TACCR0 вычитываются очень часто нули? Сигнал на входе таймера с переменной длительностью 50 - 150 мксек, тактирование таймера - 1 мГц. Почему нули в TACCR0, ведь между фронтами запуска таймера время на менее 40 мксек? Буду очень благодарен, если кто-нибудь мне подскажет.

Код
/****************************************************************************
  Функция приема данных через 1-провoдный интерфейс
****************************************************************************/
unsigned int T_P [18];

unsigned char Rcv_HDQ (void)
{unsigned int Tick_W;    

  P1OUT |= BQ2016;                // P1.1 Set HI    
  P1DIR &= ~BQ2016;               // P1.1 Set as Input
  P1SEL |= BQ2016;                 // P1.1 Set as CCIA input

   Cnt_Bit =0;  
   Tick_W = Tick_ms + Lim_Wait_HDQ;
  
  TAR = 0;
  TACTL = TASSEL_2 + MC_1;                  // SMCLK = 1 mHz, up-mode
  TACCTL0 = CM_3 + CAP + CCIE + SCS;      // Capture on the both edge, CCIA + CCIFG

while ((Cnt_Bit != 16) && (Tick_W > Tick_ms));  // Ожидане окончания приема

  CCTL0 &= ~CCIE;           // CCR0 interrupt disabled
  TACCTL0 = 0;              // No Capture mode
  P1SEL &= ~BQ2016;         // P1.1 Set as GPIO input

  if (Tick_W < Tick_ms) return (0);  // если таймаут не исчерпан и получен ответ, то ошибки приема нет
else return (1);  // в противном случае - ошибка приема
} //  Rcv_HBQ (void)


// Timer A0 interrupt service routine
// State Mashine 1-Wire protocol

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
      T_P [Cnt_Bit++] = TACCR0;  
} //  __interrupt void Timer_A (void)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 02:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01354 секунд с 7
ELECTRONIX ©2004-2016