/* * * Copyright (c) 2018 Texas Instruments Incorporated * * All rights reserved not granted herein. * * Limited License. * * Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive * license under copyrights and patents it now or hereafter owns or controls to make, * have made, use, import, offer to sell and sell ("Utilize") this software subject to the * terms herein. With respect to the foregoing patent license, such license is granted * solely to the extent that any such patent is necessary to Utilize the software alone. * The patent license shall not apply to any combinations which include this software, * other than combinations with devices manufactured by or for TI ("TI Devices"). * No hardware patent is licensed hereunder. * * Redistributions must preserve existing copyright notices and reproduce this license * (including the above copyright notice and the disclaimer and (if applicable) source * code license limitations below) in the documentation and/or other materials provided * with the distribution * * Redistribution and use in binary form, without modification, are permitted provided * that the following conditions are met: * * * No reverse engineering, decompilation, or disassembly of this software is * permitted with respect to any software provided in binary form. * * * any redistribution and use are licensed by TI for use only with TI Devices. * * * Nothing shall obligate TI to provide you with source code for the software * licensed and provided to you in object code. * * If software source code is provided to you, modification and redistribution of the * source code are permitted provided that the following conditions are met: * * * any redistribution and use of the source code, including any resulting derivative * works, are licensed by TI for use only with TI Devices. * * * any redistribution and use of any object code compiled from the source code * and any resulting derivative works, are licensed by TI for use only with TI Devices. * * Neither the name of Texas Instruments Incorporated nor the names of its suppliers * * may be used to endorse or promote products derived from this software without * specific prior written permission. * * DISCLAIMER. * * THIS SOFTWARE IS PROVIDED BY TI AND TI'S LICENSORS "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 TI AND TI'S LICENSORS 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 #include #include #include #include #include #include #include #ifndef NULL_PTR #define NULL_PTR ((void *)0) #endif #define CLOCK_INTERVAL_TIME (1000) //10ms #define CLOCK_INTERVAL_UNIT_US (CLOCK_INTERVAL_TIME*1000) static TimerP_Params Ch1_CanMsg_TimerParams; static TimerP_Handle Ch1_CanMsg_Timer = NULL; static TimerP_Params Ch2_CanMsg_TimerParams; static TimerP_Handle Ch2_CanMsg_Timer = NULL; static void ch1_CanMsg_ClockHandler() { appLogPrintf("ch1_CanMsg_ClockHandler: action!!! ... !!!\n"); } static void ch2_CanMsg_ClockHandler() { appLogPrintf("ch2_CanMsg_ClockHandler: action!!! ... !!!\n"); } static void timer_handle() { TimerP_Handle handle; TimerP_Params_init(&Ch1_CanMsg_TimerParams); Ch1_CanMsg_TimerParams.runMode = TimerP_RunMode_CONTINUOUS; Ch1_CanMsg_TimerParams.startMode = TimerP_StartMode_AUTO ; Ch1_CanMsg_TimerParams.periodType = TimerP_PeriodType_MICROSECS ; Ch1_CanMsg_TimerParams.period = CLOCK_INTERVAL_UNIT_US; Ch1_CanMsg_TimerParams.arg = NULL_PTR; Ch1_CanMsg_Timer = TimerP_create(0, (TimerP_Fxn)&ch1_CanMsg_ClockHandler, &Ch1_CanMsg_TimerParams); TimerP_start((TimerP_Handle)Ch1_CanMsg_Timer); #if 0 TimerP_Params_init(&Ch2_CanMsg_TimerParams); Ch2_CanMsg_TimerParams.runMode = TimerP_RunMode_CONTINUOUS; Ch2_CanMsg_TimerParams.startMode = TimerP_StartMode_AUTO ; Ch2_CanMsg_TimerParams.periodType = TimerP_PeriodType_MICROSECS ; Ch2_CanMsg_TimerParams.period = CLOCK_INTERVAL_UNIT_US; Ch2_CanMsg_TimerParams.arg = NULL_PTR; Ch2_CanMsg_Timer = TimerP_create(2, (TimerP_Fxn)&ch2_CanMsg_ClockHandler, &Ch2_CanMsg_TimerParams); TimerP_start((TimerP_Handle)Ch2_CanMsg_Timer); #endif } static void appMain(void* arg0, void* arg1) { int count = 0; appInit(); appRun(); appLogPrintf("========= timer_handle =========\n"); timer_handle(); #if 1 while(1) { appLogWaitMsecs(100u); if(count%10 == 0) appLogPrintf("mcu2_1_run[%d]\n",count); count++; } #else appDeInit(); #endif } void StartupEmulatorWaitFxn (void) { volatile uint32_t enableDebug = 0; do { }while (enableDebug); } static uint8_t gTskStackMain[8*1024] __attribute__ ((section(".bss:taskStackSection"))) __attribute__ ((aligned(8192))) ; int main(void) { TaskP_Params tskParams; TaskP_Handle task; /* This is for debug purpose - see the description of function header */ StartupEmulatorWaitFxn(); OS_init(); TaskP_Params_init(&tskParams); tskParams.priority = 8u; tskParams.stack = gTskStackMain; tskParams.stacksize = sizeof (gTskStackMain); task = TaskP_create(appMain, &tskParams); if(NULL == task) { OS_stop(); } OS_start(); return 0; } uint32_t appGetDdrSharedHeapSize() { return DDR_SHARED_MEM_SIZE; }