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

📄 debug.c

📁 主要用于液晶电视解码,内置51单片机,全部代码用C编写,编译环境为KEILC
💻 C
📖 第 1 页 / 共 5 页
字号:
                    //uwEEADDR = g_UartCommand.Buffer[_UART_CMD_INDEX1_] & 0x0E;
                    //uwEEADDR = (uwEEADDR << 7) + g_UartCommand.Buffer[_UART_CMD_INDEX2_];
                    NVRam_WriteByte(uwEEADDR, g_UartCommand.Buffer[_UART_CMD_INDEX3_]);
                    if (!g_bDebugASCIICommandFlag) putchar(0xF1);
                    break;
                }
            case kRead_EEPROM:
                {
                    WORD uwEEADDR;

                    uwEEADDR = MAKEWORD(g_UartCommand.Buffer[_UART_CMD_INDEX1_],g_UartCommand.Buffer[_UART_CMD_INDEX2_]);
                    //uwEEADDR = g_UartCommand.Buffer[_UART_CMD_INDEX1_] & 0x0E;
                    //uwEEADDR = (uwEEADDR << 7) + g_UartCommand.Buffer[_UART_CMD_INDEX2_];

                    #if TV_ENABLE
                    NVRam_ReadByte(uwEEADDR,&(g_UartCommand.Buffer[_UART_CMD_INDEX3_]));
                    #endif

                    putchar(0xF2);
                    putchar(g_UartCommand.Buffer[_UART_CMD_INDEX3_]);
                    if (g_bDebugASCIICommandFlag)
                    {
                        printf("EEPROM[0x%x]=", uwEEADDR);
                        printf("0x%x \r\n", g_UartCommand.Buffer[_UART_CMD_INDEX3_]);
                    }
                    break;
                }
           case kRead_Device_B8:
                {
                    //g_UartCommand.Buffer[_UART_CMD_INDEX3_] = i2cReadByte( g_UartCommand.Buffer[_UART_CMD_INDEX1_],  g_UartCommand.Buffer[_UART_CMD_INDEX2_]);
			        i2cBurstReadBytes(g_UartCommand.Buffer[_UART_CMD_INDEX1_],  g_UartCommand.Buffer[_UART_CMD_INDEX2_],&g_UartCommand.Buffer[_UART_CMD_INDEX3_],1);
                    putchar(0xF2);
                    putchar(g_UartCommand.Buffer[_UART_CMD_INDEX3_]);
                    if (g_bDebugASCIICommandFlag)
                    {
                        printf("I2C 0x%x ", g_UartCommand.Buffer[_UART_CMD_INDEX1_]);
                        printf("[0x%x]=", g_UartCommand.Buffer[_UART_CMD_INDEX2_]);
                        printf("0x%x \r\n", g_UartCommand.Buffer[_UART_CMD_INDEX3_]);
                    }
                }
                break;
            case kRead_Device_B16:
                {
                    WORD wData;

                    putchar(0xF3);
                    i2cBurstReadBytes(g_UartCommand.Buffer[_UART_CMD_INDEX1_], g_UartCommand.Buffer[_UART_CMD_INDEX2_], (BYTE *)&wData, sizeof(wData));
                    putchar(HIBYTE(wData));
                    putchar(LOBYTE(wData));
                    if (g_bDebugASCIICommandFlag)
                    {
                        printf("I2C 0x%x ", g_UartCommand.Buffer[_UART_CMD_INDEX1_]);
                        printf("[0x%x]=", g_UartCommand.Buffer[_UART_CMD_INDEX2_]);
                        printf("0x%x \r\n", g_UartCommand.Buffer[_UART_CMD_INDEX3_]);
                    }
                }
                break;
            case kWrite_Device:
                {
                    if(UART_CMD_LENGTH==5)
                    {
                        WORD wData;

                        wData = ((WORD)(g_UartCommand.Buffer[_UART_CMD_INDEX3_]))<<8;
                        wData = wData + (WORD)(g_UartCommand.Buffer[_UART_CMD_INDEX4_]);
                        i2cBurstWriteBytes(g_UartCommand.Buffer[_UART_CMD_INDEX1_], g_UartCommand.Buffer[_UART_CMD_INDEX2_], (BYTE *)&wData, sizeof(wData));
                        if (!g_bDebugASCIICommandFlag) putchar(0xF1);
                    }
                    else
                    {
                        i2cWriteByte( g_UartCommand.Buffer[_UART_CMD_INDEX1_],  g_UartCommand.Buffer[_UART_CMD_INDEX2_],  g_UartCommand.Buffer[_UART_CMD_INDEX3_]);
                        if (!g_bDebugASCIICommandFlag) putchar(0xF1);
                    }
                }
                break;

        #if 0//(DIGITAL_VD_SELECT == VIDEO_DECODER_VPC323X)
            case kWrite_VPC32xx_FP:
                {
                    WORD wData,wAddress;

                    wAddress = MAKEWORD(g_UartCommand.Buffer[_UART_CMD_INDEX2_] , g_UartCommand.Buffer[_UART_CMD_INDEX3_]);
                    wData = MAKEWORD(g_UartCommand.Buffer[_UART_CMD_INDEX4_], g_UartCommand.Buffer[_UART_CMD_INDEX5_]);
                    vdVpcAccessWrite_FP(g_UartCommand.Buffer[_UART_CMD_INDEX1_], wAddress, wData);

                    if (!g_bDebugASCIICommandFlag) putchar(0xF1);
                }
                break;
        #endif
            case kRead_VPC32xx_FP:
                {
                #if 0//(DIGITAL_VD_SELECT    == VIDEO_DECODER_VPC323X)
                    WORD wAddress;
                    wAddress = MAKEWORD(g_UartCommand.Buffer[_UART_CMD_INDEX2_] , g_UartCommand.Buffer[_UART_CMD_INDEX3_]);
                    wAddress = vdVpcAccessRead_FP(g_UartCommand.Buffer[_UART_CMD_INDEX1_], wAddress);
                    putchar(0xF3);
                    putchar(HIBYTE(wAddress));
                    putchar(LOBYTE(wAddress));
                #else
                    putchar(0xF3);
                    putchar(0);
                    putchar(0);
                #endif
                }
                break;
#endif
            // Test Only
            case kTest_Command:
                ExecTestCommand();
                break;

        } // switch

        msWriteByte(BK0_00_REGBK, ucBank);
    }
}

#if (_DEBUG_PRINT_EN_)
void putSIOChar(unsigned char sendData)
{
#if (IR_TIMER_SEL == IR_USE_TIMER1)
    if (g_bUartDisable) // check flag
        return;
#endif

  EA = 0; // disable all interrupt

  SBUF = sendData; // transfer to uart
  // wait transfer completing
#if (IR_TIMER_SEL == IR_USE_TIMER1)
    while(1) { if (TI || g_bUartDisable) break; } // check flag
#else
    while(1) { if (TI) break; } // check flag
#endif
  TI = 0; // clear flag

  EA = 1; // release all interrupt
}
#endif


//////////////////////////////////////////////////////////////
// Put character to uart
//
// Arguments: ucVal - output character
//////////////////////////////////////////////////////////////
void putchar(BYTE ucVal)
{
#if (_DEBUG_RW_REG_EN_||_DEBUG_PRINT_EN_)
#if (IR_TIMER_SEL == IR_USE_TIMER1)
    if (g_bUartDisable) // check flag
        return;
#endif

    ES = 0; // disable uart interrupt

    SBUF = ucVal; // transfer to uart
    // wait transfer completing
#if (IR_TIMER_SEL == IR_USE_TIMER1)
    while(1) { if (TI || g_bUartDisable) break; } // check flag
#else
    while(1) { if (TI) break; } // check flag
#endif
    TI = 0; // clear flag

    ES = _DEBUG_EXTDEV_EN_;// 1; // release uart interrupt
#endif
}
//////////////////////////////////////////////////////////////////////////////
// Put string to uart.
//
// Arguments: pFmt - string address
//////////////////////////////////////////////////////////////////////////////
#if (_DEBUG_PRINT_EN_)
void putstr(BYTE *pFmt)
{
    BYTE ucBff; // character buffer

    while (1)
    {
         ucBff = *pFmt; // get a character
         if (ucBff == _EOS_) // check end of string
             break;

         putchar(ucBff); // put a character

         pFmt++; // next
    } // while
}
#endif
/*
//////////////////////////////////////////////////////////////////////////////
// Put string to uart with variable argument
//
// Arguments: pFmt - string address
//            wVal - print variable
//////////////////////////////////////////////////////////////////////////////
#if (_DEBUG_PRINT_EN_)

void IntToStr( WORD wVal, BYTE ucBase, BYTE* pBuf )
{
    BOOL bShowZero = FALSE;
    WORD wDivider;
    BYTE ucDisp;

    if( 0 == wVal )
    {
        pBuf[0] = '0';
        pBuf[1] = '\0';
        return;
    }

    if( 16 == ucBase )
        wDivider = 0x1000;
    else
        wDivider = 10000;

    while( wDivider )
    {
        ucDisp = wVal/wDivider;
        wVal = wVal%wDivider;

        if( ucDisp )
            bShowZero = TRUE;

        if( ucDisp || bShowZero )
        {
            if( ucDisp < 10 )
                *pBuf = '0' + ucDisp;
            else
                *pBuf = 'A' + ucDisp - 10;
            pBuf ++;
        }

        if( 16 == ucBase )
            wDivider /= 0x10;
        else
            wDivider /= 10;
    }
    *pBuf = '\0';
}
    #endif

XDATA BYTE s_Buf[6];
void printf( BYTE code *pFmt, WORD wVal )
{
#if (_DEBUG_PRINT_EN_)

    BYTE ucBff;

    while( ucBff = *(pFmt++) )
    {
        if(ucBff == '%') // check special case
        {
            switch( *(pFmt++) ) // check next character
            {
                case 'x': // hexadecimal number
                case 'X':
                    IntToStr( wVal, 16, s_Buf );
                    putstr( s_Buf );
                    break;
                case 'd': // decimal number
                case 'i':
                    IntToStr( wVal, 10, s_Buf );
                    putstr( s_Buf );
                    break;
            } // switch
        }
        else // general
            putchar(ucBff); // put a character
    } // while
    #endif
}
*/

#define _EOS_ '\0' // end of string


void printMsg(char *str)
{
#if (_DEBUG_PRINT_EN_)

    BYTE ucBff;

  	putSIOChar((char)'\r');
  	putSIOChar((char)'\n');

    while (1)
    {
         ucBff = *str;
         if (ucBff == _EOS_)
             break;

         putSIOChar(ucBff);

         str++;
    }
#else
str=str;
#endif
}


void printf(char *str, WORD value)
{
#if (_DEBUG_PRINT_EN_)

	char sendData;//=Send_MsgValue;

  	while (sendData=*(str++))
    {
    	if (sendData==(char)'%') // %
        {
        	sendData=*(str++);
          	if (sendData==(char)'d' || sendData==(char)'x') // d
            {
            	if (value)
                {
                	BOOL noneZero=FALSE;
                  	WORD divider=10000;
                  	char dispValue;

                  	if (sendData==(char)'x')
		    			divider=0x1000;
                  	while (divider)
				    {
				    	dispValue=value/divider;
				      	value-=dispValue*divider;
		            	if (dispValue)
		          			noneZero=TRUE;
		            	if (noneZero)
		                {
		                	if (dispValue>9)
		     					dispValue+=55;
		   					else
		        				dispValue+=0x30;
		 					putSIOChar(dispValue);
		  				}
						if (sendData==(char)'d')
		      				divider/=10;
		      			else
		     				divider/=0x10;
		    		}
                }
              	else
  	        		putSIOChar('0');
  	    	}
  		}
      	else
        	putSIOChar(sendData);
    }
#else
str=str;
value=value;
#endif
}

⌨️ 快捷键说明

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