From ad51f1d9c6fc9c1f94db6aa93498e01f9f404626 Mon Sep 17 00:00:00 2001 From: nicoboy Date: Sat, 1 Aug 2026 11:20:37 +0200 Subject: [PATCH] Initial commit: F28027 dualboost LED blink project --- .ccsproject | 9 + .clangd | 8 + .cproject | 118 +++++++++ .gitignore | 7 + .project | 97 ++++++++ .settings/org.eclipse.cdt.codan.core.prefs | 3 + .settings/org.eclipse.core.resources.prefs | 6 + Example_2802xLEDBlink.c | 265 +++++++++++++++++++++ targetConfigs/TMS320F28027.ccxml | 13 + targetConfigs/readme.txt | 9 + 10 files changed, 535 insertions(+) create mode 100644 .ccsproject create mode 100644 .clangd create mode 100644 .cproject create mode 100644 .gitignore create mode 100644 .project create mode 100644 .settings/org.eclipse.cdt.codan.core.prefs create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 Example_2802xLEDBlink.c create mode 100644 targetConfigs/TMS320F28027.ccxml create mode 100644 targetConfigs/readme.txt diff --git a/.ccsproject b/.ccsproject new file mode 100644 index 0000000..bc7a4af --- /dev/null +++ b/.ccsproject @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.clangd b/.clangd new file mode 100644 index 0000000..8b17bdc --- /dev/null +++ b/.clangd @@ -0,0 +1,8 @@ +# This is an auto-generated file - do not add it to source-control + +CompileFlags: + CompilationDatabase: Debug/.clangd + +Diagnostics: + Suppress: '*' + diff --git a/.cproject b/.cproject new file mode 100644 index 0000000..f30f33f --- /dev/null +++ b/.cproject @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e1b45f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +Debug/ +Release/ +*.obj +*.d +*.d_raw +*.out +*.map diff --git a/.project b/.project new file mode 100644 index 0000000..ce08d8c --- /dev/null +++ b/.project @@ -0,0 +1,97 @@ + + + TMS320F28027-dualboost + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + F2802x_GlobalVariableDefs.c + 1 + INSTALLROOT_F2802x1/headers/source/F2802x_GlobalVariableDefs.c + + + F2802x_Headers_nonBIOS.cmd + 1 + INSTALLROOT_F2802x1/headers/cmd/F2802x_Headers_nonBIOS.cmd + + + F2802x_generic_ram.cmd + 1 + INSTALLROOT_F2802x1/common/cmd/F2802x_generic_ram.cmd + + + f2802x_codestartbranch.asm + 1 + INSTALLROOT_F2802x1/common/source/f2802x_codestartbranch.asm + + + f2802x_cputimers.c + 1 + INSTALLROOT_F2802x1/common/source/f2802x_cputimers.c + + + f2802x_defaultisr.c + 1 + INSTALLROOT_F2802x1/common/source/f2802x_defaultisr.c + + + f2802x_piectrl.c + 1 + INSTALLROOT_F2802x1/common/source/f2802x_piectrl.c + + + f2802x_pievect.c + 1 + INSTALLROOT_F2802x1/common/source/f2802x_pievect.c + + + f2802x_sysctrl.c + 1 + INSTALLROOT_F2802x1/common/source/f2802x_sysctrl.c + + + f2802x_usdelay.asm + 1 + INSTALLROOT_F2802x1/common/source/f2802x_usdelay.asm + + + + + INSTALLROOT_F2802x + $%7BPARENT-3-ORIGINAL_PROJECT_ROOT%7D + + + INSTALLROOT_F2802x1 + $%7BTI_PRODUCTS_DIR%7D/C2000Ware_26_01_00_00/device_support/f2802x + + + INSTALLROOT_IQMATH + $%7BPARENT-5-ORIGINAL_PROJECT_ROOT%7D/libraries/math/IQmath/c28 + + + ORIGINAL_PROJECT_ROOT + $%7BCOM_TI_C2000WARE_INSTALL_DIR%7D/device_support/f2802x/examples/structs/timed_led_blink + + + diff --git a/.settings/org.eclipse.cdt.codan.core.prefs b/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..f653028 --- /dev/null +++ b/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..093dbb9 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +encoding//Debug/makefile=UTF-8 +encoding//Debug/objects.mk=UTF-8 +encoding//Debug/sources.mk=UTF-8 +encoding//Debug/subdir_rules.mk=UTF-8 +encoding//Debug/subdir_vars.mk=UTF-8 diff --git a/Example_2802xLEDBlink.c b/Example_2802xLEDBlink.c new file mode 100644 index 0000000..874d9b8 --- /dev/null +++ b/Example_2802xLEDBlink.c @@ -0,0 +1,265 @@ +//########################################################################### +// +// FILE: Example_2802xLedBlink.c +// +// TITLE: f2802x LED Blink Getting Started Program. +// +// ASSUMPTIONS: +// +// This program requires the f2802x header files. +// As supplied, this project is configured for "boot to SARAM" +// operation. The 2802x Boot Mode table is shown below. +// +// $Boot_Table +// While an emulator is connected to your device, the TRSTn pin = 1, +// which sets the device into EMU_BOOT boot mode. In this mode, the +// peripheral boot modes are as follows: +// +// Boot Mode: EMU_KEY EMU_BMODE +// (0xD00) (0xD01) +// --------------------------------------- +// Wait !=0x55AA X +// I/O 0x55AA 0x0000 +// SCI 0x55AA 0x0001 +// Wait 0x55AA 0x0002 +// Get_Mode 0x55AA 0x0003 +// SPI 0x55AA 0x0004 +// I2C 0x55AA 0x0005 +// OTP 0x55AA 0x0006 +// Wait 0x55AA 0x0007 +// Wait 0x55AA 0x0008 +// SARAM 0x55AA 0x000A <-- "Boot to SARAM" +// Flash 0x55AA 0x000B +// Wait 0x55AA Other +// +// Write EMU_KEY to 0xD00 and EMU_BMODE to 0xD01 via the debugger +// according to the Boot Mode Table above. Build/Load project, +// Reset the device, and Run example +// +// $End_Boot_Table +// +// DESCRIPTION: +// +// This example configures CPU Timer0 for a 500 msec period, and toggles the +// GPIO34 LED once per interrupt. For testing purposes, this example +// also increments a counter each time the timer asserts an interrupt. +// +// Watch Variables: +// CpuTimer0.InterruptCount +// +// Monitor the GPIO34 LED blink on (for 500 msec) and off (for 500 msec) +// on the 2802x control card. +// +//########################################################################### +// $TI Release: $ +// $Release Date: $ +// $Copyright: +// Copyright (C) 2009-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 "DSP28x_Project.h" // Device Headerfile and Examples Include File + +// +// Function Prototypes +// +__interrupt void cpu_timer0_isr(void); + +// +// Main +// +void main(void) +{ + // + // WARNING: Always ensure you call memcpy before running any functions from + // RAM InitSysCtrl includes a call to a RAM based function and without a + // call to memcpy first, the processor will go "into the weeds" + // +#ifdef _FLASH + memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize); +#endif + + // + // Step 1. Initialize System Control: + // PLL, WatchDog, enable Peripheral Clocks + // This example function is found in the f2802x_SysCtrl.c file. + // + InitSysCtrl(); + + // + // Step 2. Initialize GPIO: + // This example function is found in the f2802x_Gpio.c file and + // illustrates how to set the GPIO to it's default state. + // + //InitGpio(); // Skipped for this example + + // + // Step 3. Clear all interrupts and initialize PIE vector table: + // Disable CPU interrupts + // + DINT; + + // + // Initialize the PIE control registers to their default state. + // The default state is all PIE interrupts disabled and flags + // are cleared. + // This function is found in the f2802x_PieCtrl.c file. + // + InitPieCtrl(); + + // + // Disable CPU interrupts and clear all CPU interrupt flags + // + IER = 0x0000; + IFR = 0x0000; + + // + // Initialize the PIE vector table with pointers to the shell Interrupt + // Service Routines (ISR). + // This will populate the entire table, even if the interrupt + // is not used in this example. This is useful for debug purposes. + // The shell ISR routines are found in f2802x_DefaultIsr.c. + // This function is found in f2802x_PieVect.c. + // + InitPieVectTable(); + + // + // Interrupts that are used in this example are re-mapped to + // ISR functions found within this file. + // + EALLOW; // This is needed to write to EALLOW protected registers + PieVectTable.TINT0 = &cpu_timer0_isr; + EDIS; // This is needed to disable write to EALLOW protected registers + + // + // Step 4. Initialize the Device Peripheral. This function can be + // found in f2802x_CpuTimers.c + // + + // + // For this example, only initialize the Cpu Timers + // + InitCpuTimers(); + + // + // Configure CPU-Timer 0 to interrupt every 500 milliseconds: + // 60MHz CPU Freq, 50 millisecond Period (in uSeconds) + // + ConfigCpuTimer(&CpuTimer0, 60, 500000); + + // + // To ensure precise timing, use write-only instructions to write to the + // entire register. Therefore, if any of the configuration bits are changed + // in ConfigCpuTimer and InitCpuTimers (in f2802x_CpuTimers.h), the + // below settings must also be updated. + // + + // + // Use write-only instruction to set TSS bit = 0 + // + CpuTimer0Regs.TCR.all = 0x4001; + + // + // Step 5. User specific code, enable interrupts + // + + // + // Configure GPIO12 (blue LED) and GPIO33 (red LED) as GPIO output pins + // + EALLOW; + GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 0; + GpioCtrlRegs.GPADIR.bit.GPIO12 = 1; + GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 0; + GpioCtrlRegs.GPBDIR.bit.GPIO33 = 1; + GpioDataRegs.GPACLEAR.bit.GPIO12 = 1; + GpioDataRegs.GPBCLEAR.bit.GPIO33 = 1; + EDIS; + + // + // Enable CPU INT1 which is connected to CPU-Timer 0 + // + IER |= M_INT1; + + // + // Enable TINT0 in the PIE: Group 1 interrupt 7 + // + PieCtrlRegs.PIEIER1.bit.INTx7 = 1; + + // + // Enable global Interrupts and higher priority real-time debug events + // + EINT; // Enable Global interrupt INTM + ERTM; // Enable Global realtime interrupt DBGM + + // + // Step 6. IDLE loop. Just sit and loop forever (optional) + // + for(;;); +} + +// +// cpu_timer0_isr - +// +__interrupt void +cpu_timer0_isr(void) +{ + static Uint16 ledState = 0; + + CpuTimer0.InterruptCount++; + + // + // Alternate between the blue LED (GPIO12) and the red LED (GPIO33) every 500 milliseconds + // + if (ledState == 0) + { + GpioDataRegs.GPASET.bit.GPIO12 = 1; + GpioDataRegs.GPBCLEAR.bit.GPIO33 = 1; + } + else + { + GpioDataRegs.GPACLEAR.bit.GPIO12 = 1; + GpioDataRegs.GPBSET.bit.GPIO33 = 1; + } + ledState = (ledState + 1) % 2; + + // + // Acknowledge this interrupt to receive more interrupts from group 1 + // + PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; +} + +// +// End of File +// + diff --git a/targetConfigs/TMS320F28027.ccxml b/targetConfigs/TMS320F28027.ccxml new file mode 100644 index 0000000..12d878f --- /dev/null +++ b/targetConfigs/TMS320F28027.ccxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/targetConfigs/readme.txt b/targetConfigs/readme.txt new file mode 100644 index 0000000..d783fef --- /dev/null +++ b/targetConfigs/readme.txt @@ -0,0 +1,9 @@ +The 'targetConfigs' folder contains target-configuration (.ccxml) files, automatically generated based +on the device and connection settings specified in your project on the Properties > General page. + +Please note that in automatic target-configuration management, changes to the project's device and/or +connection settings will either modify an existing or generate a new target-configuration file. Thus, +if you manually edit these auto-generated files, you may need to re-apply your changes. Alternatively, +you may create your own target-configuration file for this project and manage it manually. You can +always switch back to automatic target-configuration management by checking the "Manage the project's +target-configuration automatically" checkbox on the project's Properties > General page. \ No newline at end of file