Перейти к содержанию
    

yahoo

Участник
  • Постов

    5
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о yahoo

  • День рождения 20.07.1986

Контакты

  • ICQ
    Array

Информация

  • Город
    Array
  1. Здравствуйте. У меня следующая прорблема: есть два девайса, на обоих стоят СС1100, один другому раз в 10 секунд шлет пакет, на что другой девайс также отвечает пакетом....Все вроде пашет отлично, но внезапно пакеты запроса перестают доходить. я выяснил что происходит переполнение RXFIFO. GDO2 на обоих девайсах используется для установления факта приема пакета(прерывание) и установлено на 07, тоесть установка 1 при приеме пакета с CRC OK. На приемной стороне : // External Interrupt 1 service routine прием пакета interrupt [EXT_INT1] void ext_int1_isr(void) { length=sizeof(rxbuffer); RF_ReceivePacket_int(rxbuffer,&length); payload[0]=8; payload[1]=1; payload[2]=FRAM[0+i*7]; payload[3]=FRAM[1+i*7]; payload[4]=FRAM[2+i*7]; payload[5]=FRAM[3+i*7]; payload[6]=FRAM[4+i*7]; payload[7]=FRAM[5+i*7]; payload[8]=FRAM[6+i*7]; RF_SendPacket(payload,9); RF_Strobe(CC1100_SRX); } unsigned char RF_ReceivePacket_int(unsigned char *rxBuffer,unsigned char *length) { unsigned char status[2]; unsigned char packetLength; packetLength = RF_ReadReg(CC1100_FIFO); RF_ReadBurstReg(CC1100_FIFO, rxBuffer, packetLength); *length = packetLength; RF_ReadBurstReg(CC1100_FIFO, status, 2); RF_Strobe(CC1100_SIDLE); RF_Strobe(CC1100_SFRX); return (status[LQI] & CRC_OK); } не понятно почему забивает RXFIFO...Пакет приходит длиной 12 байт, и он сразуже считывается, очищая фифо.....и тут бац может кто поможет? Я ставил таймер на переодическое очищение фифо, тогда работает, но это не решение, так как в неподходящий момент может убить всю инфу)) вот инициализация начальная //íàñòðîéêà CC1100 settings.FSCTRL1 =0x0D; // FSCTRL1 Frequency synthesizer control. settings.FSCTRL0 =0x00; // FSCTRL0 Frequency synthesizer control. settings.FREQ2 =0x10; // FREQ2 Frequency control word; high byte. settings.FREQ1 =0xA7; // FREQ1 Frequency control word; middle byte. settings.FREQ0 =0x62; // FREQ0 Frequency control word; low byte. settings.MDMCFG4 =0x0E; // MDMCFG4 Modem configuration. settings.MDMCFG3 =0x3B; // MDMCFG3 Modem configuration. settings.MDMCFG2 =0x73; // MDMCFG2 Modem configuration. settings.MDMCFG1 =0x42; // DMCFG1 Modem configuration. settings.MDMCFG0 =0xF8; // MDMCFG0 Modem configuration. settings.CHANNR =0x00; // CHANNR Channel number. settings.DEVIATN =0x00; // DEVIATN Modem deviation setting (when FSK modulation is enabled). settings.FREND1 =0xB6; // FREND1 Front end RX configuration. settings.FREND0 =0x10; // FREND0 Front end TX configuration. settings.MCSM0 =0x18; // MCSM0 Main Radio Control State Machine configuration. settings.FOCCFG =0x1D; // FOCCFG Frequency Offset Compensation Configuration. settings.BSCFG =0x1C; // BSCFG Bit synchronization Configuration. settings.AGCCTRL2 =0xC7; // AGCCTRL2 AGC control. settings.AGCCTRL1 =0x00; // AGCCTRL1 AGC control. settings.AGCCTRL0 =0xB0; // AGCCTRL0 AGC control. settings.FSCAL3 =0xEA; // FSCAL3 Frequency synthesizer calibration. settings.FSCAL2 =0x2A; // FSCAL2 Frequency synthesizer calibration. settings.FSCAL1 =0x00; // FSCAL1 Frequency synthesizer calibration. settings.FSCAL0 =0x1F; // FSCAL0 Frequency synthesizer calibration. settings.FSTEST =0x59; // FSTEST Frequency synthesizer calibration. settings.TEST2 =0x88; // TEST2 Various test settings. settings.TEST1 =0x31; // TEST1 Various test settings. settings.TEST0 =0x09; // TEST0 Various test settings. settings.FIFOTHR =0x07; // FIFOTHR RXFIFO and TXFIFO thresholds. settings.IOCFG2 =0x47; // IOCFG2 GDO2 output pin configuration. settings.IOCFG0 =0x06; // IOCFG0D GDO0 output pin configuration. Refer to SmartRF® Studio User Manual for detailed pseudo register explanation. settings.PKTCTRL1 =0x0F; // PKTCTRL1 Packet automation control. settings.PKTCTRL0 =0x05; // PKTCTRL0 Packet automation control. settings.ADDR =0x02; // ADDR Device address. settings.PKTLEN =0xFF; // PKTLEN Packet length. RF_powerup_reset(); RF_WriteRfSettings(&settings); RF_WriteReg(CC1100_MCSM1, 0x3C); RF_WriteBurstReg(CC1100_PATABLE, paTable, 8); RF_Strobe(CC1100_SIDLE); RF_Strobe(CC1100_SFRX); RF_Strobe(CC1100_SFTX); RF_Strobe(CC1100_SRX);
  2. проблема с СС11xx

    Здравсйтвуйте. Настроил GDO2 pin следующим образом :GDOx_CFG = 0x07 (Asserts when a packet has been received with CRC OK. De-asserts when the first byte is read from the RX FIFO.) Но Единичка на пине выскакивает при отправке пакета, а мне нужно чтоб при преме..что за дела такие? кто может знает)
  3. спасибо, буду знать)
  4. дребезг контактов сыграл свое дело..изменил логику - теперь хоть не зависает....попробую дальше облагораживать прогрмму) Всем спасибо))))
  5. зависание mega8

    Здравствуйте все! У меня проблема с использование режима power down на mega8. Теперь по подробнее... Делаю устройство, которое постоянно должно быть в спящем режиме, просыпаться только по нажатию кнопки и засыпать полностью после отжатия, при чем, когд кнопка нажата процессор находится в power idle mode. Возникла следующая преблема..При последовательных нажатиях на кнопку процессор зависает и решается все только рестартом Для полной ясности расскажу, как реализовано все в программе... Источник прерывания - кнопка( ненажатая кнопка - на входе МК "1"). Так как в power down прерывание по фронту не работает, сделал вот так: перед уходом в powerdown устанавливаю источником для внешнего прерывания нулевой уровень на лапке, когда прерывание произошло( кнопка была нажата), в обработчике прерывания меняю источник прервания на восходящий фронт сигнала, когда в следющий раз происходит прерывание ( кнопка была отжата), в обработчике устанавливаю источником низкий уровень сигнала на лапке МК. Вот спринципе и все...не очень удобно конечно, но нужно обойтись без сторонних элементов, чисто программно Ниже привожу необходимый код: interrupt [EXT_INT0] void ext_int0_isr(void) { unsigned char ext_int0_source; #asm("CLI") SLEEP_DISABLED(); ext_int0_source=MCUCR&0x03; if (ext_int0_source==0) { MCUCR|=0x03; RF_SendPacket(payload1,28); CHANGE_TO_POWER_IDLE_MODE=TRUE; } if (ext_int0_source==3) { MCUCR&=0xFC; RF_SendPacket(payload2,28); CHANGE_TO_POWER_SAVE_MODE=TRUE; } } main{} { ... #asm("SEI") SLEEP_ENABLED(); SET_POWER_SAVE_MODE(); SLEEP(); while (1) { if (CHANGE_TO_POWER_IDLE_MODE) { CHANGE_TO_POWER_IDLE_MODE=FALSE; SLEEP_ENABLED(); #asm("SEI") SET_POWER_IDLE_MODE(); SLEEP(); } if (CHANGE_TO_POWER_SAVE_MODE) { CHANGE_TO_POWER_SAVE_MODE=FALSE; SLEEP_ENABLED(); #asm("SEI") SET_POWER_DOWN_MODE(); //если здесь поставить SET_POWER_IDLE_MODE() процессор не зависает SLEEP(); } }; } Очень прошу помощи! уже отчаялся))Спасибо
×
×
  • Создать...