MQX Software Solutions Knowledge Base

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

MQX Software Solutions Knowledge Base

Discussions

Sort by:
Que tal, Este documento es para toda persona que comienzan a trabajar con MQX . El documento describe como crear una tarea y como usar el driver LWGPIO. Esta escrito en español pensando en nuestros clientes de habla hispana. Saludos Sol
View full article
MQXv5 is Coming! NXP has teamed up with Embedded Access to continue active development of MQX software solutions, providing regular updates, enhancements and ports to new processors. With the introduction of MQX v5, an extension to MQX Classic v4.2, and with new commercial licensing, developers can continue to use MQX with the latest Kinetis, i.MX, and other processors. Compare MQX Classic and MQX v5 by visiting nxp.com/MQX. Then, give us your feedback on which devices and features you’d like supported in this newest addition, MQX v5. Note, the first MQX v5 products are expected to be available near the end of Q3, 2016. MQX v5 products will be purchasable at nxp.com/mqxv5 and through distribution partners.
View full article
by: Luis Garabito Applications Engineer TICS, Mexico The time invested to develop applications for the first time in a new environment can be significant. It is necessary to understand how the environment works and then be able to generate applications for this environment. The purpose of this application note is to provide the knowledge that enables developers to start quickly and easily with the development of their first application on Freescale MQXLite RTOS. This document provides the bases that developers will need to understand to create basic Freescale MQXLite applications. This Application Note is based on the Kinetis KL2 USB MCUs Family, specifically, the KL25Z128VLK4 micro controller. The Freescale Freedom development platform board (FRDM–KL25Z) is also used for this example. The full application note is attached.
View full article
CREATE MQX FOR KSDK PROJECT FROM SCRATCH IN IAR IDE Note: ${KSDK_PATH} is used in this guide line to instead of path of KSDK source (Example: C:/Freescale/KSDK_1.2.0/). This procedure was created for TWR-K64f120M 1     Create new workspace                 Open IAR  --> File  --> New  --> Workspace                 2     Create new project Project --> Create New Project  --> C  -> main --> OK                    Select project directory                              3    Add project lib to workspace         Project  -->  Add Existing Project … then select projects: {SDK_PATH}/lib/ksdk_mqx_lib/iar/K64F12/ksdk_mqx_lib.ewp {SDK_PATH}/rtos/mqx/mqx/build/iar/mqx_twrk64f120m/mqx_twrk64f120m.ewp {SDK_PATH}/rtos/mqx/mqx_stdlib/build/iar/mqx_stdlib_twrk64f120m/mqx_stdlib_twrk64f120m.ewp                        4    Build All Lib project                   5    Setting Project On the left workspace pane, right click on Mqx Project and select Options. Setting General Options         Select device:                       Setting C/C++ Compiler          Add include file and define symbols for project at Preprocessor tab: Additional include directories: {SDK_PATH}/rtos/mqx/lib/twrk64f120m.iar/debug {SDK_PATH}/rtos/mqx/lib/twrk64f120m.iar/debug/config {SDK_PATH}/rtos/mqx/lib/twrk64f120m.iar/debug/mqx {SDK_PATH}/rtos/mqx/lib/twrk64f120m.iar/debug/mqx_stdlib {SDK_PATH}/platform/osa/inc {SDK_PATH}/platform/CMSIS/Include {SDK_PATH}/platform/devices {SDK_PATH}/platform/hal/inc {SDK_PATH}/platform/drivers/inc {SDK_PATH}/platform/system/inc {SDK_PATH}/platform/devices/MK64F12/include {SDK_PATH}/platform/devices/MK64F12/startup {SDK_PATH}/platform/system/inc {SDK_PATH}/platform/hal/inc {SDK_PATH}/platform/drivers/inc {SDK_PATH}/platform/startup {SDK_PATH}/platform/utilities/inc {SDK_PATH}/examples/twrk64f120m {SDK_PATH}/rtos/mqx/config {SDK_PATH}/rtos/mqx/mqx/source/include Defined symbols: CPU_MK64FN1M0VMD12 TWR_K64F120M FSL_RTOS_MQX                         Setting Linker option           Use linker file in KSDK source:             {KSDK_PATH}/platform/devices/MK64F12/linker/iar/MK64FN1M0xxx12_flash.icf           Set stack/heap size and define __ram_vector_table__ __stack_size__=0x400 __heap_size__=0x400 __ram_vector_table__=1                           The project request three librarys: lib_mqx.a, lib_mqx_stdlib.a, libksdk_platform_mqx.a {KSDK_PATH}/lib/ksdk_mqx_lib/iar/K64F12/Debug/libksdk_platform_mqx.a {KSDK_PATH}/rtos/mqx/lib/twrk64f120m.iar/debug/mqx/lib_mqx.a {KSDK_PATH}/rtos/mqx/lib/twrk64f120m.iar/debug/mqx_stdlib/lib_mqx_stdlib.a              MQX uses owner’s startup-code (boot.S), We need to override default program entry                        6     Create project template Project structure and create group:          Specific file for board in: {KSDK_PATH}\examples\twrk64f120m\board.c {KSDK_PATH}\examples\twrk64f120m\board.h {KSDK_PATH}\examples\twrk64f120m\gpio_pins.c {KSDK_PATH}\examples\twrk64f120m\gpio_pins.h {KSDK_PATH}\examples\twrk64f120m\pin_mux.c {KSDK_PATH}\examples\twrk64f120m\pin_mux.h          BSP file in: {KSDK_PATH}\rtos\mqx\mqx\source\bsp\bsp.h {KSDK_PATH}\rtos\mqx\mqx\source\bsp\bsp_config.h {KSDK_PATH}\rtos\mqx\mqx\source\bsp\init_bsp.c {KSDK_PATH}\rtos\mqx\mqx\source\bsp\mqx_main.c {KSDK_PATH}\rtos\mqx\mqx\source\include\mqx.h          Config files in: {KSDK_PATH}\rtos\mqx\config\common\small_ram_config.h {KSDK_PATH}\rtos\mqx\config\common\verif_enabled_config.h {KSDK_PATH}\rtos\mqx\config\board\twrk64f120m\user_config.h {KSDK_PATH}\rtos\mqx\config\mcu\MK64F12\mqx_sdk_config.h           Utilities files in: {KSDK_PATH}\platform\utilities\src\print_scan.c {KSDK_PATH}\platform\utilities\src\print_scan.h {KSDK_PATH}\platform\utilities\src\fsl_debug_console.c {KSDK_PATH}\platform\utilities\inc\fsl_debug_console.h                                                                7    Write code The code below is used to turn on the LED and print out “hello world”. #include "stdio.h" #include "fsl_os_abstraction.h" #include "board.h" #include "fsl_debug_console.h" #define MAIN_TASK        8 void main_task(uint32_t param); const TASK_TEMPLATE_STRUCT  MQX_template_list[] = {    { MAIN_TASK, main_task, 0xC00, 20, "main_task", MQX_AUTO_START_TASK},    { 0L, 0L,        0L,    0L, 0L,         0L } }; void main_task(uint32_t param) {     LED1_EN;     LED1_ON;     PRINTF("Hello World\r\n");     while(1)     {} } 8    Run example: Build project:                   Select debug target                     - Set serial console 115200 baud rate, no parity, 8 data bits, 1 stop bit, without flow control - Set project as active prior we run project Run project                         See Led1 is On status and string “Hello World” is printed to screen                           
View full article
This document shows how to use a mutex and semaphores in order to synchronize two tasks in a FreeRTOS and SDK 2.0 project. For this example it is used SDK 2.0, TWR-K64F120M, and FreeRTOS. If you want to know how to create a new SDK 2.0 with FreeRTOS project please check the below link: https://community.freescale.com/docs/DOC-330183 MUTEX EXAMPLE: Introduction A mutex provides mutual exclusion among tasks, when they access a shared resource. When used for mutual exclusion the mutex acts like a token that is used to guard a resource. When a task wishes to access the resource it must first obtain ('take') the token. When it has finished with the resource it must 'give' the token back - allowing other tasks the opportunity to access the same resource. Mutexes cannot be used in interrupt service routines. Mutexes use the same semaphore access API functions. Writing a Mutex example code The mutex example code is used to demonstrate how to use a mutex to synchronize two tasks. It creates a mutex and two tasks. Both tasks use PRINTF to print out messages. Each task will lock the mutex before printing and unlock it after printing to ensure that the outputs from tasks are not mixed together. According with this proposal it is necessary to follow the below steps. In main function, create a mutex using the xSemaphoreCreateMutex() API. This API creates a mutex, and returns a handle by which the created mutex can be referenced. Mutexes cannot be used in interrupt service routines. xMutex = xSemaphoreCreateMutex(); Create two tasks with the same priority, these tasks will use PRINTF to print out messages.        xTaskCreate(write_task_1,"write_task_1",configMINIMAL_STACK_SIZE,NULL,                      task_PRIORITY, NULL);        xTaskCreate(write_task_2,"write_task_2",configMINIMAL_STACK_SIZE,NULL,                      task_PRIORITY, NULL); The two print tasks both use the PRINTF. If they used it in the same time, there would be conflicts, so a mutex is used to synchronize the two tasks. Each print task will try to lock the mutex before printing the message, using the macro xSemaphoreTake (SemaphoreHandle_t xSemaphore,TickType_t xTicksToWait); it will wait for the mutex as long as needed. Once the mutex is locked it prints the message and then unlocks the mutex  with the macro xSemaphoreGive (SemaphoreHandle_t xSemaphore) so that the other task can lock it. This process is repeated indefinitely. static void write_task_1(void *pvParameters) {     while (1)     { xSemaphoreTake(xMutex, portMAX_DELAY);         PRINTF("Hello, this is the |");         taskYIELD();         PRINTF("first task \r\n"); xSemaphoreGive(xMutex);         taskYIELD();     } } static void write_task_2(void *pvParameters) { while (1) { xSemaphoreTake(xMutex, portMAX_DELAY); PRINTF("And now this is the |"); taskYIELD(); PRINTF(" second task\r\n"); xSemaphoreGive(xMutex); taskYIELD(); } } At this point you can build and debug the example. Complete Code /* Kernel includes. */ #include "FreeRTOS.h" #include "task.h" #include "queue.h" #include "timers.h" #include "semphr.h" /* Freescale includes. */ #include "fsl_device_registers.h" #include "fsl_debug_console.h" #include "board.h" #include "pin_mux.h" #include "clock_config.h" /******************************************************************************* * Definitions ******************************************************************************/ SemaphoreHandle_t xMutex; /******************************************************************************* * Prototypes ******************************************************************************/ static void write_task_1(void *pvParameters); static void write_task_2(void *pvParameters); /******************************************************************************* * Code ******************************************************************************/ /*! * @brief Main function */ int main(void) { xMutex = xSemaphoreCreateMutex(); BOARD_InitPins(); BOARD_BootClockRUN(); BOARD_InitDebugConsole(); xTaskCreate(write_task_1, "WRITE_TASK_1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL); xTaskCreate(write_task_2, "WRITE_TASK_2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL); /* Start scheduling. */ vTaskStartScheduler(); for (;;) ; } /*! * @brief Write Task 1 function */ static void write_task_1(void *pvParameters) { while (1) { xSemaphoreTake(xMutex, portMAX_DELAY); PRINTF("Hello, this is the "); taskYIELD(); PRINTF("first task \r\n"); xSemaphoreGive(xMutex); taskYIELD(); } } /*! * @brief Write Task 2 function */ static void write_task_2(void *pvParameters) { while (1) { xSemaphoreTake(xMutex, portMAX_DELAY); PRINTF("And now this is the "); taskYIELD(); PRINTF(" second task\r\n"); xSemaphoreGive(xMutex); taskYIELD(); } } SEMAPHORE EXAMPLE: Introduction Binary semaphores and mutexes are very similar but have some subtle differences: Mutexes include a priority inheritance mechanism, binary semaphores do not. This makes binary semaphores the better choice for implementing synchronisation (between tasks or between tasks and an interrupt), and mutexes the better choice for implementing simple mutual exclusion. A semaphore can be used in order to control the access to a particular resource that consists of a finite number of instances. Writing a Semaphore example code After install SDK 2.0 you can find a semaphore example at the path: <SDK_install_path>\SDK_2.0_xxx\boards\<your_name>\rtos_examples\freertos_sem The example uses four tasks. One producer_task and three consumer_tasks. The producer_task starts by creating of two semaphores (xSemaphore_producer and xSemaphore_consumer). These semaphores control access to virtual item. The synchronization is based on bilateral rendezvous pattern. Both of consumer and producer must be prepared to enable transaction. Here’s the API (copied from the FreeRTOS website): MODULES xSemaphoreCreateBinary SemaphoreHandle_t xSemaphoreCreateBinary( void ); Creates a binary semaphore, and returns a handle by which the semaphore can be referenced. xSemaphoreCreateBinaryStatic SemaphoreHandle_t xSemaphoreCreateBinaryStatic(                           StaticSemaphore_t *pxSemaphoreBuffer ); Creates a binary semaphore, and returns a handle by which the semaphore can be referenced. xSemaphoreCreateCounting SemaphoreHandle_t xSemaphoreCreateCounting(                                             UBaseType_t uxMaxCount, UBaseType_t uxInitialCount); Creates a counting semaphore and returns a handle by which the newly created semaphore can be referenced. xSemaphoreCreateCountingStatic SemaphoreHandle_t xSemaphoreCreateCountingStatic(                                  UBaseType_t uxMaxCount,                                  UBaseType_t uxInitialCount StaticSemaphore_t pxSempahoreBuffer ); Creates a counting semaphore and returns a handle by which the newly created semaphore can be referenced. xSemaphoreCreateMutex SemaphoreHandle_t xSemaphoreCreateMutex( void ) Creates a mutex, and returns a handle by which the created mutex can be referenced. Mutexes cannot be used in interrupt service routines. xSemaphoreCreateMutexStatic SemaphoreHandle_t xSemaphoreCreateMutexStatic(                             StaticSemaphore_t *pxMutexBuffer ); Creates a mutex, and returns a handle by which the created mutex can be referenced. Mutexes cannot be used in interrupt service routines. xSemaphoreCreateRecursiveMutex SemaphoreHandle_t xSemaphoreCreateRecursiveMutex( void ) Creates a recursive mutex, and returns a handle by which the mutex can be referenced. Recursive mutexes cannot be used in interrupt service routines. configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for xSemaphoreCreateRecursiveMutex() to be available. xSemaphoreCreateRecursiveMutexStatic SemaphoreHandle_t xSemaphoreCreateRecursiveMutexStatic( StaticSemaphore_t *pxMutexBuffer ) Creates a recursive mutex, and returns a handle by which the mutex can be referenced. Recursive mutexes cannot be used in interrupt service routines. configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for xSemaphoreCreateRecursiveMutexStatic() to be available. vSemaphoreDelete void vSemaphoreDelete( SemaphoreHandle_t xSemaphore ); Deletes a semaphore, including mutex type semaphores and recursive semaphores. Do not delete a semaphore that has tasks blocked on it (tasks that are in the Blocked state waiting for the semaphore to become available). xSemaphoreGetMutexHolder TaskHandle_t xSemaphoreGetMutexHolder( SemaphoreHandle_t xMutex ); Return the handle of the task that holds the mutex specified by the function parameter, if any. xSemaphoreGetMutexHolder() can be used reliably to determine if the calling task is the mutex holder, but cannot be used reliably if the mutex is held by any task other than the calling task. xSemaphoreTake xSemaphoreTake( SemaphoreHandle_t xSemaphore,                  TickType_t xTicksToWait ); Macro to obtain a semaphore. The semaphore must have previously been created with a call to xSemaphoreCreateBinary(), xSemaphoreCreateMutex() or xSemaphoreCreateCounting(). xSemaphoreTakeFromISR xSemaphoreTakeFromISR(         SemaphoreHandle_t xSemaphore,         signed BaseType_t *pxHigherPriorityTaskWoken ) A version of xSemaphoreTake() that can be called from an ISR. Unlike xSemaphoreTake(), xSemaphoreTakeFromISR() does not permit a block time to be specified. xSemaphoreTakeRecursive xSemaphoreTakeRecursive( SemaphoreHandle_t xMutex,                          TickType_t xTicksToWait ); Macro to recursively obtain, or 'take', a mutex type semaphore. The mutex must have previously been created using a call to xSemaphoreCreateRecursiveMutex(); configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for this macro to be available. xSemaphoreGive xSemaphoreGive( SemaphoreHandle_t xSemaphore ); Macro to release a semaphore. The semaphore must have previously been created with a call to xSemaphoreCreateBinary(), xSemaphoreCreateMutex() or xSemaphoreCreateCounting(), and obtained using sSemaphoreTake(). xSemaphoreGiveRecursive xSemaphoreGiveRecursive( SemaphoreHandle_t xMutex ) Macro to recursively release, or 'give', a mutex type semaphore. The mutex must have previously been created using a call to xSemaphoreCreateRecursiveMutex(); configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for this macro to be available. xSemaphoreGiveFromISR xSemaphoreGiveFromISR(         SemaphoreHandle_t xSemaphore,         signed BaseType_t *pxHigherPriorityTaskWoken) Macro to release a semaphore. The semaphore must have previously been created with a call to xSemaphoreCreateBinary() or xSemaphoreCreateCounting(). Mutex type semaphores (those created using a call to xSemaphoreCreateMutex()) must not be used with this macro. uxSemaphoreGetCount UBaseType_t uxSemaphoreGetCount( SemaphoreHandle_t xSemaphore ); Returns the count of a semaphore. Enjoy!!!
View full article
It took me a while, plus a few contradicting and confusing answers from ARM support until I managed to make this work. Therefore, I do want to share with you the easiest method in order to save you some precious time (tested with MQX 4.0): 1. Make sure to install keil's TAD plugin during the MQX installation (it can also be installed separately from MQX\tools\keil_extensions\uVision4). 2. Make the following changes in the MQX configuration file "user_config.h": #define BSPCFG_ENABLE_IODEBUG   1 #define BSP_DEFAULT_IO_CHANNEL  "iodebug:" 3. Rebuild BSP debug library. 4. Configure Debugger as detailed in your MQX release documentation, which can be found in the following folder: MQX\doc\tools\uv4\MQX-uVision4-Getting-Started.pdf That's it, you're good to go - now you can see printf's using your uVision4 IDE console!
View full article
The new Freescale MQX™ RTOS 4.1.0 FRDM-K64F release is now available on the www.freescale.com ·         Files available # Name Description 1 FSL_MQX_FRDM-K64F_RELEASE_NOTES Freescale   MQX™ RTOS 4.1.0 FRDM-K64F Release Notes 2 Freescale   MQX RTOS 4.1.0 for the FRDM-K64F Includes   an RTOS, File System, TCP/IP and USB host/device software stacks. Does not   require MQX™ 4.1 installation. ·         Target HW board o   FRDM-K64F ·         New features o   PSP support for the Kinetis K64F o   BSP for the FRDM-K64F development board o   Standard set of I/O drivers supporting the K64F peripherals including: §  LWGPI/O driver §  Serial interrupt and polled driver §  SPI driver §  I2C interrupt and polled driver §  LWADC §  Flash Driver §  RTC Driver §  PIT Timer §  LPT Timer §  WDOG §  Low-power Mode §  SAI §  DMA §  SD Card §  Ethernet driver o   USB Host and Device drivers and stacks o   Example and demo applications demonstrating MQX, USB, RTCS, and MFS usage ·         Known issues o   For known issues and limitations please consult the release notes.
View full article
If anybody meets an issue with MQX 3.8 (also 3.8.1, 4.0 and 4.0.1) writing to a Compact flash (/mfs/examples/cfcard), there is an error in the cfcard io driver. Compact flash can be read, but writing doesn't work. Fix for this is in the source file: c:\Freescale\Freescale MQX 3.8\mqx\source\io\pcflash\apcflash.c in function _io_apcflash_write() on line 452, change from: results = _io_apcflash_read_write_blocks(fd_ptr, info_ptr, data_ptr, num, FALSE); change to: results = _io_apcflash_read_write_blocks(fd_ptr, info_ptr, data_ptr, num, TRUE); Tested on M5329EVB and MQX 3.8.1.
View full article
INTRODUCTION Have you posted a question and it has been unanswered? It could be because of couple of reasons. I would like to highlight few of them. Because posts like "it does not work" have a real chance to be ignored. More you share, easier for others to reproduce it. USE SEARCH FUNCTIONALITY Before you even start creating your own post, use search functionality here in the community. Lot of questions have been answered already, do not please duplicate posts. DOCUMENTATION Available documentation is located inside MQX installation folder: <MQX_INSTALL_DIR>\doc. There are two most important documents: MQX User Guide and MQX Reference Manual. You might find your answer there. HOW WOULD AN IDEAL POST LOOK LIKE It should contain: 1. product version (MQX version) 2. platform (MCU) 3. compiler (IDE) 4. target (release/debug and flash/ram) 5. detailed description 6. code snippet (if not the exact code, at least literally what it does and where it fails) The best is to post a code or at least a snippet of what fails. Try to minimize the software, create a small application which you can share to prove it is not functional properly. The code most of the time help us to reproduce a problem and make it fail in the same way. Otherwise we can only guess what it could be which makes entire process harder and longer. Please use C++ highlight (available in Advanced editor, last symbol (>>) ). It makes code easier to read with visual splitting a code from a text. /* code example (C++ higlight) */ int main(void) {   return 1; } If you tackle with any problem, please specify what you have done so far, read or tried anyhow. State what you expected to happen. Write down an error which has occur, if any. Does current version of MQX break the code which has been running on previous release? Diff files to find out differences. Does documentation not provide enough details? Does the code look obfuscated? Let us know! SHARING IS CARING We would like to hear your feedback! Share a result with us. Helps us to improve user experience! If you get an answer which has helped you, please reply and share the outcome, how did you solve it. Any user can encounter similar or even the same problem. Be part of the community. Regards, c0170 I'll post here some references which are valuable to the topic and I suggest everybody read them. References: http://www.chiark.greenend.org.uk/~sgtatham/bugs.html http://www.softwaretestinghelp.com/how-to-write-good-bug-report/
View full article
The Freescale MQX Software Solution includes a comprehensive Board Support Package (BSP) supporting common peripherals and functions. However, some applications will require customization of the available drivers or the development of new ones. Pulse width modulation (PWM) is a technique used to encode a message into a pulsing signal. PWM is in used in an extensive variety of applications, ranging from motor control, measurement and communications to power control and conversion, among others. PWM driver is not part of the MQX however there is possible to add your own driver. The purpose of this document is show two different ways to implement PWM signal using MQX and Kinetis devices: a) using bareboard code b) using processor expert in order to create a driver. USING BAREBOARD CODE: As there is no MQX driver for FTM peripheral, customers should create their own drivers. The AN3902 application note guides developers through the process of creating and testing I/O drivers under MQX. http://cache.freescale.com/files/32bit/doc/app_note/AN3902.pdf A simple PWM code can be as simple as shown below: /*Using FTM2_CH0 FTM2_CH1 output PWM with 90% high, 10% low wave*/ void FTM_EPWM(void) { SIM_SCGC6 |= SIM_SCGC6_FTM2_MASK;          SIM_SCGC3 |= SIM_SCGC3_FTM2_MASK;             PORTA_PCR10 = (0|PORT_PCR_MUX(3)); /* FTM2_CH0 enable on PTA10 */        PORTB_PCR18 = (0|PORT_PCR_MUX(3)); /* FTM2_CH0 enable on PTB18 */        PORTA_PCR11 = (0|PORT_PCR_MUX(3)); /* FTM2_CH1 enable on PTA11 */        PORTB_PCR19 = (0|PORT_PCR_MUX(3)); /* FTM2_CH1 enable on PTB19 */        FTM2_MOD = 0x0063;  /* 0x0063 / 60MHz = 1.6666uS PWM period */        /* Configure timers for edge aligned PWM High True Pulses */        printf("FTM2_ Edge_Aligned Test 1\r\n");        printf("Please check the waveform, 90% High True EPWM\r\n");        FTM2_C0SC = 0x28; /* No Interrupts; High True pulses on Edge Aligned PWM */        FTM2_C1SC = 0x28;         FTM2_C0V = 0x005A;  /* 90% pulse width */        FTM2_C1V = 0x005A;         FTM2_SC = 0x08;     /* Edge Aligned PWM running from BUSCLK / 1 */ } The function shown above can be called from any MQX task. Only care will be in case interrupts are needed for FTM application. There are two ways to add user interrupts into an MQX system - kernel_isr or MQX managed isr. Kernel_isr is fast but it bypasses MQX, thus, no MQX API function can be called from such a kernel_isr. MQX managed isr is slower, as it runs dispatcher in case a higher priority task becomes ready during isr. USING PROCESSOR EXPERT IN ORDER TO CREATE A DRIVER: All MQX BSP's are PE capable and Processor Expert is integrated with CodeWarrior and KDS but it is also a standalone tool that can generate code for IAR, Keil, GCC, etc. http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=PE_DRIVER_SUITE&tid=PEH There is an easy way to add device drivers to the MQX RTOS BSP using PE. It is necessary to activate the PE views, for do that go to Processor Expert -> Show Views Show PE views After select the PE views there is possible to look at the properties of the each component. For example, the below figure shows the properties of the MQX1 component.  Component MQX1 The below figure shows the Cpu component, here it is possible to modify the clock configurations, it is possible to find more information about this in the MQX_CW10_Getting_Started document located, after install MQX, at the path: <Freescale_MQX_4_2>\doc\tools\cw. Component CPU In order to configure a PWM signal using PE, it is necessary to follow these steps:      1. Select the PWM component. Component PWM      2. By default, the PWM component configures Channel 0 in Flex Timer 0 a PWM of 4096 timer-ticks, however it is possible to modify this values according the needs. Component PWM properties.       3. Besides Properties, Components also include Methods and Events that it is possible to enable or disable. Methods and events. Methods are user-callable functions/subroutines intended for the component functions control. Init: Initializes the device. Allocates memory for the device data structure, allocates interrupt vectors and sets interrupt priority, sets pin routing, sets timing, etc. If the property "Enable in init. code" is set to "yes" value then the device is also enabled (see the description of the Enable method). In this case the Enable method is not necessary and needn't to be generated. This method can be called only once. SetPeriodTicks: The method sets timer re-initialization period (in timer ticks). This method is available only if the property "Counter restart" is switched to 'on-match' value. ResetCounter: Resets counter. If counter is counting up then it is set to zero. If counter is counting down then counter is updated to the reload value. The method is not available if HW doesn't allow resetting of the counter. GetCounterValue: Returns the content of counter register. This method can be used both if counter is enabled and if counter is disabled. The method is not available if HW doesn't allow reading of the counter. SetOffsetTicks: Sets the new offset value to channel specified by the parameter ChannelIdx. It is user responsibility to use value below selected period. This method is available when at least one channel is configured. GetCaptureValue: Returns the content of capture register specified by the parameter ChannelIdx. This method is available when at least one channel is configured. Events are call-back functions called when an important event occurs. OnCounterRestart: Called if counter overflow/underflow or counter is reinitialized by modulo or compare register matching. OnCounterRestart event and Timer unit must be enabled. This event is available only if an Interrupt is enabled. OnChannel(x): Called if compare register match the counter registers or capture register has a new content. OnChannel(x) event and Timer unit must be enabled. This event is available only if an Interrupt is enabled.      4. If there is some change click on Generate Code and Build the project:      5. The PWM driver was created. In order to use the driver it is necessary to create a new MQX project.      6. For this example, we will edit the main task that is defined after create a new MQX project. To use PE driver some ‘handler’ variables must be declared:        7. It is necessary to initialize the component.    8. To enable de component, the PWM_Enable() function is required .       9. Finally implement the events.      10. At this point you should be able to build and run the example. Remember to check the jumper settings for the board you are using in order to debug a MQX example. The Getting Started with Freescale MQX™ RTOS document provides board-specific information related to the MQX RTOS, this document is located at the path: <Freescale_MQX_4_2>\doc It is important to connect the tower board to the elevators and check the PWM signal on A67.   Below you can check the entire code: #include "main.h" #if !BSPCFG_ENABLE_IO_SUBSYSTEM #error This application requires BSPCFG_ENABLE_IO_SUBSYSTEM defined non-zero in user_config.h. Please recompile BSP with this option. #endif #ifndef BSP_DEFAULT_IO_CHANNEL_DEFINED #error This application requires BSP_DEFAULT_IO_CHANNEL to be not NULL. Please set corresponding BSPCFG_ENABLE_TTYx to non-zero in user_config.h and recompile BSP with this option. #endif TASK_TEMPLATE_STRUCT MQX_template_list[] = { /* Task number, Entry point, Stack, Pri, String, Auto? */ {MAIN_TASK,   Main_task,   1500, 9,   "main", MQX_AUTO_START_TASK}, {0,           0,           0,     0, 0,      0,                 } }; /*TASK*----------------------------------------------------- * * Task Name    : Main_task * Comments     : * This task prints " Hello World " * *END*-----------------------------------------------------*/ #define TERMINAL_CURSOR_POSITION_MAX    (80) static int                  pwm_task_count; static LDD_TDeviceData     *PWM_DeviceData; static LDD_TError           PWM_Error; volatile PWM_TValueType     PWM_Value; volatile PWM_TValueType     PWM_MaxValue; volatile PWM_TValueType     PWM_Step; volatile int                PWM_Freguency; void Main_task(uint32_t initial_data) {        static int terminal_cursor_position = 1;        printf("\n Hello World \n");        /* Initialize PWM device on FTM0 device */             puts("\nInitializing PWM device.....");            PWM_DeviceData = PWM_Init(NULL);            if (PWM_DeviceData == NULL)  {            puts("failed");                _task_block();            }            else  {                puts("done");            }            PWM_Value       = 0;            PWM_Step        = PWM_PERIOD_TICKS / 32;            PWM_MaxValue    = PWM_PERIOD_TICKS;            PWM_Freguency   = (PWM_CNT_INP_FREQ_U_0/PWM_PERIOD_TICKS);          printf("\n - PWM frequency              = %d Hz", PWM_Freguency);            puts("\nThe PWM signal is generated on FTM0 Channel 0");            puts("\n");            /* Enable PWM device */            PWM_Error = PWM_Enable(PWM_DeviceData);            while(1)            {                pwm_task_count++;                /* Suspend task for 250ms */                _time_delay(250);                /* Print dot on console to see that application is running */                if (terminal_cursor_position++ > TERMINAL_CURSOR_POSITION_MAX) {                    terminal_cursor_position = 1;                    puts("\n");                }                else {                    puts(".");                }            }        } void PWM_OnCounterRestart(LDD_TUserData *UserDataPtr) { /* Increment PWM duty-cycle from 0-100% */ PWM_Value += PWM_Step; if (PWM_Value > PWM_MaxValue) PWM_Value = 0; /* Set new PWM channel value */ PWM_Error = PWM_SetOffsetTicks(PWM_DeviceData, 0, PWM_Value); } /* EOF */
View full article
Hi everybody, Some times it is necessary to work with short interrupts in MQX or get smaller delays. MQX measures time in ticks, instead of in seconds and milliseconds. This document describes how to get a smaller delay or Interrupt, editing the BSP_ALARM_FREQUENCY in order to have smaller ticks. In addition the document shows how to use the MQX hwtimer driver. I hope you like it. Best regards, Soledad Godinez Technical Support Engineer
View full article
Rev0.1 - 8/28/2012 Adding to the patch at TWR-K21D50M lowpower MQX Patch for v4.0.2, this updates the MQX BSP and lowpower example to add VLPS mode. The example works the same as the default lowpower example, except after waking from LLS, the application immediately enters VLPS.  It uses the LPTMR to wake after 10 seconds, and returns to RUN mode and restarts the example.  Because the transition is immediate from the user perspective, the user will press the switch to enter LLS mode, after 10s the MCU will wake, turn on the blue LED, enter VLPS, wait another 10s, wake, turn off the blue LED, return to RUN mode and resume printing to the terminal.  There is no text printed to the terminal between LLS and VLPS to show a quick transition. This patch covers several files to enable VLPS mode in the twrk21d50m BSP, and modifies the lowpower example. The lowpower example is provided to demonstrate the MQX Low-Power Manager (LPM) driver, and change low-power modes on the K21 board.  The BSP in the release provided does not include support for VLPS. To use this patch, copy the patch directory into the MQX v4.0.2 root directory.  The patch will over-write some existing files in the MQX installation.  The changes addressed by this patch include the following: User_config.h MQX_ENABLE_LOW_POWER macro enabled.  Required for LPM driver and lowpower example. LowPower Example main.c Modified as described above to add transition into VLPS mode bsp_cm.c Added case for VLPS mode for clock mode transition init_lpm.c Added mode to LPM_CPU_OPERATION_MODES[] for LPM_OPERATION_MODE_VLPS init_lpm.h Added mode LPM_OPERATION_MODE_VLPS to enumeration LPM_OPERATION_MODE init_sci.c Added settings for mode LPM_OPERATION_MODE_VLPS to the _bsp_sciX_operation_modes arrays for all the UARTs in the BSP lpm_smc.c Added mode DOM_VLPS to LPM_PE_OPERATION_MODE_MAP[] Disabled SPI0 clock gate when entering stop mode, otherwise stop entry is aborted.  Re-enabled clock gate after waking up.  If SPI0 peripheral is required in a stop mode, register the SPI driver with the LPM driver to properly configure when LPM changes operation mode to a stop mode.  Refer to LPM documentation for details. Disabled the SysTick interrupt for the 5ms RTOS tick before entering stop mode, and re-enabled after waking up.  Without this, the example was entering VLPS mode fine without the debugger, but with the debugger the SysTick interrupt was causing VLPS entry to abort. 
View full article
Hi, Many people has been asking about migrating from MQX RTOS to MQX RTOS for KSDK. Such guide is now available in the following link: http://www.freescale.com/files/soft_dev_tools/doc/support_info/MQXKSDKPUG.pdf?fsrch=1​ If you need to create a new MQX RTOS for KSDK project please note that there is not a New MQX for KSDK Project Wizard, therefore it is necessary to create it manually. You can find a guide in the link below. How To: Create a New MQX RTOS for KSDK Project in KDS Best regards, Carlos Musich Technical Support Engineer
View full article
NXP provides a software driver library for their Kinetis ARM Cortex-M0 and M4 devices, the ‘Kinetis SDK’, available from http://www.nxp.com/ksdk.   The below link provides information about how download a KSDK package, how to install KSKD v2.0 project wizard in Kinetis Design Studio (KDS), and how to create a KSDK v2.0 project. Using Kinetis Design Studio v3.x with Kinetis SDK v2.0 NOTE: Before you continue with this document, it is important to download and install KSDK v2.0. The purpose of this document is to provide information that enables developers to start their first application using FreeRTOS and KSDK v2.0. Creating a new FreeRTOS with KSDK V2.0 application. The following steps show how to create a new FreeRTOS project in KDS using KSDK v2.0. 1. Open Kinetis Design Studio. 2. Go to 'File' menu and click on File->New->Kinetis SDK 2.x Project 3. Select a project name and the Kinetis SDK folder then click 'Next' 4. Select the processor or board to be used, in addition it is important to include all SDK drivers and add FreeRTOS to the project and click 'Finish' 5. In the project created you can see the following folder structure: 6. The main.c file is a template for main module created by new Kinetis SDK 2.0 Project Wizard, this contains a task responsible of printing "Hello world." message. 7. If you want to build and debug this example uncomment the next lines: #include "fsl_debug_console.h" and PRINTF("Hello world.\r\n"); 8. Build and debug. Developing the first FreeRTOS with KSDK V2.0 application. This section describes the creation of a simple application that blinks LEDs on the TWR-K64F120M board. After a new project is created, in the main function the following routines are called in order to initialize the board hardware: BOARD_InitPins(); BOARD_BootClockRUN(); BOARD_InitDebugConsole(); By default only the UART0 is initialized in order to use it as debug console. Also in main it is created a task (hello_task) using xTaskCreate () function. xTaskCreate () creates a new task and adds it to the list of tasks that are ready to run; it contains the following parameters: pvTaskCode. Pointer to the task entry function. Tasks must be implemented to never return. pcName. A descriptive name for the task. This is mainly used to ease debugging. Max length defined by configMAX_TASK_NAME_LEN. usStackDepth. The size of the task stack specified as the number of variables the stack can hold - not the number of bytes. For example, if the stack is 16 bits wide and usStackDepth is defined as 100, 200 bytes will be allocated for stack storage. The stack depth multiplied by the stack width must not exceed the maximum value that can be contained in a variable of type size_t. pvParameters. Pointer that will be used as the parameter for the task being created. uxPriority. The priority at which the task should run. pvCreatedTask. Used to pass back a handle by which the created task can be referenced. Writing the application. The TWR-K64F120M contains 4 LED's connected to GPIO signals (optionally isolated using jumpers): — Green LED (D5) to PTE6 — Yellow LED (D6) to PTE7 — Orange LED (D7) to PTE8 — Blue LED (D9) to PTE9 For this example it is used the TWR-K64F120M board, however if you are using the FRDM-K64F the RGB LED is connected through GPIO signals: — RED to PTB22 — BLUE to PTB21 — GREEN to PTE26 To initialize the GPIO, enable the port clock, define a pin configuration, either input or output, in the pin_mux.c file, as is described in the below steps: Open the pin_mux.c file.    2. Enable the port clock.      CLOCK_EnableClock(kCLOCK_PortE);    3. Configure these pins as GPIO signals.       PORT_SetPinMux(PORTE, 6u, kPORT_MuxAsGpio);     PORT_SetPinMux(PORTE, 7u, kPORT_MuxAsGpio);     PORT_SetPinMux(PORTE, 8u, kPORT_MuxAsGpio);     PORT_SetPinMux(PORTE, 9u, kPORT_MuxAsGpio); Then, in main function create 5 tasks, one to initialize the GPIO driver and the other to blink the LEDs. You can find the complete code at the end of this document.   /* Create RTOS task */ xTaskCreate(init_task, "Init_task", configMINIMAL_STACK_SIZE, NULL, task_PRIORITY, NULL); xTaskCreate(task_blue, "Task_blue", configMINIMAL_STACK_SIZE, NULL, task_PRIORITY, NULL); xTaskCreate(task_orange, "Task_orange", configMINIMAL_STACK_SIZE, NULL, task_PRIORITY, NULL); xTaskCreate(task_yellow, "Task_yellow", configMINIMAL_STACK_SIZE, NULL, task_PRIORITY, NULL); xTaskCreate(task_green, "Task_green", configMINIMAL_STACK_SIZE, NULL, task_PRIORITY, NULL); Write the code of each task. 1. init_task function. In this function are initialized the GPIO pins as output using the gpio_pin_config_t structure then it is called the GPIO_PinInit() function for each GPIO pins.      The GPIO_PinInit() parameters are: base. GPIO peripheral base pointer (GPIOA, GPIOB, GPIOC, and so on.) pin. GPIO port pin number. config. GPIO pin configuration pointer.      Finally call vTaskSuspend(), this function suspend the task. When a task is suspended, it will never get back to execution unless it is explicitly set in Ready state by another task.      The code for init_task function is:      gpio_pin_config_t ledB_config = {                       kGPIO_DigitalOutput, 0,                   };          gpio_pin_config_t ledO_config = {                          kGPIO_DigitalOutput, 0,                   };          gpio_pin_config_t ledG_config = {                      kGPIO_DigitalOutput, 0,                   };          gpio_pin_config_t ledY_config = {                       kGPIO_DigitalOutput, 0,                   };       /* Init output LED GPIO. */     GPIO_PinInit(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PIN, &ledB_config);     GPIO_PinInit(BOARD_LED_ORANGE_GPIO, BOARD_LED_ORANGE_GPIO_PIN, &ledO_config);     GPIO_PinInit(BOARD_LED_GREEN_GPIO, BOARD_LED_GREEN_GPIO_PIN, &ledG_config);     GPIO_PinInit(BOARD_LED_YELLOW_GPIO, BOARD_LED_YELLOW_GPIO_PIN, &ledY_config);     vTaskSuspend(NULL); 2. task_blue, task_orange, task_yellow, task green functions. It is necessary to write the code of each task. Each task uses LED_XXX_TOGGLE() and vTaskDelay (), to toggle a LED, this should be in a infinite loop.      Below is the code for the task_blue function:      while (1)        {                         /* Toggle LED BLUE */               LED_BLUE_TOGGLE();               vTaskDelay( 500 );        } Finally build and debug the project.  Enjoy! Complete Code main.c #include <string.h> #include "board.h" #include "pin_mux.h" #include "clock_config.h" #include "fsl_debug_console.h" /* FreeRTOS kernel includes. */ #include "FreeRTOS.h" #include "task.h" #include "queue.h" #include "timers.h" /* Task priorities. */ #define task_PRIORITY (configMAX_PRIORITIES - 1) static void init_task(void *pvParameters) {        /* Init output LED GPIO. */          gpio_pin_config_t ledB_config = {                       kGPIO_DigitalOutput, 0,                   };          gpio_pin_config_t ledO_config = {                          kGPIO_DigitalOutput, 0,                   };          gpio_pin_config_t ledG_config = {                      kGPIO_DigitalOutput, 0,                   };          gpio_pin_config_t ledY_config = {                       kGPIO_DigitalOutput, 0,                   };        /* Init output LED GPIO. */                   GPIO_PinInit(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PIN, &ledB_config);                   GPIO_PinInit(BOARD_LED_ORANGE_GPIO, BOARD_LED_ORANGE_GPIO_PIN, &ledO_config);                   GPIO_PinInit(BOARD_LED_GREEN_GPIO, BOARD_LED_GREEN_GPIO_PIN, &ledG_config);                   GPIO_PinInit(BOARD_LED_YELLOW_GPIO, BOARD_LED_YELLOW_GPIO_PIN, &ledY_config);                   vTaskSuspend(NULL); } static void task_blue(void *pvParameters) {         while (1)        {        /* Toggle LED BLUE */               LED_BLUE_TOGGLE();               vTaskDelay( 500 );        } } static void task_orange(void *pvParameters) {         while (1)        {        /* Toggle LED ORANGE */               LED_ORANGE_TOGGLE();               vTaskDelay( 500 );        } } static void task_yellow(void *pvParameters) {         while (1)        {        /* Toggle LED YELLOW */               LED_YELLOW_TOGGLE();               vTaskDelay( 500 );        } } static void task_green(void *pvParameters) {         while (1)        {        /* Toggle LED GREEN */               LED_GREEN_TOGGLE();               vTaskDelay( 500 );        } } int main(void) { /* Init board hardware. */ BOARD_InitPins();   // This function initializes the pins used in this example BOARD_BootClockRUN(); BOARD_InitDebugConsole();   /* Create RTOS task */ xTaskCreate(init_task, "Init_task", configMINIMAL_STACK_SIZE, NULL, task_PRIORITY, NULL); xTaskCreate(task_blue, "Task_blue", configMINIMAL_STACK_SIZE, NULL, task_PRIORITY, NULL); xTaskCreate(task_orange, "Task_orange", configMINIMAL_STACK_SIZE, NULL, task_PRIORITY, NULL); xTaskCreate(task_yellow, "Task_yellow", configMINIMAL_STACK_SIZE, NULL, task_PRIORITY, NULL); xTaskCreate(task_green, "Task_green", configMINIMAL_STACK_SIZE, NULL, task_PRIORITY, NULL); vTaskStartScheduler(); for(;;) { /* Infinite loop to avoid leaving the main function */ __asm("NOP"); /* something to use as a breakpoint stop while looping */ } } Complete Code  pin_mux.c #include "fsl_device_registers.h" #include "fsl_port.h" #include "pin_mux.h" /******************************************************************************* * Code ******************************************************************************/ /*! * @brief Initialize all pins used in this example * * @param disablePortClockAfterInit disable port clock after pin * initialization or not. */ void BOARD_InitPins(void) { /* Ungate the port clock */ CLOCK_EnableClock(kCLOCK_PortC); CLOCK_EnableClock(kCLOCK_PortE); /* Affects PORTC_PCR3 register */ PORT_SetPinMux(PORTC, 3u, kPORT_MuxAlt3); /* Affects PORTC_PCR4 register */ PORT_SetPinMux(PORTC, 4u, kPORT_MuxAlt3); PORT_SetPinMux(PORTE, 6u, kPORT_MuxAsGpio); PORT_SetPinMux(PORTE, 7u, kPORT_MuxAsGpio); PORT_SetPinMux(PORTE, 8u, kPORT_MuxAsGpio); PORT_SetPinMux(PORTE, 9u, kPORT_MuxAsGpio); }
View full article
A new MQX Flash File System (FFS) add-on is available for Freescale MQX™ 4.0.2.   See MQX Downloads.  FFS provides wear-leveling support required for mapping MFS on top of NAND flash. Files available # Name Description 1 FSL_MQX__FFS_RELEASE_NOTES_4_0_2 Freescale   MQX™ FFS package 4.0.2 Release Notes 2 Freescale   MQX RTOS 4.0.2 FFS package NAND   Flash File System solution for MQX™ 4.0.2
View full article
This blog shares several issues reported by China customers when they use NAND FFS in MQX4.1.1. NAND FFS open failure issue Customer reported they can use a pressure test code to continuously open file, write file and close file, each time write about 20 bytes with append and they will find after running for a while, file open will fail and it returns error code 0x3067 (MFS_EOF). Each time file open failed, file has been written with 20480 bytes. This is a typical use case at customer side for data logging. The test code is attached named as "nand_pressure_test.cpp". Attached patch file named "mfs_write.patch" can resolve this issue. Memory allocation issue when using MFS & NAND FFS Customer run pressure test for MFS and NAND FFS by creating multiple levels of sub-folders (up to 100 levels) and in each sub-folder they create random number of files (up to 50). For each file, they will write 250 bytes. They found code failed to open new file when create sub-folders to 41 level. Traced the code on K70 tower and found actually this is not problem with MFS to search clusters for the new file, instead when the issue occurs, it's the drive_ptr (MFS_DRIVE_STRUCT) which is corrupted when MFS use memory allocation routine to allocate file path. The pressure test code for this case is attached. File named "MultiLevel_Folder_Test.zip". The memory corruption for MFS drive info is due to there is no protection in MFS_Parse_pathname() on whether the actual path name used passed from fopen will be exceeding 260 bytes which is fixed in mfs.h file to be compatible with Windows. So need to take care of this internal limitation when handling multiple level folders. MFS deadlock issue when using NAND FFS Customer reported random code block issue when running pressure test against NAND FFS. The issue is quite random, sometimes takes 12 hrs to reproduce the issue. Test code attached. Name is "MFS deadlock issue.zip". The resolution and description on this issue is in attached file named "MQX-4919 NandFFS explanation". Hao
View full article
Video Tutorial 3 of 6 for the iDigi Connector for MQX: Writing Your First iDigi Enabled Application (3 of 6) - iDigi Device Cloud More information and free download at http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=KINETIS_IDIGI_M2M
View full article
Hi All, The new Freescale MQX™ 4.1.1 GA release is now available on www.freescale.com/mqxrtos ·         Files available           # Name Description 1 FSL_MQX_RELEASE_NOTES_4_1_1 Freescale   MQX™ RTOS 4.1.1 Release Notes 2 Freescale   MQX RTOS 4.1.1 for Linux This   release has the same basic code as the 4.1.1 version, with just the changes   needed to build and debug on Linux systems. 3 Freescale   MQX RTOS 4.1.1 MQX™    Source code. Includes an RTOS, File System, TCP/IP and USB host/device   software stacks. ·         What is New? ·         New Board Support Package o   FRDM-K64F o   TWR-K64F120M ·         New Features and Updates o   MQX RTOS 4.1.1 enables development on Linux machines o   MQX RTOS 4.1.1 supports the new Freescale IDE, Kinetis Design Studio o   Example ISR and related documentation is updated to give guidance on setting up a Kernel ISR (a.k.a Gorilla ISR) - extremely high priority ISR o   Power PC (PX) family support has been dropped o   Readme files are added to examples without a description o   Register definition header files for Kinetis MCUs are added for convenience when porting to an MCU sub-family device o   Both interrupt driven I2C master and slave mode drivers are changed to support synchronous blocking mode and share the same API with the polling driver variant.  Improves performance by eliminating the need to poll for data availability. ·         Known issues o   For known issues and limitations please consult the release notes
View full article
Tutorial 6 of 6 for the iDigi Connector for MQX: Adding Remote Configuration Support (6 of 6) - iDigi Device Cloud More information and free download at http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=KINETIS_IDIGI_M2M
View full article
The Freescale MQX™ RTOS for Kinetis SDK FRDM-KL43Z Freescale Freedom Platform is now available on the www.freescale.com ·         Release Files             # Name Description 1                                   Freescale_MQX_KSDK_1.0.0-KL43Z.exe Windows installer. Freescale MQX™ RTOS software   components fully pre-integrated with the Kinetis SDK. Includes the MQX   kernel, USB host and device stacks, MFS file system, and example   applications. Does not require prior installation of Kinetis SDK. 2                                   Freescale_MQX_KSDK_1.0.0-KL43Z.bin Linux installer. Freescale MQX™ RTOS software   components fully pre-integrated with the Kinetis SDK. Includes the MQX   kernel, USB host and device stacks, MFS file system, and example   applications. Does not require prior installation of Kinetis SDK. 3 MQXKSDKKL43Z.pdf Freescale MQX™ RTOS for Kinetis   SDK FRDM-KL43Z Freescale Freedom Platform Release Notes ·         Target HW boards: o   Freescale Freedom FRDM-KL43Z platform with a MKL43Z256VLH4 processor ·         Key features:  o   PSP support for the MKL43Z256VLH4 Microcontroller o   BSP for the Freescale Freedom FRDM-KL43Z platform with a MKL43Z256VLH4 processor o   MQX STDLIB o   nShell o   KSDK Support for the MKL43Z256VLH4 Microcontroller o   MFS file system ·         Known issues For known issues and limitations please consult the release
View full article