//-------------------------------------------------------------------------- // // Debug routines // //-------------------------------------------------------------------------- // $Archive: /WirelessUSB/WUSB Kits/CY4632 LS KBM RDK/DocSrc/CD_Root/Firmware/Source Code/RDK Keyboard/debug.c $ // $Modtime: 6/03/04 9:49a9/28/04 2:39p $ // $Revision: 78 $ //-------------------------------------------------------------------------- // // Copyright 2003-2004, Cypress Semiconductor Corporation. // // This software is owned by Cypress Semiconductor Corporation (Cypress) // and is protected by and subject to worldwide patent protection (United // States and foreign), United States copyright laws and international // treaty provisions. Cypress hereby grants to licensee a personal, // non-exclusive, non-transferable license to copy, use, modify, create // derivative works of, and compile the Cypress Source Code and derivative // works for the sole purpose of creating custom software in support of // licensee product to be used only in conjunction with a Cypress integrated // circuit as specified in the applicable agreement. Any reproduction, // modification, translation, compilation, or representation of this // software except as specified above is prohibited without the express // written permission of Cypress. // // Disclaimer: CYPRESS MAKES NO WARRANTY OF ANY KIND,EXPRESS OR IMPLIED, // WITH REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. // Cypress reserves the right to make changes without further notice to the // materials described herein. Cypress does not assume any liability arising // out of the application or use of any product or circuit described herein. // Cypress does not authorize its products for use as critical components in // life-support systems where a malfunction or failure may reasonably be // expected to result in significant injury to the user. The inclusion of // Cypress’ product in a life-support systems application implies that the // manufacturer assumes all risk of such use and in doing so indemnifies // Cypress against all charges. // // Use may be limited by and subject to the applicable Cypress software // license agreement. // //-------------------------------------------------------------------------- //-------------------------------------- // Included files //-------------------------------------- #include "ls_config.h" #ifdef DEBUG #include "TX8_1.h" //-------------------------------------- // Local Definitions and Types //-------------------------------------- //-------------------------------------- // Local Function Declarations //-------------------------------------- void debug_out_nibble(UINT8 nibble); //-------------------------------------- // Local Definitions //-------------------------------------- //-------------------------------------- // debug_init //-------------------------------------- void debug_init(void) { TX8_1_Start(TX8_PARITY_NONE); } /////////////////////////////////////////////////////////////////////////////// // // Function: debug_out_char // // Description: Ouput a character to the serial port // // TODO, test more to find out why the data overruns soemtime with testing for empty // // Inputs: UINT8 // // Returns: void // /////////////////////////////////////////////////////////////////////////////// void debug_out_char(UINT8 data) { UINT8 status; UINT8 cnt; // write a byte TX8_1_SendData(data); #if 0 // wait for the byte to be sent while(!(bTX8_1_ReadTxStatus() & TX8_TX_BUFFER_EMPTY)); while(!(status & TX8_TX_COMPLETE)) #else status = bTX8_1_ReadTxStatus(); cnt=1; while(!(status & TX8_TX_BUFFER_EMPTY)) { status = bTX8_1_ReadTxStatus(); cnt++; } #endif } /////////////////////////////////////////////////////////////////////////////// // // Function: debug_out_str // // Description: Writes a string to the serial port // // Inputs: uchar // // Returns: Void // /////////////////////////////////////////////////////////////////////////////// void debug_out_str(const UINT8 *pbStrPtr) { // loop for the null terminated string while( *pbStrPtr != 0 ) { // write a character debug_out_char( *pbStrPtr ); // point to the next character pbStrPtr++; } } /////////////////////////////////////////////////////////////////////////////// // // Function: debug_out_hex // // Description: Converts a byte to a hex value // // Inputs: uchar // // Returns: Void // /////////////////////////////////////////////////////////////////////////////// void debug_out_hex(UINT8 data) { debug_out_nibble((data >> 4) & 0x0f); debug_out_nibble(data & 0x0f); } /////////////////////////////////////////////////////////////////////////////// // // Function: debug_out_dec // // Description: Converts a byte to a decimal ascii value // // Inputs: uchar // // Returns: Void // /////////////////////////////////////////////////////////////////////////////// void debug_out_dec(UINT8 data) { if(data > 99) { debug_out_nibble(data / 100); data %= 100; debug_out_nibble(data / 10); data %= 10; debug_out_nibble(data); } else if(data > 9) { debug_out_nibble(data / 10); data %= 10; debug_out_nibble(data); } else debug_out_nibble(data); } /////////////////////////////////////////////////////////////////////////////// // // Function: debug_out_dec_b // // Description: Converts a byte to a decimal ascii value, leading blanks // // Inputs: uchar // // Returns: Void // /////////////////////////////////////////////////////////////////////////////// void debug_out_dec_b(UINT8 data) { if(data > 99) { debug_out_char(' '); debug_out_nibble(data / 100); data %= 100; debug_out_nibble(data / 10); data %= 10; debug_out_nibble(data); } else if(data > 9) { debug_out_char(' '); debug_out_char(' '); debug_out_nibble(data / 10); data %= 10; debug_out_nibble(data); } else { debug_out_char(' '); debug_out_char(' '); debug_out_char(' '); debug_out_nibble(data); } } /////////////////////////////////////////////////////////////////////////////// // // Function: debug_out_nibble // // Description: Convert a nibble to an ASCII value // // Inputs: uchar // // Returns: Void // /////////////////////////////////////////////////////////////////////////////// void debug_out_nibble(UINT8 nibble) { if(nibble > 9) { debug_out_char((nibble - 10) + 'A'); } else { debug_out_char(nibble + '0'); } } /////////////////////////////////////////////////////////////////////////////// // // Function: debug_out_int_hex // // Description: Converts an integer to a hex value // // Inputs: uchar // // Returns: Void // /////////////////////////////////////////////////////////////////////////////// void debug_out_int_hex(unsigned int data) { debug_out_nibble((data >> 12) & 0x0f); debug_out_nibble((data >> 8) & 0x0f); debug_out_nibble((data >> 4) & 0x0f); debug_out_nibble(data & 0x0f); } /////////////////////////////////////////////////////////////////////////////// // // Function: outIntDec // // Description: Converts an integer to a decimal ascii value // // Inputs: uchar // // Returns: Void // /////////////////////////////////////////////////////////////////////////////// void debug_out_int_dec(unsigned int data) { if(data > 9999) { debug_out_nibble(data / 10000); data %= 10000; debug_out_nibble(data / 1000); data %= 1000; debug_out_nibble(data / 100); data %= 100; debug_out_nibble(data / 10); data %= 10; debug_out_nibble(data); } else if(data > 999) { debug_out_nibble(data / 1000); data %= 1000; debug_out_nibble(data / 100); data %= 100; debug_out_nibble(data / 10); data %= 10; debug_out_nibble(data); } else if(data > 99) { debug_out_nibble(data / 100); data %= 100; debug_out_nibble(data / 10); data %= 10; debug_out_nibble(data); } else if(data > 9) { debug_out_nibble(data / 10); data %= 10; debug_out_nibble(data); } else // single digit { debug_out_nibble(data); } } /////////////////////////////////////////////////////////////////////////////// // // Function: debug_out_int_dec_b // // Description: Converts a int to a decimal ascii value, leading blanks // // Inputs: uchar // // Returns: Void // /////////////////////////////////////////////////////////////////////////////// void debug_out_int_dec_b( unsigned int data ) { if(data > 9999) { debug_out_nibble(data / 10000); data %= 10000; debug_out_nibble(data / 1000); data %= 1000; debug_out_nibble(data / 100); data %= 100; debug_out_nibble(data / 10); data %= 10; debug_out_nibble(data); } else if(data > 999) { debug_out_char(' '); debug_out_nibble(data / 1000); data %= 1000; debug_out_nibble(data / 100); data %= 100; debug_out_nibble(data / 10); data %= 10; debug_out_nibble(data); } else if(data > 99) { debug_out_char(' '); debug_out_char(' '); debug_out_nibble(data / 100); data %= 100; debug_out_nibble(data / 10); data %= 10; debug_out_nibble(data); } else if(data > 9) { debug_out_char(' '); debug_out_char(' '); debug_out_char(' '); debug_out_nibble(data / 10); data %= 10; debug_out_nibble(data); } else { debug_out_char(' '); debug_out_char(' '); debug_out_char(' '); debug_out_char(' '); debug_out_nibble(data); } } #endif //DEBUG