⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2s_codec_jz4740.c

📁 JZ4740 ucos core code JZ4740 ucos 核心代码
💻 C
字号:
#include <jz4740.h>#define u8	unsigned char#define u16	unsigned short#define u32	unsigned intu16 codec_volume;u16 codec_base_gain;u16 codec_mic_gain;int HP_on_off_flag; static int HP_register_value; int IS_WRITE_PCM;void i2s_codec_clear(void){        REG_ICDC_CDCCR1 = 0x021b2302;}void i2s_codec_init(void){//	REG_GPIO_PXFUNS(3) |= 0x007c0000;//	REG_GPIO_PXSELS(3) |= 0x007c0000;//	__gpio_as_aic();	REG_CPM_SCR &= 0x0fffffff;	__i2s_internal_codec();//	__i2s_as_slave();//	__i2s_select_i2s();		REG_ICDC_CDCCR1 = 0x021b2303; //reset	udelay(10);	REG_ICDC_CDCCR1 = 0x021b2302;	REG_ICDC_CDCCR2 = 0x00170803;	HP_on_off_flag = 0;//HP is off}void i2s_codec_set_mic(u16 v) /* 0 <= v <= 100 */{	v = v & 0xff;	if(v < 0)		v = 0;	if(v > 100)		v = 100;		codec_mic_gain = 31 * v/100;	REG_ICDC_CDCCR2 = ((REG_ICDC_CDCCR2 & ~(0x1f << 16)) | (codec_mic_gain << 16));}void i2s_codec_set_bass(u16 v) /* 0 <= v <= 100 */{	v = v & 0xff;	if(v < 0)		v = 0;	if(v > 100)		v = 100;	if(v < 25)		codec_base_gain = 0;	if(v >= 25 && v < 50)		codec_base_gain = 1;	if(v >= 50 && v < 75)		codec_base_gain = 2;	if(v >= 75 && v <= 100 )		codec_base_gain = 3;	REG_ICDC_CDCCR2 = ((REG_ICDC_CDCCR2 & ~(0x3 << 4)) | (codec_base_gain << 4));}void i2s_codec_set_volume(u16 v) /* 0 <= v <= 100 */{	v = v & 0xff;	if(v < 0)		v = 0;	if(v > 100)		v = 100;	if(v < 25)		codec_volume = 0;	if(v >= 25 && v < 50)		codec_volume = 1;	if(v >= 50 && v < 75)		codec_volume = 2;	if(v >= 75 && v <= 100 )		codec_volume = 3;		REG_ICDC_CDCCR2 = ((REG_ICDC_CDCCR2 & ~(0x3)) | codec_volume);}u16 i2s_codec_get_bass(void){	u16 val;	int ret;	if(codec_base_gain == 0)		val = 0;	if(codec_base_gain == 1)		val = 25;	if(codec_base_gain == 2)		val = 50;	if(codec_base_gain == 3)		val = 75;		ret = val << 8;	val = val | ret;}u16 i2s_codec_get_mic(void){	u16 val;	int ret;	val = 100 * codec_mic_gain / 31;	ret = val << 8;	val = val | ret;}u16 i2s_codec_get_volume(void){	u16 val;	int ret;	if(codec_volume == 0)		val = 0;	if(codec_volume == 1)		val = 25;	if(codec_volume == 2)		val = 50;	if(codec_volume == 3)		val = 75;		ret = val << 8;	val = val | ret;	return val;}void i2s_codec_set_channel(u16 ch){//	i2s_codec_write(I2S_KEYCLICK_CONTROL, 0x4415);}void i2s_codec_set_samplerate(u16 rate){	unsigned short speed = 0;	unsigned short val = 0;			switch (rate) {		case 8000:			speed = 0;			break;		case 11025:			speed = 1;			break;		case 12000:			speed = 2;			break;		case 16000:			speed = 3;			break;		case 22050:			speed = 4;			break;		case 24000:			speed = 5;			break;		case 32000:			speed = 6;			break;		case 44100:			speed = 7;			break;		case 48000:			speed = 8;			break;		default:			break;		}		REG_ICDC_CDCCR2 |= 0x00000f00;		speed = speed << 8;		speed |= 0xfffff0ff;		REG_ICDC_CDCCR2 &= speed;}void actual_delay_msec(long delay_val){	udelay(delay_val*1000);	}void HP_turn_on(void){         //see 1.3.4.1		REG_ICDC_CDCCR1 &= 0xfffffffc;//set suspend 0	actual_delay_msec(15);	REG_ICDC_CDCCR1 &= 0xffecffff;	REG_ICDC_CDCCR1 |= 0x01001000;		actual_delay_msec(600);	REG_ICDC_CDCCR1 &= 0xfff7ecff;		actual_delay_msec(2);	HP_register_value = REG_ICDC_CDCCR1; 	//see 1.3.4.2	/*REG_ICDC_CDCCR1 &= 0xfffffffc;	mdelay(7);	REG_ICDC_CDCCR1 |= 0x00040400;	mdelay(15);	REG_ICDC_CDCCR1 &= 0xfffbfbff;	udelay(500);	REG_ICDC_CDCCR1 &= 0xffe5fcff;	REG_ICDC_CDCCR1 |= 0x01000000;	mdelay(400);	REG_ICDC_CDCCR1 &= 0xfffeffff;	mdelay(7);	HP_register_value = REG_ICDC_CDCCR1;*/	//see 1.3.4.3	}void HP_turn_off(void){	//see 1.3.4.1	actual_delay_msec(2);	REG_ICDC_CDCCR1 = HP_register_value;	REG_ICDC_CDCCR1 |= 0x001b0300;	REG_ICDC_CDCCR1 &= 0xfeffffff;	actual_delay_msec(15);	REG_ICDC_CDCCR1 |= 0x00000002;//set suspend 1	//see 1.3.4.2	/*mdelay(4);	REG_ICDC_CDCCR1 = HP_register_value;	REG_ICDC_CDCCR1 |= 0x001b0300;	REG_ICDC_CDCCR1 &= 0xfeffffff;	mdelay(4);	REG_ICDC_CDCCR1 |= 0x00000400;	mdelay(15);	REG_ICDC_CDCCR1 &= 0xfffffdff;	mdelay(7);	REG_ICDC_CDCCR1 |= 0x00000002;*/		//see 1.3.4.3}void in_codec_app1(void){	/* test is OK */	if(HP_on_off_flag == 0) {		HP_on_off_flag = 1;		HP_turn_on();	}	REG_ICDC_CDCCR1 &= 0xc3ffbfff;	REG_ICDC_CDCCR1 |= 0x03000000;//	REG_ICDC_CDCCR2 = 0x00170803;}void in_codec_app2(void){	/* test is OK */	if(HP_on_off_flag == 0) {		HP_on_off_flag = 1;		HP_turn_on();	}	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 | (1 << 29) | (1 << 27 ) | (1 << 25) | (1 << 24);	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 & ~(1 << 28) & ~(1 << 26) & ~(1 << 14);	//REG_ICDC_CDCCR2 = 0x00170803;}static void in_codec_app3(void){	/* test is OK */	if(HP_on_off_flag == 0) {		HP_on_off_flag = 1;		HP_turn_on();	}	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 | (1 << 28) | (1 << 27 ) | (1 << 25) | (1 << 24);	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 & ~(1 << 29) & ~(1 << 26) & ~(1 << 14);	//REG_ICDC_CDCCR2 = 0x00170803;}static void in_codec_app4(void){	/* test is OK */	if(HP_on_off_flag == 0) {		HP_on_off_flag = 1;		HP_turn_on();	}	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 | (1 << 29) | (1 << 28) | (1 << 27 ) | (1 << 25) | (1 << 24);	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 & ~(1 << 26) & ~(1 << 14);	//REG_ICDC_CDCCR2 = 0x00170803;}static void in_codec_app5(void){	/* wait to be test */	if(HP_on_off_flag == 0) {		HP_on_off_flag = 1;		HP_turn_on();	}	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 | (1 << 28) | (1 << 26) | (1 << 25) | (1 << 24);	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 & ~(1 << 29) & ~(1 << 27) & ~(1 << 14);	//REG_ICDC_CDCCR2 = 0x00170803;}static void in_codec_app6(void){	/* test is OK */	if(HP_on_off_flag == 0) {		HP_on_off_flag = 1;		HP_turn_on();	}	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 | (1 << 29) | (1 << 27);	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 & ~(1 << 28) & ~(1 << 26) & ~(1 << 25) & ~(1 << 24) & ~(1 << 14);	//REG_ICDC_CDCCR2 = 0x00170803;}static void in_codec_app7(void){	/* test is OK */	if(HP_on_off_flag == 0) {		HP_on_off_flag = 1;		HP_turn_on();	}		REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 | (1 << 29) | (1 << 26) | (1 << 14);	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 & ~(1 << 28) & ~(1 << 27) & ~(1 << 25) & ~(1 << 24);	//REG_ICDC_CDCCR2 = 0x00170803;}static void in_codec_app8(void){	/* test is wrong */	if(HP_on_off_flag == 1) {		HP_on_off_flag = 0;		HP_turn_off();	}		REG_ICDC_CDCCR1 &= ~(1 << 1);	udelay(7000);	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 | (1 << 29) | (1 << 26);	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 & ~(1 << 28) & ~(1 << 24);	//REG_ICDC_CDCCR2 = 0x00170803;}static void in_codec_app9(void){	/* test is OK */	if(HP_on_off_flag == 0) {		HP_on_off_flag = 1;		HP_turn_on();	}		REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 | (1 << 29) | (1 << 27) | (1 << 26);	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 & ~(1 << 28) & ~(1 << 25) & ~(1 << 24) & ~(1 << 14);	//REG_ICDC_CDCCR2 = 0x00170803;}static void in_codec_app10(void){	/* test is OK */	if(HP_on_off_flag == 0) {		HP_on_off_flag = 1;		HP_turn_on();	}		REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 | (1 << 28) | (1 << 27);	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 & ~(1 << 29) & ~(1 << 26) & ~(1 << 25) & ~(1 << 24) & ~(1 << 14);	//REG_ICDC_CDCCR2 = 0x00170803;}void in_codec_app11(void){	/* test is OK */	if(HP_on_off_flag == 0) {		HP_on_off_flag = 1;		HP_turn_on();	}	REG_ICDC_CDCCR1 |= 1 << 28;	REG_ICDC_CDCCR1 |= 1 << 26;	REG_ICDC_CDCCR1 |= 1 << 14;	REG_ICDC_CDCCR1 &= ~(1 << 29);	REG_ICDC_CDCCR1 &= ~(1 << 27);	REG_ICDC_CDCCR1 &= ~(1 << 25);	REG_ICDC_CDCCR1 &= ~(1 << 24);	//REG_ICDC_CDCCR2 = 0x00170823;}void in_codec_app12(void){	/* test is OK */	if(HP_on_off_flag == 1) {		HP_on_off_flag = 0;		HP_turn_off();	}		REG_ICDC_CDCCR1 &= ~(1 << 1);	udelay(7000);	REG_ICDC_CDCCR1 |= 1 << 28;	REG_ICDC_CDCCR1 |= 1 << 26;	REG_ICDC_CDCCR1 &= ~(1 << 29);	REG_ICDC_CDCCR1 &= ~(1 << 24);	//REG_ICDC_CDCCR2 = 0x00170823;}void in_codec_app13(void){	/* test is OK */	if(HP_on_off_flag == 0) {		HP_on_off_flag = 1;		HP_turn_on();	}	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 | (1 << 28) | (1 << 27) | (1 << 26);	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 & ~(1 << 29) & ~(1 << 25) & ~(1 << 24) & ~(1 << 14);}static void in_codec_app14(void){	/* test is OK */	if(HP_on_off_flag == 0) {		HP_on_off_flag = 1;		HP_turn_on();	}	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 | (1 << 29) | (1 << 28) | (1 << 27);	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 & ~(1 << 26) & ~(1 << 25) & ~(1 << 24) & ~(1 << 14);}static void in_codec_app15(void){	/* test is OK */	if(HP_on_off_flag == 0) {		HP_on_off_flag = 1;		HP_turn_on();	}	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 | (1 << 29) | (1 << 28) | (1 << 26) | (1 << 14);	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 & ~(1 << 27) & ~(1 << 25) & ~(1 << 24);}static void in_codec_app16(void){	/* test is wrong */	if(HP_on_off_flag == 1) {		HP_on_off_flag = 0;		HP_turn_off();	}		REG_ICDC_CDCCR1 &= ~(1 << 1);	udelay(7000);	REG_ICDC_CDCCR1 |= 1 << 29;	REG_ICDC_CDCCR1 |= 1 << 28;	REG_ICDC_CDCCR1 |= 1 << 26;	REG_ICDC_CDCCR1 &= ~(1 << 24);	//REG_ICDC_CDCCR2 = 0x00170823;}static void in_codec_app17(void){	/* test is OK */	if(HP_on_off_flag == 0) {		HP_on_off_flag = 1;		HP_turn_on();	}	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 | (1 << 29) | (1 << 28) | (1 << 27) | (1 << 26);	REG_ICDC_CDCCR1 = REG_ICDC_CDCCR1 & ~(1 << 25) & ~(1 << 24) & ~(1 << 14);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -