📄 io_merge.c
字号:
}
}
else
c = 0xFF;
return (c);
}
U08 get_char_d (U08 *d) // Get next character from CLI buffer..
{ // ..and allow unget.
*d = cli_index;
return (get_char ());
}
U08 get_char (void) // Get next character from CLI buffer.
{
U08 c;
if ((c = cli_buff[ cli_index ]) != (U08) NULL)
cli_index++;
return (c);
}
static void cmd_serial (void)
{
U08 c;
while (!done (&c))
{
switch (toupper (c))
{
case 'C':
if (SERIAL0 == Rom[ SELECT_PORT ])
{
Rom[ serial_rate_1 ] = Rom[ serial_rate_0 ];
Rom[ SERIAL_PARM1 ] = Rom[ SERIAL_PARM0 ];
}
else
{
Rom[ serial_rate_0 ] = Rom[ serial_rate_1 ];
Rom[ SERIAL_PARM0 ] = Rom[ SERIAL_PARM1 ];
}
break;
case 'E':
if (get_num ())
if (SERIAL0 == Rom[ SELECT_PORT ])
Rom[ SERIAL_PARM0 ] |= ECHO;
else
Rom[ SERIAL_PARM1 ] |= ECHO;
else
if (SERIAL1 == Rom[ SELECT_PORT ])
Rom[ SERIAL_PARM0 ] &= ~ECHO;
else
Rom[ SERIAL_PARM1 ] &= ~ECHO;
break;
case 'K':
if (get_num ())
if (SERIAL0 == Rom[ SELECT_PORT ])
Rom[ SERIAL_PARM0 ] |= XON_XOFF;
else
Rom[ SERIAL_PARM1 ] |= XON_XOFF;
else // SERIAL1 == Rom[ SELECT_PORT ].
if (SERIAL0 == Rom[ SELECT_PORT ])
Rom[ SERIAL_PARM0 ] &= ~XON_XOFF;
else
Rom[ SERIAL_PARM1 ] &= ~XON_XOFF;
break;
case 'P':
Rom[ SELECT_PORT ] = get_num ();
break;
default:
break;
}
}
}
static void cmd_width_parity (void) // '8' Serial port width, parity, stop bit controls.
{
U08 c;
done (&c);
switch (toupper (c))
{
case 'O':
if (SERIAL0 == Rom[ SELECT_PORT ])
Rom[ SERIAL_PARM0 ] |= PARITY_ODD;
else
Rom[ SERIAL_PARM1 ] |= PARITY_ODD;
if (SERIAL0 == Rom[ SELECT_PORT ])
Rom[ SERIAL_PARM0 ] &= ~PARITY_NONE;
else
Rom[ SERIAL_PARM1 ] &= ~PARITY_NONE;
break;
case 'N':
if (SERIAL0 == Rom[ SELECT_PORT ])
Rom[ SERIAL_PARM0 ] |= PARITY_NONE;
else
Rom[ SERIAL_PARM1 ] |= PARITY_NONE;
break;
case 'E':
default: // Assume its going to be EVEN.
if (SERIAL0 == Rom[ SELECT_PORT ])
Rom[ SERIAL_PARM0 ] &= ~PARITY_ODD;
else
Rom[ SERIAL_PARM1 ] &= ~PARITY_ODD;
if (SERIAL0 == Rom[ SELECT_PORT ])
Rom[ SERIAL_PARM0 ] &= ~PARITY_NONE;
else
Rom[ SERIAL_PARM1 ] &= ~PARITY_NONE;
break;
}
done(&c);
if ('2' == c) // Assume one stop bit unless two specified.
if (SERIAL0 == Rom[ SELECT_PORT ])
Rom[ SERIAL_PARM0 ] |= STOP_BIT2;
else
Rom[ SERIAL_PARM1 ] |= STOP_BIT2;
else
if (SERIAL0 == Rom[ SELECT_PORT ])
Rom[ SERIAL_PARM0 ] &= ~STOP_BIT2;
else
Rom[ SERIAL_PARM1 ] &= ~STOP_BIT2;
}
static void cmd_rate (void)
{
U08 c, serial_rate;
done (&c);
switch (c)
{
case '1':
done (&c);
switch (c)
{
case '2': // 1200 bps.
serial_rate = _RATE_1200;
break;
case '9': // 19200 bps.
serial_rate = _RATE_19200;
break;
}
break;
case '2': // 2400 bps.
serial_rate = _RATE_2400;
break;
case '3':
done (&c);
switch (c)
{
case '0': // 300 bps.
serial_rate = _RATE_300;
break;
case '8': // 38400 bps.
serial_rate = _RATE_38400;
break;
}
break;
case '4': // 4800 bps.
serial_rate = _RATE_4800;
break;
case '6': // 600 bps.
serial_rate = _RATE_600;
break;
case '9': // 9600 bps.
serial_rate = _RATE_9600;
break;
}
if (SERIAL0 == Rom[ SELECT_PORT ])
Rom[ serial_rate_0 ] = serial_rate;
else
Rom[ serial_rate_1 ] = serial_rate;
}
static void cmd_meter (void)
{
U08 c, d;
c = toupper (get_char_d (&d));
if ('R' == c)
{
Rom[ SELECT_OUTPUT ] = 0;
Rom[ SELECT_TOTAL ] = 0;
Rom[ SELECT_RMS ] = get_num ();
done (&c); // Skip delimiter.
Rom[ SELECT_TOTAL ] |= get_num () << 6;
}
else if ('O' == c)
{
Rom[ SELECT_RMS ] = 0;
Rom[ SELECT_TOTAL ] = 0;
Rom[ SELECT_OUTPUT ] = get_num ();
done (&c); // Skip delimiter.
Rom[ SELECT_TOTAL ] |= get_num () << 6;
}
else
{
cli_index = d; // Unget last character.
Rom[ SELECT_RMS ] = 0;
Rom[ SELECT_OUTPUT ] = 0;
Rom[ SELECT_TOTAL ] = get_num ();
done (&c); // Skip delimiter.
Rom[ SELECT_TOTAL ] |= get_num () << 6;
}
}
static void cmd_io (void) // 'O' User I(O) controls.
{
enum USER_PORT port;
U08 c;
U08 dir, io, select;
while (!done (&c))
{
port = get_num ();
switch (toupper (c))
{
case 'C':
done (&c); // Skip delimiter.
dir = get_num ();
switch (port)
{
case 0:
Rom[ DIO07_00_DIR ] = dir;
break;
case 1:
Rom[ DIO15_08_DIR ] = dir;
break;
case 2:
Rom[ DIO21_16_DIR ] = dir;
break;
}
break;
case 'P':
cmd_io_pin (port); // Really PIN number.
break;
case 'W':
done (&c); // Skip delimiter.
io = get_num ();
done (&c); // Skip delimiter.
select = get_num ();
switch (port)
{
case 0:
Rom[ DIO07_00_VAL ] &= ~select;
Rom[ DIO07_00_VAL ] = io;
break;
case 1:
Rom[ DIO15_08_VAL ] &= ~select;
Rom[ DIO15_08_VAL ] = io;
break;
case 2:
Rom[ DIO21_16_VAL ] &= ~select;
Rom[ DIO21_16_VAL ] = io;
break;
}
break;
}
}
}
static void cmd_io_pin (enum USER_PIN pin) // 'OP' I(O) (P)in controls.
{
U08 c;
U08 p;
if (!done (&c))
{
p = get_num ();
switch (toupper (c))
{
case 'C':
switch (pin / 8)
{
case 0:
if (p)
Rom[ DIO07_00_DIR ] |= dio2bit[ pin % 8 ];
else
Rom[ DIO07_00_DIR ] &= ~dio2bit[ pin % 8 ];
break;
case 1:
if (p)
Rom[ DIO15_08_DIR ] |= dio2bit[ pin % 8 ];
else
Rom[ DIO15_08_DIR ] &= ~dio2bit[ pin % 8 ];
break;
case 2:
if (p)
Rom[ DIO21_16_DIR ] |= dio2bit[ pin % 8 ];
else
Rom[ DIO21_16_DIR ] &= ~dio2bit[ pin % 8 ];
break;
}
break;
case 'W':
switch (pin / 8)
{
case 0:
if (p)
Rom[ DIO07_00_VAL ] |= dio2bit[ pin % 8 ];
else
Rom[ DIO07_00_VAL ] &= ~dio2bit[ pin % 8 ];
break;
case 1:
if (p)
Rom[ DIO15_08_VAL ] |= dio2bit[ pin % 8 ];
else
Rom[ DIO15_08_VAL ] &= ~dio2bit[ pin % 8 ];
break;
case 2:
if (p)
Rom[ DIO21_16_VAL ] |= dio2bit[ pin % 8 ];
else
Rom[ DIO21_16_VAL ] &= ~dio2bit[ pin % 8 ];
break;
}
}
}
}
/***************************************************************************
* Copyright (C) 2003 TDK SemiConductor, Corporation. All Rights Reserved. *
* this program is fully protected by the United States copyright *
* laws and is the property of TDK SemiConductor CORPORATION. *
***************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -