Date: March 20, 2011 This library is created from "LPC17xx CMSIS-Compliant Standard Peripheral Firmware Driver Library (GNU, Keil, IAR) (Jan 28, 2011)", available from NXP's website, under "All microcontrollers support documents" [[http://ics.nxp.com/support/documents/microcontrollers/?type=software]] You will need to follow [[/projects/libraries/svn/mbed/trunk/LPC1768/LPC17xx.h]] while using this library Examples provided here [[/users/frank26080115/programs/LPC1700CMSIS_Examples/]] The beautiful thing is that NXP does not place copyright protection on any of the files in here Only a few modifications are made to make it compile with the mbed online compiler, I fixed some warnings as well. This is untested as of March 20, 2011 Forum post about this library: [[/forum/mbed/topic/2030/]]
Diff: debug_frmwrk.c
- Revision:
- 0:84d7747641aa
diff -r 000000000000 -r 84d7747641aa debug_frmwrk.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/debug_frmwrk.c Sun Mar 20 18:45:15 2011 +0000 @@ -0,0 +1,305 @@ +/***********************************************************************//** + * @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 + *---------------------------------------------------------------------------- + * 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. + **********************************************************************/ + +#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 */