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

 
 
 
Reply to this topicStart new topic
> Timer B захват, то-ли лыжи не едут, то-ли лето настало...
serg_ok
сообщение Jul 1 2008, 05:55
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 5-12-06
Пользователь №: 23 143



Доброго времени суток.

Пытаюсь измерять частоту при помощи захвата таймера В (кристалл MSP40FG4618). Для проверки подцепил на вход таймера Р2.3 ACLK. Но при каждом прерывании TBR увелисивается только на 13 тиков, хотя должно быть гораздо больше (таймер тактируется SMCLK = 8 МГц)

Код:

Код
#include "msp430xg46x.h"

volatile unsigned int i;
int Capture;

void main (void)
{
  WDTCTL = WDTPW | WDTHOLD; // Stop WDT
  
  FLL_CTL0 |= XCAP10PF | DCOPLUS;
            
  do
  {
  IFG1 &= ~OFIFG;                          
  for (i = 0x47FF; i > 0; i--);            
  }
  while ((IFG1 & OFIFG));                  

  for(i=2100;i>0;i--);      
  
  P1DIR = 0x32;                             // P1.1 & P1.5 to output direction
  P1SEL = 0x32;                             // P1.1 & P1.5 to output MCLK & ACLK
  P2SEL = 0x08;
  
  SCFI0 |= FN_4;                            // x2 DCO freq, 8MHz nominal DCO
  SCFQCTL = 121;                            // (121+1) x 32768 x 2 = 7.995392 MHz
  


  
_BIS_SR (GIE);

TBCTL = TBSSEL_2 | MC_2; //TBCLK=SMCLK, Mode = CONT
TBCCTL2 = CM_1 | CCIS_0 | CCIE | CAP | SCS; // Capture on rising, Synchronous, Interrupt enabled
while (1);
  
}


#pragma vector = TIMERB1_VECTOR
__interrupt void CaptureISR (void)
{

  
Capture=TBCCR2;  // Тут стоит бряк
  
}
Go to the top of the page
 
+Quote Post
Fynjy86
сообщение Jul 9 2008, 10:38
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 24-03-08
Пользователь №: 36 192



Впрос на ту же тем: не могу запустить таймер А3

#include "msp430.h" ; #define controlled include file

NAME main ; module name

PUBLIC main ; make the main label vissible
; outside this module
ORG 0FFFEh
DC16 init ; set reset vector to 'init' label

RSEG CSTACK ; pre-declaration of segment
RSEG CODE ; place program in 'CODE' segment

init: MOV #SFE(CSTACK), SP ; set up stack

main: NOP ; main program
MOV.W #WDTPW+WDTHOLD,&WDTCTL ; Stop watchdog timer
BIS.B #TASSEL0,&TACTL // ТАКТИРОВАНИ ОТ ACLK
BIS.B #MC1,&TACTL //НЕПРЕРЫВНЫЙ РЕЖИМ
JMP $ ; jump to current location '$'
; (endless loop)
END
запись бита МСх должна запусктьо счёт, а он не пускается... где я ошибся??
Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 18 2008, 22:09
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(serg_ok @ Jul 1 2008, 11:55) *
Пытаюсь измерять частоту при помощи захвата таймера В (кристалл MSP40FG4618). Для проверки подцепил на вход таймера Р2.3 ACLK. Но при каждом прерывании TBR увелисивается только на 13 тиков, хотя должно быть гораздо больше (таймер тактируется SMCLK = 8 МГц)
У вас не до конца проинициализирована система тактирования. Некоторые регистры FLL+ имеют дефлотные настройки после сброса и частота SMCLK похоже ниже, чем вы рассчитываете.
Цитата(Fynjy86 @ Jul 9 2008, 16:38) *
запись бита МСх должна запусктьо счёт, а он не пускается... где я ошибся??
Аналогичная ошибка. У вас источник тактирования ACLK вообще не определен. Что за кристал и с какой обвязкой его используете? Нужно перед запуском таймера общую систему тактирования проинициализировать. Кстати, а как определили-то, что таймер не работает?
Go to the top of the page
 
+Quote Post

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

 


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


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