Пример #1
0
void time_init(void)
{
    extern const hwtimer_devif_t kSystickDevif;
    extern const hwtimer_devif_t kPitDevif;
    #define HWTIMER_LL_DEVIF    kPitDevif      // Use hardware timer PIT
    #define HWTIMER_LL_SRCCLK   kBusClock     // Source Clock for PIT
    #define HWTIMER_LL_ID       1
    #define HWTIMER_PERIOD      1000      // 1 ms interval

    if (kHwtimerSuccess != HWTIMER_SYS_Init(&hwtimer, &HWTIMER_LL_DEVIF, HWTIMER_LL_ID, 5, NULL))
    {
        USB_PRINTF("\r\nError: hwtimer initialization.\r\n");
    }
    if (kHwtimerSuccess != HWTIMER_SYS_SetPeriod(&hwtimer, HWTIMER_LL_SRCCLK, HWTIMER_PERIOD))
    {
        USB_PRINTF("\r\nError: hwtimer set period.\r\n");
    }
    if (kHwtimerSuccess != HWTIMER_SYS_RegisterCallback(&hwtimer, hwtimer_callback, NULL))
    {
        USB_PRINTF("\r\nError: hwtimer callback registration.\r\n");
    }
    if (kHwtimerSuccess != HWTIMER_SYS_Start(&hwtimer))
    {
        USB_PRINTF("\r\nError: hwtimer start.\r\n");
    }
}
Пример #2
0
void time_init(void)
{

    if (kHwtimerSuccess != HWTIMER_SYS_Init(&hwtimer, &HWTIMER_LL_DEVIF, HWTIMER_LL_ID, NULL))
    {
        USB_PRINTF("\r\nError: hwtimer initialization.\r\n");
    }
    if (kHwtimerSuccess != HWTIMER_SYS_SetPeriod(&hwtimer, HWTIMER_PERIOD))
    {
        USB_PRINTF("\r\nError: hwtimer set period.\r\n");
    }
    if (kHwtimerSuccess != HWTIMER_SYS_RegisterCallback(&hwtimer, hwtimer_callback, NULL))
    {
        USB_PRINTF("\r\nError: hwtimer callback registration.\r\n");
    }
    if (kHwtimerSuccess != HWTIMER_SYS_Start(&hwtimer))
    {
        USB_PRINTF("\r\nError: hwtimer start.\r\n");
    }

    OS_intr_init(HWTIMER_IRQ_NUM, HWTIMER_IRQ_PRI, 0, TRUE);
}
Пример #3
0
/*!
* \cond DOXYGEN_PRIVATE
* \brief Pre initialization - initializing requested modules for basic run of MQX.
*/
int _bsp_pre_init(void)
{
    uint32_t result;

/******************************************************************************
         Init gpio platform pins for LEDs, setup board clock source
******************************************************************************/
/* Macro PEX_MQX_KSDK used by PEX team */
#ifndef PEX_MQX_KSDK
    hardware_init();
    /* Configure PINS for default UART instance */
  #if defined(BOARD_USE_LPSCI)
    configure_lpsci_pins(BOARD_DEBUG_UART_INSTANCE);
  #elif defined(BOARD_USE_LPUART)
    configure_lpuart_pins(BOARD_DEBUG_UART_INSTANCE);
  #elif defined(BOARD_USE_UART)
    configure_uart_pins(BOARD_DEBUG_UART_INSTANCE);
  #else
    #error Default serial module is unsupported or undefined.
  #endif
#endif

#if MQX_EXIT_ENABLED
    extern void  _bsp_exit_handler(void);
    /* Set the bsp exit handler, called by _mqx_exit */
    _mqx_set_exit_handler(_bsp_exit_handler);
#endif

    result = _psp_int_init(BSP_FIRST_INTERRUPT_VECTOR_USED, BSP_LAST_INTERRUPT_VECTOR_USED);
    if (result != MQX_OK) {
        return result;
    }


/******************************************************************************
                        Init MQX tick timer
******************************************************************************/
    /* Initialize , set and run system hwtimer */
    result = HWTIMER_SYS_Init(&systimer, &BSP_SYSTIMER_DEV, BSP_SYSTIMER_ID, NULL);
    if (kStatus_OSA_Success != result) {
        return MQX_INVALID_POINTER;
    }
    /* Set isr for timer*/
    if (NULL == OSA_InstallIntHandler(BSP_SYSTIMER_INTERRUPT_VECTOR, HWTIMER_SYS_SystickIsrAction))
    {
        return kHwtimerRegisterHandlerError;
    }
    /* Set interrupt priority */
    NVIC_SetPriority(BSP_SYSTIMER_INTERRUPT_VECTOR, MQX_TO_NVIC_PRIOR(BSP_SYSTIMER_ISR_PRIOR));

    /* Disable  interrupts to ensure ticks are not active until call of _sched_start_internal */
    _int_disable();

    result = HWTIMER_SYS_SetPeriod(&systimer, BSP_ALARM_PERIOD);
    if (kStatus_OSA_Success != result) {
        HWTIMER_SYS_Deinit(&systimer);
        return MQX_INVALID_POINTER;
    }
    result = HWTIMER_SYS_RegisterCallback(&systimer,(hwtimer_callback_t)_time_notify_kernel, NULL);
    if (kStatus_OSA_Success != result) {
        HWTIMER_SYS_Deinit(&systimer);
        return MQX_INVALID_POINTER;
    }
    result = HWTIMER_SYS_Start(&systimer);
    if (kStatus_OSA_Success != result) {
        HWTIMER_SYS_Deinit(&systimer);
        return MQX_INVALID_POINTER;
    }

    /* Initialize the system ticks */
    _time_set_ticks_per_sec(BSP_ALARM_FREQUENCY);
    _time_set_hwticks_per_tick(HWTIMER_SYS_GetModulo(&systimer));
    _time_set_hwtick_function(_bsp_get_hwticks, (void *)NULL);

    return MQX_OK;
}
Пример #4
0
/*!
 * @brief Use DAC fifo to generate sine wave on DACx_OUT
 */
