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

📄 spi_cmd.c

📁 linux下的SPI总线驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
				cle_getNextCmdToken(&nextToken,&size,saved); /* mode: 0:linear, 1:alaw, 2:ulaw */		pcm_mode = U32_value( nextToken );				if(slic_init(slic_channel)!=SUCCESS)	/* init ic device */		{			rtlglue_printf("Slic channel %d init FAIL\n", slic_channel);			return FAILED;		}		slic_init_Value(slic_channel, pcm_mode);/* init pcm seeting */#else		rtlglue_printf("CONFIG_RTL865X_PCM define first\n");#endif	}	else		return SUCCESS;	return nRet;}static int32 _rtl8651_Le88221Cmd(uint32 userId,  int32 argc,int8 **saved) {	int32 size;	int8 *nextToken;	static rtl8651_spi_dev_t dev;	cle_getNextCmdToken(&nextToken,&size,saved);	if (strcmp(nextToken, "init") == 0) 	{		int32 maxspeed;		int32 resetDelay;		int i;		cle_getNextCmdToken(&nextToken,&size,saved); /* 'max_speed' */		cle_getNextCmdToken(&nextToken,&size,saved); /* max speed */		maxspeed = I32_value( nextToken );		cle_getNextCmdToken(&nextToken,&size,saved); /* 'reset_delay' */		if (strcmp(nextToken, "reset_delay") == 0) 		{			cle_getNextCmdToken(&nextToken,&size,saved); /* reset delay */			resetDelay = I32_value( nextToken );		}		else		{			resetDelay = 200000000 / 4; /* 250ms */		}		/* Enable PCM to generate Frame Sync and Clock from 865xB to SLIC. */		rtlglue_printf("Enable PCM to generate Frame Sync and Clock from 865xB to SLIC.\n");		REG32(0xbd017000) |= 0x00001800;		/* Configure GPIO_PortB as PCM port */		rtlglue_printf("Configure GPIO_PortB as PCM port.\n");		_rtl865x_initGpioPin( GPIO_ID(GPIO_PORT_B, 0), GPIO_PERI_TYPE0, GPIO_DIR_OUT, GPIO_INT_DISABLE );/* PCM_FSYNC */		_rtl865x_initGpioPin( GPIO_ID(GPIO_PORT_B, 1), GPIO_PERI_TYPE0, GPIO_DIR_OUT, GPIO_INT_DISABLE );/* PCM_CLK */		_rtl865x_initGpioPin( GPIO_ID(GPIO_PORT_B, 2), GPIO_PERI_TYPE0, GPIO_DIR_OUT, GPIO_INT_DISABLE );/* PCM_SDOUT */		_rtl865x_initGpioPin( GPIO_ID(GPIO_PORT_B, 3), GPIO_PERI_TYPE0, GPIO_DIR_OUT, GPIO_INT_DISABLE );/* PCM_SDIN */		_rtl865x_initGpioPin( GPIO_ID(GPIO_PORT_B, 4), GPIO_PERI_TYPE0, GPIO_DIR_OUT, GPIO_INT_DISABLE );/* PCM_DS0 */		_rtl865x_initGpioPin( GPIO_ID(GPIO_PORT_B, 5), GPIO_PERI_TYPE0, GPIO_DIR_OUT, GPIO_INT_DISABLE );/* PCM_DS1 */		_rtl865x_initGpioPin( GPIO_ID(GPIO_PORT_B, 6), GPIO_PERI_TYPE0, GPIO_DIR_OUT, GPIO_INT_DISABLE );/* PCM_DS2 */		_rtl865x_initGpioPin( GPIO_ID(GPIO_PORT_B, 7), GPIO_PERI_TYPE0, GPIO_DIR_OUT, GPIO_INT_DISABLE );/* PCM_DS3 */		/* RESET Si88221 */		rtlglue_printf("RESET Si88221.\n");		_rtl865x_initGpioPin( GPIO_ID(GPIO_PORT_D, 3), GPIO_PERI_GPIO, GPIO_DIR_OUT, GPIO_INT_DISABLE );/* CS_ */		_rtl865x_initGpioPin( GPIO_ID(GPIO_PORT_D, 6), GPIO_PERI_GPIO, GPIO_DIR_OUT, GPIO_INT_DISABLE );/* RESET_ */		_rtl865x_initGpioPin( GPIO_ID(GPIO_PORT_D, 7), GPIO_PERI_GPIO, GPIO_DIR_OUT, GPIO_INT_DISABLE );/* TEST */		for( i = resetDelay; i > 0; i-- );		_rtl865x_setGpioDataBit( GPIO_ID(GPIO_PORT_D, 3), 1 ); /* CS_ */		_rtl865x_setGpioDataBit( GPIO_ID(GPIO_PORT_D, 6), 1 ); /* RESET_ */		_rtl865x_setGpioDataBit( GPIO_ID(GPIO_PORT_D, 7), 1 ); /* TEST */		for( i = resetDelay; i > 0; i-- );		_rtl865x_setGpioDataBit( GPIO_ID(GPIO_PORT_D, 6), 0 ); /* RESET_ */		for( i = resetDelay; i > 0; i-- );		_rtl865x_setGpioDataBit( GPIO_ID(GPIO_PORT_D, 6), 1 ); /* RESET_ */		for( i = resetDelay; i > 0; i-- );		_rtl865x_spi_init( &dev, GPIO_ID(GPIO_PORT_D, 2),		                         GPIO_ID(GPIO_PORT_D, 3),		                         GPIO_ID(GPIO_PORT_D, 7),		                         GPIO_ID(GPIO_PORT_D, 1),		                         maxspeed );	}	else if (strcmp(nextToken, "default") == 0) 	{		uint8 buf;				rtlglue_printf("Hardware Reset\n");		buf = 0x04; _rtl865x_spi_rawWrite( &dev, &buf, 8 );				rtlglue_printf("DCR 2.048MHz PCLK\n");		buf = 0x46; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x82; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Enable Channel 1 & 2 receive data\n");		buf = 0x4a; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x03; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write Switching register parameter\n");		buf = 0xE4; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x00; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x05; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x80; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write Switching register control\n");		buf = 0xE6; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x07; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write Operating condition reg\n");		buf = 0x70; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x00; _rtl865x_spi_rawWrite( &dev, &buf, 8 );				rtlglue_printf("Write Loop Supervision parameter\n");		buf = 0xC2; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x1B; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x84; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xC6; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x05; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write Operating function reg\n");		buf = 0x60; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x3F; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write DC feed parameter\n");		buf = 0xC6; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x31; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x08; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write Sig Gen A and B parameter (ring signal)\n");		buf = 0xD2; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x00; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x00; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x00; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x00; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x37; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x3E; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x2D; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x00; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x00; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x00; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x00; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write Sig Gen C and D parameter (ring signal)\n");		buf = 0xD4; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x17; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x77; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x27; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xD4; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x04; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xB1; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x27; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xD4; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write Cadence CONTROL (ring signal)\n");		buf = 0xE0; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x00; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xC8; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x03; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x20; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write R filter\n");		buf = 0x8A; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xDC; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x01; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x22; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xD0; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x2A; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xA4; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x3B; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x3F; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x3F; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x9F; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xAA; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x97; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xAB; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x8F; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write Z-IIR filter\n");		buf = 0x9A; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x23; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xCA; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x37; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x9F; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x01; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write voice path gain\n");		buf = 0x50; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x00; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write GX filter (transfer gain)\n");		buf = 0x80; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x32; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x10; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write GX filter (receive gain)\n");		buf = 0x82; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xA2; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x21; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write B1 filter (echo cancellation)\n");		buf = 0x86; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x2A; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x43; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x22; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x4B; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x1A; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xC3; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xB8; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xFA; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x8F; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xD9; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xF7; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x9F; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xB9; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xF0; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write X filter (transmit path freq correction)\n");		buf = 0x88; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xA8; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x70; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xAD; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x8F; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xBD; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xAE; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xFb; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x97; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x5A; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x27; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x32; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xBE; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write B2 filter (echo cancellation)\n");		buf = 0x96; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x2E; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x01; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write Z-FIR filter\n");		buf = 0x98; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x22; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x3D; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xA2; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xAD; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xAF; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xA6; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x2E; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xA5; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x23; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xAE; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write DISN filter\n");		buf = 0xCA; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0xF5; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write System state\n");		buf = 0x56; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x00; _rtl865x_spi_rawWrite( &dev, &buf, 8 );	}	else if (strcmp(nextToken, "raw_read") == 0) 	{		uint8 buf;				_rtl865x_spi_rawRead( &dev, &buf, 8 );		rtlglue_printf( "RawRead=0x%02x\n", buf );	}	else if (strcmp(nextToken, "raw_write") == 0) 	{		uint8 buf;				cle_getNextCmdToken(&nextToken,&size,saved); /* data */		buf = U8_value( nextToken );				rtlglue_printf( "RawWrite(0x%02x)\n", buf );		_rtl865x_spi_rawWrite( &dev, &buf, 8 );	}	else if (strcmp(nextToken, "offHookAndToneTest") == 0) 	{		uint8 buf;				rtlglue_printf("Enable Channel 1\n");		buf = 0x4A; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x01; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write system state register\n");		buf = 0x56; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x03; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write signal gen control reg (gen D output 440hz)\n");		buf = 0xDE; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x08; _rtl865x_spi_rawWrite( &dev, &buf, 8 );	}	else if (strcmp(nextToken, "ringTest") == 0) 	{		uint8 buf;				rtlglue_printf("Write signal gen control reg (reset all generator o/p)\n");		buf = 0xDE; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x00; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		rtlglue_printf("Write system state register\n");		buf = 0x56; _rtl865x_spi_rawWrite( &dev, &buf, 8 );		buf = 0x07; _rtl865x_spi_rawWrite( &dev, &buf, 8 );	}	else		return FAILED;		return SUCCESS;}static cle_paramType_t _checkFunc[] ={};cle_exec_t spi_cmds[] = {	{		"gpio",		"General Purpose IO",		" { { init'Initialization' port %d'port, 0 for A, 1 for B ....' [ pin %d'pin' ] "		"                          type { gpio'GPIO' | peri0'Peripheral type 0' | peri1'Peripheral type 1' } "		"                          direction { in'Inbound' | out'Outbound' } } | "		"   { get'Get GPIO data' port %d'Port number' [ pin %d'Pin number' ] } | "		"   { set'Set GPIO data' port %d'Port number' [ pin %d'Pin number' ] data %d'Value to set' } "		" } ",		_rtl8651_gpioCmd,		CLE_USECISCOCMDPARSER,			sizeof(_checkFunc)/sizeof(cle_paramType_t),		(cle_paramType_t *)&_checkFunc	},	{		"si3210",		"SPI of si3210 (SLIC)",		" { { init'init' { onboard'on board' | module'module' } max_speed %d'Max Speed (unit: hz)' %d'slic channel id' [ reset_delay %d'reset delay' ] } | "		"   { read'Read register' %d'Register number' %d'slic channel id' } | "		"   { write'Write register' %d'Register number' data %d'Data' %d'slic channel id' } | "		"   { gpio %d'slic channel' } | "		"   { pclk %d'slic channel' } | "		"   { start'Init slic interface' %d'Slic 0 or 1' %d'Mode 0:linear 1:alaw 2:ulaw' } "		" } ",		_rtl8651_Si3210Cmd,		CLE_USECISCOCMDPARSER,			sizeof(_checkFunc)/sizeof(cle_paramType_t),		(cle_paramType_t *)&_checkFunc	},	{		"le88221",		"SPI of Legerit 88221 (SLIC)",		" { { init'init' max_speed %d'Max Speed (unit: hz)' [ reset_delay %d'reset delay (unit: tick)' ] } | "		"   { default'Use default setting by Legerity' } | "		"   { offHookAndToneTest'Off Hook and Tone Test' } | "		"   { ringTest'Ring Test' } | "		"   { raw_read'Raw read a byte' } | "		"   { raw_write'Raw write a byte' %d'data' } "		" } ",		_rtl8651_Le88221Cmd,		CLE_USECISCOCMDPARSER,			sizeof(_checkFunc)/sizeof(cle_paramType_t),		(cle_paramType_t *)&_checkFunc	},};

⌨️ 快捷键说明

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