Цитата(Baser @ Feb 1 2016, 01:23)
С 5-м семейством не работал, только с 1-м и 2-м, но такая структура как регистр UCB1IV там есть в таймерах.
Так вот, есть предположение, что у вас возникает одновременно или почти одновременно два прерывания модуля USCI,
причем первым возникает прерывание со смещением не равным 4.
И вот вы попадаете в этом прерывании на брейкпоинт, а до того проц уже прочел регистр UCB1IV,
сбросил флаг первого прерывания и изменил регистр UCB1IV на значение 4. Тут вы эту ситуацию и смотрите (на скриншоте).
Т.е. дальше вы снова должны попасть в это прерывание но уже в case 4
Как то так...
Baser, sasa_c, спасибо за ответы. Так и есть.
Вчера провел изыскания.
Если возникает одновременно 2 прерывания, то они отображаются в UCB1IFG,
а в обработчик вход идет с UCB1IV == 0x00. Это означает нечто вроде "есть несколько прерываний. Уточнить по UCB1IFG"
Чтобы все работало, надо в case-0 сбросить один из флагов. Тогда сразу генерируется
следующее прерывание (пере-вход в обработчик с "новым" UCB1IV == 0x04),
соотв-ее "очередному" флагу в UCB1IFG. В моем случае это UCNACKIFG.
Код
. . . . . .
switch( UCB1IV )
{
case 0:
{
OSC_D2_L1;
rr = rr + 2; rssi = 100;
__no_operation();
UCB1IFG &= ~UCTXIFG;
OSC_D2_L0;
}
break;
case 4:
{
OSC_D2_L1;
rr = rr + 1; rssi = 104;
__no_operation();
UCB1IFG &= ~UCNACKIFG;
OSC_D2_L0;
}
break; // Vector 4: NACKIFG
. . . . . .