Skip to content

Commit cadfcd1

Browse files
authored
Merge pull request #1244 from nxf58843/feature-kuiic
Feature kuiic
2 parents dd30f2c + 14ea32a commit cadfcd1

File tree

5 files changed

+518
-0
lines changed

5 files changed

+518
-0
lines changed

docs/reference/supported.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ Kinetis
245245

246246
- `Freedom FRDM-KL25Z <https://www.nxp.com/design/development-boards/freedom-development-boards/mcu-boards/freedom-development-platform-for-kinetis-kl14-kl15-kl24-kl25-mcus:FRDM-KL25Z>`__
247247
- `Freedom FRDM-K32L2B3 <https://www.nxp.com/design/development-boards/freedom-development-boards/mcu-boards/nxp-freedom-development-platform-for-k32-l2b-mcus:FRDM-K32L2B3>`__
248+
- `KUIIC <https://github.com/nxf58843/kuiic>`__
248249

249250
LPC 11-13-15
250251
^^^^^^^^^^^^

hw/bsp/kuiic/K32L2B31xxxxA_flash.ld

Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
1+
/*
2+
** ###################################################################
3+
** Processors: K32L2B31VFM0A
4+
** K32L2B31VFT0A
5+
** K32L2B31VLH0A
6+
** K32L2B31VMP0A
7+
**
8+
** Compiler: GNU C Compiler
9+
** Reference manual: K32L2B3xRM, Rev.0, July 2019
10+
** Version: rev. 1.0, 2019-07-30
11+
** Build: b190930
12+
**
13+
** Abstract:
14+
** Linker file for the GNU C Compiler
15+
**
16+
** Copyright 2016 Freescale Semiconductor, Inc.
17+
** Copyright 2016-2019 NXP
18+
** All rights reserved.
19+
**
20+
** SPDX-License-Identifier: BSD-3-Clause
21+
**
22+
** http: www.nxp.com
23+
24+
**
25+
** ###################################################################
26+
*/
27+
28+
/* Entry Point */
29+
ENTRY(Reset_Handler)
30+
31+
HEAP_SIZE = DEFINED(__heap_size__) ? __heap_size__ : 0x0400;
32+
STACK_SIZE = DEFINED(__stack_size__) ? __stack_size__ : 0x0400;
33+
34+
/* Specify the memory areas */
35+
MEMORY
36+
{
37+
m_interrupts (RX) : ORIGIN = 0x00008000, LENGTH = 0x00000200
38+
m_flash_config (RX) : ORIGIN = 0x00008400, LENGTH = 0x00000010
39+
m_text (RX) : ORIGIN = 0x00008410, LENGTH = 0x00037BF0
40+
m_data (RW) : ORIGIN = 0x1FFFE000, LENGTH = 0x00008000
41+
}
42+
43+
/* Define output sections */
44+
SECTIONS
45+
{
46+
/* The startup code goes first into internal flash */
47+
.interrupts :
48+
{
49+
. = ALIGN(4);
50+
KEEP(*(.isr_vector)) /* Startup code */
51+
. = ALIGN(4);
52+
} > m_interrupts
53+
54+
.flash_config :
55+
{
56+
. = ALIGN(4);
57+
KEEP(*(.FlashConfig)) /* Flash Configuration Field (FCF) */
58+
. = ALIGN(4);
59+
} > m_flash_config
60+
61+
/* The program code and other data goes into internal flash */
62+
.text :
63+
{
64+
. = ALIGN(4);
65+
*(.text) /* .text sections (code) */
66+
*(.text*) /* .text* sections (code) */
67+
*(.rodata) /* .rodata sections (constants, strings, etc.) */
68+
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
69+
*(.glue_7) /* glue arm to thumb code */
70+
*(.glue_7t) /* glue thumb to arm code */
71+
*(.eh_frame)
72+
KEEP (*(.init))
73+
KEEP (*(.fini))
74+
. = ALIGN(4);
75+
} > m_text
76+
77+
.ARM.extab :
78+
{
79+
*(.ARM.extab* .gnu.linkonce.armextab.*)
80+
} > m_text
81+
82+
.ARM :
83+
{
84+
__exidx_start = .;
85+
*(.ARM.exidx*)
86+
__exidx_end = .;
87+
} > m_text
88+
89+
.ctors :
90+
{
91+
__CTOR_LIST__ = .;
92+
/* gcc uses crtbegin.o to find the start of
93+
the constructors, so we make sure it is
94+
first. Because this is a wildcard, it
95+
doesn't matter if the user does not
96+
actually link against crtbegin.o; the
97+
linker won't look for a file to match a
98+
wildcard. The wildcard also means that it
99+
doesn't matter which directory crtbegin.o
100+
is in. */
101+
KEEP (*crtbegin.o(.ctors))
102+
KEEP (*crtbegin?.o(.ctors))
103+
/* We don't want to include the .ctor section from
104+
from the crtend.o file until after the sorted ctors.
105+
The .ctor section from the crtend file contains the
106+
end of ctors marker and it must be last */
107+
KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors))
108+
KEEP (*(SORT(.ctors.*)))
109+
KEEP (*(.ctors))
110+
__CTOR_END__ = .;
111+
} > m_text
112+
113+
.dtors :
114+
{
115+
__DTOR_LIST__ = .;
116+
KEEP (*crtbegin.o(.dtors))
117+
KEEP (*crtbegin?.o(.dtors))
118+
KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors))
119+
KEEP (*(SORT(.dtors.*)))
120+
KEEP (*(.dtors))
121+
__DTOR_END__ = .;
122+
} > m_text
123+
124+
.preinit_array :
125+
{
126+
PROVIDE_HIDDEN (__preinit_array_start = .);
127+
KEEP (*(.preinit_array*))
128+
PROVIDE_HIDDEN (__preinit_array_end = .);
129+
} > m_text
130+
131+
.init_array :
132+
{
133+
PROVIDE_HIDDEN (__init_array_start = .);
134+
KEEP (*(SORT(.init_array.*)))
135+
KEEP (*(.init_array*))
136+
PROVIDE_HIDDEN (__init_array_end = .);
137+
} > m_text
138+
139+
.fini_array :
140+
{
141+
PROVIDE_HIDDEN (__fini_array_start = .);
142+
KEEP (*(SORT(.fini_array.*)))
143+
KEEP (*(.fini_array*))
144+
PROVIDE_HIDDEN (__fini_array_end = .);
145+
} > m_text
146+
147+
__etext = .; /* define a global symbol at end of code */
148+
__DATA_ROM = .; /* Symbol is used by startup for data initialization */
149+
150+
/* reserve MTB memory at the beginning of m_data */
151+
.mtb : /* MTB buffer address as defined by the hardware */
152+
{
153+
. = ALIGN(8);
154+
_mtb_start = .;
155+
KEEP(*(.mtb_buf)) /* need to KEEP Micro Trace Buffer as not referenced by application */
156+
. = ALIGN(8);
157+
_mtb_end = .;
158+
} > m_data
159+
160+
.data : AT(__DATA_ROM)
161+
{
162+
. = ALIGN(4);
163+
__DATA_RAM = .;
164+
__data_start__ = .; /* create a global symbol at data start */
165+
*(.data) /* .data sections */
166+
*(.data*) /* .data* sections */
167+
KEEP(*(.jcr*))
168+
. = ALIGN(4);
169+
__data_end__ = .; /* define a global symbol at data end */
170+
} > m_data
171+
172+
__DATA_END = __DATA_ROM + (__data_end__ - __data_start__);
173+
text_end = ORIGIN(m_text) + LENGTH(m_text);
174+
ASSERT(__DATA_END <= text_end, "region m_text overflowed with text and data")
175+
176+
/* Uninitialized data section */
177+
.bss :
178+
{
179+
/* This is used by the startup in order to initialize the .bss section */
180+
. = ALIGN(4);
181+
__START_BSS = .;
182+
__bss_start__ = .;
183+
*(.bss)
184+
*(.bss*)
185+
*(COMMON)
186+
. = ALIGN(4);
187+
__bss_end__ = .;
188+
__END_BSS = .;
189+
} > m_data
190+
191+
.heap :
192+
{
193+
. = ALIGN(8);
194+
__end__ = .;
195+
PROVIDE(end = .);
196+
__HeapBase = .;
197+
. += HEAP_SIZE;
198+
__HeapLimit = .;
199+
__heap_limit = .; /* Add for _sbrk */
200+
} > m_data
201+
202+
.stack :
203+
{
204+
. = ALIGN(8);
205+
. += STACK_SIZE;
206+
} > m_data
207+
208+
/* Initializes stack on the end of block */
209+
__StackTop = ORIGIN(m_data) + LENGTH(m_data);
210+
__StackLimit = __StackTop - STACK_SIZE;
211+
PROVIDE(__stack = __StackTop);
212+
213+
.ARM.attributes 0 : { *(.ARM.attributes) }
214+
215+
ASSERT(__StackLimit >= __HeapLimit, "region m_data overflowed with stack and heap")
216+
}
217+

