Overview 

In this experiment, we are going to use the timer interrupt to perform the Led blinking operation and to check the time. To perform several tasks at a time we use the timer interrupt.

Components required table

S.N.COMPONENTSDESCRIPTIONQUANTITY
1LAUNCHXL-F28379DLAUNCHXL-F28379D1https://evelta.com/launchxl-f28379d-
2Logic AnalyserLogic Analyser1https://www.amazon.in/New-Logic-Analyser-24MHz-FPGA
3USB Cable, A-Male to Mini-B Cord USB 2.0USB Cable, A-Male to Mini-B Cord USB 2.01https://www.amazon.in/AmazonBasics-USB-2-0
4connection wiresJumper Wires20https://www.amazon.in/YUVS-Jumper-Wires-female

Introduction

This section describes the three 32-bit CPU-Timers (TIMER0/1/2).CPU-Timer0 and CPU-Timer1 can be used in user applications. CPU-Timer2 is reserved for real-time operating system uses (for example, TI-RTOS). If the application is not using an operating system that utilizes this timer, then CPU-Timer2 can be used in the application. CPU-Timer0 and CPU-Timer1 run off of SYSCLK. CPU-Timer2 normally runs off of SYSCLK, but can also use INTOSC1, INTOSC2, XTAL, and AUXPLLCLK. The CPU-Timer interrupt signals (TINT0, TINT1, TINT2) are connected as shown in Figure 3-11.

A ] The timer registers are connected to the memory bus of the C28x processor.

B ] The CPU Timers are synchronized to SYSCLKOUT.

The general operation of the CPU-Timer is as follows:

  • The 32-bit counter register, TIMH: TIM, is loaded with the value in the period register PRDH: PRD
  • The counter decrements once every (TPR[TDDRH: TDDR]+1) SYSCLKOUT cycles, where
  • TDDRH:TDDR is the timer divider.
  • When the counter reaches 0, a timer interrupts the output signal and generates an interrupt pulse.
  • The registers listed in Section 3.15 are used to configure the timers.

Final Code

/*
 * Timer.c
 *
 *  Created on: 09-Aug-2022
 *      Author: Admin
 */
#include "F28x_Project.h"
#include "F2837xD_device.h"
#include "F2837xD_Examples.h"
#include "device.h"
#include "driverlib.h"

void initCPUTimers(void);
void configCPUTimer(uint32_t cpuTimer, float freq, float period);
__interrupt void cpuTimer0ISR(void);

void gpio_init(void);


void main(void)
{

    Device_init();
    Device_initGPIO();

    DINT;
    Interrupt_initModule();
    Interrupt_initVectorTable();

    gpio_init();


    Interrupt_register(INT_TIMER0, &cpuTimer0ISR);
    initCPUTimers();
    configCPUTimer(CPUTIMER0_BASE, DEVICE_SYSCLK_FREQ, 500000);
    Interrupt_enable(INT_TIMER0);

    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);
    EINT;
    ERTM;

    CPUTimer_startTimer(CPUTIMER0_BASE);        // squib 0 timer start

    while(1)
    {

    }
}

void initCPUTimers(void)
{
    //
    // Initialize timer period to maximum
    //
    CPUTimer_setPeriod(CPUTIMER0_BASE, 0xFFFFFFFF);
    //
    // Initialize pre-scale counter to divide by 1 (SYSCLKOUT)
    //
    CPUTimer_setPreScaler(CPUTIMER0_BASE, 0);
    //
    // Make sure timer is stopped
    //
    CPUTimer_stopTimer(CPUTIMER0_BASE);
    //
    // Reload all counter register with period value
    //
    CPUTimer_reloadTimerCounter(CPUTIMER0_BASE);
//    cpuTimer0IntCount = 0;
}

void configCPUTimer(uint32_t cpuTimer, float freq, float period)
{
    uint32_t temp;

    //
    // Initialize timer period:
    //
    temp = (uint32_t)(freq / 1000000 * period);
    CPUTimer_setPeriod(cpuTimer, temp);

    //
    // Set pre-scale counter to divide by 1 (SYSCLKOUT):
    //
    CPUTimer_setPreScaler(cpuTimer, 0);

    //
    // Initializes timer control register. The timer is stopped, reloaded,
    // free run disabled, and interrupt enabled.
    // Additionally, the free and soft bits are set
    //
    CPUTimer_stopTimer(cpuTimer);
    CPUTimer_reloadTimerCounter(cpuTimer);
    CPUTimer_setEmulationMode(cpuTimer,
                              CPUTIMER_EMULATIONMODE_STOPAFTERNEXTDECREMENT);
    CPUTimer_enableInterrupt(cpuTimer);

}


__interrupt void cpuTimer0ISR(void)
{

//    cpuTimer0IntCount++;

    GPIO_togglePin(32);

    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP1);
}

void gpio_init(void)
{

    EALLOW;

    // HEALTH CHECK LED
    GPIO_setDirectionMode(32, GPIO_DIR_MODE_OUT);
    GPIO_setMasterCore(32, GPIO_CORE_CPU1);
    GPIO_setPinConfig(GPIO_32_GPIO32);
    GPIO_setQualificationMode(32, GPIO_QUAL_ASYNC);

    EDIS;
}

Output Images

By Devilal

Leave a Reply

Your email address will not be published. Required fields are marked *