示例#1
0
void analogWrite(uint8_t APin, uint16_t AValue) {
	if(APin== 25 ||APin==26){
		dacWrite(APin, AValue);
		return;
	}
	ESP32PWM* chan = pwmFactory(APin);
	if (chan == NULL) {
		chan = new ESP32PWM();
	}
	if(!chan->attached()){
		chan->setup(1000, 8); // 1KHz 8 bit
		chan->attachPin(APin); // This adds the PWM instance to the factory list
		//Serial.println("Attaching AnalogWrite : "+String(APin)+" on PWM "+String(chan->getChannel()));
	}
	if (AValue == 0) {
		if (chan->attached()) {
			chan->detachPin(APin);
			pinMode(APin, OUTPUT);
		}
		digitalWrite(APin, 0);
	} else if (AValue >= 255) {
		if (chan->attached()) {
			chan->detachPin(APin);
			pinMode(APin, OUTPUT);
		}
		digitalWrite(APin, 1);
	} else
		chan->write(AValue);
//    Serial.print( "ledcWrite: " ); Serial.print(  CESP32PWMPinMap[ APin ] - 1 ); Serial.print( " " ); Serial.println( AValue );
}
示例#2
0
static void write(RomMapperMajutsushi* rm, UInt16 address, UInt8 value) 
{
    int bank;

    address += 0x4000;

    if (address >= 0x5000 && address < 0x6000) {
        dacWrite(rm->dac, DAC_CH_MONO, value);
		return;
	}

    /* Page at 4000h is fixed */
    if (address < 0x6000 || address >= 0xc000) {
        return;
    }

    bank = (address - 0x4000) >> 13;

    value %= rm->size / 0x2000;
    if (rm->romMapper[bank] != value) {
        UInt8* bankData = rm->romData + ((int)value << 13);

        rm->romMapper[bank] = value;
        
        slotMapPage(rm->slot, rm->sslot, rm->startPage + bank, bankData, 1, 0);
    }
}
static void write(RomMapperKonamiSynth* rm, UInt16 address, UInt8 value) 
{
	address += 0x4000;

	if ((address & 0xc010) == 0x4000) {
        dacWrite(rm->dac, DAC_CH_MONO, value);
	}
}
示例#4
0
static void writeCHi(SviPPI* ppi, UInt8 value)
{
    if (value != ppi->regCHi) {
        ppi->regCHi = value;

        audioKeyClick(ppi->keyClick, value & 0x08);
        dacWrite(ppi->dac, DAC_CH_MONO, (value & 0x02) ? 0 : 255);
    }
}
示例#5
0
static void write(RomMapperTurboRPcm* rm, UInt16 ioPort, UInt8 value)
{
	switch (ioPort & 0x01) {
	case 0:
        getTimerCounter(rm);
        rm->time = 0;
		rm->sample = value;
		if (rm->status & 0x02) {
            dacWrite(rm->dac, DAC_CH_MONO, rm->sample);
		}
		break;

    case 1:
        if ((value & 0x03) == 0x03 && (~rm->status & 0x01)) {
            dacWrite(rm->dac, DAC_CH_MONO, rm->sample);
		}
		rm->status = value & 0x1f;
        
        mixerSetEnable(rm->mixer, rm->status & 2);
        break;
    }
}
示例#6
0
void printerIOWrite(PrinterIO* printerIO, UInt8 value)
{
    switch (printerIO->type) {
    case PRN_HOST:
        archPrinterWrite(value);
        break;
    case PRN_FILE:
        fwrite(&value, 1, 1, printerIO->file);
        break;
    case PRN_SIMPL:
        dacWrite(printerIO->dac, DAC_CH_MONO, value);
        break;
    }
}
示例#7
0
static UInt8 readA(SviPPI* ppi)
{
#if 1
    // dvik: reverted to 2.8 since wav support is not finished yet
    return boardCaptureUInt8(16, sviJoyIoReadTrigger(ppi->joyIO)) | 
        (boardGetCassetteInserted() ? 0:0x40);
#else
    UInt8 value;
    UInt8 casdat = 0;

    value = boardCaptureUInt8(16, sviJoyIoReadTrigger(ppi->joyIO));
    value |= boardGetCassetteInserted() ? 0:0x40; 

    tapeRead(&casdat);
    value |= (casdat) ? 0:0x80;

    dacWrite(ppi->dac, DAC_CH_MONO, (casdat & 0x01) ? 0 : 255);

    return value;
#endif
}
示例#8
0
文件: main.c 项目: pridolfi/workspace
int main(void)
{
	int i=0, offset;

#if FILTRO_PASA_BANDA
	fir_q31_init(&filtro, history, bandpass_taps, BANDPASS_TAP_NUM);
	offset=500;
#elif FILTRO_PASA_BAJOS
	fir_q31_init(&filtro, history, lowpass_taps, LOWPASS_TAP_NUM);
	offset=-100;
#endif

	initHardware();

	*DWT_CTRL |= 1;

	while(1)
	{
		if(adcFlag)
		{
			adcFlag=0;
			*DWT_CYCCNT=0; /* para medir tiempos de ejecucion */
#if(USAR_FUNCIONES_ASSEMBLER)
			y[i] = asm_fir_q31_get(&filtro)+offset;
			y[i] = __USAT(y[i],10);
#else
			y[i] = fir_q31_get(&filtro)+offset;
			if(y[i]>0x3FF) y[i] = 0x3FF;
			else if(y[i]<0) y[i] = 0;
#endif
			dacWrite(y[i]);
			i++;
			if(i==500)
				i=0;
		}
	}
}