Skip to content

Commit

Permalink
1Voct response
Browse files Browse the repository at this point in the history
  • Loading branch information
Dann Green committed Apr 27, 2016
1 parent f484e76 commit 8b78663
Show file tree
Hide file tree
Showing 22 changed files with 9,108 additions and 456 deletions.
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ OBJDMP = $(ARCH)-objdump
GDB = $(ARCH)-gdb


CFLAGS = -O0 -g -Wall
#CFLAGS = -g2 -O1 \
#CFLAGS = -O0 -g -Wall
CFLAGS = -g2 -O1 \
-fthread-jumps \
-falign-functions -falign-jumps \
-falign-loops -falign-labels \
Expand Down
113 changes: 92 additions & 21 deletions calibration.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
*
*
* Noisegate on/off
* De-emph codec?
*
*
*
Expand All @@ -38,24 +37,37 @@ int16_t CV_CALIBRATION_OFFSET[NUM_CV_ADCS];
int16_t CODEC_DAC_CALIBRATION_DCOFFSET[4];
int16_t CODEC_ADC_CALIBRATION_DCOFFSET[4];

extern uint32_t flash_firmware_version;
extern int32_t flash_CV_CALIBRATION_OFFSET[6];
extern int32_t flash_CODEC_DAC_CALIBRATION_DCOFFSET[4];
extern int32_t flash_CODEC_ADC_CALIBRATION_DCOFFSET[4];


extern int16_t i_smoothed_potadc[NUM_POT_ADCS];
extern int16_t i_smoothed_cvadc[NUM_CV_ADCS];

extern volatile int16_t ch1rx_buffer[codec_BUFF_LEN];
extern volatile int16_t ch2rx_buffer[codec_BUFF_LEN];

uint32_t sysmode[NUM_SYS_MODES];
extern uint8_t global_mode[NUM_GLOBAL_MODES];


void set_default_calibration_values(void)
{

CODEC_DAC_CALIBRATION_DCOFFSET[0]=-770;
CODEC_DAC_CALIBRATION_DCOFFSET[1]=-770;
CODEC_DAC_CALIBRATION_DCOFFSET[2]=-770;
CODEC_DAC_CALIBRATION_DCOFFSET[3]=-770;

CODEC_DAC_CALIBRATION_DCOFFSET[0]=-1746;
CODEC_DAC_CALIBRATION_DCOFFSET[1]=-1746;
CODEC_DAC_CALIBRATION_DCOFFSET[2]=-1746;
CODEC_DAC_CALIBRATION_DCOFFSET[3]=-1746;

/*
CV_CALIBRATION_OFFSET[0] = 0;
CV_CALIBRATION_OFFSET[1] = 0;
CV_CALIBRATION_OFFSET[2] = 0;
CV_CALIBRATION_OFFSET[3] = 0;
CV_CALIBRATION_OFFSET[4] = 0;
CV_CALIBRATION_OFFSET[5] = 0;
*/
}

extern float smoothed_rawcvadc[NUM_CV_ADCS];
Expand All @@ -80,12 +92,9 @@ void auto_calibrate(void)
CODEC_ADC_CALIBRATION_DCOFFSET[2]=-29;
CODEC_ADC_CALIBRATION_DCOFFSET[3]=-29;



set_default_calibration_values();


}

