From 1cc1f248a0a8e706b02adefe742d14f7aae9b6ca Mon Sep 17 00:00:00 2001 From: Emilio Benavente Date: Thu, 28 Mar 2024 05:20:54 +0000 Subject: [PATCH] boards: nxp: frdm_ke15z: Add board support for ke15z Added initial board support for the frdm_ke15z board. Signed-off-by: Emilio Benavente Signed-off-by: Pavel Krenek --- boards/nxp/frdm_ke15z/Kconfig.frdm_ke15z | 6 + boards/nxp/frdm_ke15z/board.cmake | 11 ++ boards/nxp/frdm_ke15z/board.yml | 5 + boards/nxp/frdm_ke15z/doc/frdm_ke15z.webp | Bin 0 -> 10224 bytes boards/nxp/frdm_ke15z/doc/index.rst | 187 ++++++++++++++++++ boards/nxp/frdm_ke15z/frdm_ke15z-pinctrl.dtsi | 17 ++ boards/nxp/frdm_ke15z/frdm_ke15z.dts | 76 +++++++ boards/nxp/frdm_ke15z/frdm_ke15z.yaml | 13 ++ boards/nxp/frdm_ke15z/frdm_ke15z_defconfig | 17 ++ .../clock_control/clock_control_mcux_scg.c | 25 +++ 10 files changed, 357 insertions(+) create mode 100644 boards/nxp/frdm_ke15z/Kconfig.frdm_ke15z create mode 100644 boards/nxp/frdm_ke15z/board.cmake create mode 100644 boards/nxp/frdm_ke15z/board.yml create mode 100644 boards/nxp/frdm_ke15z/doc/frdm_ke15z.webp create mode 100644 boards/nxp/frdm_ke15z/doc/index.rst create mode 100644 boards/nxp/frdm_ke15z/frdm_ke15z-pinctrl.dtsi create mode 100644 boards/nxp/frdm_ke15z/frdm_ke15z.dts create mode 100644 boards/nxp/frdm_ke15z/frdm_ke15z.yaml create mode 100644 boards/nxp/frdm_ke15z/frdm_ke15z_defconfig diff --git a/boards/nxp/frdm_ke15z/Kconfig.frdm_ke15z b/boards/nxp/frdm_ke15z/Kconfig.frdm_ke15z new file mode 100644 index 00000000000..32c3589c591 --- /dev/null +++ b/boards/nxp/frdm_ke15z/Kconfig.frdm_ke15z @@ -0,0 +1,6 @@ +# Copyright 2024 NXP +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_FRDM_KE15Z + select SOC_MKE15Z7 + select SOC_PART_NUMBER_MKE15Z256VLL7 diff --git a/boards/nxp/frdm_ke15z/board.cmake b/boards/nxp/frdm_ke15z/board.cmake new file mode 100644 index 00000000000..d14370f54fa --- /dev/null +++ b/boards/nxp/frdm_ke15z/board.cmake @@ -0,0 +1,11 @@ +# +# Copyright 2024 NXP +# +# SPDX-License-Identifier: Apache-2.0 +# + +board_runner_args(linkserver "--device=MKE15Z256xxx7:FRDM-KE15Z") +board_runner_args(jlink "--device=MKE15Z256xxx7" "--reset-after-load") + +include(${ZEPHYR_BASE}/boards/common/linkserver.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/boards/nxp/frdm_ke15z/board.yml b/boards/nxp/frdm_ke15z/board.yml new file mode 100644 index 00000000000..c637334b8b8 --- /dev/null +++ b/boards/nxp/frdm_ke15z/board.yml @@ -0,0 +1,5 @@ +board: + name: frdm_ke15z + vendor: nxp + socs: + - name: mke15z7 diff --git a/boards/nxp/frdm_ke15z/doc/frdm_ke15z.webp b/boards/nxp/frdm_ke15z/doc/frdm_ke15z.webp new file mode 100644 index 0000000000000000000000000000000000000000..f45a78b66e24ee3bff3c6e732880fa2738e25be7 GIT binary patch literal 10224 zcmVJ`%8=mFCa{zuN21e<~wl;-c_-@Ez-VSlb&MLV1HZ?%8tyVLmRs7JN@^**Pv zXK(*m=ojus;QRwMDe%9r2a@0MydggU{~y>3`j`4|S0D5|iGIib6WA~NC!a^NFW$dr z<)4 zjv1h)6|xN(y$lO&+~4~ZhWC7_25C_?UYNyw7C?1b`prLZ`IFk8ivHbIw8#=x5C~kw zt6YP&>M^cGuQ*csd=LCXzJp!o7ATD$^&h$Taihb^W4AZIPZH{3HQsX7x$OyjjGT2d zfJ#4Cd+3aB-~qR-nI&y`j~2S|krdSc?Vlry!e{g>?Zh`H^6Lrq0I4z>Py1YQ*x&6>#;uD8XT zJFUGr4jO6{K2?c}V4XtRU3+1kh9?2$u~RGALfH&>l;@67qeFGWJL?M}rQT;S>G zz)`(V!!n^itbxFN?}&v1J)a2YS`DMe^YD>_m;ed2yfy2;s1GR(<9C)GCnfbv$Mk48 z9iP%PPFXazo|mK8C^uWt_QtABy3thJ2{(7ks9krOv7b{^9AnJc*pRuFpo@fQedY95 zcG|~89~ECYha4mkuYHzoq~8{R_*p?o<<8{@$gUYGKlB$fE&Y_*=+V|Ifm;75!TheTo`k^{SU(qncwdfd;4r!a3Z!48ej0)52L-%UPwor`GDwVsf3Eft zu79SgNh{Pql=O(OcR(j1AJ-!`fx2}tPDUoDZD@4y1=4VaGJiu^Ox!Gqfwp6VO!1>p z70!dVQjsu8*6skD3j0@%gOh2(*3D<6Fu^dN761VL{=xwKHQ>0T{!3MfmGsnZq-2AXk$B?lNM9)QcrpCpIWF&(D)O`baWvV?I50_})ON2oImKZk37}RND)&LJpfPL8t_HS?45~n!2kH)1_`|3vJ{r#gs zCU7e48SEmH;DR>z@OR7G0a@Q}HSq9>5n7ktcNkIf3IsD@OXUNFiWwjWC6}|~Fc=A7 zfhwWrEH0XLBTEP`8L%+erYxXj&*$K;)p+Ev5F|6Gat=3`fPtqlQtq$lf#1q$3Q&*a zET?-|W3{N|+>WKEX;0PbJ|bK?2mcVSF^8MoYVy$ciqGJ(Vcgrko*e&B+zWt^0GxW@ zFDOyUrO6fm!vVC`M1H6WH(nxZyW=(h1J$H8)1OE-1=u>P;P_Pq&NHHSva)trN-@1j$u!kvhz%d2Fdt1YDV0UwFUj$X0+k%Y& z=JL(AW?rhG3&>wA*|+fICcO2)b0#7{pZD-=xTI)}9}e=CJ`9;$wp9`i5jyja`|HMD^PHQBZ;(7+D5w0&XN!BidtiC_8cPM~Z z99|%xGih{J$JNVu)BURc|2>T^73Kv8Rl3>K3gJRrT7?O8Z=VO0wEDTlLyM_k#71f% z*b;hWt86kVxTx~m9jREI^8g06+-?0YKR=a5{%BmKP)MSSZbz7nt|uq#@GZNs%@U?M z{E5w!^mbDrMt`X?>LDMr%AwEub`z@}wSh_aO_Z#a9FfkTKq1x*ik9=as0uWR;{w@> zFcbLfZcRVYw}`))p{KviO*-WQtS0^)6eWJ4D6JLkU^`Kd(o3jiToC&B-%zCPkpIs1 zLYYL9Gw}SH+2~{-HvFu=gfMH9dzewZfMlP2Y%m%yyH(gDCf^YVuRwgkB2|*%gp2zD zVQ`Wd&3zQY4U(Rag1sq?WeHndxyU(Pm?#}ga$W#THHaX@OFiXnG6oNz(+ zpc1tXqHD^GCyHa-tS5`6yYXB@7{5|TnDO21;ua{r@2K+OmI!Y%b+R%&bhV~px#o8n zBqrbU->~@`#Sr|FIR4ZcK>?F!Va6KbA^i%$-C*8=j2#=;b@#`;=~#Msplel-swq~Z zSFJ;XD~M^3*nG?0jlZsG&!Uz!G<52&1s1}xs13h5xN#6`dMrZ)!5IDECQbLAz8x&6 z=N+*ld^o_cPu`~hkR++g76u;Ma{K+4$SZ@3dk$8I&px(hWDa|@l#t6K44Wgd6mu## zi;nkgojKoK=D{_js;;QKXyTyodaq*kuAzb6s1ZLHd)I0_+mU#n5a}0PhlXdx-4@%m zYxaDVCGPCv9<-vACt+GZE-tsF>>p8zfs}|Lg70J#(QqZ}6-?;c=AzA2NNf=zFr$aDg9m0m*a?-3Axhz& z+YyQygQ6q`;5j*!dLNmg=sEd9tQid{RWsg|rC%H}D8_hF5q-ricK82IAA`BOPfNS& z9|bV{FmbGw9;>g33R@ic>2Tt`tB%jA<$`CTnhXAH%vmuP!6d#8C>xsx8X`^BOX7wKdG;o|6K=C`15|~({2yXAIB<1 z{axH(e}U^(Ai7qD>lulZ1;NePfupj@o}TTo_{=akjmano82xR43O=?~McZnHrfT?k z(id(MlgjrHxHmHSjg0pipsZ1i>K3X{}}po@_S2@(IDh7-LL z9VS@pe4sN;CeQ_pk@4{Yy?S0LJ}J;W&Nf5B79c-!Cu84sV~odgSOlQlINZFa{DlWQ zo(1(rvJ$;<1?y6yxML8_@&uw4@WOWW5Q-L30MT-QZwFRCmqgnZI1fW%m4sK#>U(l0 zQbZpW*^|c|Dh%Q%CGmLWfK1r-8J`&v*YX1{@nHBrAebaR6#1WzqP%$pCfc6Fg`uRn zY^~l=K@95oQ@ALq`A7f$PGG(vH}>-q>}BC^e6H80$+_QSVQOKEeD!w=B+~?L`9?h} z3o^I9X&xDI0{qJE)yoC?@JEbM)yL-wB@m+ zhENQN{zi6d(o`H(9NcJ4s8SSs#K;}p!9N>^tgKAXT+=9WgC@|7M;LeNn2@OF$xbn@ z4C-rAh#n7Ezb66f>etKdm5;7*V=VX1H3E;|xJ(CgS;a=~p^YZ`OBW44Mxm@;w-(Cnd8t=F~|hv2IiY8kZ24v-mb zoU#qs>0yjB4WUQWafb}?uE8w3?VuC##Xi&+?Ih>2BrPgwESmz4U8ylZc2BDXjAp zPP$N27#Z*1brJ$`@uIycLJK(w&+=PZYSU6y0uh~3X^H2D*fY;JZ`|e%m75_i-N<*00bfDo8_V+t^G2g-ZaZT(Isz{`S^re9JrZque&ANZ z3p;=6)G}r?j)ewfjiz8HyrDpOi{PH&TeIP}-yw8hTJv@ECl*KD-(*gYNa#dZikQ{A~rOpbxbns~FI$)+Pj>Uc}tEmY%vaM2ihn z?m}lmGuD^BWFnyUfD<%}c5%Z46(;r${HKoYJq`(&2UN5OL14f?ivhkh?<>PsHFk_4 z)#q0$_w^JGuAlR#j%Y>9HF`0>4ew4e6IQA1>B>mk&dE;@3lZ#KTp)F=cen)Z-Vp46 zi?&yIAFE&kWmFl{>9V-9(l_l*$^N7%>zx17Z?A?lF`Q@8f$} z{n0u&ukv5wd*`i>sTz0+YR3spF)<5N;oHYwoL$}(3g6H6G$|8DyUX*83soh^a8qI8 z5rwq0PC%^?#KZoFhFa8g^E$rKD>DZH$>Y~IcR6wlV?yUWQ_g7uuy!8 zus}kXvrI@7L2AmBuE$A+;=P+Edu*NjTy%zZ_K^c^7cA@iTJ0QO@t)fLtQ0x+zt$F=?=mobWXCt*E)UHqWD{Z?~Ce6WJ@CfO7qca>3ePY zG7MJDVqUj9XPVO(02nA&Ce?h>sTjuACK6668Oo>6Yss*EI5pJ|73UHJlf?%DIAqO$ zY!sZw_HW0FO=v8#d4acQF>6`?I-@G~0P#PWr$Xwc`V#j5)u?hIq%A^)ScZOp{Q=q8 z-Ahrh0E@8TcOse`lahMf2T;gaOmAy9DV(aNd2RBzwbG2sIHe1viv&}3XaS&&a7IN1 zjEzaH-hFu8b9n~S4S}!W!S;%gs$zNA@R^Z{pzFyV#o^iF-mezk<`tCI`f8K?h?lUS zca)_F!^*f?>~==c<`@Wuaduqm;QdESsnUEfVhFdRuTO~5CISwlV<{ELs!Dm4YU%`Lp*Binuzd4*V;L{1w~UHaGkj9jU}$w*H_{V4rJ4csdhU-z z=UM_9R?94w4qd~755TDqo}KPM+gtG>BS}-p2GE}R)#dBGWl6DtdTCK@!`K4Jv`Pc- zxTCB?9uvBInYMs?yPw)Z`_4UmB691Q^~?aHVe5MU9&5-2rlfh zx!rI+@R@UBx|;QoidkdmM}!X1naFefG&`6=&E4}lFI3UkRM6}6`DF23Db#I@QpXmK zr(k#ozl@)LFJ=JZ98?ZIZpACXM3S#F_chEe;H43xb(OT>!>`4>hpPrz%}nI`MGsf> zL&qXyMHYgyf`a{r%fR;Q-A=?S-jn*_N}zt{faD67m#)qGqZfd)7%MDv?gLf`ul*R2 z@AxZh6SBZO>@rj!?J%||LFj;au4yZG)QLhf)v{3GmJ9g!oSbU9nU6AK1w^K|%{O)8 z5GxOs(^5fBtb|bAakPk35YKq6{ol5#H1C|gawGfcV*&2tY-;%;vGGZAQZk zbWYnj&U*sGW*5;Q-D=PT0_NFd``l3_vcF&@OWMxut9qzA3@j=d=bV+`#{A7>mt~xm zE$LAJF)VF#ME6`JY-0>=p;uOJEz~*N9MURQiM|=w4t8$qJeD@KMr)#!HRlbq+#-gt zB5a+}HT$xl><*I5Dj>?LsyzH$_`z*8az&vG&}J)YCQMfGP&?$+oB>}(KX%*VdV(QA znL^dG=%zEMgBdv&r+_eMgff}hy&|ByYu}_E@JITb0A@Yf-fL1Vj%T+m;Mjg{jmnC= zbc@VJAqO80IGzW2N~C=vy+4_+UGn|savSqf@=35?eULw5-)*~ooPQ4lI(*g6libc@3zsn)c}RS8k+ zH(w6VNXS$$?=WLNFI^hqYI@M znz5zwCgLMTNzMt%Yy?|cy{GL&XUXx;l-V*9Gz7M*#qML5;#XI{wOKBliX9g!d z8C~bFROE^GbfP#kvSt(AVk&^35%8!6U=bkNyn1rp?+)<0IFP--D=}<|yJE73JcFcB z$D2hOnYoC}&7869%Bsqrju6Kt4Q4=}4sr`ez^ZR%Db*_NmRhxK_*`7p z?~j5#vcA#!-aJ&K@LcJa2TxHXe$%YR zbT!od_MJSoN;))bz;?n?vzz8Zmv!%qH>uqPkFp@iu77#4N^R60HXGdr5;7qU3kLTG zyI`FaVC!1k zzPge;ge7br_B52rJBq;EJfeWd-Ru`b!N*k)R!5T)>$yVnJKW}1aLalDyDIMUZ3QSQ z02d$wDoSZG@ApWRvlee`uyTBWYR8*gq(?hNJS;e;!X#z_3U4_Kmmm0?njD$M`ij@I z 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 literal 0 HcmV?d00001 diff --git a/boards/nxp/frdm_ke15z/doc/index.rst b/boards/nxp/frdm_ke15z/doc/index.rst new file mode 100644 index 00000000000..fd1dec9bc67 --- /dev/null +++ b/boards/nxp/frdm_ke15z/doc/index.rst @@ -0,0 +1,187 @@ +.. _frdm_ke15z: + +NXP FRDM-KE15Z +############## + +Overview +******** + +The FRDM-KE15Z is a development board for NXP Kinetis KE1xZ 32-bit +MCU-based platforms. The FRDM-KE15Z contains a robust TSI module +with up to 50 channels which makes this board highly flexible +for touch keys. Offers options for serial +communication, flash programming, and run-control debugging. + +.. figure:: frdm_ke15z.webp + :align: center + :alt: FRDM-KE15Z + +Hardware +******** + +- MKE15Z256VLL7 MCU (up to 72 MHz, 256 KB flash memory, 32 KB RAM) +- OpenSDA Debug Circuit with a virtual serial port +- Touch electrodes in the self-capacitive mode +- Compatible with FRDM-TOUCH, FRDM-MC-LVBLDC, and Arduino® boards +- User Components such as Reset; RGB LED and two user buttons +- 6-axis FXOS8700CQ digital accelerometer and magnetometer + +For more information about the KE1xZ SoC and the FRDM-KE15Z board, see +these NXP reference documents: + +- `KE1XZ SOC Website`_ +- `FRDM-KE15Z Datasheet`_ +- `FRDM-KE15Z Reference Manual`_ +- `FRDM-KE15Z Website`_ +- `FRDM-KE15Z User Guide`_ +- `FRDM-KE15Z Schematics`_ + +Supported Features +================== + +The frdm_ke15z board configuration supports the following hardware +features: + ++-----------+------------+-------------------------------------+ +| Interface | Controller | Driver/Component | ++===========+============+=====================================+ +| NVIC | on-chip | nested vector interrupt controller | ++-----------+------------+-------------------------------------+ +| SYSTICK | on-chip | systick | ++-----------+------------+-------------------------------------+ +| GPIO | on-chip | gpio | ++-----------+------------+-------------------------------------+ +| UART | on-chip | uart polling; | +| | | uart interrupt | ++-----------+------------+-------------------------------------+ + +The default configuration can be found in the defconfig file: +:zephyr_file:`boards/nxp/frdm_ke15z/frdm_ke15z_defconfig`. + +Other hardware features are not currently supported by the port. + +System Clock +============ + +The KE15 SoC is configured to run at 48 MHz using the FIRC. + +Serial Port +=========== + +The KE15 SoC has three UARTs. UART1 is configured for the console. + +Programming and Debugging +************************* + +Build and flash applications as usual (see :ref:`build_an_application` and +:ref:`application_run` for more details). + +Configuring a Debug Probe +========================= + +A debug probe is used for both flashing and debugging the board. This board is +configured by default to use Linkserver. + +Early versions of this board have an outdated version of the OpenSDA bootloader +and require an update. Please see the `DAPLink Bootloader Update`_ page for +instructions to update from the CMSIS-DAP bootloader to the DAPLink bootloader. + +Option 1: Linkserver +------------------------------------------------------- + +Install the :ref:`linkserver-debug-host-tools` and make sure they are in your +search path. LinkServer works with the default CMSIS-DAP firmware included in +the on-board debugger. + +Linkserver is the default for this board, ``west flash`` and ``west debug`` will +call the linkserver runner. + +Option 2: :ref:`opensda-jlink-onboard-debug-probe` +-------------------------------------------------- + +Install the :ref:`jlink-debug-host-tools` and make sure they are in your search +path. + +Follow the instructions in :ref:`opensda-jlink-onboard-debug-probe` to program +the `OpenSDA J-Link Firmware for FRDM-KE15Z`_. +Use the ``-r jlink`` option with west to use the jlink runner. + +.. code-block:: console + + west flash -r jlink + +Configuring a Console +===================== + +Regardless of your choice in debug probe, we will use the OpenSDA +microcontroller as a usb-to-serial adapter for the serial console. + +Connect a USB cable from your PC to J5. + +Use the following settings with your serial terminal of choice (minicom, putty, +etc.): + +- Speed: 115200 +- Data: 8 bits +- Parity: None +- Stop bits: 1 + +Flashing +======== + +Here is an example for the :ref:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: frdm_ke15z + :goals: flash + +Open a serial terminal, reset the board (press the SW1 button), and you should +see the following message in the terminal: + +.. code-block:: console + + *** Booting Zephyr OS build v3.6.0-3478-gb923667860b1 *** + Hello World! frdm_ke15z/mke15z7 + +Debugging +========= + +Here is an example for the :ref:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: frdm_ke15z + :goals: debug + +Open a serial terminal, step through the application in your debugger, and you +should see the following message in the terminal: + +.. code-block:: console + + ***** Booting Zephyr OS v3.6.0-xxx-gxxxxxxxxxxxx ***** + Hello World! frdm_ke15z + +.. _KE1XZ SoC Website: + https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/ke-series-arm-cortex-m4-m0-plus/ke1xz-arm-cortex-m0-plus-5v-main-stream-mcu-with-nxp-touch-and-can-control:KE1xZ + +.. _FRDM-KE15Z Datasheet: + https://www.nxp.com/docs/en/data-sheet/KE1xZP100M72SF0.pdf + +.. _FRDM-KE15Z Reference Manual: + https://www.nxp.com/webapp/Download?colCode=KE1XZP100M72SF0RM + +.. _FRDM-KE15Z Website: + https://www.nxp.com/design/design-center/development-boards-and-designs/general-purpose-mcus/freedom-development-platform-for-kinetis-ke1xmcus:FRDM-KE15Z + +.. _FRDM-KE15Z User Guide: + https://www.nxp.com/document/guide/get-started-with-the-frdm-ke15z:NGS-FRDM-KE15Z + +.. _FRDM-KE15Z Schematics: + https://www.nxp.com/webapp/Download?colCode=FRDM-KE15Z-SCH-DESIGNFILES + +.. _DAPLink Bootloader Update: + https://os.mbed.com/blog/entry/DAPLink-bootloader-update/ + +.. _OpenSDA J-Link Firmware for FRDM-KE15Z: + https://www.segger.com/downloads/jlink/OpenSDA_FRDM-KE15Z diff --git a/boards/nxp/frdm_ke15z/frdm_ke15z-pinctrl.dtsi b/boards/nxp/frdm_ke15z/frdm_ke15z-pinctrl.dtsi new file mode 100644 index 00000000000..b004d91e60c --- /dev/null +++ b/boards/nxp/frdm_ke15z/frdm_ke15z-pinctrl.dtsi @@ -0,0 +1,17 @@ +/* + * Copyright 2024 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +&pinctrl { + lpuart1_default: lpuart1_default { + group0 { + pinmux = , + ; + drive-strength = "low"; + slew-rate = "slow"; + }; + }; +}; diff --git a/boards/nxp/frdm_ke15z/frdm_ke15z.dts b/boards/nxp/frdm_ke15z/frdm_ke15z.dts new file mode 100644 index 00000000000..0a1c341b000 --- /dev/null +++ b/boards/nxp/frdm_ke15z/frdm_ke15z.dts @@ -0,0 +1,76 @@ +/* + * Copyright 2024 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include "frdm_ke15z-pinctrl.dtsi" +#include + +/ { + model = "NXP Freedom KE15Z board"; + compatible = "nxp,ke15z", "nxp,mke15z7"; + + aliases { + led0 = &green_led; + led1 = &blue_led; + led2 = &red_led; + sw0 = &user_button_0; + sw1 = &user_button_1; + }; + + chosen { + zephyr,sram = &sram_u; + zephyr,flash = &flash0; + zephyr,console = &lpuart1; + zephyr,shell-uart = &lpuart1; + }; + + leds { + compatible = "gpio-leds"; + red_led: led_0 { + gpios = <&gpiod 0 GPIO_ACTIVE_LOW>; + label = "RED LED"; + }; + green_led: led_1 { + gpios = <&gpiod 16 GPIO_ACTIVE_LOW>; + label = "GREEN LED"; + }; + blue_led: led_2 { + gpios = <&gpiod 15 GPIO_ACTIVE_LOW>; + label = "BLUE LED"; + }; + }; + + gpio_keys { + compatible = "gpio-keys"; + user_button_0: button_0 { + label = "User SW3"; + gpios = <&gpiod 3 GPIO_ACTIVE_LOW>; + zephyr,code = ; + }; + user_button_1: button_1 { + label = "User SW2"; + gpios = <&gpiob 11 GPIO_ACTIVE_LOW>; + zephyr,code = ; + }; + }; +}; + +&lpuart1 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&lpuart1_default>; + pinctrl-names = "default"; +}; + +&gpiob { + status = "okay"; +}; + +&gpiod { + status = "okay"; +}; diff --git a/boards/nxp/frdm_ke15z/frdm_ke15z.yaml b/boards/nxp/frdm_ke15z/frdm_ke15z.yaml new file mode 100644 index 00000000000..9a2a7ac4b27 --- /dev/null +++ b/boards/nxp/frdm_ke15z/frdm_ke15z.yaml @@ -0,0 +1,13 @@ +identifier: frdm_ke15z +name: NXP FRDM-KE15Z +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +flash: 256 +ram: 24 +supported: + - gpio + - uart diff --git a/boards/nxp/frdm_ke15z/frdm_ke15z_defconfig b/boards/nxp/frdm_ke15z/frdm_ke15z_defconfig new file mode 100644 index 00000000000..69a85bdc43d --- /dev/null +++ b/boards/nxp/frdm_ke15z/frdm_ke15z_defconfig @@ -0,0 +1,17 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_SERIAL=y +CONFIG_UART_INTERRUPT_DRIVEN=y + +# Enable console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +# GPIO Controller +CONFIG_GPIO=y + +# Clock Control +CONFIG_CLOCK_CONTROL=y + +# Enable pin controller +CONFIG_PINCTRL=y diff --git a/drivers/clock_control/clock_control_mcux_scg.c b/drivers/clock_control/clock_control_mcux_scg.c index 690c133dd16..526bb06bc7d 100644 --- a/drivers/clock_control/clock_control_mcux_scg.c +++ b/drivers/clock_control/clock_control_mcux_scg.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2019-2021 Vestas Wind Systems A/S + * Copyright 2024 NXP * * Based on clock_control_mcux_sim.c, which is: * Copyright (c) 2017, NXP @@ -60,33 +61,57 @@ static int mcux_scg_get_rate(const struct device *dev, case KINETIS_SCG_FIRC_CLK: clock_name = kCLOCK_ScgFircClk; break; +#if (defined(FSL_FEATURE_SCG_HAS_SPLL) && FSL_FEATURE_SCG_HAS_SPLL) case KINETIS_SCG_SPLL_CLK: clock_name = kCLOCK_ScgSysPllClk; break; +#endif /* (defined(FSL_FEATURE_SCG_HAS_SPLL) && FSL_FEATURE_SCG_HAS_SPLL) */ +#if (defined(FSL_FEATURE_SCG_HAS_LPFLL) && FSL_FEATURE_SCG_HAS_LPFLL) + case KINETIS_SCG_SPLL_CLK: + clock_name = kCLOCK_ScgLpFllClk; + break; +#endif /* (defined(FSL_FEATURE_SCG_HAS_LPFLL) && FSL_FEATURE_SCG_HAS_LPFLL) */ +#if (defined(FSL_FEATURE_SCG_HAS_SOSCDIV1) && FSL_FEATURE_SCG_HAS_SOSCDIV1) case KINETIS_SCG_SOSC_ASYNC_DIV1_CLK: clock_name = kCLOCK_ScgSysOscAsyncDiv1Clk; break; +#endif /* (defined(FSL_FEATURE_SCG_HAS_SOSCDIV1) && FSL_FEATURE_SCG_HAS_SOSCDIV1) */ case KINETIS_SCG_SOSC_ASYNC_DIV2_CLK: clock_name = kCLOCK_ScgSysOscAsyncDiv2Clk; break; +#if (defined(FSL_FEATURE_SCG_HAS_SIRCDIV1) && FSL_FEATURE_SCG_HAS_SIRCDIV1) case KINETIS_SCG_SIRC_ASYNC_DIV1_CLK: clock_name = kCLOCK_ScgSircAsyncDiv1Clk; break; +#endif /* (defined(FSL_FEATURE_SCG_HAS_SIRCDIV1) && FSL_FEATURE_SCG_HAS_SIRCDIV1) */ case KINETIS_SCG_SIRC_ASYNC_DIV2_CLK: clock_name = kCLOCK_ScgSircAsyncDiv2Clk; break; +#if (defined(FSL_FEATURE_FSL_FEATURE_SCG_HAS_FIRCDIV1) && FSL_FEATURE_SCG_HAS_FIRCDIV1) case KINETIS_SCG_FIRC_ASYNC_DIV1_CLK: clock_name = kCLOCK_ScgFircAsyncDiv1Clk; break; +#endif /* (defined(FSL_FEATURE_FSL_FEATURE_SCG_HAS_FIRCDIV1) && FSL_FEATURE_SCG_HAS_FIRCDIV1) */ case KINETIS_SCG_FIRC_ASYNC_DIV2_CLK: clock_name = kCLOCK_ScgFircAsyncDiv2Clk; break; +#if (defined(FSL_FEATURE_SCG_HAS_SPLLDIV1) && FSL_FEATURE_SCG_HAS_SPLLDIV1) case KINETIS_SCG_SPLL_ASYNC_DIV1_CLK: clock_name = kCLOCK_ScgSysPllAsyncDiv1Clk; break; +#endif /* (defined(FSL_FEATURE_SCG_HAS_SPLLDIV1) && FSL_FEATURE_SCG_HAS_SPLLDIV1) */ +#if (defined(FSL_FEATURE_SCG_HAS_SPLL) && FSL_FEATURE_SCG_HAS_SPLL) case KINETIS_SCG_SPLL_ASYNC_DIV2_CLK: clock_name = kCLOCK_ScgSysPllAsyncDiv2Clk; break; +#endif /* (defined(FSL_FEATURE_SCG_HAS_SPLL) && FSL_FEATURE_SCG_HAS_SPLL) */ +#if (defined(FSL_FEATURE_SCG_HAS_FLLDIV1) && FSL_FEATURE_SCG_HAS_FLLDIV1) + case KINETIS_SCG_LPFLL_ASYNC_DIV2_CLK: + clock_name = kCLOCK_ScgSysLPFllAsyncDiv2Clk; + break; +#endif /* (defined(FSL_FEATURE_SCG_HAS_FLLDIV1) && FSL_FEATURE_SCG_HAS_FLLDIV1) */ + + default: LOG_ERR("Unsupported clock name"); return -EINVAL;