Skip to content

Commit 354df34

Browse files
committed
Added build test. Updated mcxa + mcxw to mcux-sdk
1 parent 4d1bf5d commit 354df34

File tree

6 files changed

+95
-82
lines changed

6 files changed

+95
-82
lines changed

.github/workflows/test-configs.yml

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -159,12 +159,17 @@ jobs:
159159
arch: ppc
160160
config-file: ./config/examples/nxp-t2080.config
161161

162-
# MCXA test disabled until MCXA is available in mcux
163-
# nxp_mcxa_test:
164-
# uses: ./.github/workflows/test-build-mcux-sdk.yml
165-
# with:
166-
# arch: arm
167-
# config-file: ./config/examples/mcxa.config
162+
nxp_mcxa_test:
163+
uses: ./.github/workflows/test-build-mcux-sdk.yml
164+
with:
165+
arch: arm
166+
config-file: ./config/examples/mcxa.config
167+
168+
nxp_mcxw_test:
169+
uses: ./.github/workflows/test-build-mcux-sdk.yml
170+
with:
171+
arch: arm
172+
config-file: ./config/examples/mcxw.config
168173

169174
raspi3_test:
170175
uses: ./.github/workflows/test-build.yml

arch.mk

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -613,6 +613,7 @@ ifeq ($(TARGET),mcxa)
613613
CFLAGS+=\
614614
-I$(MCUXPRESSO_DRIVERS) \
615615
-I$(MCUXPRESSO_DRIVERS)/drivers \
616+
-I$(MCUXPRESSO_DRIVERS)/drivers/common \
616617
-I$(MCUXPRESSO)/drivers \
617618
-I$(MCUXPRESSO)/drivers/common \
618619
-I$(MCUXPRESSO_CMSIS)/Include \
@@ -624,18 +625,16 @@ ifeq ($(TARGET),mcxa)
624625
LDFLAGS+=-mcpu=cortex-m33
625626
OBJS+=\
626627
$(MCUXPRESSO_DRIVERS)/drivers/fsl_clock.o \
627-
$(MCUXPRESSO_DRIVERS)/drivers/fsl_spc.o
628+
$(MCUXPRESSO)/drivers/mcx_spc/fsl_spc.o \
629+
$(MCUXPRESSO_DRIVERS)/project_template/clock_config.o
628630

629-
ifeq ($(MCUXSDK),1)
630631
CFLAGS+=\
631632
-I$(MCUXPRESSO)/drivers/flash \
633+
-I$(MCUXPRESSO)/drivers/mcx_spc \
632634
-I$(MCUXPRESSO)/drivers/sysmpu \
633635
-I$(MCUXPRESSO)/drivers/ltc \
634636
-I$(MCUXPRESSO)/drivers/port \
635637
-I$(MCUXPRESSO)/drivers/gpio
636-
637-
else
638-
endif
639638
endif
640639

641640
ifeq ($(TARGET),mcxw)
@@ -645,6 +644,8 @@ ifeq ($(TARGET),mcxw)
645644
-I$(MCUXPRESSO_DRIVERS)/drivers \
646645
-I$(MCUXPRESSO_DRIVERS)/periph2 \
647646
-I$(MCUXPRESSO)/drivers \
647+
-I$(MCUXPRESSO)/drivers/flash_k4 \
648+
-I$(MCUXPRESSO)/drivers/ccm32k \
648649
-I$(MCUXPRESSO)/drivers/common \
649650
-I$(MCUXPRESSO_CMSIS)/Include \
650651
-I$(MCUXPRESSO_CMSIS)/Core/Include
@@ -655,21 +656,19 @@ ifeq ($(TARGET),mcxw)
655656
LDFLAGS+=-mcpu=cortex-m33
656657
OBJS+=\
657658
$(MCUXPRESSO_DRIVERS)/drivers/fsl_clock.o \
658-
$(MCUXPRESSO_DRIVERS)/drivers/fsl_spc.o \
659+
$(MCUXPRESSO)/drivers/spc/fsl_spc.o \
659660
$(MCUXPRESSO_DRIVERS)/project_template/clock_config.o \
660-
$(MCUXPRESSO_DRIVERS)/drivers/fsl_ccm32k.o \
661+
$(MCUXPRESSO)/drivers/ccm32k/fsl_ccm32k.o \
661662
$(MCUXPRESSO_DRIVERS)/drivers/fsl_romapi.o
662663