void update_calibration(void)
{
uint8_t switch1, switch2;
Expand All @@ -102,39 +111,68 @@ void update_calibration(void)
switch1=TIMESW_CH1;
switch2=TIMESW_CH2;

if ((switch1==0b10) && (switch2==0b10))//both up
if (switch1==SWITCH_UP && switch2==SWITCH_UP)//both up: calibrate audio output offset, using the knobs to set DC level
{
CODEC_DAC_CALIBRATION_DCOFFSET[0]=(i_smoothed_potadc[LEVEL*2]-2048); //OUT A
CODEC_DAC_CALIBRATION_DCOFFSET[1]=(i_smoothed_potadc[LEVEL*2+1]-2048); //OUT B
CODEC_DAC_CALIBRATION_DCOFFSET[2]=(i_smoothed_potadc[MIXPOT*2]-2048); //SEND A
CODEC_DAC_CALIBRATION_DCOFFSET[3]=(i_smoothed_potadc[MIXPOT*2+1]-2048); //SEND B
CODEC_DAC_CALIBRATION_DCOFFSET[0]=(i_smoothed_potadc[LEVEL*2]-2048-1750); //OUT A
CODEC_DAC_CALIBRATION_DCOFFSET[1]=(i_smoothed_potadc[LEVEL*2+1]-2048-1750); //OUT B
CODEC_DAC_CALIBRATION_DCOFFSET[2]=(i_smoothed_potadc[MIXPOT*2]-2048-1750); //SEND A
CODEC_DAC_CALIBRATION_DCOFFSET[3]=(i_smoothed_potadc[MIXPOT*2+1]-2048-1750); //SEND B
}

if ((switch1==0b01) && (switch2==0b01))//both down
if (switch1==SWITCH_DOWN && switch2==SWITCH_DOWN)//both down: calibrate audio input DC level
{
CODEC_ADC_CALIBRATION_DCOFFSET[0]= -1*ch1rx_buffer[0];
CODEC_ADC_CALIBRATION_DCOFFSET[1]= -1*ch2rx_buffer[0];
CODEC_ADC_CALIBRATION_DCOFFSET[2]= -1*ch1rx_buffer[2];
CODEC_ADC_CALIBRATION_DCOFFSET[3]= -1*ch2rx_buffer[2];
}

if ((switch1==0b11) && (switch2==0b11) && REV1BUT && INF1BUT && REV2BUT && INF2BUT)//switches both down, four buttons held
// if ((switch1==SWITCH_CENTER) && (switch2==SWITCH_CENTER) && REV1BUT && INF1BUT && REV2BUT && INF2BUT)//switches both center, four buttons held
if (SAVE_CALIBRATE_BUTTONS)
{
buttons_down++;
if (buttons_down==3000)
{
save_calibration();
global_mode[CALIBRATE] = 0;

}
} else
buttons_down=0;



}

uint32_t load_calibration(void)
{

return(0); //No calibration data found
read_all_params_from_FLASH();

if (flash_firmware_version > 0 && flash_firmware_version < 500){

CODEC_ADC_CALIBRATION_DCOFFSET[0] = flash_CODEC_ADC_CALIBRATION_DCOFFSET[0];
CODEC_ADC_CALIBRATION_DCOFFSET[1] = flash_CODEC_ADC_CALIBRATION_DCOFFSET[1];
CODEC_ADC_CALIBRATION_DCOFFSET[2] = flash_CODEC_ADC_CALIBRATION_DCOFFSET[2];
CODEC_ADC_CALIBRATION_DCOFFSET[3] = flash_CODEC_ADC_CALIBRATION_DCOFFSET[3];

CODEC_DAC_CALIBRATION_DCOFFSET[0] = flash_CODEC_DAC_CALIBRATION_DCOFFSET[0];
CODEC_DAC_CALIBRATION_DCOFFSET[1] = flash_CODEC_DAC_CALIBRATION_DCOFFSET[1];
CODEC_DAC_CALIBRATION_DCOFFSET[2] = flash_CODEC_DAC_CALIBRATION_DCOFFSET[2];
CODEC_DAC_CALIBRATION_DCOFFSET[3] = flash_CODEC_DAC_CALIBRATION_DCOFFSET[3];

CV_CALIBRATION_OFFSET[0] = flash_CV_CALIBRATION_OFFSET[0];
CV_CALIBRATION_OFFSET[1] = flash_CV_CALIBRATION_OFFSET[1];
CV_CALIBRATION_OFFSET[2] = flash_CV_CALIBRATION_OFFSET[2];
CV_CALIBRATION_OFFSET[3] = flash_CV_CALIBRATION_OFFSET[3];
CV_CALIBRATION_OFFSET[4] = flash_CV_CALIBRATION_OFFSET[4];
CV_CALIBRATION_OFFSET[5] = flash_CV_CALIBRATION_OFFSET[5];


return (1);

} else
return(0); //No calibration data found
}

void save_calibration(void)
Expand All @@ -154,8 +192,41 @@ void save_calibration(void)
//copy SRAM variables to FLASH
write_all_params_to_FLASH();

for (i=0;i<10024;i++){
LED_PINGBUT_ON;
for (i=0;i<10;i++){
LED_PINGBUT_OFF;
LED_REV1_OFF;
LED_REV2_OFF;
LED_LOOP1_OFF;
LED_LOOP2_OFF;
LED_INF1_OFF;
LED_INF2_OFF;
delay();

LED_PINGBUT_ON;
LED_REV1_ON;
LED_REV2_ON;
LED_LOOP1_ON;
LED_LOOP2_ON;
LED_INF1_ON;
LED_INF2_ON;

delay();
}
}

void check_calibration_mode(void)
{
global_mode[CALIBRATE] = 0;

if (!load_calibration()){
auto_calibrate();
set_firmware_version();

global_mode[CALIBRATE] = 1;
// factory_reset();
}

if (ENTER_CALIBRATE_BUTTONS)
global_mode[CALIBRATE] = 1;

}
4 changes: 2 additions & 2 deletions calibration.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
#define CALIBRATION_H_
#include <stm32f4xx.h>

