Kinetis readme files
This commit is contained in:
parent
81c32fc321
commit
5fc6043a14
|
@ -19,7 +19,7 @@
|
||||||
.global Reset_Handler
|
.global Reset_Handler
|
||||||
Reset_Handler:
|
Reset_Handler:
|
||||||
/* Errata #e10536 workaround for Kinetis MKE1XF:
|
/* Errata #e10536 workaround for Kinetis MKE1XF:
|
||||||
* "WDOG: After getting RCS assertion by polling, 4 LPO clock-time delay is the minimum requirementbefore the next block"
|
* "WDOG: After getting RCS assertion by polling, 4 LPO clock-time delay is the minimum requirement before the next block"
|
||||||
* https://www.nxp.com/docs/en/errata/Kinetis_E_0N79P.pdf
|
* https://www.nxp.com/docs/en/errata/Kinetis_E_0N79P.pdf
|
||||||
* https://community.nxp.com/thread/460264
|
* https://community.nxp.com/thread/460264
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1352,7 +1352,7 @@ void LPUART_TransferHandleIRQ(LPUART_Type *base, lpuart_handle_t *handle)
|
||||||
uint32_t enabledInterrupts = LPUART_GetEnabledInterrupts(base);
|
uint32_t enabledInterrupts = LPUART_GetEnabledInterrupts(base);
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// [andreika]: we use this 'fake' unused status to trigger the callback via IRQ in software
|
// [andreika][rusefi]: we use this 'fake' unused status to trigger the callback via IRQ in software
|
||||||
if (LPUART_STAT_RXINV_MASK & status)
|
if (LPUART_STAT_RXINV_MASK & status)
|
||||||
{
|
{
|
||||||
base->STAT &= ~LPUART_STAT_RXINV_MASK;
|
base->STAT &= ~LPUART_STAT_RXINV_MASK;
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
// Bootloader config peripheral enable flags
|
// Bootloader config peripheral enable flags
|
||||||
|
// Bootloader on LPUART & LPSPI, not on CAN
|
||||||
#ifndef BCA_PERIPH
|
#ifndef BCA_PERIPH
|
||||||
#define BCA_PERIPH ((1<<0) | (1<<2)) /* LPUART | LPSPI */
|
#define BCA_PERIPH ((1<<0) | (1<<2)) /* LPUART | LPSPI */
|
||||||
#endif /* BCA_PERIPH */
|
#endif /* BCA_PERIPH */
|
||||||
|
@ -66,7 +67,8 @@ const uint8_t _cfm[0x10] = {
|
||||||
0xFF, /* NV_FPROT2: PROT=0xFF */
|
0xFF, /* NV_FPROT2: PROT=0xFF */
|
||||||
0xFF, /* NV_FPROT1: PROT=0xFF */
|
0xFF, /* NV_FPROT1: PROT=0xFF */
|
||||||
0xFF, /* NV_FPROT0: PROT=0xFF */
|
0xFF, /* NV_FPROT0: PROT=0xFF */
|
||||||
/* [andreika]: Warning! These two bytes are extremely important! Don't change them until 100% sure! */
|
/* [andreika][rusefi]: Warning! These two bytes are extremely important! Don't change them until 100% sure! */
|
||||||
|
/* there is an opinion that wrong values would brick your Kinetis chip for good */
|
||||||
0x7E, /* NV_FSEC: KEYEN=1,MEEN=3,FSLACC=3,SEC=2 */
|
0x7E, /* NV_FSEC: KEYEN=1,MEEN=3,FSLACC=3,SEC=2 */
|
||||||
0xFB, /* NV_FOPT: BOOTSRC_SEL=1,res=111,RESET_PIN_CFG=1,NMI_DIS=0,BOOTPIN_OPT=1,LPBOOT=1 */
|
0xFB, /* NV_FOPT: BOOTSRC_SEL=1,res=111,RESET_PIN_CFG=1,NMI_DIS=0,BOOTPIN_OPT=1,LPBOOT=1 */
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
Standard NXP headers
|
||||||
|
firmware/config/boards/kinetis/OS/os/common/ext/CMSIS/KINETIS
|
||||||
|
|
||||||
|
|
||||||
|
To address Kinetis #e10536 errata we need to sleep 100 cycles to make watchdog happy.
|
||||||
|
This is taken care by
|
||||||
|
firmware/config/boards/kinetis/OS/os/common/startup/ARMCMx/compilers/GCC/startup_ke1xf.S
|
||||||
|
which is executed prior to the default firmware/ChibiOS/os/common/startup/ARMCMx/compilers/GCC/crt0_v7m.S
|
||||||
|
|
||||||
|
Linker script for 512K ROM
|
||||||
|
firmware/config/boards/kinetis/OS/os/common/startup/ARMCMx/compilers/GCC/ld/MKE1xF512.ld
|
||||||
|
|
||||||
|
flash1a & flash1b is some hardware configuration magic
|
||||||
|
_bca is flash1a via .bcaconfig
|
||||||
|
_cfm is flash1b via .cfmconfig
|
||||||
|
|
||||||
|
|
||||||
|
firmware/config/boards/kinetis/OS/os/hal/ports/KINETIS/KE1xF/fsl contains Kinetis SDK files with modifications:
|
||||||
|
1) include hal.h in the beginning
|
||||||
|
2) firmware/config/boards/kinetis/OS/os/hal/ports/KINETIS/KE1xF/fsl/fsl_lpuart.c has UART patch (see AndreiKA tag)
|
|
@ -106,6 +106,13 @@
|
||||||
|
|
||||||
#define EFI_INTERNAL_FLASH TRUE
|
#define EFI_INTERNAL_FLASH TRUE
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flex Non Volatile Memory is faster than flash
|
||||||
|
* It also has smaller pages so it takes less time to erase
|
||||||
|
*
|
||||||
|
* There is no remote access to FlexNVM meaning that we cannot erase settings externally
|
||||||
|
* /
|
||||||
|
|
||||||
#define FLASH_ADDR 0x10000000 // FlexNVM
|
#define FLASH_ADDR 0x10000000 // FlexNVM
|
||||||
#define FLASH_ADDR_SECOND_COPY 0x10008000
|
#define FLASH_ADDR_SECOND_COPY 0x10008000
|
||||||
|
|
||||||
|
@ -296,22 +303,6 @@
|
||||||
|
|
||||||
#define ADC_CHANNEL_VREF ADC_CHANNEL_IN14
|
#define ADC_CHANNEL_VREF ADC_CHANNEL_IN14
|
||||||
|
|
||||||
/**
|
|
||||||
* currently ChibiOS uses only first and second channels of each timer for input capture
|
|
||||||
*
|
|
||||||
* So, our options are:
|
|
||||||
*
|
|
||||||
* TIM2_CH1
|
|
||||||
* PA5
|
|
||||||
*
|
|
||||||
* TIM4_CH1
|
|
||||||
* PB6
|
|
||||||
* PD12
|
|
||||||
*
|
|
||||||
* TIM9_CH1
|
|
||||||
* PE5
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Use 'HAL_USE_UART' DMA-mode driver instead of 'HAL_USE_SERIAL'
|
* Use 'HAL_USE_UART' DMA-mode driver instead of 'HAL_USE_SERIAL'
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
@echo off
|
@echo off
|
||||||
set PATH=C:\Program Files\Java\jre\bin;G:\VStudio\Subversion\bin;G:\VStudio\arm-elf-gcc\bin;G:\VStudio\MinGW\msys\1.0\bin;G:\VStudio\Git\bin
|
|
||||||
|
|
||||||
rm -f libtinyc.a
|
rm -f libtinyc.a
|
||||||
arm-none-eabi-gcc -c -mthumb -mcpu=cortex-m4 -mfloat-abi=hard libc_stub.c
|
arm-none-eabi-gcc -c -mthumb -mcpu=cortex-m4 -mfloat-abi=hard libc_stub.c
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
|
||||||
|
Here is the magic here
|
||||||
|
1) AndreiKA has downloaded libtinyc from somewhere
|
||||||
|
2) AndreiKA has compiled libtinyc locally
|
||||||
|
3) AndreiKA has taken some of the .o object files and pasted those here
|
||||||
|
4) AndreiKA has added his custom libc_stub.c
|
||||||
|
|
||||||
|
libtinyc.a is the gcc library produced from all the above mentioned object files
|
||||||
|
|
||||||
|
todo: open question where is the official home of libtinyc
|
||||||
|
|
||||||
|
This is about wasting as little RAM as possible. Even complete libtinyc wastes some RAM.
|
|
@ -0,0 +1,31 @@
|
||||||
|
rusEfi runs on MKE16F512 (alpha version as of July 2019)
|
||||||
|
|
||||||
|
rusEfi Kinetis implementation consists of three files/folders:
|
||||||
|
firmware/config/boards/kinetis
|
||||||
|
firmware/hw_layer/ports/kinetis
|
||||||
|
firmware/hw_layer/trigger_input_comp.cpp
|
||||||
|
|
||||||
|
|
||||||
|
Since MKE16F512 is the first not stm32 rusEfi implementation, AndreiKA has a lot of fun!
|
||||||
|
Kinetis overrides are in
|
||||||
|
firmware/config/boards/kinetis/rusefi_hw_enums.h overrides pins
|
||||||
|
firmware/config/boards/kinetis/config/rusefi_config_kinetis.txt
|
||||||
|
|
||||||
|
todo:
|
||||||
|
have rusefi_stm32_hw_enums.h
|
||||||
|
have rusefi_kinetis_hw_enums.h
|
||||||
|
move more generated files to 'generated' folder(s)
|
||||||
|
maybe generated_stm32?
|
||||||
|
|
||||||
|
todo:
|
||||||
|
move firmware/config/boards/kinetis/config/!gen_enum_to_string.bat somewhere else? merge with stm32?
|
||||||
|
|
||||||
|
At the moment we use internal RC generator. Open question if it's good enough.
|
||||||
|
|
||||||
|
![pic](https://raw.githubusercontent.com/wiki/rusefi/rusefi_documentation/Hardware/Deucalion/Deucalion_0_1_half_assembled.jpg)
|
||||||
|
|
||||||
|
# How to program
|
||||||
|
|
||||||
|
Used to be NXP_Kinetis_Bootloader_2_0_0 KinetisFlashTool and it's not clear how to download it now :(
|
||||||
|
|
||||||
|
We happen to have https://github.com/rusefi/rusefi_external_utils/raw/master/Kinetis/FSL_Kinetis_Bootloader_2.0.0_repack.zip
|
Loading…
Reference in New Issue