somehow could not get printf work with IAR both SWD & uart on NGX4330

This commit is contained in:
hathach
2014-03-05 15:03:38 +07:00
parent 62e2a44d71
commit 043e5dbf3c
6 changed files with 2543 additions and 322 deletions

View File

@@ -132,6 +132,10 @@ uint8_t board_uart_getchar(void)
{ {
return UART_ReceiveByte(BOARD_UART_PORT); return UART_ReceiveByte(BOARD_UART_PORT);
} }
void board_uart_putchar(uint8_t c)
{
UART_Send(BOARD_UART_PORT, &c, 1, BLOCKING);
}
#endif #endif
#endif #endif

View File

@@ -1,128 +1,128 @@
/**************************************************************************/ /**************************************************************************/
/*! /*!
@file board_ngx4330.c @file board_ngx4330.c
@author hathach (tinyusb.org) @author hathach (tinyusb.org)
@section LICENSE @section LICENSE
Software License Agreement (BSD License) Software License Agreement (BSD License)
Copyright (c) 2013, hathach (tinyusb.org) Copyright (c) 2013, hathach (tinyusb.org)
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright 1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer. notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright 2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution. documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holders nor the 3. Neither the name of the copyright holders nor the
names of its contributors may be used to endorse or promote products names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission. derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
This file is part of the tinyusb stack. This file is part of the tinyusb stack.
*/ */
/**************************************************************************/ /**************************************************************************/
#include "../board.h" #include "../board.h"
#if BOARD == BOARD_NGX4330 #if BOARD == BOARD_NGX4330
#define BOARD_UART_PORT LPC_USART0 #define BOARD_UART_PORT LPC_USART0
#define BOARD_MAX_LEDS 2 #define BOARD_MAX_LEDS 2
const static struct { const static struct {
uint8_t mux_port; uint8_t mux_port;
uint8_t mux_pin; uint8_t mux_pin;
uint8_t gpio_port; uint8_t gpio_port;
uint8_t gpio_pin; uint8_t gpio_pin;
}leds[BOARD_MAX_LEDS] = { {2, 11, 1, 11}, {2, 12, 1,12} }; }leds[BOARD_MAX_LEDS] = { {2, 11, 1, 11}, {2, 12, 1,12} };
void board_init(void) void board_init(void)
{ {
CGU_Init(); CGU_Init();
SysTick_Config( CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/CFG_TICKS_PER_SECOND ); /* 1 ms Timer */ SysTick_Config( CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/CFG_TICKS_PER_SECOND ); /* 1 ms Timer */
//------------- USB Bus power HOST ONLY-------------// //------------- USB Bus power HOST ONLY-------------//
scu_pinmux(0x1, 7, MD_PUP | MD_EZI, FUNC4); // P1_7 USB0_PWR_EN, USB0 VBus function Xplorer scu_pinmux(0x1, 7, MD_PUP | MD_EZI, FUNC4); // P1_7 USB0_PWR_EN, USB0 VBus function Xplorer
scu_pinmux(0x2, 6, MD_PUP | MD_EZI, FUNC4); // P2_6 is configured as GPIO5[6] for USB1_PWR_EN scu_pinmux(0x2, 6, MD_PUP | MD_EZI, FUNC4); // P2_6 is configured as GPIO5[6] for USB1_PWR_EN
GPIO_SetDir (5, BIT_(6), 1); // GPIO5[6] is output GPIO_SetDir (5, BIT_(6), 1); // GPIO5[6] is output
GPIO_SetValue (5, BIT_(6)); // GPIO5[6] output high GPIO_SetValue (5, BIT_(6)); // GPIO5[6] output high
//------------- LED -------------// //------------- LED -------------//
for (uint8_t i=0; i<BOARD_MAX_LEDS; i++) for (uint8_t i=0; i<BOARD_MAX_LEDS; i++)
{ {
scu_pinmux(leds[i].mux_port, leds[i].mux_pin, MD_PUP|MD_EZI|MD_ZI, FUNC0); scu_pinmux(leds[i].mux_port, leds[i].mux_pin, MD_PUP|MD_EZI|MD_ZI, FUNC0);
GPIO_SetDir(leds[i].gpio_port, BIT_(leds[i].gpio_pin), 1); // output GPIO_SetDir(leds[i].gpio_port, BIT_(leds[i].gpio_pin), 1); // output
} }
#if CFG_UART_ENABLE #if CFG_UART_ENABLE
//------------- UART init -------------// //------------- UART init -------------//
UART_CFG_Type UARTConfigStruct; UART_CFG_Type UARTConfigStruct;
scu_pinmux(0x6 ,4, MD_PDN|MD_EZI, FUNC2); // UART0_TXD scu_pinmux(0x6 ,4, MD_PDN|MD_EZI, FUNC2); // UART0_TXD
scu_pinmux(0x6 ,5, MD_PDN|MD_EZI, FUNC2); // UART0_RXD scu_pinmux(0x6 ,5, MD_PDN|MD_EZI, FUNC2); // UART0_RXD
UART_ConfigStructInit(&UARTConfigStruct); // default: baud = 9600, 8 bit data, 1 stop bit, no parity UART_ConfigStructInit(&UARTConfigStruct); // default: baud = 9600, 8 bit data, 1 stop bit, no parity
UARTConfigStruct.Baud_rate = CFG_UART_BAUDRATE; // Re-configure baudrate UARTConfigStruct.Baud_rate = CFG_UART_BAUDRATE; // Re-configure baudrate
UART_Init((LPC_USARTn_Type*) LPC_USART0, &UARTConfigStruct); // Initialize UART port UART_Init((LPC_USARTn_Type*) LPC_USART0, &UARTConfigStruct); // Initialize UART port
UART_TxCmd((LPC_USARTn_Type*) LPC_USART0, ENABLE); // Enable UART UART_TxCmd((LPC_USARTn_Type*) LPC_USART0, ENABLE); // Enable UART
#endif #endif
} }
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// LEDS // LEDS
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
void board_leds(uint32_t on_mask, uint32_t off_mask) void board_leds(uint32_t on_mask, uint32_t off_mask)
{ {
for (uint32_t i=0; i<BOARD_MAX_LEDS; i++) for (uint32_t i=0; i<BOARD_MAX_LEDS; i++)
{ {
if ( on_mask & BIT_(i)) if ( on_mask & BIT_(i))
{ {
GPIO_SetValue(leds[i].gpio_port, BIT_(leds[i].gpio_pin)); GPIO_SetValue(leds[i].gpio_port, BIT_(leds[i].gpio_pin));
}else if ( off_mask & BIT_(i)) // on_mask take precedence over off_mask }else if ( off_mask & BIT_(i)) // on_mask take precedence over off_mask
{ {
GPIO_ClearValue(leds[i].gpio_port, BIT_(leds[i].gpio_pin)); GPIO_ClearValue(leds[i].gpio_port, BIT_(leds[i].gpio_pin));
} }
} }
} }
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// UART // UART
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
uint32_t board_uart_send(uint8_t *p_buffer, uint32_t length) uint32_t board_uart_send(uint8_t *p_buffer, uint32_t length)
{ {
return UART_Send(BOARD_UART_PORT, p_buffer, length, BLOCKING); return UART_Send(BOARD_UART_PORT, p_buffer, length, BLOCKING);
} }
uint32_t board_uart_recv(uint8_t *p_buffer, uint32_t length) uint32_t board_uart_recv(uint8_t *p_buffer, uint32_t length)
{ {
return UART_Receive(BOARD_UART_PORT, p_buffer, length, BLOCKING); return UART_Receive(BOARD_UART_PORT, p_buffer, length, BLOCKING);
} }
uint8_t board_uart_getchar(void) uint8_t board_uart_getchar(void)
{ {
return UART_ReceiveByte(BOARD_UART_PORT); return UART_ReceiveByte(BOARD_UART_PORT);
} }
//void board_uart_putchar(uint8_t c) void board_uart_putchar(uint8_t c)
//{ {
// UART_Send(BOARD_UART_PORT, &c, 1, BLOCKING);
//} }
#endif #endif

View File

@@ -1,190 +1,187 @@
/**************************************************************************/ /**************************************************************************/
/*! /*!
@file printf_retarget.c @file printf_retarget.c
@author hathach (tinyusb.org) @author hathach (tinyusb.org)
@section LICENSE @section LICENSE
Software License Agreement (BSD License) Software License Agreement (BSD License)
Copyright (c) 2013, hathach (tinyusb.org) Copyright (c) 2013, hathach (tinyusb.org)
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright 1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer. notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright 2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution. documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holders nor the 3. Neither the name of the copyright holders nor the
names of its contributors may be used to endorse or promote products names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission. derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION HOWEVER CAUSED AND LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
This file is part of the tinyusb stack. This file is part of the tinyusb stack.
*/ */
/**************************************************************************/ /**************************************************************************/
#include "board.h" #include "board.h"
#if CFG_PRINTF_TARGET != PRINTF_TARGET_SEMIHOST #if CFG_PRINTF_TARGET != PRINTF_TARGET_SEMIHOST
#if CFG_PRINTF_TARGET == PRINTF_TARGET_UART #if CFG_PRINTF_TARGET == PRINTF_TARGET_UART
#define retarget_getchar() board_uart_getchar() #define retarget_getchar() board_uart_getchar()
#elif CFG_PRINTF_TARGET == PRINTF_TARGET_SWO #elif CFG_PRINTF_TARGET == PRINTF_TARGET_SWO
#define retarget_getchar() ITM_ReceiveChar() #define retarget_getchar() ITM_ReceiveChar()
#else #else
#error Target is not implemented yet #error Target is not implemented yet
#endif #endif
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// LPCXPRESSO / RED SUITE // LPCXPRESSO / RED SUITE
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
#if defined __CODE_RED #if defined __CODE_RED
// Called by bottom level of printf routine within RedLib C library to write // Called by bottom level of printf routine within RedLib C library to write
// a character. With the default semihosting stub, this would write the character // a character. With the default semihosting stub, this would write the character
// to the debugger console window . But this version writes // to the debugger console window . But this version writes
// the character to the UART. // the character to the UART.
int __sys_write (int iFileHandle, char *pcBuffer, int iLength) int __sys_write (int iFileHandle, char *buf, int length)
{ {
(void) iFileHandle; (void) iFileHandle;
#if CFG_PRINTF_TARGET == PRINTF_TARGET_UART #if CFG_PRINTF_TARGET == PRINTF_TARGET_UART
// following code to make \n --> \r\n int ret = length;
int length = iLength; for (int i=0; i<length; i++)
char* p_newline_pos = memchr(pcBuffer, '\n', length); {
if (buf[i] == '\n')
while(p_newline_pos != NULL) {
{ board_uart_putchar('\r');
uint32_t chunk_len = p_newline_pos - pcBuffer; ret++;
}
board_uart_send((uint8_t*)pcBuffer, chunk_len); board_uart_putchar( buf[i] );
board_uart_send(&"\r\n", 2); }
return ret;
pcBuffer += (chunk_len + 1); #elif CFG_PRINTF_TARGET == PRINTF_TARGET_SWO
length -= (chunk_len + 1); #error author does not know how to retarget SWO with lpcxpresso/red-suite
p_newline_pos = memchr(pcBuffer, '\n', length); #endif
}
}
board_uart_send((uint8_t*)pcBuffer, length);
// Called by bottom level of scanf routine within RedLib C library to read
return iLength; // a character. With the default semihosting stub, this would read the character
// from the debugger console window (which acts as stdin). But this version reads
#elif CFG_PRINTF_TARGET == PRINTF_TARGET_SWO // the character from the UART.
#error author does not know how to retarget SWO with lpcxpresso/red-suite int __sys_readc (void)
#endif {
return (int) retarget_getchar();
} }
// Called by bottom level of scanf routine within RedLib C library to read //--------------------------------------------------------------------+
// a character. With the default semihosting stub, this would read the character // KEIL
// from the debugger console window (which acts as stdin). But this version reads //--------------------------------------------------------------------+
// the character from the UART. #elif defined __CC_ARM // keil
int __sys_readc (void)
{ #if CFG_PRINTF_TARGET == PRINTF_TARGET_UART
return (int) retarget_getchar(); #define retarget_putc(c) board_uart_send( (uint8_t*) &c, 1);
} #elif CFG_PRINTF_TARGET == PRINTF_TARGET_SWO
volatile int32_t ITM_RxBuffer;
//--------------------------------------------------------------------+ #define retarget_putc(c) ITM_SendChar(c)
// KEIL #endif
//--------------------------------------------------------------------+
#elif defined __CC_ARM // keil struct __FILE {
uint32_t handle;
#if CFG_PRINTF_TARGET == PRINTF_TARGET_UART };
#define retarget_putc(c) board_uart_send( (uint8_t*) &c, 1);
#elif CFG_PRINTF_TARGET == PRINTF_TARGET_SWO int fgetc(FILE *f)
volatile int32_t ITM_RxBuffer; {
#define retarget_putc(c) ITM_SendChar(c) return retarget_getchar();
#endif }
struct __FILE { int fputc(int ch, FILE *f)
uint32_t handle; {
}; if (ch == '\n')
{
int fgetc(FILE *f) uint8_t carry = '\r';
{ retarget_putc(carry);
return retarget_getchar(); }
}
retarget_putc(ch);
int fputc(int ch, FILE *f)
{ return ch;
if (ch == '\n') }
{
uint8_t carry = '\r'; void _ttywrch(int ch)
retarget_putc(carry); {
} if ( ch == '\n' )
{
retarget_putc(ch); uint8_t carry = '\r';
retarget_putc(carry);
return ch; }
}
retarget_putc(ch);
void _ttywrch(int ch) }
{
if ( ch == '\n' )
{ //--------------------------------------------------------------------+
uint8_t carry = '\r'; // IAR
retarget_putc(carry); //--------------------------------------------------------------------+
} #elif 0 // defined __ICCARM__ TODO could not able to retarget to UART with IAR
retarget_putc(ch); #if CFG_PRINTF_TARGET == PRINTF_TARGET_UART
} #include <stddef.h>
size_t __write(int handle, const unsigned char *buf, size_t length)
//--------------------------------------------------------------------+ {
// IAR /* Check for the command to flush all handles */
//--------------------------------------------------------------------+ if (handle == -1) return 0;
#elif defined __ICCARM__
/* Check for stdout and stderr (only necessary if FILE descriptors are enabled.) */
#if CFG_PRINTF_TARGET == PRINTF_TARGET_UART if (handle != 1 && handle != 2) return -1;
#include <stddef.h>
size_t ret = length;
size_t __write(int handle, const unsigned char *buf, size_t bufSize) for (size_t i=0; i<length; i++)
{ {
/* Check for the command to flush all handles */ if (buf[i] == '\n')
if (handle == -1) return 0; {
board_uart_putchar('\r');
/* Check for stdout and stderr (only necessary if FILE descriptors are enabled.) */ ret++;
if (handle != 1 && handle != 2) return -1; }
board_uart_putchar( buf[i] );
for (size_t i=0; i<bufSize; i++) }
{
if (buf[i] == '\n') board_uart_putchar('\r'); return ret;
board_uart_putchar( buf[i] ); }
}
size_t __read(int handle, unsigned char *buf, size_t bufSize)
return bufSize; {
} /* Check for stdin (only necessary if FILE descriptors are enabled) */
if (handle != 0) return -1;
size_t __read(int handle, unsigned char *buf, size_t bufSize)
{ /*size_t i;
/* Check for stdin (only necessary if FILE descriptors are enabled) */ for (i=0; i<bufSize; i++)
if (handle != 0) return -1; {
uint8_t ch = board_uart_getchar();
size_t i; if (ch == 0) break;
for (i=0; i<bufSize; i++) buf[i] = ch;
{ }
uint8_t ch = board_uart_getchar();
if (ch == 0) break; return i; */
buf[i] = ch; return 0;
} }
return i; #endif
}
#endif
#endif
#endif // CFG_PRINTF_TARGET != PRINTF_TARGET_SEMIHOST
#endif
#endif // CFG_PRINTF_TARGET != PRINTF_TARGET_SEMIHOST