hw/bsp/kuiic/board.h

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* The MIT License (MIT)
3+
*
4+
* Copyright (c) 2019, Ha Thach (tinyusb.org)
5+
*
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
*
13+
* The above copyright notice and this permission notice shall be included in
14+
* all copies or substantial portions of the Software.
15+
*
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22+
* THE SOFTWARE.
23+
*
24+
* This file is part of the TinyUSB stack.
25+
*/
26+
27+
28+
#ifndef BOARD_H_
29+
#define BOARD_H_
30+
31+
#include "fsl_device_registers.h"
32+
33+
// LED
34+
#define LED_PIN_CLOCK kCLOCK_PortA
35+
#define LED_GPIO GPIOA
36+
#define LED_PORT PORTA
37+
#define LED_PIN 2
38+
#define LED_STATE_ON 1
39+
40+
// UART
41+
#define UART_PORT LPUART1
42+
#define UART_PIN_RX 3u
43+
#define UART_PIN_TX 0u
44+
45+
#endif /* BOARD_H_ */

hw/bsp/kuiic/board.mk

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
SDK_DIR = hw/mcu/nxp/mcux-sdk
2+
DEPS_SUBMODULES += $(SDK_DIR) tools/uf2
3+
4+
# This board uses TinyUF2 for updates
5+
UF2_FAMILY_ID = 0x7f83e793
6+
7+
CFLAGS += \
8+
-mthumb \
9+
-mabi=aapcs \
10+
-mcpu=cortex-m0plus \
11+
-DCPU_K32L2B31VLH0A \
12+
-DCFG_TUSB_MCU=OPT_MCU_K32L2BXX
13+
14+
# mcu driver cause following warnings
15+
CFLAGS += -Wno-error=unused-parameter
16+
17+
MCU_DIR = $(SDK_DIR)/devices/K32L2B31A
18+
19+
# All source paths should be relative to the top level.
20+
LD_FILE = /hw/bsp/$(BOARD)/K32L2B31xxxxA_flash.ld
21+
22+
SRC_C += \
23+
src/portable/nxp/khci/dcd_khci.c \
24+
$(MCU_DIR)/system_K32L2B31A.c \
25+
$(MCU_DIR)/drivers/fsl_clock.c \
26+
$(SDK_DIR)/drivers/gpio/fsl_gpio.c \
27+
$(SDK_DIR)/drivers/lpuart/fsl_lpuart.c
28+
29+
INC += \
30+
$(TOP)/hw/bsp/$(BOARD) \
31+
$(TOP)/$(SDK_DIR)/CMSIS/Include \
32+
$(TOP)/$(SDK_DIR)/drivers/smc \
33+
$(TOP)/$(SDK_DIR)/drivers/common \
34+
$(TOP)/$(SDK_DIR)/drivers/gpio \
35+
$(TOP)/$(SDK_DIR)/drivers/port \
36+
$(TOP)/$(SDK_DIR)/drivers/lpuart \
37+
$(TOP)/$(MCU_DIR) \
38+
$(TOP)/$(MCU_DIR)/drivers
39+
40+
SRC_S += $(MCU_DIR)/gcc/startup_K32L2B31A.S
41+
42+
# For freeRTOS port source
43+
FREERTOS_PORT = ARM_CM0
44+
45+
# For flash-jlink target
46+
JLINK_DEVICE = MKL25Z128xxx4
47+
48+
# For flash-pyocd target
49+
PYOCD_TARGET = K32L2B
50+
51+
# flash using pyocd
52+
flash: flash-pyocd

0 commit comments

Comments
 (0)