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 ------------------------------ */ |