Beispiel #1
0
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");
}
Beispiel #2
0
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;
}
Beispiel #3
0
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();
}
Beispiel #4
0
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);
}
Beispiel #5
0
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;
	}
Beispiel #6
0
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();
}
Beispiel #7
0
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);
}
Beispiel #8
0
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
}
Beispiel #9
0
bool Bitfield::GetField() const
{
    return BitIsSet(_flag, _position);
}
Beispiel #10
0
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);
    
   }
}