int32_t dac_gen_wave(void)
{
    dac_converter_config_t dacUserConfig;
    uint32_t period;

    // Fill the structure with configuration of software trigger
    DAC_DRV_StructInitUserConfigNormal(&dacUserConfig);
    
    // Initialize the DAC Converter
    DAC_DRV_Init(DAC_INST, &dacUserConfig);

    // Enable the feature of DAC internal buffer
    dacBuffConfig.bufferEnable = true;
    
#if FSL_FEATURE_DAC_HAS_WATERMARK_SELECTION
    dacBuffConfig.idxWatermarkIntEnable = false;
    dacBuffConfig.watermarkMode = kDacBuffWatermarkFromUpperAs2Word;
#endif
    dacBuffConfig.triggerMode = kDacTriggerBySoftware;
    dacBuffConfig.dmaEnable = false;
    dacBuffConfig.idxStartIntEnable = false;
    dacBuffConfig.idxUpperIntEnable = false;
    dacBuffConfig.upperIdx = FSL_FEATURE_DAC_BUFFER_SIZE - 1U;
#if (FSL_FEATURE_DAC_HAS_BUFFER_SWING_MODE && (FSL_FEATURE_DAC_BUFFER_SIZE == DAC_DATA_BUF_SIZE))
    dacBuffConfig.buffWorkMode = kDacBuffWorkAsSwingMode;    
#else
    dacBuffConfig.buffWorkMode = kDacBuffWorkAsNormalMode;
#endif

    DAC_DRV_ConfigBuffer(DAC_INST, &dacBuffConfig);

#if (FSL_FEATURE_DAC_HAS_BUFFER_SWING_MODE && (FSL_FEATURE_DAC_BUFFER_SIZE == DAC_DATA_BUF_SIZE))
    // Fill the buffer with setting data, applicable only if the data and buffer lenght are equal
    DAC_DRV_SetBuffValue(DAC_INST, 0U, FSL_FEATURE_DAC_BUFFER_SIZE, (uint16_t *)dacBuf);
#endif
    
    // Use HW timer of systick to do SW trigger of DAC,
    if (kHwtimerSuccess != HWTIMER_SYS_Init(&hwtimer, &kSystickDevif, 0, NULL))
    {
        return -1;
    }

    // Get the period the systick triggered.
    // There's 30 times of systick interrupt for one period of sine wave,
    // as we only have 16 data depth buffer for DAC, so we need to trigger
    // 30 times of interrupt to do software trigger.

    period = INPUT_SIGNAL_FREQ * (2 * DAC_DATA_BUF_SIZE - 2);
    if (kHwtimerSuccess != HWTIMER_SYS_SetPeriod(&hwtimer, 1000000/period))
    {
        return -1;
    }

    // install call back for SW trigger for DAC
    if (kHwtimerSuccess != HWTIMER_SYS_RegisterCallback(&hwtimer, hwtimer_callback, 0))
    {
        return -1;
    }

    // start systick timer
    if (kHwtimerSuccess != HWTIMER_SYS_Start(&hwtimer))
    {
        return -1;
    }

    return 0;
}