📄 spi_cmd.c
字号:
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 + -