663-
ifeq ($(MCUXSDK),1)
664664
CFLAGS+=\
665665
-I$(MCUXPRESSO)/drivers/flash \
666+
-I$(MCUXPRESSO)/drivers/spc \
666667
-I$(MCUXPRESSO)/drivers/sysmpu \
667668
-I$(MCUXPRESSO)/drivers/ltc \
668669
-I$(MCUXPRESSO)/drivers/port \
669670
-I$(MCUXPRESSO)/drivers/gpio
670671

671-
else
672-
endif
673672
endif
674673

675674
ifeq ($(TARGET),imx_rt)

config/examples/mcxw.config

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
ARCH?=ARM
2+
TARGET?=mcxw
3+
SIGN?=ECC256
4+
HASH?=SHA256
5+
MCUXSDK?=0
6+
MCUXPRESSO?=$(PWD)/../NXP/MCXW71
7+
MCUXPRESSO_CMSIS?=$(MCUXPRESSO)/CMSIS
8+
MCUXPRESSO_CPU?=MCXW716CMFTA
9+
MCUXPRESSO_DRIVERS?=$(MCUXPRESSO)/devices/MCXW716C
10+
DEBUG?=0
11+
VTOR?=1
12+
CORTEX_M0?=0
13+
NO_ASM?=0
14+
NO_MPU=1
15+
EXT_FLASH?=0
16+
SPI_FLASH?=0
17+
ALLOW_DOWNGRADE?=0
18+
NVM_FLASH_WRITEONCE?=0
19+
NO_ARM_ASM=1
20+
WOLFBOOT_VERSION?=0
21+
V?=0
22+
SPMATH?=1
23+
RAM_CODE?=1
24+
DUALBANK_SWAP?=0
25+
PKA?=1
26+
27+
# 8KB sectors
28+
WOLFBOOT_SECTOR_SIZE?=0x2000
29+
30+
# Default configuration
31+
# 32KB boot, 44KB partitions, 8KB swap
32+
WOLFBOOT_PARTITION_SIZE?=0xB000
33+
WOLFBOOT_PARTITION_BOOT_ADDRESS?=0x8000
34+
WOLFBOOT_PARTITION_UPDATE_ADDRESS?=0x13000
35+
WOLFBOOT_PARTITION_SWAP_ADDRESS?=0x1E000
36+
37+
# Alternate larger configuration for debugging or ARMASM
38+
# 40KB boot, 40KB partitions, 8KB swap
39+
#WOLFBOOT_PARTITION_SIZE?=0xA000
40+
#WOLFBOOT_PARTITION_BOOT_ADDRESS?=0xA000
41+
#WOLFBOOT_PARTITION_UPDATE_ADDRESS?=0x14000
42+
#WOLFBOOT_PARTITION_SWAP_ADDRESS?=0x1E000

hal/mcxa.c

Lines changed: 4 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@
3838
static flash_config_t pflash;
3939
static int flash_init = 0;
4040

41+
uint32_t SystemCoreClock;
42+
43+
extern void BOARD_BootClockFRO96M(void);
44+
4145
#ifdef __WOLFBOOT
4246
/* Assert hook needed by Kinetis SDK */
4347
void __assert_func(const char *a, int b, const char *c, const char *d)
@@ -46,57 +50,6 @@ void __assert_func(const char *a, int b, const char *c, const char *d)
4650
;
4751
}
4852

