Начал пробовать uC/OSII для 430F5xx. Как обычно начал с мигания светодиода. Сразу затык. Не совпадает частота мигания светодиода с расчетной. Итак по порядку: компилятор IAR C/C++ Compiler for MSP430 4.20.1 [Evaluation] (4.20.1.20017)
Операционка: uC/OS-II Version : V2.87
Тики считаются от WDT. Исходный код - пример порта для MSP430F5438 с сайта uC/OSII.
В файле MSP430x54x.h ввел строки:
#define WDT_ADLY_1000_wad (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS__64+WDTSSEL__ACLK) /*wad 1.95ms */ т.е. тактируем от ACLK, делим на 64 = получаем 512 Гц.
В файле os_cfg.h ввел строки:
#define OS_TICKS_PER_SEC 512 /*wad тики берем с кварца 32768 Гц */ т.е. 512 тиков в секунду
В файле bsp.c ввел строки: в процедуре TMR_TickInit:
WDTCTL = WDT_ADLY_1000_wad; //от ACLK 32 кГц - т.е запускаются тики таймера
В файле app.c ввел строки: в процедуре AppTaskStart:
while (1) { /* Task body, always written as an infinite loop. */
AppDispUpdate();
OSTimeDlyHMSM(0, 0, 1, 0);
P1OUT ^= 0x1;//wad - добавленная строка - мигания светодиода.
}
Результат: мигание светодиода с периодом 6,488с вместо 2 секунд!
Далее играл с настройкой периода WDT и константой OS_TICKS_PER_SEC:
-- вместо WDTIS__64 поставил WDTIS__32K (/32768) и OS_TICKS_PER_SEC=1 Результат: Период 4,000 сек вместо 2сек
-- поставил WDTIS__8192 (/8192) и OS_TICKS_PER_SEC=4 Результат: Период 5,000 сек вместо 2сек
-- поставил WDTIS__512 (/512) и OS_TICKS_PER_SEC=64 Результат: Период 5,250 сек вместо 2сек
Внимание, вопрос. Кто-нибудь не натыкался на глюки с таймерам WDT - к примеру несоответствие документации в части коэф-тов деления? Кто-нибудь не натыкался на глюки с тиками в операционке?