//#############################################################################
//
// FILE:   empty_driverlib_main.c
//
// TITLE:  Empty Project
//
// Empty Project Example
//
// This example is an empty project setup for Driverlib development.
//
//#############################################################################
//
//
// $Copyright:
// Copyright (C) 2013-2026 Texas Instruments Incorporated - http://www.ti.com/
//
// 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.
// $
//#############################################################################

//
// Included Files
//
#include "driverlib.h"
#include "device.h"
#include "board.h"
#include "c2000ware_libraries.h"
#include "hal_f2837xD_freeRtos_upp.h"

__interrupt void UPP_ISR(void);

static UPP_Config_t upp_cfg = {
    .byteCount    = 8,
    .lineCount    = 21,
    .windowCount  = 1,
    .destBuffer   = NULL,
    .upp_instance = UPP_BASE
};

uint16_t DAC_Data[4] = {0x0314, 0x4014, 0x7D6B, 0x406B};

//
// Main
//
void main(void)
{

    //
    // Initialize device clock and peripherals
    //
    Device_init();

    DINT;

    //
    // Disable pin locks and enable internal pull-ups.
    //
    Device_initGPIO();

    //
    // Initialize PIE and clear PIE registers. Disables CPU interrupts.
    //
    Interrupt_initModule();

    IER = 0x0000;
    IFR = 0x0000;

    //
    // Initialize the PIE vector table with pointers to the shell Interrupt
    // Service Routines (ISR).
    //
    Interrupt_initVectorTable();

    //
    // PinMux and Peripheral Initialization
    //
    Board_init();

    //
    // C2000Ware Library initialization
    //
    C2000Ware_libraries_init();

    Interrupt_register(INT_UPPA, UPP_ISR);
    Interrupt_enable(INT_UPPA);
    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP8);

    //
    // Enable Global Interrupt (INTM) and real time interrupt (DBGM)
    //
    EINT;
    ERTM;

    uint16_t Iterator = 0;
    for(Iterator = 0; Iterator < 84; Iterator++)
    {
        HWREGH(UPP_CPU_TX_MSGRAM_STARTADDR + Iterator) = DAC_Data[Iterator % 4];
    }

    hal_f2837xD_freeRtos_UPP_configure(&upp_cfg);
    hal_f2837xD_freeRtos_UPP_initTXmode();
    hal_f2837xD_freeRtos_UPP_resetTxComplete();

    while(1)
    {
        GPIO_writePin(gpio_4, 1);
        hal_f2837xD_freeRtos_UPP_startTransmission();
        DEVICE_DELAY_US(1000);
        GPIO_writePin(gpio_4, 0);
    }
}

__interrupt void UPP_ISR(void)
{
    hal_f2837xD_freeRtos_UPP_Interrupt_Handler();
}
//
// End of File
//
