forked from nxp-upstream/hal_nxp
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ext/hal/nxp/imx: Import the nxp imx7 freertos bsp
This code component is used to add Zephyr support on iMX7 processors, exclusively on Cortex M4 core, and to speed up the development process it was decided to have it based on NXP FreeRTOS BSP implementation. The source code was imported from the following folders: FreeRTOS_BSP_1.0.1_iMX7D/platform/drivers FreeRTOS_BSP_1.0.1_iMX7D/platform/devices This source code depends on headers and sources from zephyr: ext/hal/cmsis Origin: iMX7D NXP FreeRTOS BSP Peripheral Driver License: BSD 3-Clause URL: https://www.nxp.com/webapp/Download?colCode=FreeRTOS_iMX7D_1.0.1_LINUX&appType=license commit: no commit hash Purpose: The peripheral driver wraps the H/W for i.MX7 M4 core Maintained-by: External Signed-off-by: Diego Sueiro <[email protected]>
- Loading branch information
1 parent
ece38da
commit 5e87277
Showing
41 changed files
with
56,018 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,3 +2,8 @@ add_subdirectory_ifdef( | |
CONFIG_HAS_MCUX | ||
mcux | ||
) | ||
|
||
add_subdirectory_ifdef( | ||
CONFIG_HAS_IMX_HAL | ||
imx | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# Translate the SoC name and part number into the imx device and cpu | ||
# name respectively. | ||
string(TOUPPER ${CONFIG_SOC} IMX_DEVICE) | ||
|
||
zephyr_include_directories(devices/${IMX_DEVICE}) | ||
|
||
# Build imx drivers and utilities that can be used for multiple SoC's. | ||
add_subdirectory(drivers) | ||
add_subdirectory(devices/${IMX_DEVICE}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
# Kconfig - IMX M4 Core SDK | ||
# | ||
# Copyright (c) 2018, NXP | ||
# | ||
# SPDX-License-Identifier: Apache-2.0 | ||
# | ||
|
||
|
||
config HAS_IMX_HAL | ||
bool | ||
select HAS_CMSIS | ||
depends on SOC_FAMILY_IMX | ||
|
||
if HAS_IMX_HAL | ||
|
||
config HAS_IMX_RDC | ||
bool | ||
default n | ||
help | ||
Set if the RDC module is present in the SoC. | ||
|
||
config HAS_IMX_CCM | ||
bool | ||
default n | ||
help | ||
Set if the CCM module is present in the SoC. | ||
|
||
endif # HAS_IMX_HAL |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
iMX7D Port | ||
##################### | ||
|
||
Origin: | ||
iMX7D NXP FreeRTOS BSP Peripheral Driver | ||
https://www.nxp.com/webapp/Download?colCode=FreeRTOS_iMX7D_1.0.1_LINUX&appType=license | ||
|
||
|
||
Status: | ||
FreeRTOS_iMX7D_1.0.1 | ||
|
||
Purpose: | ||
The peripheral driver wrap the H/W | ||
|
||
Description: | ||
This code component is used to add Zephyr support on iMX7 processors, | ||
exclusively on Cortex M4 core, and to speed up the development process | ||
it was decided to have it based on NXP FreeRTOS BSP implementation. | ||
|
||
The source code was imported from the following folders: | ||
FreeRTOS_BSP_1.0.1_iMX7D/platform/drivers | ||
FreeRTOS_BSP_1.0.1_iMX7D/platform/devices | ||
|
||
Dependencies: | ||
This source code depends on headers and sources from zephyr: | ||
ext/hal/cmsis | ||
|
||
URL: | ||
https://www.nxp.com/products/processors-and-microcontrollers/applications-processors/i.mx-applications-processors/i.mx-7-processors/i.mx-7dual-processors-heterogeneous-processing-with-dual-arm-cortex-a7-cores-and-cortex-m4-core:i.MX7D?tab=Design_Tools_Tab | ||
|
||
commit: | ||
No commit hash | ||
|
||
Maintained-by: | ||
External | ||
|
||
License: | ||
BSD-3-Clause | ||
|
||
License Link: | ||
https://www.nxp.com/webapp/sps/download/license.jsp?colCode=FreeRTOS_iMX7D_1.0.1_LINUX&appType=file1&DOWNLOAD_ID=null |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
zephyr_include_directories(.) | ||
zephyr_sources(clock_freq.c) |
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,243 @@ | ||
/* | ||
* Copyright (c) 2015, Freescale Semiconductor, Inc. | ||
* All rights reserved. | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions are met: | ||
* | ||
* o Redistributions of source code must retain the above copyright notice, this | ||
* list of conditions and the following disclaimer. | ||
* | ||
* o Redistributions in binary form must reproduce the above copyright notice, | ||
* this list of conditions and the following disclaimer in the documentation | ||
* and/or other materials provided with the distribution. | ||
* | ||
* o Neither the name of Freescale Semiconductor, Inc. nor the names of its | ||
* contributors may be used to endorse or promote products derived from this | ||
* software without specific prior written permission. | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | ||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
* INTERRUPTION) HOWEVER CAUSED AND 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 SOFTWARE, EVEN IF ADVISED OF THE | ||
* POSSIBILITY OF SUCH DAMAGE. | ||
*/ | ||
|
||
#include "clock_freq.h" | ||
#include "ccm_imx7d.h" | ||
#include "ccm_analog_imx7d.h" | ||
|
||
/*FUNCTION********************************************************************** | ||
* | ||
* Function Name : get_gpt_clock_freq | ||
* Description : Get clock frequency applies to the GPT module | ||
* | ||
*END**************************************************************************/ | ||
uint32_t get_gpt_clock_freq(GPT_Type *base) | ||
{ | ||
uint32_t root; | ||
uint32_t hz; | ||
uint32_t pre, post; | ||
|
||
switch ((uint32_t)base) { | ||
case GPT3_BASE: | ||
root = CCM_GetRootMux(CCM, ccmRootGpt3); | ||
CCM_GetRootDivider(CCM, ccmRootGpt3, &pre, &post); | ||
break; | ||
case GPT4_BASE: | ||
root = CCM_GetRootMux(CCM, ccmRootGpt4); | ||
CCM_GetRootDivider(CCM, ccmRootGpt4, &pre, &post); | ||
break; | ||
default: | ||
return 0; | ||
} | ||
|
||
switch (root) { | ||
case ccmRootmuxGptOsc24m: | ||
hz = 24000000; | ||
break; | ||
case ccmRootmuxGptSysPllPfd0: | ||
hz = CCM_ANALOG_GetPfdFreq(CCM_ANALOG, ccmAnalogPfd0Frac); | ||
break; | ||
default: | ||
return 0; | ||
} | ||
|
||
return hz / (pre + 1) / (post + 1); | ||
} | ||
|
||
/*FUNCTION********************************************************************** | ||
* | ||
* Function Name : get_ecspi_clock_freq | ||
* Description : Get clock frequency applys to the ECSPI module | ||
* | ||
*END**************************************************************************/ | ||
uint32_t get_ecspi_clock_freq(ECSPI_Type *base) | ||
{ | ||
uint32_t root; | ||
uint32_t hz; | ||
uint32_t pre, post; | ||
|
||
switch ((uint32_t)base) { | ||
case ECSPI1_BASE: | ||
root = CCM_GetRootMux(CCM, ccmRootEcspi1); | ||
CCM_GetRootDivider(CCM, ccmRootEcspi1, &pre, &post); | ||
break; | ||
case ECSPI2_BASE: | ||
root = CCM_GetRootMux(CCM, ccmRootEcspi2); | ||
CCM_GetRootDivider(CCM, ccmRootEcspi2, &pre, &post); | ||
break; | ||
default: | ||
return 0; | ||
} | ||
|
||
switch (root) { | ||
case ccmRootmuxEcspiOsc24m: | ||
hz = 24000000; | ||
break; | ||
case ccmRootmuxEcspiSysPllPfd4: | ||
hz = CCM_ANALOG_GetPfdFreq(CCM_ANALOG, ccmAnalogPfd4Frac); | ||
break; | ||
default: | ||
return 0; | ||
} | ||
|
||
return hz / (pre + 1) / (post + 1); | ||
} | ||
|
||
/*FUNCTION********************************************************************** | ||
* | ||
* Function Name : get_flexcan_clock_freq | ||
* Description : Get clock frequency applys to the FLEXCAN module | ||
* | ||
*END**************************************************************************/ | ||
uint32_t get_flexcan_clock_freq(CAN_Type *base) | ||
{ | ||
uint32_t root; | ||
uint32_t hz; | ||
uint32_t pre, post; | ||
|
||
switch ((uint32_t)base) { | ||
case CAN1_BASE: | ||
root = CCM_GetRootMux(CCM, ccmRootCan1); | ||
CCM_GetRootDivider(CCM, ccmRootCan1, &pre, &post); | ||
break; | ||
case CAN2_BASE: | ||
root = CCM_GetRootMux(CCM, ccmRootCan2); | ||
CCM_GetRootDivider(CCM, ccmRootCan2, &pre, &post); | ||
break; | ||
default: | ||
return 0; | ||
} | ||
|
||
switch (root) { | ||
case ccmRootmuxCanOsc24m: | ||
hz = 24000000; | ||
break; | ||
case ccmRootmuxCanSysPllDiv4: | ||
hz = CCM_ANALOG_GetSysPllFreq(CCM_ANALOG) >> 2; | ||
break; | ||
case ccmRootmuxCanSysPllDiv1: | ||
hz = CCM_ANALOG_GetSysPllFreq(CCM_ANALOG); | ||
break; | ||
default: | ||
return 0; | ||
} | ||
|
||
return hz / (pre + 1) / (post + 1); | ||
} | ||
|
||
/*FUNCTION********************************************************************** | ||
* | ||
* Function Name : get_I2C_clock_freq | ||
* Description : Get clock frequency applys to the I2C module | ||
* | ||
*END**************************************************************************/ | ||
uint32_t get_i2c_clock_freq(I2C_Type *base) | ||
{ | ||
uint32_t root; | ||
uint32_t hz; | ||
uint32_t pre, post; | ||
|
||
switch ((uint32_t)base) { | ||
case I2C1_BASE: | ||
root = CCM_GetRootMux(CCM, ccmRootI2c1); | ||
CCM_GetRootDivider(CCM, ccmRootI2c1, &pre, &post); | ||
break; | ||
case I2C2_BASE: | ||
root = CCM_GetRootMux(CCM, ccmRootI2c2); | ||
CCM_GetRootDivider(CCM, ccmRootI2c2, &pre, &post); | ||
break; | ||
case I2C3_BASE: | ||
root = CCM_GetRootMux(CCM, ccmRootI2c3); | ||
CCM_GetRootDivider(CCM, ccmRootI2c3, &pre, &post); | ||
break; | ||
case I2C4_BASE: | ||
root = CCM_GetRootMux(CCM, ccmRootI2c4); | ||
CCM_GetRootDivider(CCM, ccmRootI2c4, &pre, &post); | ||
break; | ||
default: | ||
return 0; | ||
} | ||
|
||
switch (root) { | ||
case ccmRootmuxI2cOsc24m: | ||
hz = 24000000; | ||
break; | ||
case ccmRootmuxI2cSysPllDiv4: | ||
hz = CCM_ANALOG_GetSysPllFreq(CCM_ANALOG) >> 2; | ||
break; | ||
default: | ||
return 0; | ||
} | ||
|
||
return hz / (pre + 1) / (post + 1); | ||
} | ||
|
||
/*FUNCTION********************************************************************** | ||
* | ||
* Function Name : get_uart_clock_freq | ||
* Description : Get clock frequency applys to the UART module | ||
* | ||
*END**************************************************************************/ | ||
uint32_t get_uart_clock_freq(UART_Type *base) | ||
{ | ||
uint32_t root; | ||
uint32_t hz; | ||
uint32_t pre, post; | ||
|
||
switch ((uint32_t)base) { | ||
case UART2_BASE: | ||
root = CCM_GetRootMux(CCM, ccmRootUart2); | ||
CCM_GetRootDivider(CCM, ccmRootUart2, &pre, &post); | ||
break; | ||
default: | ||
return 0; | ||
} | ||
|
||
switch (root) { | ||
case ccmRootmuxUartOsc24m: | ||
hz = 24000000; | ||
break; | ||
case ccmRootmuxUartSysPllDiv2: | ||
hz = CCM_ANALOG_GetSysPllFreq(CCM_ANALOG) >> 1; | ||
break; | ||
case ccmRootmuxUartSysPllDiv1: | ||
hz = CCM_ANALOG_GetSysPllFreq(CCM_ANALOG); | ||
break; | ||
default: | ||
return 0; | ||
} | ||
|
||
return hz / (pre + 1) / (post + 1); | ||
} | ||
|
||
/******************************************************************************* | ||
* EOF | ||
******************************************************************************/ |
Oops, something went wrong.