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

📄 io_merge.c

📁 TDK 6521 SOC 芯片 DEMO程序
💻 C
📖 第 1 页 / 共 3 页
字号:
       }
    }
    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 + -