Здравствуйте
Решил обратиться сюда, т.к. сам уже все перепробовал и особого результата не добился.
Проблема такая:
Есть радиомодуль от HopeRF, который построен на базе Si1000. В этом Si1000 есть так называемый SmaRTClock для реализации часов реального времени.
Необходимо в заданный интервал (пускай будет раз в секунду) отправлять пакет с данными. Настраиваю обработчик прерывания INTERRUPT_RTC0ALARM и в нем делаю инкремент переменной и моргание светодиодом
Код
...
U8 __xdata Pktcnt;
...
INTERRUPT (RTC0ALARM_ISR, INTERRUPT_RTC0ALARM)
{
LEDTX = !LEDTX;
Pktcnt = (Pktcnt == 255 ) ? 0 : Pktcnt + 1;
RTC_Alarm = 1;
}
в основном теле программы я по событию отправляю некий пакет в котором передаю значение переменной Pktcnt
Код
...
U8 __xdata RxBuffer[64];
U8 __xdata TxBuffer[64];
...
void main (void)
{
while (1) {
PCON |= 0x01; // Enter Idle mode
PCON = PCON; // Safety dummy instruction
if(RTC_Alarm) {
RTC_Alarm = 0;
TxBuffer[0] = Pktcnt;
TxBuffer[1] = 0;
TxBuffer[2] = 0;
TxBuffer[3] = 0;
TxBuffer[4] = 0;
rtPhyTx( 5, TxBuffer );
}
}
}
по идее я должен на приемной стороне каждую секунду получать пакеты где значение Pktcnt каждый раз увеличивается на 1. Но ну тут то было. Светодиод моргает как положено раз в секунду. Пакеты тоже приходят раз в секунду, но значение поля меняется нифига не на 1. Изменяться оно может на 6 на 7. По разному бывает. Т.е. получаю в пакете 1, потом 7, потом 13 и т.д.
Мой мозг отказывается это понимать

Помогите пожалуйста разобраться в этих "чудесах" .