323 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			323 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/**********************************************************************
 | 
						|
* $Id$      debug_frmwrk.c              2010-05-21
 | 
						|
*//**
 | 
						|
* @file     debug_frmwrk.c
 | 
						|
* @brief    Contains some utilities that used for debugging through UART
 | 
						|
* @version  2.0
 | 
						|
* @date     21. May. 2010
 | 
						|
* @author   NXP MCU SW Application Team
 | 
						|
*
 | 
						|
* Copyright(C) 2010, NXP Semiconductor
 | 
						|
* All rights reserved.
 | 
						|
*
 | 
						|
***********************************************************************
 | 
						|
* Software that is described herein is for illustrative purposes only
 | 
						|
* which provides customers with programming information regarding the
 | 
						|
* products. This software is supplied "AS IS" without any warranties.
 | 
						|
* NXP Semiconductors assumes no responsibility or liability for the
 | 
						|
* use of the software, conveys no license or title under any patent,
 | 
						|
* copyright, or mask work right to the product. NXP Semiconductors
 | 
						|
* reserves the right to make changes in the software without
 | 
						|
* notification. NXP Semiconductors also make no representation or
 | 
						|
* warranty that such application will be suitable for the specified
 | 
						|
* use without further testing or modification.
 | 
						|
* Permission to use, copy, modify, and distribute this software and its
 | 
						|
* documentation is hereby granted, under NXP Semiconductors'
 | 
						|
* relevant copyright in the software, without fee, provided that it
 | 
						|
* is used in conjunction with NXP Semiconductors microcontrollers.  This
 | 
						|
* copyright, permission, and disclaimer notice must appear in all copies of
 | 
						|
* this code.
 | 
						|
**********************************************************************/
 | 
						|
 | 
						|
#include "debug_frmwrk.h"
 | 
						|
#include "lpc17xx_pinsel.h"
 | 
						|
 | 
						|
/* If this source file built with example, the LPC17xx FW library configuration
 | 
						|
 * file in each example directory ("lpc17xx_libcfg.h") must be included,
 | 
						|
 * otherwise the default FW library configuration file must be included instead
 | 
						|
 */
 | 
						|
#ifdef __BUILD_WITH_EXAMPLE__
 | 
						|
#include "lpc17xx_libcfg.h"
 | 
						|
#else
 | 
						|
#include "lpc17xx_libcfg_default.h"
 | 
						|
#endif /* __BUILD_WITH_EXAMPLE__ */
 | 
						|
 | 
						|
#ifdef _DBGFWK
 | 
						|
/* Debug framework */
 | 
						|
 | 
						|
void (*_db_msg)(LPC_UART_TypeDef *UARTx, const void *s);
 | 
						|
void (*_db_msg_)(LPC_UART_TypeDef *UARTx, const void *s);
 | 
						|
void (*_db_char)(LPC_UART_TypeDef *UARTx, uint8_t ch);
 | 
						|
void (*_db_dec)(LPC_UART_TypeDef *UARTx, uint8_t decn);
 | 
						|
void (*_db_dec_16)(LPC_UART_TypeDef *UARTx, uint16_t decn);
 | 
						|
void (*_db_dec_32)(LPC_UART_TypeDef *UARTx, uint32_t decn);
 | 
						|
void (*_db_hex)(LPC_UART_TypeDef *UARTx, uint8_t hexn);
 | 
						|
void (*_db_hex_16)(LPC_UART_TypeDef *UARTx, uint16_t hexn);
 | 
						|
void (*_db_hex_32)(LPC_UART_TypeDef *UARTx, uint32_t hexn);
 | 
						|
uint8_t (*_db_get_char)(LPC_UART_TypeDef *UARTx);
 | 
						|
 | 
						|
 | 
						|
/*********************************************************************//**
 | 
						|
 * @brief       Puts a character to UART port
 | 
						|
 * @param[in]   UARTx   Pointer to UART peripheral
 | 
						|
 * @param[in]   ch      Character to put
 | 
						|
 * @return      None
 | 
						|
 **********************************************************************/
 | 
						|
