[an error occurred while processing this directive]
|
Инструмент - IAR V3.30A.
Маркировка на корпусе контроллера:
1 строка - 46F4K5T;
2 строка - M430FE423;
3 строка - REV E.
Описание эффекта.
WDT тактируется от ACLK (32768 Гц). Устанавливаю период WDT 250 мс. Сбрасывается WDT по прерыванию базового таймера. Период базового таймера - 15,625 мс. Одновременно контролирую время по таймеру А.
Проверяю в отладчике управляющий регистр WDT. Записывается 0x05, тоже правильно. И эта зараза WDT срабатывает через 12,57 мс вместо 250 мс.
ставлю период 1000 мс. Срабатывает через 30,67 мс.
Текст программы ниже.
В чём дело? Может мне достался инженерный корпус, поскольку контроллер из бесплатных сэмплов?
void __low_level_init(void) {
WDTCTL=WDTPW+WDTHOLD; //Stop WDT
SCFQCTL=SCFQ_64K; //MCLK=SMCLK=2*ACLK. Modulation enable
SCFI0=FLLD0+FN_2; //fDCOCLK=1.4-12MHz, DCO divider=2
FLL_CTL0=DCOPLUS+XCAP18PF; //MCLK=SMCLK=2*ACLK/2=32768Hz.
SVSCTL=0x40+PORON; //SVS level = 2,3V. Reset on/
BTCTL=BTDIV+BT_fLCD_DIV256; //Basic timer. Flcd=ACLK/256, Tick=15,625mS
IE2|=BTIE; //Basic timer interrupt enable
SD16CTL=SD16REFON+SD16VMIDON; //Reference voltage 1,2V on & out
LCDCTL=LCDON+LCDSTATIC+LCDSG0_3; //LCD on, static mode,S0-S23
TACTL=0x0124;
WDTCTL=WDT_ARST_250; //Reset WDT for 250 mS interval
}
#pragma vector=BASICTIMER_VECTOR
__interrupt void basic_timer(void) {
WDTCTL=WDT_ARST_250; //Reset WDT for 250 mS interval
}
E-mail: info@telesys.ru