[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Вот начинаю работать с MSP430 F1121 (сегодня - первый день). Решил написать программку для подсчета задержек.
Кварц у меня 32 768 Герц. Использую IAR-ский компилятор и эмулятор - Socket Adapter (JTAG).
Использую Timer_A в режиме подсчета до "Up to CCR0".
Вот текст программы :
#include "msp430x11x1.h"
int counter ;
void main( void) {
WDTCTL = WDT_ADLY_250; //Watchdog не сбрасывает а считает интервалы
CCR0 = 0 ; // на всякий случай сброшу в 0 перед использованием
CCR0 = 32768 ; // таймер будет считать от 0 до 32768
TACTL = TACLR | TASSEL1 ; // останавливаю таймер, сбрасываю флаг
// переполнения
// System clock = SMCLK
TACTL |= MC0 ; //перевожу таймер в режим - up to CCR0-от 0 до 32768
counter = 0 ;
do {
unsigned char k ;
for( k = 0 ; k < 20 ; k ++) {
do ; while( !(TACTL & TAIFG) ) ; // ожидаем флаг переполнения
TACTL &= ~TAIFG ; // сбрасываем флаг переполнения
}
counter ++ ; // здесь ставлю точку останова !!!!!!!!!
} while( 1) ;
}
И вот на точку останова я попадаю раз в секунду! Хотя если у меня кварц 32 768 Герц, то он делает 32 768 тактов в секунду и флаг должен выставляться раз в секунду, а 20 таких циклов - за 20 секунд. А он на самом деле выставляется гораздо чаще.
В чем причина ?
Вот прочитал, что у него 125ns Instruction Cycle Time. Так что, оно не зависит от частоты внешнего кварца ?
Подскажите, пожалуйста !!!
E-mail: info@telesys.ru