void Adc_t::Init() { rccResetADC1(); rccEnableADC1(FALSE); // Enable digital clock // Configure ADC1->CFGR1 = (ADC_CFGR1_CONT | ADC_CFGR1_DMAEN); // Enable Continuous mode and DMA request ADC1->CFGR2 = (0b01 << 30); // Clock: PCLK/2 // Setup channels ADC1->CHSELR = 0; for(uint8_t i=0; i < ADC_CHANNEL_CNT; i++) { ADC1->CHSELR |= (1 << AdcChannels[i]); } ADC1->SMPR = (uint32_t)ast55d5Cycles; // Setup sampling time // Calibrate uint32_t cnt=0; ADC1->CR |= ADC_CR_ADCAL; // Start calibration while(BitIsSet(ADC1->CR, ADC_CR_ADCAL)) { if(cnt++ >= 63000) { Uart.Printf("ADC calib fail\r"); return; } } // Enable ADC ADC1->CR |= ADC_CR_ADEN; // Enable ADC while(!BitIsSet(ADC1->ISR, ADC_ISR_ADRDY)); // Wait until ADC is ready // ==== DMA ==== dmaStreamAllocate (ADC_DMA, IRQ_PRIO_LOW, AdcTxIrq, NULL); dmaStreamSetPeripheral(ADC_DMA, &ADC1->DR); dmaStreamSetMode (ADC_DMA, ADC_DMA_MODE); // Uart.Printf("ADC is set\r"); }
u08 EeprmReadTune(void){ u08 Buf[EEPROM_TUNE_COUNT+EEPROM_TUNE_ADD_BYTE]; if (EepromReady() !=0){ for(u08 Count=0;Count<(EEPROM_TUNE_COUNT+EEPROM_TUNE_ADD_BYTE);Count++) //читаем байты настройки Buf[Count] = EeprmRead(epTuneOffset+Count); FontIdSet(Buf[EEPROM_TUNE_FONT]); //Шрифт цифр if (FontIdGet() > FONT_COUNT_MAX) //Вдруг не тот номер шрифта прочитается FontIdSet(0); //u08 i = FontIdGet(); //espUartTx(ClkIsWrite(CLK_FONT), &i, 1); EachHourSettingSetOff(); //Куранты if BitIsSet(Buf[EEPROM_TUNE_FLAG], EEPROM_TUNE_EACH_HOUR) EachHourSettingSwitch(); //Включить если нужно KeyBeepSettingSetOff(); //Писк кнопок if BitIsSet(Buf[EEPROM_TUNE_FLAG], EEPROM_TUNE_KEY_BEEP) KeyBeepSettingSwitch(); //Включить если нужно HorizontalSpeed = ((u16)Buf[EEPROM_TUNE_HZ_SPEED1]<<8)+((u16)Buf[EEPROM_TUNE_HZ_SPEED2]);//Скорость горизонтальной прокрутки if ((HorizontalSpeed >HORZ_SCROLL_MIN) || (HorizontalSpeed<HORZ_SCROLL_MAX)){ //Прочитанная скорость некорректна HorizontalSpeed = HORZ_SCROLL_MAX+HORZ_SCROOL_STEP*HORZ_SCROLL_STEPS/2; //ПО умолчанию средняя скорость прокрутки } #ifdef VOLUME_IS_DIGIT VolumeClock[vtEachHour].Volume = Buf[EEPROM_TUNE_COUNT+EEPROM_TUNE_EACH_VOL];//Байт уровня громкости курантов VolumeClock[vtButton].Volume = Buf[EEPROM_TUNE_COUNT+EEPROM_TUNE_KEY_VOL];//Громкость кнопок VolumeClock[vtAlarm].Volume = Buf[EEPROM_TUNE_COUNT+EEPROM_TUNE_ALARM_VOL];//Громкость будильника VolumeClock[vtAlarm].LevelVol = Buf[EEPROM_TUNE_COUNT+EEPROM_TUNE_ARARM_TYPE_VOL];//Режим регулировки громкости будильника #endif return EEP_READY; } return EEP_BAD; }
void KeyCheck(void){ if ( BitIsSet(PrevKey, KEY_STEP_FLAG) //Нужно повторное считывание порта STEP && BitIsClear(KEY_PORTIN_STEP, KEY_STEP_PORT) ) SetBit(Key, KEY_STEP_FLAG); if ( BitIsSet(PrevKey, KEY_OK_FLAG) //Нужно повторное считывание порта OK && BitIsClear(KEY_PORTIN_OK, KEY_OK_PORT) ) SetBit(Key, KEY_OK_FLAG); PrevKey = 0; if (Key){ //Да, есть нажатие какой-то клавиши if (AlarmBeepIsSound()){ //Если сигнал будильника включен то выключить его SoundOff(); SetClockStatus(csClock, csNone); //Вернутся в нормальный режим Key = 0; BeginScakKeyRepeat(); return; //и выйти т.к. это нажатие выключения будильника } TimeoutReturnToClock(TIMEOUT_RET_CLOCK_MODE_MIN); //Установить интервал таймаута для возврата в основной режим SoundOn(SND_KEY_BEEP); //Пискнуть кнопкой } if BitIsSet(Key, KEY_STEP_FLAG){ //Шаг MenuStep(); } else if BitIsSet(Key, KEY_OK_FLAG){ //ОК MenuOK(); } Key = 0; //Все клавиши отработаны BeginScakKeyRepeat(); }
void SendToLCD(unsigned long Packet) { ClrBit(PORTG,CS); //Transmission 9-bit-------------- SendSPI(Packet>>1); if (BitIsSet(Packet,0)) SPI_DR=0x80; else SPI_DR=0x00; while (BitIsSet(SPI_SR,7)); //-------------------------------- SetBit(PORTG,CS); //Delay(3); }
static PILE_INDEX_TYPE *IdentifyPiles(int *CopyCount) { PILE_INDEX_TYPE *PileIndexes = all(PILE_INDEX_TYPE, SeqLengthChunks); #if DEBUG memset(PileIndexes, 0xff, SeqLengthChunks*sizeof(PILE_INDEX_TYPE)); #endif int PileIndex = -1; bool InPile = false; for (int i = 0; i < SeqLengthChunks; ++i) { if (BitIsSet(CopyCount, i)) { if (!InPile) { ++PileIndex; if (PileIndex > MAX_STACK_INDEX) Quit("Too many stacks"); InPile = true; } PileIndexes[i] = PileIndex; } else InPile = false; } PileCount = PileIndex + 1; return PileIndexes; }
void Adc_t::StartMeasurement() { while(BitIsSet(ADC1->CR, ADC_CR_ADSTP)); // Wait until stop is completed // DMA dmaStreamSetMemory0(ADC_DMA, IBuf); dmaStreamSetTransactionSize(ADC_DMA, ADC_SEQ_LEN); dmaStreamSetMode(ADC_DMA, ADC_DMA_MODE); dmaStreamEnable(ADC_DMA); // ADC StartConversion(); }
void Channel::Broadcast(Player* caller,const std::string &message,BOOL access) { std::list <Player*>::iterator it, itEnd; std::string paternized; if (access) { if (!caller->HasAccess(_access)) { caller->Message(MSG_ERROR,"You don't have the access needed to be able to broadcast to this channel."); return; } } if (message=="") { caller->Message(MSG_ERROR,"You must provide a message."); return; } if (BitIsSet(caller->GetPflag(), PF_SILENCE)) { caller->Message(MSG_ERROR, "You can not broadcast to channels while you are silenced."); return; } if (!HasListener(caller)) { if (!CanBroadcastWithoutListening(caller)) { caller->Message(MSG_ERROR, "You must be tuned into that channel before you can broadcast on it."); return; } } paternized=_Patternize(message,caller); itEnd = _listeners->end(); for (it = _listeners->begin(); it != itEnd; ++it) { (*it)->Message(MSG_CHANNEL,paternized); } _AddHistoryEntry(paternized); }
void Adc_t ::Disable() { if(!BitIsSet(ADC1->CR, ADC_CR_ADSTP)) Stop(); // Stop if not stopped while(BitIsSet(ADC1->CR, ADC_CR_ADSTP)); // Wait until stop is completed ADC1->CR |= ADC_CR_ADDIS; // Start disabling ADC while(BitIsSet(ADC1->CR, ADC_CR_ADDIS)); // Wait until disabled }
bool Bitfield::GetField() const { return BitIsSet(_flag, _position); }
void main(void){ //Направление работы порта. DDRB |= (1<<PORTB4)|(1<<PORTB1)|(1<<PORTB0); //Выкл. аналог.компаратора ACSR=0x80; while(1){ //Видимо ждем старт-бита? if(BitIsSet(PINB, 2)){ // while(BitIsSet(PINB, 2)){ delay_us(4800);//1ms //} //Приём битов for(a=0;a<8;a++){ if(BitIsSet(PINB, 2)){ rxdata1[a] = 1; } else{ rxdata1[a] = 0; } delay_us(300);//5ms } result1=memcmp(rxdata1, txbit1, n); for(a=0;a<8;a++){ if(BitIsSet(PINB, 2)){ rxdata2[a] = 1; } else{ rxdata2[a] = 0; } delay_us(300);//5ms } result2=memcmp(rxdata2, txbit2, n); for(a=0;a<8;a++){ if(BitIsSet(PINB, 2)){ rxdata3[a] = 1; } else{ rxdata3[a] = 0; } delay_us(300);//5ms } result3=memcmp(rxdata3, txbit3, n); if(result1==0 && result2==0 && result3==0){ PORTB |= (1<<PINB1);//Команда на сервер delay_ms(2000); PORTB &= ~(1<<PINB1);//Команда на сервер PORTB |= (1<<PINB4);//LED ON for(k=0;k<10;k++){ for(j=0;j<10000;j++){ PORTB |= (1<<PINB0); //Пищалка вкл. delay_us(145); PORTB &= ~(1<<PINB0); //Пищалка выкл. delay_us(145); } } } } PORTB &= ~(1<<PINB4);//LED Off delay_ms(15); } }