File diff suppressed because it is too large Load Diff

View File

@@ -1848,6 +1848,929 @@
<data/> <data/>
</settings> </settings>
</configuration> </configuration>
<configuration>
<name>Board NGX4330</name>
<toolchain>
<name>ARM</name>
</toolchain>
<debug>1</debug>
<settings>
<name>General</name>
<archiveVersion>3</archiveVersion>
<data>
<version>21</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>ExePath</name>
<state>Board NGX4330\Exe</state>
</option>
<option>
<name>ObjPath</name>
<state>Board NGX4330\Obj</state>
</option>
<option>
<name>ListPath</name>
<state>Board NGX4330\List</state>
</option>
<option>
<name>Variant</name>
<version>20</version>
<state>39</state>
</option>
<option>
<name>GEndianMode</name>
<state>0</state>
</option>
<option>
<name>Input variant</name>
<version>3</version>
<state>0</state>
</option>
<option>
<name>Input description</name>
<state>Automatic choice of formatter.</state>
</option>
<option>
<name>Output variant</name>
<version>2</version>
<state>0</state>
</option>
<option>
<name>Output description</name>
<state>Automatic choice of formatter.</state>
</option>
<option>
<name>GOutputBinary</name>
<state>0</state>
</option>
<option>
<name>FPU</name>
<version>2</version>
<state>5</state>
</option>
<option>
<name>OGCoreOrChip</name>
<state>1</state>
</option>
<option>
<name>GRuntimeLibSelect</name>
<version>0</version>
<state>1</state>
</option>
<option>
<name>GRuntimeLibSelectSlave</name>
<version>0</version>
<state>1</state>
</option>
<option>
<name>RTDescription</name>
<state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
</option>
<option>
<name>OGProductVersion</name>
<state>6.50.5.4846</state>
</option>
<option>
<name>OGLastSavedByProductVersion</name>
<state>6.50.5.4846</state>
</option>
<option>
<name>GeneralEnableMisra</name>
<state>0</state>
</option>
<option>
<name>GeneralMisraVerbose</name>
<state>0</state>
</option>
<option>
<name>OGChipSelectEditMenu</name>
<state>LPC4330_M4 NXP LPC4330_M4</state>
</option>
<option>
<name>GenLowLevelInterface</name>
<state>1</state>
</option>
<option>
<name>GEndianModeBE</name>
<state>1</state>
</option>
<option>
<name>OGBufferedTerminalOutput</name>
<state>0</state>
</option>
<option>
<name>GenStdoutInterface</name>
<state>1</state>
</option>
<option>
<name>GeneralMisraRules98</name>
<version>0</version>
<state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
</option>
<option>
<name>GeneralMisraVer</name>
<state>0</state>
</option>
<option>
<name>GeneralMisraRules04</name>
<version>0</version>
<state>111101010010111111111000110011111101111111111111110110010111101111010101111111111111111111111111101111111011110001111011111011111111111111111</state>
</option>
<option>
<name>RTConfigPath2</name>
<state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
</option>
<option>
<name>GFPUCoreSlave</name>
<version>20</version>
<state>39</state>
</option>
<option>
<name>GBECoreSlave</name>
<version>20</version>
<state>39</state>
</option>
<option>
<name>OGUseCmsis</name>
<state>0</state>
</option>
<option>
<name>OGUseCmsisDspLib</name>
<state>0</state>
</option>
</data>
</settings>
<settings>
<name>ICCARM</name>
<archiveVersion>2</archiveVersion>
<data>
<version>28</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>CCDefines</name>
<state>CORE_M4</state>
<state>TUSB_CFG_MCU=MCU_LPC43XX</state>
<state>BOARD=BOARD_NGX4330</state>
<state>TUSB_CFG_OS=TUSB_OS_NONE</state>
</option>
<option>
<name>CCPreprocFile</name>
<state>0</state>
</option>
<option>
<name>CCPreprocComments</name>
<state>0</state>
</option>
<option>
<name>CCPreprocLine</name>
<state>0</state>
</option>
<option>
<name>CCListCFile</name>
<state>0</state>
</option>
<option>
<name>CCListCMnemonics</name>
<state>0</state>
</option>
<option>
<name>CCListCMessages</name>
<state>0</state>
</option>
<option>
<name>CCListAssFile</name>
<state>0</state>
</option>
<option>
<name>CCListAssSource</name>
<state>0</state>
</option>
<option>
<name>CCEnableRemarks</name>
<state>0</state>
</option>
<option>
<name>CCDiagSuppress</name>
<state></state>
</option>
<option>
<name>CCDiagRemark</name>
<state></state>
</option>
<option>
<name>CCDiagWarning</name>
<state></state>
</option>
<option>
<name>CCDiagError</name>
<state></state>
</option>
<option>
<name>CCObjPrefix</name>
<state>1</state>
</option>
<option>
<name>CCAllowList</name>
<version>1</version>
<state>0000000</state>
</option>
<option>
<name>CCDebugInfo</name>
<state>1</state>
</option>
<option>
<name>IEndianMode</name>
<state>1</state>
</option>
<option>
<name>IProcessor</name>
<state>1</state>
</option>
<option>
<name>IExtraOptionsCheck</name>
<state>0</state>
</option>
<option>
<name>IExtraOptions</name>
<state></state>
</option>
<option>
<name>CCLangConformance</name>
<state>0</state>
</option>
<option>
<name>CCSignedPlainChar</name>
<state>1</state>
</option>
<option>
<name>CCRequirePrototypes</name>
<state>0</state>
</option>
<option>
<name>CCMultibyteSupport</name>
<state>0</state>
</option>
<option>
<name>CCDiagWarnAreErr</name>
<state>0</state>
</option>
<option>
<name>CCCompilerRuntimeInfo</name>
<state>0</state>
</option>
<option>
<name>IFpuProcessor</name>
<state>1</state>
</option>
<option>
<name>OutputFile</name>
<state>$FILE_BNAME$.o</state>
</option>
<option>
<name>CCLibConfigHeader</name>
<state>1</state>
</option>
<option>
<name>PreInclude</name>
<state></state>
</option>
<option>
<name>CompilerMisraOverride</name>
<state>0</state>
</option>
<option>
<name>CCIncludePath2</name>
<state>$PROJ_DIR$\..\src</state>
<state>$PROJ_DIR$\..\..\bsp\lpc43xx\CMSIS_LPC43xx_DriverLib\inc</state>
<state>$PROJ_DIR$\..\..\bsp</state>
<state>$PROJ_DIR$\..\..\..\tinyusb</state>
<state>$PROJ_DIR$\..\..\..\vendor\fatfs</state>
</option>
<option>
<name>CCStdIncCheck</name>
<state>0</state>
</option>
<option>
<name>CCCodeSection</name>
<state>.text</state>
</option>
<option>
<name>IInterwork2</name>
<state>0</state>
</option>
<option>
<name>IProcessorMode2</name>
<state>1</state>
</option>
<option>
<name>CCOptLevel</name>
<state>0</state>
</option>
<option>
<name>CCOptStrategy</name>
<version>0</version>
<state>0</state>
</option>
<option>
<name>CCOptLevelSlave</name>
<state>0</state>
</option>
<option>
<name>CompilerMisraRules98</name>
<version>0</version>
<state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
</option>
<option>
<name>CompilerMisraRules04</name>
<version>0</version>
<state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
</option>
<option>
<name>CCPosIndRopi</name>
<state>0</state>
</option>
<option>
<name>CCPosIndRwpi</name>
<state>0</state>
</option>
<option>
<name>CCPosIndNoDynInit</name>
<state>0</state>
</option>
<option>
<name>IccLang</name>
<state>0</state>
</option>
<option>
<name>IccCDialect</name>
<state>1</state>
</option>
<option>
<name>IccAllowVLA</name>
<state>0</state>
</option>
<option>
<name>IccCppDialect</name>
<state>1</state>
</option>
<option>
<name>IccExceptions</name>
<state>1</state>
</option>
<option>
<name>IccRTTI</name>
<state>1</state>
</option>
<option>
<name>IccStaticDestr</name>
<state>1</state>
</option>
<option>
<name>IccCppInlineSemantics</name>
<state>0</state>
</option>
<option>
<name>IccCmsis</name>
<state>1</state>
</option>
<option>
<name>IccFloatSemantics</name>
<state>0</state>
</option>
<option>
<name>CCOptimizationNoSizeConstraints</name>
<state>0</state>
</option>
</data>
</settings>
<settings>
<name>AARM</name>
<archiveVersion>2</archiveVersion>
<data>
<version>8</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>AObjPrefix</name>
<state>1</state>
</option>
<option>
<name>AEndian</name>
<state>1</state>
</option>
<option>
<name>ACaseSensitivity</name>
<state>1</state>
</option>
<option>
<name>MacroChars</name>
<version>0</version>
<state>0</state>
</option>
<option>
<name>AWarnEnable</name>
<state>0</state>
</option>
<option>
<name>AWarnWhat</name>
<state>0</state>
</option>
<option>
<name>AWarnOne</name>
<state></state>
</option>
<option>
<name>AWarnRange1</name>
<state></state>
</option>
<option>
<name>AWarnRange2</name>
<state></state>
</option>
<option>
<name>ADebug</name>
<state>1</state>
</option>
<option>
<name>AltRegisterNames</name>
<state>0</state>
</option>
<option>
<name>ADefines</name>
<state></state>
</option>
<option>
<name>AList</name>
<state>0</state>
</option>
<option>
<name>AListHeader</name>
<state>1</state>
</option>
<option>
<name>AListing</name>
<state>1</state>
</option>
<option>
<name>Includes</name>
<state>0</state>
</option>
<option>
<name>MacDefs</name>
<state>0</state>
</option>
<option>
<name>MacExps</name>
<state>1</state>
</option>
<option>
<name>MacExec</name>
<state>0</state>
</option>
<option>
<name>OnlyAssed</name>
<state>0</state>
</option>
<option>
<name>MultiLine</name>
<state>0</state>
</option>
<option>
<name>PageLengthCheck</name>
<state>0</state>
</option>
<option>
<name>PageLength</name>
<state>80</state>
</option>
<option>
<name>TabSpacing</name>
<state>8</state>
</option>
<option>
<name>AXRef</name>
<state>0</state>
</option>
<option>
<name>AXRefDefines</name>
<state>0</state>
</option>
<option>
<name>AXRefInternal</name>
<state>0</state>
</option>
<option>
<name>AXRefDual</name>
<state>0</state>
</option>
<option>
<name>AProcessor</name>
<state>1</state>
</option>
<option>
<name>AFpuProcessor</name>
<state>1</state>
</option>
<option>
<name>AOutputFile</name>
<state>$FILE_BNAME$.o</state>
</option>
<option>
<name>AMultibyteSupport</name>
<state>0</state>
</option>
<option>
<name>ALimitErrorsCheck</name>
<state>0</state>
</option>
<option>
<name>ALimitErrorsEdit</name>
<state>100</state>
</option>
<option>
<name>AIgnoreStdInclude</name>
<state>0</state>
</option>
<option>
<name>AUserIncludes</name>
<state></state>
</option>
<option>
<name>AExtraOptionsCheckV2</name>
<state>0</state>
</option>
<option>
<name>AExtraOptionsV2</name>
<state></state>
</option>
</data>
</settings>
<settings>
<name>OBJCOPY</name>
<archiveVersion>0</archiveVersion>
<data>
<version>1</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>OOCOutputFormat</name>
<version>2</version>
<state>0</state>
</option>
<option>
<name>OCOutputOverride</name>
<state>0</state>
</option>
<option>
<name>OOCOutputFile</name>
<state>host_os_none.srec</state>
</option>
<option>
<name>OOCCommandLineProducer</name>
<state>1</state>
</option>
<option>
<name>OOCObjCopyEnable</name>
<state>0</state>
</option>
</data>
</settings>
<settings>
<name>CUSTOM</name>
<archiveVersion>3</archiveVersion>
<data>
<extensions></extensions>
<cmdline></cmdline>
</data>
</settings>
<settings>
<name>BICOMP</name>
<archiveVersion>0</archiveVersion>
<data/>
</settings>
<settings>
<name>BUILDACTION</name>
<archiveVersion>1</archiveVersion>
<data>
<prebuild></prebuild>
<postbuild></postbuild>
</data>
</settings>
<settings>
<name>ILINK</name>
<archiveVersion>0</archiveVersion>
<data>
<version>15</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>IlinkLibIOConfig</name>
<state>1</state>
</option>
<option>
<name>XLinkMisraHandler</name>
<state>0</state>
</option>
<option>
<name>IlinkInputFileSlave</name>
<state>0</state>
</option>
<option>
<name>IlinkOutputFile</name>
<state>host_os_none.out</state>
</option>
<option>
<name>IlinkDebugInfoEnable</name>
<state>1</state>
</option>
<option>
<name>IlinkKeepSymbols</name>
<state></state>
</option>
<option>
<name>IlinkRawBinaryFile</name>
<state></state>
</option>
<option>
<name>IlinkRawBinarySymbol</name>
<state></state>
</option>
<option>
<name>IlinkRawBinarySegment</name>
<state></state>
</option>
<option>
<name>IlinkRawBinaryAlign</name>
<state></state>
</option>
<option>
<name>IlinkDefines</name>
<state></state>
</option>
<option>
<name>IlinkConfigDefines</name>
<state></state>
</option>
<option>
<name>IlinkMapFile</name>
<state>1</state>
</option>
<option>
<name>IlinkLogFile</name>
<state>0</state>
</option>
<option>
<name>IlinkLogInitialization</name>
<state>0</state>
</option>
<option>
<name>IlinkLogModule</name>
<state>0</state>
</option>
<option>
<name>IlinkLogSection</name>
<state>0</state>
</option>
<option>
<name>IlinkLogVeneer</name>
<state>0</state>
</option>
<option>
<name>IlinkIcfOverride</name>
<state>0</state>
</option>
<option>
<name>IlinkIcfFile</name>
<state>$TOOLKIT_DIR$\config\linker\NXP\lpc4330_m4.icf</state>
</option>
<option>
<name>IlinkIcfFileSlave</name>
<state></state>
</option>
<option>
<name>IlinkEnableRemarks</name>
<state>0</state>
</option>
<option>
<name>IlinkSuppressDiags</name>
<state></state>
</option>
<option>
<name>IlinkTreatAsRem</name>
<state></state>
</option>
<option>
<name>IlinkTreatAsWarn</name>
<state></state>
</option>
<option>
<name>IlinkTreatAsErr</name>
<state></state>
</option>
<option>
<name>IlinkWarningsAreErrors</name>
<state>0</state>
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>
<state>1</state>
</option>
<option>
<name>IlinkAutoLibEnable</name>
<state>1</state>
</option>
<option>
<name>IlinkAdditionalLibs</name>
<state></state>
</option>
<option>
<name>IlinkOverrideProgramEntryLabel</name>
<state>0</state>
</option>
<option>
<name>IlinkProgramEntryLabelSelect</name>
<state>0</state>
</option>
<option>
<name>IlinkProgramEntryLabel</name>
<state>__iar_program_start</state>
</option>
<option>
<name>DoFill</name>
<state>0</state>
</option>
<option>
<name>FillerByte</name>
<state>0xFF</state>
</option>
<option>
<name>FillerStart</name>
<state>0x0</state>
</option>
<option>
<name>FillerEnd</name>
<state>0x0</state>
</option>
<option>
<name>CrcSize</name>
<version>0</version>
<state>1</state>
</option>
<option>
<name>CrcAlign</name>
<state>1</state>
</option>
<option>
<name>CrcPoly</name>
<state>0x11021</state>
</option>
<option>
<name>CrcCompl</name>
<version>0</version>
<state>0</state>
</option>
<option>
<name>CrcBitOrder</name>
<version>0</version>
<state>0</state>
</option>
<option>
<name>CrcInitialValue</name>
<state>0x0</state>
</option>
<option>
<name>DoCrc</name>
<state>0</state>
</option>
<option>
<name>IlinkBE8Slave</name>
<state>1</state>
</option>
<option>
<name>IlinkBufferedTerminalOutput</name>
<state>1</state>
</option>
<option>
<name>IlinkStdoutInterfaceSlave</name>
<state>1</state>
</option>
<option>
<name>CrcFullSize</name>
<state>0</state>
</option>
<option>
<name>IlinkIElfToolPostProcess</name>
<state>0</state>
</option>
<option>
<name>IlinkLogAutoLibSelect</name>
<state>0</state>
</option>
<option>
<name>IlinkLogRedirSymbols</name>
<state>0</state>
</option>
<option>
<name>IlinkLogUnusedFragments</name>
<state>0</state>
</option>
<option>
<name>IlinkCrcReverseByteOrder</name>
<state>0</state>
</option>
<option>
<name>IlinkCrcUseAsInput</name>
<state>1</state>
</option>
<option>
<name>IlinkOptInline</name>
<state>0</state>
</option>
<option>
<name>IlinkOptExceptionsAllow</name>
<state>1</state>
</option>
<option>
<name>IlinkOptExceptionsForce</name>
<state>0</state>
</option>
<option>
<name>IlinkCmsis</name>
<state>1</state>
</option>
<option>
<name>IlinkOptMergeDuplSections</name>
<state>0</state>
</option>
<option>
<name>IlinkOptUseVfe</name>
<state>1</state>
</option>
<option>
<name>IlinkOptForceVfe</name>
<state>0</state>
</option>
<option>
<name>IlinkStackAnalysisEnable</name>
<state>0</state>
</option>
<option>
<name>IlinkStackControlFile</name>
<state></state>
</option>
<option>
<name>IlinkStackCallGraphFile</name>
<state></state>
</option>
<option>
<name>CrcAlgorithm</name>
<version>0</version>
<state>1</state>
</option>
<option>
<name>CrcUnitSize</name>
<version>0</version>
<state>0</state>
</option>
</data>
</settings>
<settings>
<name>IARCHIVE</name>
<archiveVersion>0</archiveVersion>
<data>
<version>0</version>
<wantNonLocal>1</wantNonLocal>
<debug>1</debug>
<option>
<name>IarchiveInputs</name>
<state></state>
</option>
<option>
<name>IarchiveOverride</name>
<state>0</state>
</option>
<option>
<name>IarchiveOutput</name>
<state>###Unitialized###</state>
</option>
</data>
</settings>
<settings>
<name>BILINK</name>
<archiveVersion>0</archiveVersion>
<data/>
</settings>
</configuration>
<group> <group>
<name>app</name> <name>app</name>
<file> <file>
@@ -1899,6 +2822,7 @@
<name>lpc175x_6x</name> <name>lpc175x_6x</name>
<excluded> <excluded>
<configuration>Board EA4357</configuration> <configuration>Board EA4357</configuration>
<configuration>Board NGX4330</configuration>
</excluded> </excluded>
<file> <file>
<name>$PROJ_DIR$\..\..\bsp\lpc175x_6x\CMSISv2p00_LPC17xx\src\core_cm3.c</name> <name>$PROJ_DIR$\..\..\bsp\lpc175x_6x\CMSISv2p00_LPC17xx\src\core_cm3.c</name>