void UARTPutChar (LPC_UART_TypeDef *UARTx, uint8_t ch)
 | 
						|
{
 | 
						|
    UART_Send(UARTx, &ch, 1, BLOCKING);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/*********************************************************************//**
 | 
						|
 * @brief       Get a character to UART port
 | 
						|
 * @param[in]   UARTx   Pointer to UART peripheral
 | 
						|
 * @return      character value that returned
 | 
						|
 **********************************************************************/
 | 
						|
uint8_t UARTGetChar (LPC_UART_TypeDef *UARTx)
 | 
						|
{
 | 
						|
    uint8_t tmp = 0;
 | 
						|
    UART_Receive(UARTx, &tmp, 1, BLOCKING);
 | 
						|
    return(tmp);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/*********************************************************************//**
 | 
						|
 * @brief       Puts a string to UART port
 | 
						|
 * @param[in]   UARTx   Pointer to UART peripheral
 | 
						|
 * @param[in]   str     string to put
 | 
						|
 * @return      None
 | 
						|
 **********************************************************************/
 | 
						|
void UARTPuts(LPC_UART_TypeDef *UARTx, const void *str)
 | 
						|
{
 | 
						|
    uint8_t *s = (uint8_t *) str;
 | 
						|
 | 
						|
    while (*s)
 | 
						|
    {
 | 
						|
        UARTPutChar(UARTx, *s++);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/*********************************************************************//**
 | 
						|
 * @brief       Puts a string to UART port and print new line
 | 
						|
 * @param[in]   UARTx   Pointer to UART peripheral
 | 
						|
 * @param[in]   str     String to put
 | 
						|
 * @return      None
 | 
						|
 **********************************************************************/
 | 
						|
void UARTPuts_(LPC_UART_TypeDef *UARTx, const void *str)
 | 
						|
{
 | 
						|
    UARTPuts (UARTx, str);
 | 
						|
    UARTPuts (UARTx, "\n\r");
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/*********************************************************************//**
 | 
						|
 * @brief       Puts a decimal number to UART port
 | 
						|
 * @param[in]   UARTx   Pointer to UART peripheral
 | 
						|
 * @param[in]   decnum  Decimal number (8-bit long)
 | 
						|
 * @return      None
 | 
						|
 **********************************************************************/
 | 
						|
void UARTPutDec(LPC_UART_TypeDef *UARTx, uint8_t decnum)
 | 
						|
{
 | 
						|
    uint8_t c1=decnum%10;
 | 
						|
    uint8_t c2=(decnum/10)%10;
 | 
						|
    uint8_t c3=(decnum/100)%10;
 | 
						|
    UARTPutChar(UARTx, '0'+c3);
 | 
						|
    UARTPutChar(UARTx, '0'+c2);
 | 
						|
    UARTPutChar(UARTx, '0'+c1);
 | 
						|
}
 | 
						|
 | 
						|
/*********************************************************************//**
 | 
						|
 * @brief       Puts a decimal number to UART port
 | 
						|
 * @param[in]   UARTx   Pointer to UART peripheral
 | 
						|
 * @param[in]   decnum  Decimal number (8-bit long)
 | 
						|
 * @return      None
 | 
						|
 **********************************************************************/
 | 
						|
void UARTPutDec16(LPC_UART_TypeDef *UARTx, uint16_t decnum)
 | 
						|
{
 | 
						|
    uint8_t c1=decnum%10;
 | 
						|
    uint8_t c2=(decnum/10)%10;
 | 
						|
    uint8_t c3=(decnum/100)%10;
 | 
						|
    uint8_t c4=(decnum/1000)%10;
 | 
						|
    uint8_t c5=(decnum/10000)%10;
 | 
						|
    UARTPutChar(UARTx, '0'+c5);
 | 
						|
    UARTPutChar(UARTx, '0'+c4);
 | 
						|
    UARTPutChar(UARTx, '0'+c3);
 | 
						|
    UARTPutChar(UARTx, '0'+c2);
 | 
						|
    UARTPutChar(UARTx, '0'+c1);
 | 
						|
}
 | 
						|
 | 
						|
/*********************************************************************//**
 | 
						|
 * @brief       Puts a decimal number to UART port
 | 
						|
 * @param[in]   UARTx   Pointer to UART peripheral
 | 
						|
 * @param[in]   decnum  Decimal number (8-bit long)
 | 
						|
 * @return      None
 | 
						|
 **********************************************************************/
 | 
						|
void UARTPutDec32(LPC_UART_TypeDef *UARTx, uint32_t decnum)
 | 
						|
{
 | 
						|
    uint8_t c1=decnum%10;
 | 
						|
    uint8_t c2=(decnum/10)%10;
 | 
						|
    uint8_t c3=(decnum/100)%10;
 | 
						|
    uint8_t c4=(decnum/1000)%10;
 | 
						|
    uint8_t c5=(decnum/10000)%10;
 | 
						|
    uint8_t c6=(decnum/100000)%10;
 | 
						|
    uint8_t c7=(decnum/1000000)%10;
 | 
						|
    uint8_t c8=(decnum/10000000)%10;
 | 
						|
    uint8_t c9=(decnum/100000000)%10;
 | 
						|
    uint8_t c10=(decnum/1000000000)%10;
 | 
						|
    UARTPutChar(UARTx, '0'+c10);
 | 
						|
    UARTPutChar(UARTx, '0'+c9);
 | 
						|
    UARTPutChar(UARTx, '0'+c8);
 | 
						|
    UARTPutChar(UARTx, '0'+c7);
 | 
						|
    UARTPutChar(UARTx, '0'+c6);
 | 
						|
    UARTPutChar(UARTx, '0'+c5);
 | 
						|
    UARTPutChar(UARTx, '0'+c4);
 | 
						|
    UARTPutChar(UARTx, '0'+c3);
 | 
						|
    UARTPutChar(UARTx, '0'+c2);
 | 
						|
    UARTPutChar(UARTx, '0'+c1);
 | 
						|
}
 | 
						|
 | 
						|
/*********************************************************************//**
 | 
						|
 * @brief       Puts a hex number to UART port
 | 
						|
 * @param[in]   UARTx   Pointer to UART peripheral
 | 
						|
 * @param[in]   hexnum  Hex number (8-bit long)
 | 
						|
 * @return      None
 | 
						|
 **********************************************************************/
 | 
						|
void UARTPutHex (LPC_UART_TypeDef *UARTx, uint8_t hexnum)
 | 
						|
{
 | 
						|
    uint8_t nibble, i;
 | 
						|
 | 
						|
    UARTPuts(UARTx, "0x");
 | 
						|
    i = 1;
 | 
						|
    do {
 | 
						|
        nibble = (hexnum >> (4*i)) & 0x0F;
 | 
						|
        UARTPutChar(UARTx, (nibble > 9) ? ('A' + nibble - 10) : ('0' + nibble));
 | 
						|
    } while (i--);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/*********************************************************************//**
 | 
						|
 * @brief       Puts a hex number to UART port
 | 
						|
 * @param[in]   UARTx   Pointer to UART peripheral
 | 
						|
 * @param[in]   hexnum  Hex number (16-bit long)
 | 
						|
 * @return      None
 | 
						|
 **********************************************************************/
 | 
						|
void UARTPutHex16 (LPC_UART_TypeDef *UARTx, uint16_t hexnum)
 | 
						|
{
 | 
						|
    uint8_t nibble, i;
 | 
						|
 | 
						|
    UARTPuts(UARTx, "0x");
 | 
						|
    i = 3;
 | 
						|
    do {
 | 
						|
        nibble = (hexnum >> (4*i)) & 0x0F;
 | 
						|
        UARTPutChar(UARTx, (nibble > 9) ? ('A' + nibble - 10) : ('0' + nibble));
 | 
						|
    } while (i--);
 | 
						|
}
 | 
						|
 | 
						|
/*********************************************************************//**
 | 
						|
 * @brief       Puts a hex number to UART port
 | 
						|
 * @param[in]   UARTx   Pointer to UART peripheral
 | 
						|
 * @param[in]   hexnum  Hex number (32-bit long)
 | 
						|
 * @return      None
 | 
						|
 **********************************************************************/
 | 
						|
void UARTPutHex32 (LPC_UART_TypeDef *UARTx, uint32_t hexnum)
 | 
						|
{
 | 
						|
    uint8_t nibble, i;
 | 
						|
 | 
						|
    UARTPuts(UARTx, "0x");
 | 
						|
    i = 7;
 | 
						|
    do {
 | 
						|
        nibble = (hexnum >> (4*i)) & 0x0F;
 | 
						|
        UARTPutChar(UARTx, (nibble > 9) ? ('A' + nibble - 10) : ('0' + nibble));
 | 
						|
    } while (i--);
 | 
						|
}
 | 
						|
 | 
						|
///*********************************************************************//**
 | 
						|
// * @brief     print function that supports format as same as printf()
 | 
						|
// *                function of <stdio.h> library
 | 
						|
// * @param[in] None
 | 
						|
// * @return        None
 | 
						|
// **********************************************************************/
 | 
						|
//void  _printf (const  char *format, ...)
 | 
						|
//{
 | 
						|
//    static  char  buffer[512 + 1];
 | 
						|
//            va_list     vArgs;
 | 
						|
//            char  *tmp;
 | 
						|
//    va_start(vArgs, format);
 | 
						|
//    vsprintf((char *)buffer, (char const *)format, vArgs);
 | 
						|
//    va_end(vArgs);
 | 
						|
//
 | 
						|
//    _DBG(buffer);
 | 
						|
//}
 | 
						|
 | 
						|
/*********************************************************************//**
 | 
						|
 * @brief       Initialize Debug frame work through initializing UART port
 | 
						|
 * @param[in]   None
 | 
						|
 * @return      None
 | 
						|
 **********************************************************************/
 | 
						|
void debug_frmwrk_init(void)
 | 
						|
{
 | 
						|
    UART_CFG_Type UARTConfigStruct;
 | 
						|
    PINSEL_CFG_Type PinCfg;
 | 
						|
 | 
						|
#if (USED_UART_DEBUG_PORT==0)
 | 
						|
    /*
 | 
						|
     * Initialize UART0 pin connect
 | 
						|
     */
 | 
						|
    PinCfg.Funcnum = 1;
 | 
						|
    PinCfg.OpenDrain = 0;
 | 
						|
    PinCfg.Pinmode = 0;
 | 
						|
    PinCfg.Pinnum = 2;
 | 
						|
    PinCfg.Portnum = 0;
 | 
						|
    PINSEL_ConfigPin(&PinCfg);
 | 
						|
    PinCfg.Pinnum = 3;
 | 
						|
    PINSEL_ConfigPin(&PinCfg);
 | 
						|
 | 
						|
#elif (USED_UART_DEBUG_PORT==1)
 | 
						|
    /*
 | 
						|
     * Initialize UART1 pin connect
 | 
						|
     */
 | 
						|
    PinCfg.Funcnum = 1;
 | 
						|
    PinCfg.OpenDrain = 0;
 | 
						|
    PinCfg.Pinmode = 0;
 | 
						|
    PinCfg.Pinnum = 15;
 | 
						|
    PinCfg.Portnum = 0;
 | 
						|
    PINSEL_ConfigPin(&PinCfg);
 | 
						|
    PinCfg.Pinnum = 16;
 | 
						|
    PINSEL_ConfigPin(&PinCfg);
 | 
						|
#endif
 | 
						|
 | 
						|
    /* Initialize UART Configuration parameter structure to default state:
 | 
						|
     * Baudrate = 9600bps
 | 
						|
     * 8 data bit
 | 
						|
     * 1 Stop bit
 | 
						|
     * None parity
 | 
						|
     */
 | 
						|
    UART_ConfigStructInit(&UARTConfigStruct);
 | 
						|
 | 
						|
    // Re-configure baudrate to 115200bps
 | 
						|
    UARTConfigStruct.Baud_rate = 115200;
 | 
						|
 | 
						|
    // Initialize DEBUG_UART_PORT peripheral with given to corresponding parameter
 | 
						|
    UART_Init((LPC_UART_TypeDef *)DEBUG_UART_PORT, &UARTConfigStruct);
 | 
						|
 | 
						|
    // Enable UART Transmit
 | 
						|
    UART_TxCmd((LPC_UART_TypeDef *)DEBUG_UART_PORT, ENABLE);
 | 
						|
 | 
						|
    _db_msg = UARTPuts;
 | 
						|
    _db_msg_ = UARTPuts_;
 | 
						|
    _db_char = UARTPutChar;
 | 
						|
    _db_hex = UARTPutHex;
 | 
						|
    _db_hex_16 = UARTPutHex16;
 | 
						|
    _db_hex_32 = UARTPutHex32;
 | 
						|
    _db_dec = UARTPutDec;
 | 
						|
    _db_dec_16 = UARTPutDec16;
 | 
						|
    _db_dec_32 = UARTPutDec32;
 | 
						|
    _db_get_char = UARTGetChar;
 | 
						|
}
 | 
						|
#endif /*_DBGFWK */
 | 
						|
 | 
						|
 | 
						|
/* --------------------------------- End Of File ------------------------------ */
 |