This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CCS/EK-TM4C1294XL: How can I configurate Clock_tickPeriod in Code Composer Studio?

Part Number: EK-TM4C1294XL

Tool/software: Code Composer Studio

To whom it may concern,

I want to use EK_TM4C1294XL for controlling a high frequency power inverter. I wanted to run some example codes that I have downloaded from the original website of TI. I need some assistance to solve some problems related to Code Composer Studio.

I created an Empty Project in TI-RTOS Example. After that, I have composed a program that simulates a PWM Module. However, I would like to change the system clock setting (Clock_tickPeriod) due to the working principles of the Task_sleep() function that changes the current task's mode from Mode_RUNNING to Mode_BLOCKED, and delays its execution for nticks increments of the system clock, where the actual time delayed can be up to 1 system clock tick less than nticks due to granularity in system timekeeping and the time elapsed per tick is determined by Clock_tickPeriod. So, how can I declare a value for Clock_tickPeriod?

Secondly, I have created two pulse generators that do not work at the same time but 1280 ns apart from each other. How can I synchronize these two pulse generators to get output at the same time?

Moreover, I have created a while-loop , which can be seen down below, that includes two GPIO_toggle () functions. Is it possible to combine these functions into one?

 while (1) {

GPIO_toggle(Board_LED0);

Task_sleep((float)arg0);

GPIO_toggle(Board_LED1);

}

I kindly request your imminent assistance to solve this issue, which I'm on a deadline for.

I am sharing the codes below:


/* * Copyright (c) 2015, Texas Instruments Incorporated * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT OWNER OR * CONTRIBUTORS 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. */ /* * ======== empty.c ======== */ /* XDCtools Header files */ #include <xdc/std.h> #include <xdc/runtime/System.h> /* BIOS Header files */ #include <ti/sysbios/BIOS.h> #include <ti/sysbios/knl/Task.h> /* TI-RTOS Header files */ // #include <ti/drivers/EMAC.h> #include <ti/drivers/GPIO.h> #include <ti/drivers/PWM.h> #include <ti/drivers/PWM.c> // #include <ti/drivers/I2C.h> // #include <ti/drivers/SDSPI.h> // #include <ti/drivers/SPI.h> #include <ti/drivers/UART.h> // #include <ti/drivers/USBMSCHFatFs.h> // #include <ti/drivers/Watchdog.h> // #include <ti/drivers/WiFi.h> /* Board Header file */ #include "Board.h" #define TASKSTACKSIZE 512 Task_Struct task0Struct; Char task0Stack[TASKSTACKSIZE]; /* * ======== heartBeatFxn ======== * Toggle the Board_LED0. The Task_sleep is determined by arg0 which * is configured for the heartBeat Task instance. */ Void heartBeatFxn(UArg arg0, UArg arg1) { while (1) { GPIO_toggle(Board_LED0); Task_sleep((float)arg0); GPIO_toggle(Board_LED1); } } /* * ======== main ======== */ int main(void) { Task_Params taskParams; /* Call board init functions */ Board_initGeneral(); // Board_initEMAC(); Board_initGPIO(); Board_initPWM(); // Board_initI2C(); // Board_initSDSPI(); // Board_initSPI(); Board_initUART(); // Board_initUSB(Board_USBDEVICE); // Board_initUSBMSCHFatFs(); // Board_initWatchdog(); // Board_initWiFi(); /* Construct heartBeat Task thread */ Task_Params_init(&taskParams); taskParams.arg0 = 1; taskParams.stackSize = TASKSTACKSIZE; taskParams.stack = &task0Stack; Task_construct(&task0Struct, (Task_FuncPtr)heartBeatFxn, &taskParams, NULL); /* Turn on user LED */ //GPIO_write(Board_PWM0, Board_LED_ON ); //GPIO_write(Board_PWM1, Board_LED_ON ); System_printf("Starting the example\nSystem provider is set to SysMin. " "Halt the target to view any SysMin contents in ROV.\n"); /* SysMin will only print to the console when you call flush or exit */ System_flush(); /* Start BIOS */ BIOS_start(); return (0); }

  • Hi Emin,

    To adjust the clock period, you should modify the following in your kernel configuration (*.cfg).

    var Clock = xdc.useModule('ti.sysbios.knl.Clock');
    /*
     * Default value is family dependent. For example, Linux systems often only
     * support a minimum period of 10000 us and multiples of 10000 us.
     * TI platforms have a default of 1000 us.
     */
    Clock.tickPeriod = 1000;


    For the PWM, you may need to use the pwm files in the TivaC driverlib provided with the TI-RTOS product. The PWM driver (PWM.h interface) provides a device portable API set; therefore, device specific features may not be implemented. I would suggest consulting the TM4C1294 Technical Reference Manual to ensure the PWM is capable of synchronous starts. If so, you may use the PWM functions provided in the TivaC driverlib.

    The GPIO driver (GPIO.h) does not support toggling multiple GPIOs in a single call. You may be able to do so by writing directly to the GPIO registers or leveraging the gpio files in the TivaC driverlib.

    What version of TI-RTOS are you using?

    Derrick

  • Dear Derrick,

    Thank you for your quick response.

    To answer your question at the end of your message, I am using the TI-RTOS 2.16.00.08 version. 

    Following your instructions, I have altered the Clock.tickPeriod to 10. However, when I give "arg0" a value  of 1 I get an output frequency of 14 kHz; whereas the output frequency that I am supposed to obtain is 50 kHz. What could be the reason behind this? In addition to that, how can I manipulate my variables in order to obtain an output frequency of 300 kHz? For this, please refer to the codes in my previous message. 

    Moreover, I would like to create a PWM module by referencing the TivaWare Peripheral Driver Library codes. Could you kindly assist me in doing so? 

    I would kindly appreciate your assistance at your convenience.

    Regards,

    Emin

  • Emin,


    The tick period should not be relied on for generating a precise pulse train. Reducing the tick period introduces more latency into your application as an interrupt is generated for each tick. Further, a tick value of 1 can result in a sleep time only up to 1 tick.

    If you attempting to generate a synchronous pulse train on 2 IOs, then certainly the PWM module would be must better suited.

    Since the TI drivers APIs (PWM.h) does not support the sync feature you need, you should inspect the pwm.c and pwm.h driverlib implementations. Using these APIs will allow you to easily implement your own PWM module.

    As a reference, you should refer to the PWMTimerTiva.c which is based on the aforementioned pwm.c and pwm.h files.

    Derrick