[an error occurred while processing this directive]
|
Еще есть аппнота (кривая) на сайте. Пока кварц не разгонится, тактирование принудительно переключается на DCO. Надо либо как в аппноте показано включить кварц, выждать долго, и только тогда переключиться на него, либо в цикле сбрасывать OFIFG и проверять - если перестал выставляться после сброса - занчит колебания устаканились и можно на него переключаться, либо этот цикл делать в прерывании по OFIFG, что позволит вернуть тактирование на XT2 даже в случае сбоя в колебаниях во время выполнения основной части программы.
Например:
int __low_level_init(void) {
...
BCSCTL1 = 0; // Turn on XT2
BCSCTL2 = SELM1 | SELS; // Select XT as MCLK & SMCLK source
IE1 |= OFIE; // Cause OFIFG interrupt
....
}#pragma vector = NMI_VECTOR
__root __interrupt void OSCFault (void) {
BCSCTL2 &= ~SELM1; //MCLK=DCO
do
IFG1 &= ~OFIFG;
while (IFG1 & OFIFG);
BCSCTL2 |= SELM1; //MCLK=XT2;
IE1 |= OFIE;
}
E-mail: info@telesys.ru