AnsweredAssumed Answered

Using ADC16_DRV_Init in MQX, KDS 3.1, KSDK 1.3

Question asked by Duane Owens on Feb 9, 2016
Latest reply on Feb 12, 2016 by Duane Owens

Hello,  I started with the dac_adc_demo application in C:\Freescale\KSDK_1.3.0\examples\frdmk64f\demo_apps.  I made a number of changes to the demo and everything worked great.  Once I got a comfort level with some of the workings of the ADC/DAC drivers, I moved parts of the code into an MQX project, since that is the end goal.


Now, I get Hard Fault's when I try to initialize members of the standard ADC structures in the fsl_adc16_driver.h.

I am using the same related code as was in the bare metal application.  The typedefs, structures and malloc's are all from the demo.  I'm sorry this is probably a basic question.


Can someone tell me why it doesn't work in the MQX project?

The relevant code is:

#include "fsl_adc16_driver.h"
#include "fsl_gpio_driver.h"
#include "gpio_pins.h"
// Application Included Files
#define LED_ON                  (0U)
#define LED_OFF                 (1U)
#define ON   (1U)
#define OFF   (0U)

** ===================================================================
**     Callback    : Main_Task
**     Description : Task function entry.
**     Parameters  :
**       task_init_data - OS task parameter
**     Returns : Nothing
** ===================================================================
adc16_converter_config_t *g_adcConfig;

void Main_Task(os_task_param_t task_init_data)
  /* Write your local variable definition here */
    g_adcConfig = (adc16_converter_config_t *)OSA_MemAlloc(sizeof(adc16_converter_config_t));


    GPIO_DRV_Init(NULL, ledPins);

    g_adcConfigs->clkDividerMode = kAdc16ClkDividerOf2;
    g_adcConfigs->lowPowerEnable = true;

  while (1) {
    /* Write your code here ... */
    //demo_state_machine(); // User menu, viewable through serial terminal
#ifdef PEX_USE_RTOS  



I was able to get it to work by changing the declaration, malloc & assignments to:


adc16_converter_config_t tadcConfig;


adc16_converter_config_t *adcConfig = OSA_MemAlloc(sizeof(adc16_converter_config_t));



adcConfig = &tadcConfig;


But it doesn't explain why it didn't work before.