49-
/* The following clock setting function is autogenerated by the MCUXpresso IDE */
50-
void BOARD_BootClockFRO96M(void)
51-
{
52-
uint32_t coreFreq;
53-
spc_active_mode_core_ldo_option_t ldoOption;
54-
spc_sram_voltage_config_t sramOption;
55-
56-
/* Get the CPU Core frequency */
57-
coreFreq = CLOCK_GetCoreSysClkFreq();
58-
59-
/* The flow of increasing voltage and frequency */
60-
if (coreFreq <= BOARD_BOOTCLOCKFRO96M_CORE_CLOCK) {
61-
/* Set the LDO_CORE VDD regulator level */
62-
ldoOption.CoreLDOVoltage = kSPC_CoreLDO_NormalVoltage;
63-
ldoOption.CoreLDODriveStrength = kSPC_CoreLDO_NormalDriveStrength;
64-
(void)SPC_SetActiveModeCoreLDORegulatorConfig(SPC0, &ldoOption);
65-
/* Configure Flash to support different voltage level and frequency */
66-
FMU0->FCTRL = (FMU0->FCTRL & ~((uint32_t)FMU_FCTRL_RWSC_MASK)) | (FMU_FCTRL_RWSC(0x2U));
67-
/* Specifies the operating voltage for the SRAM's read/write timing margin */
68-
sramOption.operateVoltage = kSPC_sramOperateAt1P1V;
69-
sramOption.requestVoltageUpdate = true;
70-
(void)SPC_SetSRAMOperateVoltage(SPC0, &sramOption);
71-
}
72-
73-
CLOCK_SetupFROHFClocking(96000000U); /*!< Enable FRO HF(96MHz) output */
74-
75-
CLOCK_SetupFRO12MClocking(); /*!< Setup FRO12M clock */
76-
77-
CLOCK_AttachClk(kFRO_HF_to_MAIN_CLK); /* !< Switch MAIN_CLK to FRO_HF */
78-
79-
/* The flow of decreasing voltage and frequency */
80-
if (coreFreq > BOARD_BOOTCLOCKFRO96M_CORE_CLOCK) {
81-
/* Configure Flash to support different voltage level and frequency */
82-
FMU0->FCTRL = (FMU0->FCTRL & ~((uint32_t)FMU_FCTRL_RWSC_MASK)) | (FMU_FCTRL_RWSC(0x2U));
83-
/* Specifies the operating voltage for the SRAM's read/write timing margin */
84-
sramOption.operateVoltage = kSPC_sramOperateAt1P1V;
85-
sramOption.requestVoltageUpdate = true;
86-
(void)SPC_SetSRAMOperateVoltage(SPC0, &sramOption);
87-
/* Set the LDO_CORE VDD regulator level */
88-
ldoOption.CoreLDOVoltage = kSPC_CoreLDO_NormalVoltage;
89-
ldoOption.CoreLDODriveStrength = kSPC_CoreLDO_NormalDriveStrength;
90-
(void)SPC_SetActiveModeCoreLDORegulatorConfig(SPC0, &ldoOption);
91-
}
92-
93-
/*!< Set up clock selectors - Attach clocks to the peripheries */
94-
95-
/*!< Set up dividers */
96-
CLOCK_SetClockDiv(kCLOCK_DivAHBCLK, 1U); /* !< Set AHBCLKDIV divider to value 1 */
97-
CLOCK_SetClockDiv(kCLOCK_DivFRO_HF_DIV, 1U); /* !< Set FROHFDIV divider to value 1 */
98-
}
99-
10053
void hal_init(void)
10154
{
10255
/* Clock setting */

hal/mcxw.c

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,15 @@
3030

3131
/* Clock + RAM voltage settings */
3232
#include "fsl_clock.h"
33-
#include "fsl_spc.h"
33+
//#include "fsl_spc.h"
3434

3535
/* Flash driver */
3636
#include "fsl_device_registers.h"
3737
#include "fsl_lpspi_flash.h"
38-
#include "fsl_k4_flash.h"
38+
#include "fsl_flash_api.h"
39+
#include "fsl_ccm32k.h"
40+
41+
#define FLASH FMU0
3942

4043
/*!< Core clock frequency: 48000000Hz */
4144
#define BOARD_BOOTCLOCKRUN_CORE_CLOCK 48000000U
@@ -87,24 +90,24 @@ int RAMFUNCTION hal_flash_write(uint32_t address, const uint8_t *data, int len)
8790
{
8891
int ret;
8992
int w = 0;
90-
const uint8_t empty_qword[16] = {
91-
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
92-
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
93+
const uint32_t empty_qword[4] = {
94+
0xFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF
9395
};
9496

9597
while (len > 0) {
96-
if ((len < 16) || address & 0x0F) {
97-
uint8_t aligned_qword[16];
98+
if ((len < 16) || (address & 0x0F)) {
99+
uint32_t aligned_qword[4];
98100
uint32_t address_align = address - (address & 0x0F);
99101
uint32_t start_off = address - address_align;
100102
int i;
101103

102104
memcpy(aligned_qword, (void*)address_align, 16);
103105
for (i = start_off; ((i < 16) && (i < len + (int)start_off)); i++) {
104-
aligned_qword[i] = data[w++];
106+
((uint8_t *)aligned_qword)[i] = data[w++];
105107
}
106108
if (memcmp(aligned_qword, empty_qword, 16) != 0) {
107-
ret = FLASH_Program(&pflash, FLASH, address_align, aligned_qword, 16);
109+
ret = FLASH_Program(&pflash, FLASH, address_align, aligned_qword,
110+
16);
108111
if (ret != kStatus_Success)
109112
return -1;
110113
}
@@ -113,7 +116,17 @@ int RAMFUNCTION hal_flash_write(uint32_t address, const uint8_t *data, int len)
113116
}
114117
else {
115118
uint32_t len_align = len - (len & 0x0F);
116-
ret = FLASH_Program(&pflash, FLASH, address, (uint8_t*)data + w, len_align);
119+
if (((uint32_t)data + w) & 0x0F) {
120+
uint32_t __attribute__((aligned(16))) aligned_data[4];
121+
memcpy(aligned_data, (void*)((uint32_t)data + w), len_align);
122+
ret = FLASH_Program(&pflash, FLASH, address, (uint32_t*)data + w,
123+
len_align);
124+
}
125+
else
126+
{
127+
ret = FLASH_Program(&pflash, FLASH, address, (uint32_t*)data + w,
128+
len_align);
129+
}
117130
if (ret != kStatus_Success)
118131
return -1;
119132
len -= len_align;

test-app/Makefile

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -296,19 +296,20 @@ endif
296296

297297
ifeq ($(TARGET),mcxa)
298298
LSCRIPT_TEMPLATE=ARM-mcxa.ld
299+
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/project_template/clock_config.o
299300
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/drivers/fsl_clock.o
300301
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/drivers/fsl_reset.o
301-
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/drivers/fsl_gpio.o
302-
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/drivers/fsl_spc.o
302+
APP_OBJS+=$(MCUXPRESSO)/drivers/gpio/fsl_gpio.o
303+
APP_OBJS+=$(MCUXPRESSO)/drivers/mcx_spc/fsl_spc.o
303304
endif
304305

305306
ifeq ($(TARGET),mcxw)
306307
LSCRIPT_TEMPLATE=ARM-mcxw.ld
307308
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/drivers/fsl_clock.o
308-
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/drivers/fsl_gpio.o
309-
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/drivers/fsl_spc.o
309+
APP_OBJS+=$(MCUXPRESSO)/drivers/gpio/fsl_gpio.o
310+
APP_OBJS+=$(MCUXPRESSO)/drivers/spc/fsl_spc.o
310311
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/project_template/clock_config.o
311-
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/drivers/fsl_ccm32k.o
312+
APP_OBJS+=$(MCUXPRESSO)/drivers/ccm32k/fsl_ccm32k.o
312313
APP_OBJS+=$(MCUXPRESSO_DRIVERS)/drivers/fsl_romapi.o
313314
endif
314315

0 commit comments

Comments
 (0)