1414#include <stm32f303xc.h>
1515
1616
17-
1817static struct {
1918 int32_t rms [2 ];
2019 int16_t ave [2 ];
@@ -169,7 +168,9 @@ config_t config = {
169168 { 11330000 , MOD_USB },
170169 { 13273000 , MOD_USB },
171170 { 17904000 , MOD_USB }
172- }
171+ },
172+ .button_polarity = 0x01 ,
173+ .freq_inverse = -1
173174};
174175
175176struct {
@@ -441,7 +442,6 @@ static void cmd_stat(BaseSequentialStream *chp, int argc, char *argv[])
441442#endif
442443}
443444
444-
445445static void cmd_power (BaseSequentialStream * chp , int argc , char * argv [])
446446{
447447 (void )argc ;
@@ -465,18 +465,22 @@ static void cmd_impedance(BaseSequentialStream *chp, int argc, char *argv[])
465465static void cmd_gain (BaseSequentialStream * chp , int argc , char * argv [])
466466{
467467 int gain ;
468- if (argc != 1 && argc != 2 ) {
469- chprintf (chp , "usage: gain {pga gain(0-95)} { digital gain(-24-40)} \r\n" );
468+ if (argc != 1 && argc != 2 && argc != 3 ) {
469+ chprintf (chp , "usage: gain {pga gain(0-95)} [ digital gain(-24-40)] [adjust] \r\n" );
470470 return ;
471471 }
472472
473473 gain = atoi (argv [0 ]);
474- tlv320aic3204_set_gain (gain );
474+ tlv320aic3204_set_gain (gain , gain );
475475 uistat .rfgain = gain ;
476476
477- if (argc == 2 ) {
477+ if (argc >= 2 ) {
478+ int adjust = 0 ;
478479 gain = atoi (argv [1 ]);
479- tlv320aic3204_set_digital_gain (gain );
480+ if (argc == 3 ) {
481+ adjust = atoi (argv [2 ]);
482+ }
483+ tlv320aic3204_set_digital_gain (gain , gain + adjust );
480484 uistat .rfgain += gain ;
481485 }
482486
@@ -495,6 +499,30 @@ static void cmd_phase(BaseSequentialStream *chp, int argc, char *argv[])
495499 tlv320aic3204_set_adc_phase_adjust (value );
496500}
497501
502+ static void cmd_finegain (BaseSequentialStream * chp , int argc , char * argv [])
503+ {
504+ int g1 = 0 , g2 = 0 ;
505+ if (argc != 1 && argc != 2 ) {
506+ chprintf (chp , "usage: gainadjust {gain1 gain2} (0 - -4)\r\n" );
507+ return ;
508+ }
509+ g1 = atoi (argv [0 ]);
510+ if (argc == 2 ) {
511+ g2 = atoi (argv [1 ]);
512+ }
513+ tlv320aic3204_set_adc_fine_gain_adjust (g1 , g2 );
514+ }
515+
516+ static void cmd_iqbal (BaseSequentialStream * chp , int argc , char * argv [])
517+ {
518+ if (argc != 1 ) {
519+ chprintf (chp , "usage: iqbal {coeff}\r\n" );
520+ return ;
521+ }
522+ double value = config .freq_inverse - (double )atoi (argv [0 ]) / 10000.0 ;
523+ tlv320aic3204_config_adc_filter2 (value );
524+ }
525+
498526static void cmd_volume (BaseSequentialStream * chp , int argc , char * argv [])
499527{
500528 int gain ;
@@ -750,6 +778,28 @@ static void cmd_channel(BaseSequentialStream *chp, int argc, char *argv[])
750778 }
751779}
752780
781+ static void cmd_revision (BaseSequentialStream * chp , int argc , char * argv [])
782+ {
783+ if (argc == 0 ) {
784+ chprintf (chp , "usage: revision {rev}\r\n" );
785+ return ;
786+ }
787+ int rev = atoi (argv [0 ]);
788+ switch (rev ) {
789+ case 0 :
790+ config .freq_inverse = 1 ;
791+ config .button_polarity = 0x00 ;
792+ break ;
793+ case 1 :
794+ config .freq_inverse = -1 ;
795+ config .button_polarity = 0x01 ;
796+ break ;
797+ default :
798+ chprintf (chp , "unknown revision\r\n" );
799+ break ;
800+ }
801+ }
802+
753803static void cmd_save (BaseSequentialStream * chp , int argc , char * argv [])
754804{
755805 (void )argc ;
@@ -807,6 +857,7 @@ static const ShellCommand commands[] =
807857 { "gain" , cmd_gain },
808858 { "volume" , cmd_volume },
809859 { "agc" , cmd_agc },
860+ { "iqbal" , cmd_iqbal },
810861 { "dcreject" , cmd_dcreject },
811862 { "imp" , cmd_impedance },
812863 { "mode" , cmd_mode },
@@ -815,9 +866,11 @@ static const ShellCommand commands[] =
815866 { "show" , cmd_show },
816867 { "power" , cmd_power },
817868 { "channel" , cmd_channel },
869+ { "revision" , cmd_revision },
818870 { "save" , cmd_save },
819871 { "clearconfig" , cmd_clearconfig },
820872 { "phase" , cmd_phase },
873+ { "finegain" , cmd_finegain },
821874 { NULL , NULL }
822875};
823876
@@ -876,6 +929,12 @@ int __attribute__((noreturn)) main(void)
876929 /* restore config */
877930 config_recall ();
878931
932+ if (config .button_polarity != 0 ) {
933+ // pullup for revision 1 board
934+ palSetGroupMode (GPIOA , 1 , 0 , PAL_MODE_INPUT_PULLUP );
935+ palSetGroupMode (GPIOB , 6 , 0 , PAL_MODE_INPUT_PULLUP );
936+ }
937+
879938 // copy uistat from uistat
880939 uistat = config .uistat ;
881940
@@ -917,6 +976,7 @@ int __attribute__((noreturn)) main(void)
917976 * I2S Initialize
918977 */
919978 tlv320aic3204_init ();
979+
920980 i2sInit ();
921981 i2sObjectInit (& I2SD2 );
922982 i2sStart (& I2SD2 , & i2sconfig );
@@ -942,7 +1002,6 @@ int __attribute__((noreturn)) main(void)
9421002 * Shell manager initialization.
9431003 */
9441004 shellInit ();
945- tlv320aic3204_config_adc_filter (1 ); // enable DC reject
9461005
9471006 /*
9481007 * Creates the blinker thread.
@@ -952,7 +1011,10 @@ int __attribute__((noreturn)) main(void)
9521011#if 1
9531012 ui_init ();
9541013#endif
955-
1014+
1015+ tlv320aic3204_config_adc_filter2 (config .freq_inverse /* + 0.129 */ ); // enable DC reject
1016+ //tlv320aic3204_config_adc_filter(1); // enable DC reject
1017+
9561018 /*
9571019 * Creates the button thread.
9581020 */
0 commit comments