#define NUM_SYS_MODES 2

void set_default_calibration_values(void);

void read_all_params_from_FLASH(void);
void update_calibration(void);
uint32_t load_calibration(void);
void save_calibration(void);
void auto_calibrate(void);
void check_calibration_mode(void);

#endif /* CALIBRATION_H_ */
49 changes: 40 additions & 9 deletions codec.c
Original file line number Diff line number Diff line change
Expand Up @@ -132,15 +132,15 @@
#define PART_mask (0b11110000)
#define REV_mask (0b00001111)

const uint8_t codec_init_data_slave[] =
const uint8_t codec_init_data_slave_DCinput[] =
{

SINGLE_SPEED
| RATIO0
| SLAVE
| DIF_I2S_24b, //MODECTRL1

FAST_FILT_SEL
SLOW_FILT_SEL
| DEEMPH_OFF, //DACCTRL

ATAPI_aLbR, //DACMIX
Expand All @@ -150,7 +150,30 @@ const uint8_t codec_init_data_slave[] =

ADC_DIF_I2S
| HPFDisableA
| HPFDisableB //ADCCTRL
| HPFDisableB //ADCCTRL

};


const uint8_t codec_init_data_slave[] =
{

SINGLE_SPEED
| RATIO0
| SLAVE
| DIF_I2S_24b, //MODECTRL1

SLOW_FILT_SEL
| DEEMPH_OFF, //DACCTRL

ATAPI_aLbR, //DACMIX

0b00000000, //DACAVOL
0b00000000, //DACBVOL

ADC_DIF_I2S
/*| HPFDisableA
| HPFDisableB */ //ADCCTRL

};
const uint8_t codec_init_data_master[] =
Expand Down Expand Up @@ -220,7 +243,7 @@ void Codecs_Deinit(void)
}


uint32_t Codec_Register_Setup(void)
uint32_t Codec_Register_Setup(uint8_t enable_DCinput)
{
uint32_t err = 0;

Expand All @@ -230,19 +253,19 @@ uint32_t Codec_Register_Setup(void)
CODECA_RESET_HIGH;
delay_ms(2);

err+=Codec_Reset(CODECA_I2C, CODECA_MODE);
err+=Codec_Reset(CODECA_I2C, CODECA_MODE, enable_DCinput);


CODECB_RESET_HIGH;
delay_ms(2);

err+=Codec_Reset(CODECB_I2C, CODECB_MODE);
err+=Codec_Reset(CODECB_I2C, CODECB_MODE, enable_DCinput);

return err;
}


uint32_t Codec_Reset(I2C_TypeDef *CODEC, uint8_t master_slave)
uint32_t Codec_Reset(I2C_TypeDef *CODEC, uint8_t master_slave, uint8_t enable_DCinput)
{
uint8_t i;
uint32_t err=0;
Expand All @@ -258,8 +281,16 @@ uint32_t Codec_Reset(I2C_TypeDef *CODEC, uint8_t master_slave)
}
else
{
for(i=0;i<CS4271_NUM_REGS;i++)
err+=Codec_WriteRegister(i+1, codec_init_data_slave[i], CODEC);
if (enable_DCinput)
{
for(i=0;i<CS4271_NUM_REGS;i++)
err+=Codec_WriteRegister(i+1, codec_init_data_slave_DCinput[i], CODEC);
}
else
{
for(i=0;i<CS4271_NUM_REGS;i++)
err+=Codec_WriteRegister(i+1, codec_init_data_slave[i], CODEC);
}
}

err+=Codec_WriteRegister(CS4271_REG_MODELCTRL2, CPEN, CODEC); //Power Down disable
Expand Down
4 changes: 2 additions & 2 deletions codec.h
Original file line number Diff line number Diff line change
Expand Up @@ -196,13 +196,13 @@ Hardware Configuration defines parameters
#define CODEC_LONG_TIMEOUT ((uint32_t)(300 * CODEC_FLAG_TIMEOUT))


uint32_t Codec_Register_Setup(void);
uint32_t Codec_Register_Setup(uint8_t enable_DCinput);

void Codec_CtrlInterface_Init(void);

void Codec_AudioInterface_Init(uint32_t AudioFreq);

uint32_t Codec_Reset(I2C_TypeDef *CODEC, uint8_t master_slave);
uint32_t Codec_Reset(I2C_TypeDef *CODEC, uint8_t master_slave, uint8_t enable_DCinput);

uint32_t Codec_WriteRegister(uint8_t RegisterAddr, uint8_t RegisterValue, I2C_TypeDef *CODEC);

Expand Down
Loading

0 comments on commit 8b78663

Please sign in to comment.