View File

@@ -158,7 +158,7 @@ int main(void)
OSAL_TASK_FUNCTION( led_blinking_task ) (void* p_task_para) OSAL_TASK_FUNCTION( led_blinking_task ) (void* p_task_para)
{ {
static uint32_t led_on_mask = 0; static uint32_t led_on_mask = 0;
OSAL_TASK_LOOP_BEGIN OSAL_TASK_LOOP_BEGIN
osal_task_delay(1000); osal_task_delay(1000);
@@ -174,7 +174,7 @@ OSAL_TASK_FUNCTION( led_blinking_task ) (void* p_task_para)
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
void print_greeting(void) void print_greeting(void)
{ {
printf("\n\ puts("\n\
--------------------------------------------------------------------\n\ --------------------------------------------------------------------\n\
- Host Demo (a tinyusb example)\n\ - Host Demo (a tinyusb example)\n\
- if you find any bugs or get any questions, feel free to file an\n\ - if you find any bugs or get any questions, feel free to file an\n\
@@ -188,5 +188,4 @@ void print_greeting(void)
if (TUSB_CFG_HOST_HID_KEYBOARD ) puts(" - HID Keyboard"); if (TUSB_CFG_HOST_HID_KEYBOARD ) puts(" - HID Keyboard");
if (TUSB_CFG_HOST_MSC ) puts(" - Mass Storage"); if (TUSB_CFG_HOST_MSC ) puts(" - Mass Storage");
if (TUSB_CFG_HOST_CDC ) puts(" - Communication Device Class"); if (TUSB_CFG_HOST_CDC ) puts(" - Communication Device Class");
} }