Начало
This commit is contained in:
212
Source/External/v120/DSP2833x_examples/adc_dma/Example_2833xAdcToDMA.c
vendored
Normal file
212
Source/External/v120/DSP2833x_examples/adc_dma/Example_2833xAdcToDMA.c
vendored
Normal file
@@ -0,0 +1,212 @@
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xAdcToDMA.c
|
||||
//
|
||||
// TITLE: DSP2833x ADC To DMA
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// Make sure the CPU clock speed is properly defined in
|
||||
// DSP2833x_Examples.h before compiling this example.
|
||||
//
|
||||
// Connect the signals to be converted to channel A0, A1, A2, and A3.
|
||||
//
|
||||
// As supplied, this project is configured for "boot to SARAM"
|
||||
// operation. The 2833x Boot Mode table is shown below.
|
||||
// For information on configuring the boot mode of an eZdsp,
|
||||
// please refer to the documentation included with the eZdsp,
|
||||
//
|
||||
// $Boot_Table:
|
||||
//
|
||||
// GPIO87 GPIO86 GPIO85 GPIO84
|
||||
// XA15 XA14 XA13 XA12
|
||||
// PU PU PU PU
|
||||
// ==========================================
|
||||
// 1 1 1 1 Jump to Flash
|
||||
// 1 1 1 0 SCI-A boot
|
||||
// 1 1 0 1 SPI-A boot
|
||||
// 1 1 0 0 I2C-A boot
|
||||
// 1 0 1 1 eCAN-A boot
|
||||
// 1 0 1 0 McBSP-A boot
|
||||
// 1 0 0 1 Jump to XINTF x16
|
||||
// 1 0 0 0 Jump to XINTF x32
|
||||
// 0 1 1 1 Jump to OTP
|
||||
// 0 1 1 0 Parallel GPIO I/O boot
|
||||
// 0 1 0 1 Parallel XINTF boot
|
||||
// 0 1 0 0 Jump to SARAM <- "boot to SARAM"
|
||||
// 0 0 1 1 Branch to check boot mode
|
||||
// 0 0 1 0 Boot to flash, bypass ADC cal
|
||||
// 0 0 0 1 Boot to SARAM, bypass ADC cal
|
||||
// 0 0 0 0 Boot to SCI-A, bypass ADC cal
|
||||
// Boot_Table_End$
|
||||
//
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// ADC is setup to convert 4 channels for each SOC received, with total of 10 SOCs.
|
||||
// Each SOC initiates 4 conversions.
|
||||
// DMA is set up to capture the data on each SEQ1_INT. DMA will re-sort
|
||||
// the data by channel sequentially, i.e. all channel0 data will be together
|
||||
// all channel1 data will be together.
|
||||
//
|
||||
// Code should stop in local_DINTCH1_ISR when complete
|
||||
//
|
||||
// Watch Variables:
|
||||
// DMABuf1
|
||||
//
|
||||
//###########################################################################
|
||||
//
|
||||
// Original source by: M.P.
|
||||
//
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
|
||||
// ADC start parameters
|
||||
#if (CPU_FRQ_150MHZ) // Default - 150 MHz SYSCLKOUT
|
||||
#define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz
|
||||
#endif
|
||||
#if (CPU_FRQ_100MHZ)
|
||||
#define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz
|
||||
#endif
|
||||
#define ADC_CKPS 0x1 // ADC module clock = HSPCLK/2*ADC_CKPS = 25.0MHz/(1*2) = 12.5MHz
|
||||
#define ADC_SHCLK 0xf // S/H width in ADC module periods = 16 ADC clocks
|
||||
#define AVG 1000 // Average sample limit
|
||||
#define ZOFFSET 0x00 // Average Zero offset
|
||||
#define BUF_SIZE 40 // Sample buffer size
|
||||
|
||||
// Global variable for this example
|
||||
Uint16 j=0;
|
||||
|
||||
#pragma DATA_SECTION(DMABuf1,"DMARAML4");
|
||||
volatile Uint16 DMABuf1[40];
|
||||
|
||||
volatile Uint16 *DMADest;
|
||||
volatile Uint16 *DMASource;
|
||||
interrupt void local_DINTCH1_ISR(void);
|
||||
|
||||
void main(void)
|
||||
{
|
||||
Uint16 i;
|
||||
// Step 1. Initialize System Control:
|
||||
// PLL, WatchDog, enable Peripheral Clocks
|
||||
// This example function is found in the DSP2833x_SysCtrl.c file.
|
||||
InitSysCtrl();
|
||||
|
||||
// Specific clock setting for this example:
|
||||
EALLOW;
|
||||
SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/ADC_MODCLK
|
||||
EDIS;
|
||||
|
||||
// Step 2. Initialize GPIO:
|
||||
// This example function is found in the DSP2833x_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 DSP2833x_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 DSP2833x_DefaultIsr.c.
|
||||
// This function is found in DSP2833x_PieVect.c.
|
||||
InitPieVectTable();
|
||||
|
||||
// Interrupts that are used in this example are re-mapped to
|
||||
// ISR functions found within this file.
|
||||
EALLOW; // Allow access to EALLOW protected registers
|
||||
PieVectTable.DINTCH1= &local_DINTCH1_ISR;
|
||||
EDIS; // Disable access to EALLOW protected registers
|
||||
|
||||
IER = M_INT7 ; //Enable INT7 (7.1 DMA Ch1)
|
||||
EnableInterrupts();
|
||||
|
||||
// Step 4. Initialize all the Device Peripherals:
|
||||
// This function is found in DSP2833x_InitPeripherals.c
|
||||
// InitPeripherals(); // Not required for this example
|
||||
InitAdc(); // For this example, init the ADC
|
||||
|
||||
// Specific ADC setup for this example:
|
||||
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;
|
||||
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;
|
||||
AdcRegs.ADCTRL1.bit.SEQ_CASC = 0; // 0 Non-Cascaded Mode
|
||||
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x1;
|
||||
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1;
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1;
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2;
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x3;
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x0;
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x1;
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x2;
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x3;
|
||||
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 3; // Set up ADC to perform 4 conversions for every SOC
|
||||
|
||||
//Step 5. User specific code, enable interrupts:
|
||||
// Initialize DMA
|
||||
DMAInitialize();
|
||||
|
||||
// Clear Table
|
||||
for (i=0; i<BUF_SIZE; i++)
|
||||
{
|
||||
DMABuf1[i] = 0;
|
||||
}
|
||||
|
||||
|
||||
// Configure DMA Channel
|
||||
DMADest = &DMABuf1[0]; //Point DMA destination to the beginning of the array
|
||||
DMASource = &AdcMirror.ADCRESULT0; //Point DMA source to ADC result register base
|
||||
DMACH1AddrConfig(DMADest,DMASource);
|
||||
DMACH1BurstConfig(3,1,10);
|
||||
DMACH1TransferConfig(9,1,0);
|
||||
DMACH1WrapConfig(1,0,0,1);
|
||||
DMACH1ModeConfig(DMA_SEQ1INT,PERINT_ENABLE,ONESHOT_DISABLE,CONT_DISABLE,SYNC_DISABLE,SYNC_SRC,
|
||||
OVRFLOW_DISABLE,SIXTEEN_BIT,CHINT_END,CHINT_ENABLE);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
StartDMACH1();
|
||||
|
||||
|
||||
|
||||
// Start SEQ1
|
||||
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1;
|
||||
for(i=0;i<10;i++){
|
||||
for(j=0;j<1000;j++){}
|
||||
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; //Normally ADC will be tied to ePWM, or timed routine
|
||||
} //For this example will re-start manually
|
||||
|
||||
}
|
||||
|
||||
// INT7.1
|
||||
interrupt void local_DINTCH1_ISR(void) // DMA Channel 1
|
||||
{
|
||||
|
||||
// To receive more interrupts from this PIE group, acknowledge this interrupt
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP7;
|
||||
|
||||
// Next two lines for debug only to halt the processor here
|
||||
// Remove after inserting ISR Code
|
||||
asm (" ESTOP0");
|
||||
for(;;);
|
||||
}
|
||||
|
||||
|
||||
36
Source/External/v120/DSP2833x_examples/adc_dma/Example_2833xAdcToDMA.gel
vendored
Normal file
36
Source/External/v120/DSP2833x_examples/adc_dma/Example_2833xAdcToDMA.gel
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
// TI File $Revision: /main/1 $
|
||||
// Checkin $Date: August 14, 2007 14:20:30 $
|
||||
//###########################################################################
|
||||
//
|
||||
// This .gel file can be used to help load and build the example project.
|
||||
// It should be unloaded from Code Composer Studio before loading another
|
||||
// project.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
menuitem "DSP2833x ADC SOC Example"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xAdcToDMA.pjt");
|
||||
GEL_ProjectBuild("Example_2833xAdcToDMA.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xAdcToDMA.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("AdcRegs,x");
|
||||
GEL_WatchAdd("DMABuf1,x");
|
||||
}
|
||||
47
Source/External/v120/DSP2833x_examples/adc_dma/Example_2833xAdcToDMA.pjt
vendored
Normal file
47
Source/External/v120/DSP2833x_examples/adc_dma/Example_2833xAdcToDMA.pjt
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
; Code Composer Project File, Version 2.0 (do not modify or remove this line)
|
||||
|
||||
[Project Settings]
|
||||
ProjectName="DSP28"
|
||||
ProjectDir="C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\adc_dma\"
|
||||
ProjectType=Executable
|
||||
CPUFamily=TMS320C28XX
|
||||
Tool="Compiler"
|
||||
Tool="CustomBuilder"
|
||||
Tool="DspBiosBuilder"
|
||||
Tool="Linker"
|
||||
Config="Debug"
|
||||
Config="Release"
|
||||
|
||||
[Source Files]
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_Adc.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ADC_cal.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CodeStartBranch.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DMA.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieVect.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_SysCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_usDelay.asm"
|
||||
Source="..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c"
|
||||
Source="Example_2833xAdcToDMA.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\adc_dma\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\adc_dma\Debug" -i"..\..\DSP2833x_headers\include" -i"..\..\DSP2833x_common\include" -d"_DEBUG" -d"LARGE_MODEL" --float_support=fpu32 -ml -mt -v28
|
||||
|
||||
["Compiler" Settings: "Release"]
|
||||
Options=-q -o3 -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\adc_dma\Release" -d"LARGE_MODEL" -ml -v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Debug"]
|
||||
Options=-v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Release"]
|
||||
Options=-v28
|
||||
|
||||
["Linker" Settings: "Debug"]
|
||||
Options=-q -c -ecode_start -m".\Debug\Example_2833xAdcToDMA.map" -o".\Debug\Example_2833xAdcToDMA.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xAdcToDMA.out" -x
|
||||
|
||||
266
Source/External/v120/DSP2833x_examples/adc_seq_ovd_test/Example_2833xAdcSeq_ovdTest.c
vendored
Normal file
266
Source/External/v120/DSP2833x_examples/adc_seq_ovd_test/Example_2833xAdcSeq_ovdTest.c
vendored
Normal file
@@ -0,0 +1,266 @@
|
||||
// TI File $Revision: /main/10 $
|
||||
// Checkin $Date: April 21, 2008 15:40:51 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xAdcSeq_ovdTest.c
|
||||
//
|
||||
// TITLE: DSP2833x ADC Seq Override mode Test.
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// Make sure the CPU clock speed is properly defined in
|
||||
// DSP2833x_Examples.h before compiling this example.
|
||||
//
|
||||
// Connect the signal to be converted to Channel A0.
|
||||
//
|
||||
// As supplied, this project is configured for "boot to SARAM"
|
||||
// operation. The 2833x Boot Mode table is shown below.
|
||||
// For information on configuring the boot mode of an eZdsp,
|
||||
// please refer to the documentation included with the eZdsp,
|
||||
//
|
||||
// $Boot_Table:
|
||||
//
|
||||
// GPIO87 GPIO86 GPIO85 GPIO84
|
||||
// XA15 XA14 XA13 XA12
|
||||
// PU PU PU PU
|
||||
// ==========================================
|
||||
// 1 1 1 1 Jump to Flash
|
||||
// 1 1 1 0 SCI-A boot
|
||||
// 1 1 0 1 SPI-A boot
|
||||
// 1 1 0 0 I2C-A boot
|
||||
// 1 0 1 1 eCAN-A boot
|
||||
// 1 0 1 0 McBSP-A boot
|
||||
// 1 0 0 1 Jump to XINTF x16
|
||||
// 1 0 0 0 Jump to XINTF x32
|
||||
// 0 1 1 1 Jump to OTP
|
||||
// 0 1 1 0 Parallel GPIO I/O boot
|
||||
// 0 1 0 1 Parallel XINTF boot
|
||||
// 0 1 0 0 Jump to SARAM <- "boot to SARAM"
|
||||
// 0 0 1 1 Branch to check boot mode
|
||||
// 0 0 1 0 Boot to flash, bypass ADC cal
|
||||
// 0 0 0 1 Boot to SARAM, bypass ADC cal
|
||||
// 0 0 0 0 Boot to SCI-A, bypass ADC cal
|
||||
// Boot_Table_End$
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// Channel A0 is converted forever and logged in a buffer (SampleTable)
|
||||
// Using sequencer1 in sequencer override mode. Sequencer is Sequential mode
|
||||
// with sample rate of1/(3*40ns) =8.3MHz
|
||||
//
|
||||
// Open a memory window to SampletTable to observe the buffer
|
||||
// RUN for a while and stop and see the table contents.
|
||||
//
|
||||
// Watch Variables:
|
||||
// SampleTable - Log of converted values.
|
||||
// GPIO34 - Toggles on every ADC sequencer flag
|
||||
//
|
||||
//###########################################################################
|
||||
//
|
||||
// Original source by: S.S.
|
||||
//
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
|
||||
// Determine when the shift to right justify the data takes place
|
||||
// Only one of these should be defined as 1.
|
||||
// The other two should be defined as 0.
|
||||
#define POST_SHIFT 0 // Shift results after the entire sample table is full
|
||||
#define INLINE_SHIFT 1 // Shift results as the data is taken from the results regsiter
|
||||
#define NO_SHIFT 0 // Do not shift the results
|
||||
|
||||
// ADC start parameters
|
||||
#if (CPU_FRQ_150MHZ) // Default - 150 MHz SYSCLKOUT
|
||||
#define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz
|
||||
#endif
|
||||
#if (CPU_FRQ_100MHZ)
|
||||
#define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz
|
||||
#endif
|
||||
#define ADC_CKPS 0x0 // ADC module clock = HSPCLK/1 = 25.5MHz/(1) = 25.0 MHz
|
||||
#define ADC_SHCLK 0x1 // S/H width in ADC module periods = 2 ADC cycle
|
||||
#define AVG 1000 // Average sample limit
|
||||
#define ZOFFSET 0x00 // Average Zero offset
|
||||
#define BUF_SIZE 1024 // Sample buffer size
|
||||
|
||||
// Global variable for this example
|
||||
Uint16 SampleTable[BUF_SIZE];
|
||||
|
||||
|
||||
main()
|
||||
{
|
||||
Uint16 i;
|
||||
Uint16 array_index;
|
||||
|
||||
|
||||
// Step 1. Initialize System Control:
|
||||
// PLL, WatchDog, enable Peripheral Clocks
|
||||
// This example function is found in the DSP2833x_SysCtrl.c file.
|
||||
InitSysCtrl();
|
||||
|
||||
// Specific clock setting for this example:
|
||||
EALLOW;
|
||||
SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/ADC_MODCLK
|
||||
EDIS;
|
||||
|
||||
// Step 2. Initialize GPIO:
|
||||
// This example function is found in the DSP2833x_Gpio.c file and
|
||||
// illustrates how to set the GPIO to it's default state.
|
||||
// InitGpio(); // Skipped for this example
|
||||
// Enable the pin GPIO34 as output
|
||||
EALLOW;
|
||||
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; // GPIO pin
|
||||
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; // Output pin
|
||||
EDIS;
|
||||
|
||||
// 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 DSP2833x_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 DSP2833x_DefaultIsr.c.
|
||||
// This function is found in DSP2833x_PieVect.c.
|
||||
InitPieVectTable();
|
||||
|
||||
// Step 4. Initialize all the Device Peripherals:
|
||||
// This function is found in DSP2833x_InitPeripherals.c
|
||||
// InitPeripherals(); // Not required for this example
|
||||
InitAdc(); // For this example, init the ADC
|
||||
|
||||
// Specific ADC setup for this example:
|
||||
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; // Sequential mode: Sample rate = 1/[(2+ACQ_PS)*ADC clock in ns]
|
||||
// = 1/(3*40ns) =8.3MHz (for 150 MHz SYSCLKOUT)
|
||||
// = 1/(3*80ns) =4.17MHz (for 100 MHz SYSCLKOUT)
|
||||
// If Simultaneous mode enabled: Sample rate = 1/[(3+ACQ_PS)*ADC clock in ns]
|
||||
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;
|
||||
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 Cascaded mode
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
|
||||
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Setup continuous run
|
||||
|
||||
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 1; // Enable Sequencer override feature
|
||||
AdcRegs.ADCCHSELSEQ1.all = 0x0; // Initialize all ADC channel selects to A0
|
||||
AdcRegs.ADCCHSELSEQ2.all = 0x0;
|
||||
AdcRegs.ADCCHSELSEQ3.all = 0x0;
|
||||
AdcRegs.ADCCHSELSEQ4.all = 0x0;
|
||||
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x7; // convert and store in 8 results registers
|
||||
|
||||
|
||||
// Step 5. User specific code, enable interrupts:
|
||||
|
||||
|
||||
// Clear SampleTable
|
||||
for (i=0; i<BUF_SIZE; i++)
|
||||
{
|
||||
SampleTable[i] = 0;
|
||||
}
|
||||
|
||||
// Start SEQ1
|
||||
AdcRegs.ADCTRL2.all = 0x2000;
|
||||
|
||||
for(;;)
|
||||
{ // Take ADC data and log them in SampleTable array
|
||||
|
||||
// Initalize the array index. This points to the current
|
||||
// location within the SampleTable
|
||||
array_index = 0;
|
||||
|
||||
for (i=0; i<(BUF_SIZE/16); i++)
|
||||
{
|
||||
// Wait for int1
|
||||
while (AdcRegs.ADCST.bit.INT_SEQ1== 0){}
|
||||
GpioDataRegs.GPBSET.bit.GPIO34 = 1; // Set GPIO34 for monitoring -optional
|
||||
|
||||
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
|
||||
|
||||
#if INLINE_SHIFT
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT0)>>4);
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT1)>>4);
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT2)>>4);
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT3)>>4);
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT4)>>4);
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT5)>>4);
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT6)>>4);
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT7)>>4);
|
||||
|
||||
#endif //-- INLINE_SHIFT
|
||||
|
||||
#if NO_SHIFT || POST_SHIFT
|
||||
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT0));
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT1));
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT2));
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT3));
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT4));
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT5));
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT6));
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT7));
|
||||
|
||||
#endif //-- NO_SHIFT || POST_SHIFT
|
||||
|
||||
while (AdcRegs.ADCST.bit.INT_SEQ1== 0){}
|
||||
GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1; // Clear GPIO34 for monitoring -optional
|
||||
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
|
||||
|
||||
#if INLINE_SHIFT
|
||||
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT8)>>4);
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT9)>>4);
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT10)>>4);
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT11)>>4);
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT12)>>4);
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT13)>>4);
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT14)>>4);
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT15)>>4);
|
||||
|
||||
#endif //-- INLINE_SHIFT
|
||||
|
||||
#if NO_SHIFT || POST_SHIFT
|
||||
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT8));
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT9));
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT10));
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT11));
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT12));
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT13));
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT14));
|
||||
SampleTable[array_index++]= ( (AdcRegs.ADCRESULT15));
|
||||
#endif // -- NO_SHIFT || POST_SHIFT
|
||||
|
||||
}
|
||||
|
||||
|
||||
#if POST_SHIFT
|
||||
// For post shifting, shift the ADC results
|
||||
// in the SampleTable buffer after the buffer is full.
|
||||
for (i=0; i<BUF_SIZE; i++)
|
||||
{
|
||||
SampleTable[i] = ((SampleTable[i]) >>4);
|
||||
}
|
||||
#endif // -- POST_SHIFT
|
||||
|
||||
GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1; // Clear GPIO34 for monitoring -optional
|
||||
}
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
// No more.
|
||||
//===========================================================================
|
||||
|
||||
|
||||
39
Source/External/v120/DSP2833x_examples/adc_seq_ovd_test/Example_2833xAdcSeq_ovdTest.gel
vendored
Normal file
39
Source/External/v120/DSP2833x_examples/adc_seq_ovd_test/Example_2833xAdcSeq_ovdTest.gel
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:11:35 $
|
||||
//###########################################################################
|
||||
//
|
||||
// This .gel file can be used to help load and build the example project.
|
||||
// It should be unloaded from Code Composer Studio before loading another
|
||||
// project.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
menuitem "DSP2833x ADC Seq_ovd Test"
|
||||
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xAdcSeq_ovdTest.pjt");
|
||||
GEL_ProjectBuild("Example_2833xAdcSeq_ovdTest.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xAdcSeq_ovdTest.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("SampleTable,x");
|
||||
GEL_WatchAdd("AdcRegs,x",);
|
||||
}
|
||||
|
||||
|
||||
45
Source/External/v120/DSP2833x_examples/adc_seq_ovd_test/Example_2833xAdcSeq_ovdTest.pjt
vendored
Normal file
45
Source/External/v120/DSP2833x_examples/adc_seq_ovd_test/Example_2833xAdcSeq_ovdTest.pjt
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
; Code Composer Project File, Version 2.0 (do not modify or remove this line)
|
||||
|
||||
[Project Settings]
|
||||
ProjectName="DSP2833x"
|
||||
ProjectDir="C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\adc_seq_ovd_test\"
|
||||
ProjectType=Executable
|
||||
CPUFamily=TMS320C28XX
|
||||
Tool="Compiler"
|
||||
Tool="DspBiosBuilder"
|
||||
Tool="Linker"
|
||||
Config="Debug"
|
||||
Config="Release"
|
||||
|
||||
[Source Files]
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_Adc.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ADC_cal.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CodeStartBranch.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieVect.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_SysCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_usDelay.asm"
|
||||
Source="..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c"
|
||||
Source="Example_2833xAdcSeq_ovdTest.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\adc_seq_ovd_test\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\adc_seq_ovd_test\Debug" -i"..\..\DSP2833x_headers\include" -i"..\..\DSP2833x_common\include" -d"_DEBUG" -d"LARGE_MODEL" --float_support=fpu32 -ml -mt -v28
|
||||
|
||||
["Compiler" Settings: "Release"]
|
||||
Options=-q -o3 -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\adc_seq_ovd_test\Release" -d"LARGE_MODEL" -ml -v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Debug"]
|
||||
Options=-v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Release"]
|
||||
Options=-v28
|
||||
|
||||
["Linker" Settings: "Debug"]
|
||||
Options=-q -c -ecode_start -m".\Debug\Example_2833xAdcSeq_ovdTest.map" -o".\Debug\Example_2833xAdcSeq_ovdTest.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xAdcSeq_ovdTest.out" -x
|
||||
|
||||
164
Source/External/v120/DSP2833x_examples/adc_seqmode_test/Example_2833xAdcSeqModeTest.c
vendored
Normal file
164
Source/External/v120/DSP2833x_examples/adc_seqmode_test/Example_2833xAdcSeqModeTest.c
vendored
Normal file
@@ -0,0 +1,164 @@
|
||||
// TI File $Revision: /main/10 $
|
||||
// Checkin $Date: April 21, 2008 15:40:57 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xAdcSeqModeTest.c
|
||||
//
|
||||
// TITLE: DSP2833x ADC Seq Mode Test.
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// Make sure the CPU clock speed is properly defined in
|
||||
// DSP2833x_Examples.h before compiling this example.
|
||||
//
|
||||
// Connect the signal to be converted to channel A0.
|
||||
//
|
||||
// As supplied, this project is configured for "boot to SARAM"
|
||||
// operation. The 2833x Boot Mode table is shown below.
|
||||
// For information on configuring the boot mode of an eZdsp,
|
||||
// please refer to the documentation included with the eZdsp,
|
||||
//
|
||||
// $Boot_Table:
|
||||
//
|
||||
// GPIO87 GPIO86 GPIO85 GPIO84
|
||||
// XA15 XA14 XA13 XA12
|
||||
// PU PU PU PU
|
||||
// ==========================================
|
||||
// 1 1 1 1 Jump to Flash
|
||||
// 1 1 1 0 SCI-A boot
|
||||
// 1 1 0 1 SPI-A boot
|
||||
// 1 1 0 0 I2C-A boot
|
||||
// 1 0 1 1 eCAN-A boot
|
||||
// 1 0 1 0 McBSP-A boot
|
||||
// 1 0 0 1 Jump to XINTF x16
|
||||
// 1 0 0 0 Jump to XINTF x32
|
||||
// 0 1 1 1 Jump to OTP
|
||||
// 0 1 1 0 Parallel GPIO I/O boot
|
||||
// 0 1 0 1 Parallel XINTF boot
|
||||
// 0 1 0 0 Jump to SARAM <- "boot to SARAM"
|
||||
// 0 0 1 1 Branch to check boot mode
|
||||
// 0 0 1 0 Boot to flash, bypass ADC cal
|
||||
// 0 0 0 1 Boot to SARAM, bypass ADC cal
|
||||
// 0 0 0 0 Boot to SCI-A, bypass ADC cal
|
||||
// Boot_Table_End$
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// Channel A0 is converted forever and logged in a buffer (SampleTable)
|
||||
//
|
||||
// Open a memory window to SampleTable to observe the buffer
|
||||
// RUN for a while and stop and see the table contents.
|
||||
//
|
||||
// Watch Variables:
|
||||
// SampleTable - Log of converted values.
|
||||
//
|
||||
//###########################################################################
|
||||
//
|
||||
// Original source by: S.S.
|
||||
//
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
|
||||
// ADC start parameters
|
||||
#if (CPU_FRQ_150MHZ) // Default - 150 MHz SYSCLKOUT
|
||||
#define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz
|
||||
#endif
|
||||
#if (CPU_FRQ_100MHZ)
|
||||
#define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz
|
||||
#endif
|
||||
#define ADC_CKPS 0x1 // ADC module clock = HSPCLK/2*ADC_CKPS = 25.0MHz/(1*2) = 12.5MHz
|
||||
#define ADC_SHCLK 0xf // S/H width in ADC module periods = 16 ADC clocks
|
||||
#define AVG 1000 // Average sample limit
|
||||
#define ZOFFSET 0x00 // Average Zero offset
|
||||
#define BUF_SIZE 2048 // Sample buffer size
|
||||
|
||||
// Global variable for this example
|
||||
Uint16 SampleTable[BUF_SIZE];
|
||||
|
||||
main()
|
||||
{
|
||||
Uint16 i;
|
||||
|
||||
// Step 1. Initialize System Control:
|
||||
// PLL, WatchDog, enable Peripheral Clocks
|
||||
// This example function is found in the DSP2833x_SysCtrl.c file.
|
||||
InitSysCtrl();
|
||||
|
||||
// Specific clock setting for this example:
|
||||
EALLOW;
|
||||
SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/ADC_MODCLK
|
||||
EDIS;
|
||||
|
||||
// Step 2. Initialize GPIO:
|
||||
// This example function is found in the DSP2833x_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 DSP2833x_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 DSP2833x_DefaultIsr.c.
|
||||
// This function is found in DSP2833x_PieVect.c.
|
||||
InitPieVectTable();
|
||||
|
||||
// Step 4. Initialize all the Device Peripherals:
|
||||
// This function is found in DSP2833x_InitPeripherals.c
|
||||
// InitPeripherals(); // Not required for this example
|
||||
InitAdc(); // For this example, init the ADC
|
||||
|
||||
// Specific ADC setup for this example:
|
||||
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;
|
||||
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;
|
||||
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 Cascaded mode
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
|
||||
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Setup continuous run
|
||||
|
||||
|
||||
// Step 5. User specific code, enable interrupts:
|
||||
|
||||
|
||||
// Clear SampleTable
|
||||
for (i=0; i<BUF_SIZE; i++)
|
||||
{
|
||||
SampleTable[i] = 0;
|
||||
}
|
||||
|
||||
// Start SEQ1
|
||||
AdcRegs.ADCTRL2.all = 0x2000;
|
||||
|
||||
// Take ADC data and log the in SampleTable array
|
||||
for(;;)
|
||||
{
|
||||
for (i=0; i<AVG; i++)
|
||||
{
|
||||
while (AdcRegs.ADCST.bit.INT_SEQ1== 0) {} // Wait for interrupt
|
||||
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
|
||||
SampleTable[i] =((AdcRegs.ADCRESULT0>>4) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
// No more.
|
||||
//===========================================================================
|
||||
|
||||
37
Source/External/v120/DSP2833x_examples/adc_seqmode_test/Example_2833xAdcSeqModeTest.gel
vendored
Normal file
37
Source/External/v120/DSP2833x_examples/adc_seqmode_test/Example_2833xAdcSeqModeTest.gel
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:11:47 $
|
||||
//###########################################################################
|
||||
//
|
||||
// This .gel file can be used to help load and build the example project.
|
||||
// It should be unloaded from Code Composer Studio before loading another
|
||||
// project.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
menuitem "DSP2833x ADC Seq Test"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xAdcSeqModeTest.pjt");
|
||||
GEL_ProjectBuild("Example_2833xAdcSeqModeTest.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xAdcSeqModeTest.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("SampleTable,x");
|
||||
GEL_WatchAdd("AdcRegs,x");
|
||||
}
|
||||
45
Source/External/v120/DSP2833x_examples/adc_seqmode_test/Example_2833xAdcSeqModeTest.pjt
vendored
Normal file
45
Source/External/v120/DSP2833x_examples/adc_seqmode_test/Example_2833xAdcSeqModeTest.pjt
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
; Code Composer Project File, Version 2.0 (do not modify or remove this line)
|
||||
|
||||
[Project Settings]
|
||||
ProjectName="DSP2833x"
|
||||
ProjectDir="C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\adc_seqmode_test\"
|
||||
ProjectType=Executable
|
||||
CPUFamily=TMS320C28XX
|
||||
Tool="Compiler"
|
||||
Tool="DspBiosBuilder"
|
||||
Tool="Linker"
|
||||
Config="Debug"
|
||||
Config="Release"
|
||||
|
||||
[Source Files]
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_Adc.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ADC_cal.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CodeStartBranch.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieVect.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_SysCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_usDelay.asm"
|
||||
Source="..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c"
|
||||
Source="Example_2833xAdcSeqModeTest.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\adc_seqmode_test\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\adc_seqmode_test\Debug" -i"..\..\DSP2833x_headers\include" -i"..\..\DSP2833x_common\include" -d"_DEBUG" -d"LARGE_MODEL" --float_support=fpu32 -ml -mt -v28
|
||||
|
||||
["Compiler" Settings: "Release"]
|
||||
Options=-q -o3 -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\adc_seqmode_test\Release" -d"LARGE_MODEL" -ml -v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Debug"]
|
||||
Options=-v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Release"]
|
||||
Options=-v28
|
||||
|
||||
["Linker" Settings: "Debug"]
|
||||
Options=-q -c -ecode_start -m".\Debug\Example_2833xAdcSeqModeTest.map" -o".\Debug\Example_2833xAdcSeqModeTest.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xAdcSeqModeTest.out" -x
|
||||
|
||||
203
Source/External/v120/DSP2833x_examples/adc_soc/Example_2833xAdcSoc.c
vendored
Normal file
203
Source/External/v120/DSP2833x_examples/adc_soc/Example_2833xAdcSoc.c
vendored
Normal file
@@ -0,0 +1,203 @@
|
||||
// TI File $Revision: /main/11 $
|
||||
// Checkin $Date: April 21, 2008 15:41:01 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xAdc.c
|
||||
//
|
||||
// TITLE: DSP2833x ADC Example Program.
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// Make sure the CPU clock speed is properly defined in
|
||||
// DSP2833x_Examples.h before compiling this example.
|
||||
//
|
||||
// Connect signals to be converted to A2 and A3.
|
||||
//
|
||||
// As supplied, this project is configured for "boot to SARAM"
|
||||
// operation. The 2833x Boot Mode table is shown below.
|
||||
// For information on configuring the boot mode of an eZdsp,
|
||||
// please refer to the documentation included with the eZdsp,
|
||||
//
|
||||
// $Boot_Table:
|
||||
//
|
||||
// GPIO87 GPIO86 GPIO85 GPIO84
|
||||
// XA15 XA14 XA13 XA12
|
||||
// PU PU PU PU
|
||||
// ==========================================
|
||||
// 1 1 1 1 Jump to Flash
|
||||
// 1 1 1 0 SCI-A boot
|
||||
// 1 1 0 1 SPI-A boot
|
||||
// 1 1 0 0 I2C-A boot
|
||||
// 1 0 1 1 eCAN-A boot
|
||||
// 1 0 1 0 McBSP-A boot
|
||||
// 1 0 0 1 Jump to XINTF x16
|
||||
// 1 0 0 0 Jump to XINTF x32
|
||||
// 0 1 1 1 Jump to OTP
|
||||
// 0 1 1 0 Parallel GPIO I/O boot
|
||||
// 0 1 0 1 Parallel XINTF boot
|
||||
// 0 1 0 0 Jump to SARAM <- "boot to SARAM"
|
||||
// 0 0 1 1 Branch to check boot mode
|
||||
// 0 0 1 0 Boot to flash, bypass ADC cal
|
||||
// 0 0 0 1 Boot to SARAM, bypass ADC cal
|
||||
// 0 0 0 0 Boot to SCI-A, bypass ADC cal
|
||||
// Boot_Table_End$
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// This example sets up the PLL in x10/2 mode.
|
||||
//
|
||||
// For 150 MHz devices (default)
|
||||
// divides SYSCLKOUT by six to reach a 25.0Mhz HSPCLK
|
||||
// (assuming a 30Mhz XCLKIN).
|
||||
//
|
||||
// For 100 MHz devices:
|
||||
// divides SYSCLKOUT by four to reach a 25.0Mhz HSPCLK
|
||||
// (assuming a 20Mhz XCLKIN).
|
||||
//
|
||||
// Interrupts are enabled and the ePWM1 is setup to generate a periodic
|
||||
// ADC SOC on SEQ1. Two channels are converted, ADCINA3 and ADCINA2.
|
||||
//
|
||||
// Watch Variables:
|
||||
//
|
||||
// Voltage1[10] Last 10 ADCRESULT0 values
|
||||
// Voltage2[10] Last 10 ADCRESULT1 values
|
||||
// ConversionCount Current result number 0-9
|
||||
// LoopCount Idle loop counter
|
||||
//
|
||||
//
|
||||
//###########################################################################
|
||||
//
|
||||
// Original Author: D.F.
|
||||
//
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
|
||||
// Prototype statements for functions found within this file.
|
||||
interrupt void adc_isr(void);
|
||||
|
||||
// Global variables used in this example:
|
||||
Uint16 LoopCount;
|
||||
Uint16 ConversionCount;
|
||||
Uint16 Voltage1[10];
|
||||
Uint16 Voltage2[10];
|
||||
|
||||
|
||||
main()
|
||||
{
|
||||
|
||||
// Step 1. Initialize System Control:
|
||||
// PLL, WatchDog, enable Peripheral Clocks
|
||||
// This example function is found in the DSP2833x_SysCtrl.c file.
|
||||
InitSysCtrl();
|
||||
|
||||
|
||||
EALLOW;
|
||||
#if (CPU_FRQ_150MHZ) // Default - 150 MHz SYSCLKOUT
|
||||
#define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz
|
||||
#endif
|
||||
#if (CPU_FRQ_100MHZ)
|
||||
#define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz
|
||||
#endif
|
||||
EDIS;
|
||||
|
||||
// Step 2. Initialize GPIO:
|
||||
// This example function is found in the DSP2833x_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 DSP2833x_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 DSP2833x_DefaultIsr.c.
|
||||
// This function is found in DSP2833x_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 register
|
||||
PieVectTable.ADCINT = &adc_isr;
|
||||
EDIS; // This is needed to disable write to EALLOW protected registers
|
||||
|
||||
// Step 4. Initialize all the Device Peripherals:
|
||||
// This function is found in DSP2833x_InitPeripherals.c
|
||||
// InitPeripherals(); // Not required for this example
|
||||
InitAdc(); // For this example, init the ADC
|
||||
|
||||
// Step 5. User specific code, enable interrupts:
|
||||
|
||||
// Enable ADCINT in PIE
|
||||
PieCtrlRegs.PIEIER1.bit.INTx6 = 1;
|
||||
IER |= M_INT1; // Enable CPU Interrupt 1
|
||||
EINT; // Enable Global interrupt INTM
|
||||
ERTM; // Enable Global realtime interrupt DBGM
|
||||
|
||||
LoopCount = 0;
|
||||
ConversionCount = 0;
|
||||
|
||||
// Configure ADC
|
||||
AdcRegs.ADCMAXCONV.all = 0x0001; // Setup 2 conv's on SEQ1
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x3; // Setup ADCINA3 as 1st SEQ1 conv.
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x2; // Setup ADCINA2 as 2nd SEQ1 conv.
|
||||
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;// Enable SOCA from ePWM to start SEQ1
|
||||
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt (every EOS)
|
||||
|
||||
// Assumes ePWM1 clock is already enabled in InitSysCtrl();
|
||||
EPwm1Regs.ETSEL.bit.SOCAEN = 1; // Enable SOC on A group
|
||||
EPwm1Regs.ETSEL.bit.SOCASEL = 4; // Select SOC from from CPMA on upcount
|
||||
EPwm1Regs.ETPS.bit.SOCAPRD = 1; // Generate pulse on 1st event
|
||||
EPwm1Regs.CMPA.half.CMPA = 0x0080; // Set compare A value
|
||||
EPwm1Regs.TBPRD = 0xFFFF; // Set period for ePWM1
|
||||
EPwm1Regs.TBCTL.bit.CTRMODE = 0; // count up and start
|
||||
|
||||
// Wait for ADC interrupt
|
||||
for(;;)
|
||||
{
|
||||
LoopCount++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
interrupt void adc_isr(void)
|
||||
{
|
||||
|
||||
Voltage1[ConversionCount] = AdcRegs.ADCRESULT0 >>4;
|
||||
Voltage2[ConversionCount] = AdcRegs.ADCRESULT1 >>4;
|
||||
|
||||
// If 40 conversions have been logged, start over
|
||||
if(ConversionCount == 9)
|
||||
{
|
||||
ConversionCount = 0;
|
||||
}
|
||||
else ConversionCount++;
|
||||
|
||||
// Reinitialize for next ADC sequence
|
||||
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // Reset SEQ1
|
||||
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // Clear INT SEQ1 bit
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIE
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
40
Source/External/v120/DSP2833x_examples/adc_soc/Example_2833xAdcSoc.gel
vendored
Normal file
40
Source/External/v120/DSP2833x_examples/adc_soc/Example_2833xAdcSoc.gel
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:11:59 $
|
||||
//###########################################################################
|
||||
//
|
||||
// This .gel file can be used to help load and build the example project.
|
||||
// It should be unloaded from Code Composer Studio before loading another
|
||||
// project.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
menuitem "DSP2833x ADC SOC Example"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xAdcSoc.pjt");
|
||||
GEL_ProjectBuild("Example_2833xAdcSoc.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xAdcSoc.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("Voltage1,x");
|
||||
GEL_WatchAdd("Voltage2,x");
|
||||
GEL_WatchAdd("LoopCount,x");
|
||||
GEL_WatchAdd("ConversionCount,d");
|
||||
GEL_WatchAdd("AdcRegs,x");
|
||||
GEL_WatchAdd("EPwm1Regs,x");
|
||||
}
|
||||
46
Source/External/v120/DSP2833x_examples/adc_soc/Example_2833xAdcSoc.pjt
vendored
Normal file
46
Source/External/v120/DSP2833x_examples/adc_soc/Example_2833xAdcSoc.pjt
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
; Code Composer Project File, Version 2.0 (do not modify or remove this line)
|
||||
|
||||
[Project Settings]
|
||||
ProjectName="DSP28"
|
||||
ProjectDir="C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\adc_soc\"
|
||||
ProjectType=Executable
|
||||
CPUFamily=TMS320C28XX
|
||||
Tool="Compiler"
|
||||
Tool="DspBiosBuilder"
|
||||
Tool="Linker"
|
||||
Config="Debug"
|
||||
Config="Release"
|
||||
|
||||
[Source Files]
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_Adc.c"
|
||||
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ADC_cal.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CodeStartBranch.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieVect.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_SysCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_usDelay.asm"
|
||||
Source="..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c"
|
||||
Source="Example_2833xAdcSoc.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\adc_soc\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\adc_soc\Debug" -i"..\..\DSP2833x_headers\include" -i"..\..\DSP2833x_common\include" -d"_DEBUG" -d"LARGE_MODEL" --float_support=fpu32 -ml -mt -v28
|
||||
|
||||
["Compiler" Settings: "Release"]
|
||||
Options=-q -o3 -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\adc_soc\Release" -d"LARGE_MODEL" -ml -v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Debug"]
|
||||
Options=-v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Release"]
|
||||
Options=-v28
|
||||
|
||||
["Linker" Settings: "Debug"]
|
||||
Options=-q -c -ecode_start -m".\Debug\Example_2833xAdcSoc.map" -o".\Debug\Example_2833xAdcSoc.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xAdcSoc.out" -x
|
||||
|
||||
189
Source/External/v120/DSP2833x_examples/cpu_timer/Example_2833xCpuTimer.c
vendored
Normal file
189
Source/External/v120/DSP2833x_examples/cpu_timer/Example_2833xCpuTimer.c
vendored
Normal file
@@ -0,0 +1,189 @@
|
||||
// TI File $Revision: /main/14 $
|
||||
// Checkin $Date: April 21, 2008 15:41:07 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xCpuTimer.c
|
||||
//
|
||||
// TITLE: DSP2833x Device Getting Started Program.
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// Other then boot mode configuration, no other hardware configuration
|
||||
// is required.
|
||||
//
|
||||
//
|
||||
// As supplied, this project is configured for "boot to SARAM"
|
||||
// operation. The 2833x Boot Mode table is shown below.
|
||||
// For information on configuring the boot mode of an eZdsp,
|
||||
// please refer to the documentation included with the eZdsp,
|
||||
//
|
||||
// $Boot_Table:
|
||||
//
|
||||
// GPIO87 GPIO86 GPIO85 GPIO84
|
||||
// XA15 XA14 XA13 XA12
|
||||
// PU PU PU PU
|
||||
// ==========================================
|
||||
// 1 1 1 1 Jump to Flash
|
||||
// 1 1 1 0 SCI-A boot
|
||||
// 1 1 0 1 SPI-A boot
|
||||
// 1 1 0 0 I2C-A boot
|
||||
// 1 0 1 1 eCAN-A boot
|
||||
// 1 0 1 0 McBSP-A boot
|
||||
// 1 0 0 1 Jump to XINTF x16
|
||||
// 1 0 0 0 Jump to XINTF x32
|
||||
// 0 1 1 1 Jump to OTP
|
||||
// 0 1 1 0 Parallel GPIO I/O boot
|
||||
// 0 1 0 1 Parallel XINTF boot
|
||||
// 0 1 0 0 Jump to SARAM <- "boot to SARAM"
|
||||
// 0 0 1 1 Branch to check boot mode
|
||||
// 0 0 1 0 Boot to flash, bypass ADC cal
|
||||
// 0 0 0 1 Boot to SARAM, bypass ADC cal
|
||||
// 0 0 0 0 Boot to SCI-A, bypass ADC cal
|
||||
// Boot_Table_End$
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// This example configures CPU Timer0, 1, and 2 and increments
|
||||
// a counter each time the timers assert an interrupt.
|
||||
//
|
||||
// Watch Variables:
|
||||
// CpuTimer0.InterruptCount
|
||||
// CpuTimer1.InterruptCount
|
||||
// CpuTimer2.InterruptCount
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
|
||||
// Prototype statements for functions found within this file.
|
||||
interrupt void cpu_timer0_isr(void);
|
||||
interrupt void cpu_timer1_isr(void);
|
||||
interrupt void cpu_timer2_isr(void);
|
||||
|
||||
void main(void)
|
||||
{
|
||||
|
||||
// Step 1. Initialize System Control:
|
||||
// PLL, WatchDog, enable Peripheral Clocks
|
||||
// This example function is found in the DSP2833x_SysCtrl.c file.
|
||||
InitSysCtrl();
|
||||
|
||||
// Step 2. Initalize GPIO:
|
||||
// This example function is found in the DSP2833x_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 DSP2833x_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 DSP2833x_DefaultIsr.c.
|
||||
// This function is found in DSP2833x_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;
|
||||
PieVectTable.XINT13 = &cpu_timer1_isr;
|
||||
PieVectTable.TINT2 = &cpu_timer2_isr;
|
||||
EDIS; // This is needed to disable write to EALLOW protected registers
|
||||
|
||||
// Step 4. Initialize the Device Peripheral. This function can be
|
||||
// found in DSP2833x_CpuTimers.c
|
||||
InitCpuTimers(); // For this example, only initialize the Cpu Timers
|
||||
|
||||
#if (CPU_FRQ_150MHZ)
|
||||
// Configure CPU-Timer 0, 1, and 2 to interrupt every second:
|
||||
// 150MHz CPU Freq, 1 second Period (in uSeconds)
|
||||
|
||||
ConfigCpuTimer(&CpuTimer0, 150, 1000000);
|
||||
ConfigCpuTimer(&CpuTimer1, 150, 1000000);
|
||||
ConfigCpuTimer(&CpuTimer2, 150, 1000000);
|
||||
#endif
|
||||
|
||||
#if (CPU_FRQ_100MHZ)
|
||||
// Configure CPU-Timer 0, 1, and 2 to interrupt every second:
|
||||
// 100MHz CPU Freq, 1 second Period (in uSeconds)
|
||||
|
||||
ConfigCpuTimer(&CpuTimer0, 100, 1000000);
|
||||
ConfigCpuTimer(&CpuTimer1, 100, 1000000);
|
||||
ConfigCpuTimer(&CpuTimer2, 100, 1000000);
|
||||
#endif
|
||||
// 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 DSP2833x_CpuTimers.h), the
|
||||
// below settings must also be updated.
|
||||
|
||||
CpuTimer0Regs.TCR.all = 0x4001; // Use write-only instruction to set TSS bit = 0
|
||||
CpuTimer1Regs.TCR.all = 0x4001; // Use write-only instruction to set TSS bit = 0
|
||||
CpuTimer2Regs.TCR.all = 0x4001; // Use write-only instruction to set TSS bit = 0
|
||||
|
||||
// Step 5. User specific code, enable interrupts:
|
||||
|
||||
|
||||
// Enable CPU int1 which is connected to CPU-Timer 0, CPU int13
|
||||
// which is connected to CPU-Timer 1, and CPU int 14, which is connected
|
||||
// to CPU-Timer 2:
|
||||
IER |= M_INT1;
|
||||
IER |= M_INT13;
|
||||
IER |= M_INT14;
|
||||
|
||||
// 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(;;);
|
||||
|
||||
}
|
||||
|
||||
|
||||
interrupt void cpu_timer0_isr(void)
|
||||
{
|
||||
CpuTimer0.InterruptCount++;
|
||||
|
||||
// Acknowledge this interrupt to receive more interrupts from group 1
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
|
||||
}
|
||||
|
||||
interrupt void cpu_timer1_isr(void)
|
||||
{
|
||||
CpuTimer1.InterruptCount++;
|
||||
// The CPU acknowledges the interrupt.
|
||||
EDIS;
|
||||
}
|
||||
|
||||
interrupt void cpu_timer2_isr(void)
|
||||
{ EALLOW;
|
||||
CpuTimer2.InterruptCount++;
|
||||
// The CPU acknowledges the interrupt.
|
||||
EDIS;
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
// No more.
|
||||
//===========================================================================
|
||||
43
Source/External/v120/DSP2833x_examples/cpu_timer/Example_2833xCpuTimer.gel
vendored
Normal file
43
Source/External/v120/DSP2833x_examples/cpu_timer/Example_2833xCpuTimer.gel
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
// TI File $Revision: /main/6 $
|
||||
// Checkin $Date: August 9, 2007 17:12:13 $
|
||||
//###########################################################################
|
||||
//
|
||||
// This .gel file can be used to help load and build the example project.
|
||||
// It should be unloaded from Code Composer Studio before loading another
|
||||
// project.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
menuitem "DSP2833x CpuTimerExample"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xCpuTimer.pjt");
|
||||
GEL_ProjectBuild("Example_2833xCpuTimer.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xCpuTimer.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("CpuTimer0.InterruptCount",,"CPU ISR Count");
|
||||
GEL_WatchAdd("CpuTimer0",,"CPU Timer Variables");
|
||||
GEL_WatchAdd("CpuTimer0Regs,x");
|
||||
GEL_WatchAdd("CpuTimer1.InterruptCount",,"CPU ISR Count");
|
||||
GEL_WatchAdd("CpuTimer1",,"CPU Timer Variables");
|
||||
GEL_WatchAdd("CpuTimer1Regs,x");
|
||||
GEL_WatchAdd("CpuTimer2.InterruptCount",,"CPU ISR Count");
|
||||
GEL_WatchAdd("CpuTimer2",,"CPU Timer Variables");
|
||||
GEL_WatchAdd("CpuTimer2Regs,x");
|
||||
}
|
||||
46
Source/External/v120/DSP2833x_examples/cpu_timer/Example_2833xCpuTimer.pjt
vendored
Normal file
46
Source/External/v120/DSP2833x_examples/cpu_timer/Example_2833xCpuTimer.pjt
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
; Code Composer Project File, Version 2.0 (do not modify or remove this line)
|
||||
|
||||
[Project Settings]
|
||||
ProjectName="DSP2833x"
|
||||
ProjectDir="C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\cpu_timer\"
|
||||
ProjectType=Executable
|
||||
CPUFamily=TMS320C28XX
|
||||
Tool="Compiler"
|
||||
Tool="CustomBuilder"
|
||||
Tool="DspBiosBuilder"
|
||||
Tool="Linker"
|
||||
Config="Debug"
|
||||
Config="Release"
|
||||
|
||||
[Source Files]
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ADC_cal.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CodeStartBranch.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CpuTimers.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieVect.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_SysCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_usDelay.asm"
|
||||
Source="..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c"
|
||||
Source="Example_2833xCpuTimer.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\cpu_timer\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\cpu_timer\Debug" -i"..\..\DSP2833x_headers\include" -i"..\..\DSP2833x_common\include" -d"_DEBUG" -d"LARGE_MODEL" --float_support=fpu32 -ml -mt -v28
|
||||
|
||||
["Compiler" Settings: "Release"]
|
||||
Options=-q -o3 -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\cpu_timer\Release" -d"LARGE_MODEL" -ml -v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Debug"]
|
||||
Options=-v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Release"]
|
||||
Options=-v28
|
||||
|
||||
["Linker" Settings: "Debug"]
|
||||
Options=-q -c -ecode_start -m".\Debug\Example_2833xCpuTimer.map" -o".\Debug\Example_2833xCpuTimer.out" -stack0x200 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xCpuTimer.out" -x
|
||||
|
||||
189
Source/External/v120/DSP2833x_examples/dma_ram_to_ram/Example_2833xDMA_ram_to_ram.c
vendored
Normal file
189
Source/External/v120/DSP2833x_examples/dma_ram_to_ram/Example_2833xDMA_ram_to_ram.c
vendored
Normal file
@@ -0,0 +1,189 @@
|
||||
// TI File $Revision: /main/3 $
|
||||
// Checkin $Date: May 12, 2008 14:23:19 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xDMA_Ram_to_Ram.c
|
||||
//
|
||||
// TITLE: DSP2833x DMA Ram to Ram
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// As supplied, this project is configured for "boot to SARAM"
|
||||
// operation. The 2833x Boot Mode table is shown below.
|
||||
// For information on configuring the boot mode of an eZdsp,
|
||||
// please refer to the documentation included with the eZdsp,
|
||||
//
|
||||
// $Boot_Table:
|
||||
//
|
||||
// GPIO87 GPIO86 GPIO85 GPIO84
|
||||
// XA15 XA14 XA13 XA12
|
||||
// PU PU PU PU
|
||||
// ==========================================
|
||||
// 1 1 1 1 Jump to Flash
|
||||
// 1 1 1 0 SCI-A boot
|
||||
// 1 1 0 1 SPI-A boot
|
||||
// 1 1 0 0 I2C-A boot
|
||||
// 1 0 1 1 eCAN-A boot
|
||||
// 1 0 1 0 McBSP-A boot
|
||||
// 1 0 0 1 Jump to XINTF x16
|
||||
// 1 0 0 0 Jump to XINTF x32
|
||||
// 0 1 1 1 Jump to OTP
|
||||
// 0 1 1 0 Parallel GPIO I/O boot
|
||||
// 0 1 0 1 Parallel XINTF boot
|
||||
// 0 1 0 0 Jump to SARAM <- "boot to SARAM"
|
||||
// 0 0 1 1 Branch to check boot mode
|
||||
// 0 0 1 0 Boot to flash, bypass ADC cal
|
||||
// 0 0 0 1 Boot to SARAM, bypass ADC cal
|
||||
// 0 0 0 0 Boot to SCI-A, bypass ADC cal
|
||||
// Boot_Table_End$
|
||||
//
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// Code will perform a block copy from L5 SARAM to L4 SARAM of 1024 words. Transfer will be started
|
||||
// by Timer0. Will use 32-bit datasize to decrease the transfer time.
|
||||
// Code will end in local_DINTCH1_ISR once the transfer is complete
|
||||
//
|
||||
// Watch Variables:
|
||||
// DMABuf1
|
||||
// DMABuf2
|
||||
//
|
||||
//###########################################################################
|
||||
//
|
||||
// Original source by: M.P.
|
||||
//
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
|
||||
|
||||
#define BUF_SIZE 1024 // Sample buffer size
|
||||
|
||||
|
||||
|
||||
|
||||
// DMA Defines
|
||||
#define CH1_TOTAL DATA_POINTS_PER_CHANNEL
|
||||
#define CH1_WORDS_PER_BURST ADC_CHANNELS_TO_CONVERT
|
||||
|
||||
|
||||
|
||||
#pragma DATA_SECTION(DMABuf1,"DMARAML4");
|
||||
#pragma DATA_SECTION(DMABuf2,"DMARAML5");
|
||||
|
||||
volatile Uint16 DMABuf1[1024];
|
||||
volatile Uint16 DMABuf2[1024];
|
||||
|
||||
volatile Uint16 *DMADest;
|
||||
volatile Uint16 *DMASource;
|
||||
|
||||
interrupt void local_DINTCH1_ISR(void);
|
||||
|
||||
|
||||
void main(void)
|
||||
{
|
||||
Uint16 i;
|
||||
// Step 1. Initialize System Control:
|
||||
// PLL, WatchDog, enable Peripheral Clocks
|
||||
// This example function is found in the DSP2833x_SysCtrl.c file.
|
||||
InitSysCtrl();
|
||||
|
||||
|
||||
// Step 2. Initialize GPIO:
|
||||
// This example function is found in the DSP2833x_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 DSP2833x_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 DSP2833x_DefaultIsr.c.
|
||||
// This function is found in DSP2833x_PieVect.c.
|
||||
InitPieVectTable();
|
||||
|
||||
// Interrupts that are used in this example are re-mapped to
|
||||
// ISR functions found within this file.
|
||||
EALLOW; // Allow access to EALLOW protected registers
|
||||
PieVectTable.DINTCH1= &local_DINTCH1_ISR;
|
||||
EDIS; // Disable access to EALLOW protected registers
|
||||
|
||||
IER = M_INT7 ; //Enable INT7 (7.1 DMA Ch1)
|
||||
EnableInterrupts();
|
||||
CpuTimer0Regs.TCR.bit.TSS = 1; //Stop Timer0 for now
|
||||
|
||||
|
||||
//Step 5. User specific code, enable interrupts:
|
||||
// Initialize DMA
|
||||
DMAInitialize();
|
||||
|
||||
// Initialize Tables
|
||||
for (i=0; i<BUF_SIZE; i++)
|
||||
{
|
||||
DMABuf1[i] = 0;
|
||||
DMABuf2[i] = i;
|
||||
}
|
||||
|
||||
|
||||
// Configure DMA Channel
|
||||
DMADest = &DMABuf1[0];
|
||||
DMASource = &DMABuf2[0];
|
||||
DMACH1AddrConfig(DMADest,DMASource);
|
||||
DMACH1BurstConfig(31,2,2); //Will set up to use 32-bit datasize, pointers are based on 16-bit words
|
||||
DMACH1TransferConfig(31,2,2); //so need to increment by 2 to grab the correct location
|
||||
DMACH1WrapConfig(0xFFFF,0,0xFFFF,0);
|
||||
//Use timer0 to start the x-fer.
|
||||
//Since this is a static copy use one shot mode, so only one trigger is needed
|
||||
//Also using 32-bit mode to decrease x-fer time
|
||||
DMACH1ModeConfig(DMA_TINT0,PERINT_ENABLE,ONESHOT_ENABLE,CONT_DISABLE,SYNC_DISABLE,SYNC_SRC,OVRFLOW_DISABLE,THIRTYTWO_BIT,CHINT_END,CHINT_ENABLE);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
StartDMACH1();
|
||||
|
||||
|
||||
//Init the timer 0
|
||||
|
||||
CpuTimer0Regs.TIM.half.LSW = 512; //load low value so we can start the DMA quickly
|
||||
CpuTimer0Regs.TCR.bit.SOFT = 1; //Allow to free run even if halted
|
||||
CpuTimer0Regs.TCR.bit.FREE = 1;
|
||||
CpuTimer0Regs.TCR.bit.TIE = 1; //Enable the timer0 interrupt signal
|
||||
CpuTimer0Regs.TCR.bit.TSS = 0; //restart the timer 0
|
||||
for(;;){}
|
||||
|
||||
}
|
||||
|
||||
// INT7.1
|
||||
interrupt void local_DINTCH1_ISR(void) // DMA Channel 1
|
||||
{
|
||||
|
||||
// To receive more interrupts from this PIE group, acknowledge this interrupt
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP7;
|
||||
|
||||
// Next two lines for debug only to halt the processor here
|
||||
// Remove after inserting ISR Code
|
||||
asm (" ESTOP0");
|
||||
for(;;);
|
||||
}
|
||||
|
||||
|
||||
|
||||
36
Source/External/v120/DSP2833x_examples/dma_ram_to_ram/Example_2833xDMA_ram_to_ram.gel
vendored
Normal file
36
Source/External/v120/DSP2833x_examples/dma_ram_to_ram/Example_2833xDMA_ram_to_ram.gel
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
// TI File $Revision: /main/1 $
|
||||
// Checkin $Date: August 14, 2007 16:28:46 $
|
||||
//###########################################################################
|
||||
//
|
||||
// This .gel file can be used to help load and build the example project.
|
||||
// It should be unloaded from Code Composer Studio before loading another
|
||||
// project.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
menuitem "DSP2833x DMA Ram to Ram Example"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xDMA_ram_to_ram.pjt");
|
||||
GEL_ProjectBuild("Example_2833xDMA_ram_to_ram.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xDMA_ram_to_ram.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("DMABuf1,x");
|
||||
GEL_WatchAdd("DMABuf2,x");
|
||||
}
|
||||
47
Source/External/v120/DSP2833x_examples/dma_ram_to_ram/Example_2833xDMA_ram_to_ram.pjt
vendored
Normal file
47
Source/External/v120/DSP2833x_examples/dma_ram_to_ram/Example_2833xDMA_ram_to_ram.pjt
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
; Code Composer Project File, Version 2.0 (do not modify or remove this line)
|
||||
|
||||
[Project Settings]
|
||||
ProjectName="DSP28"
|
||||
ProjectDir="C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\dma_ram_to_ram\"
|
||||
ProjectType=Executable
|
||||
CPUFamily=TMS320C28XX
|
||||
Tool="Compiler"
|
||||
Tool="CustomBuilder"
|
||||
Tool="DspBiosBuilder"
|
||||
Tool="Linker"
|
||||
Config="Debug"
|
||||
Config="Release"
|
||||
|
||||
[Source Files]
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_Adc.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ADC_cal.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CodeStartBranch.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DMA.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieVect.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_SysCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_usDelay.asm"
|
||||
Source="..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c"
|
||||
Source="Example_2833xDMA_ram_to_ram.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\dma_ram_to_ram\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\dma_ram_to_ram\Debug" -i"..\..\DSP2833x_headers\include" -i"..\..\DSP2833x_common\include" -d"_DEBUG" -d"LARGE_MODEL" --float_support=fpu32 -ml -mt -v28
|
||||
|
||||
["Compiler" Settings: "Release"]
|
||||
Options=-q -o3 -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\dma_ram_to_ram\Release" -d"LARGE_MODEL" -ml -v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Debug"]
|
||||
Options=-v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Release"]
|
||||
Options=-v28
|
||||
|
||||
["Linker" Settings: "Debug"]
|
||||
Options=-q -c -ecode_start -m".\Debug\Example_2833xDMA_ram_to_ram.map" -o".\Debug\Example_2833xDMA_ram_to_ram.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xDMA_ram_to_ram.out" -x
|
||||
|
||||
242
Source/External/v120/DSP2833x_examples/dma_xintf_to_ram/Example_2833xDMA_xintf_to_ram.c
vendored
Normal file
242
Source/External/v120/DSP2833x_examples/dma_xintf_to_ram/Example_2833xDMA_xintf_to_ram.c
vendored
Normal file
@@ -0,0 +1,242 @@
|
||||
// TI File $Revision: /main/3 $
|
||||
// Checkin $Date: April 21, 2008 15:44:27 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xDMA_XINTF_to_Ram.c
|
||||
//
|
||||
// TITLE: DSP2833x DMA Ram to Ram
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// As supplied, this project is configured for "boot to SARAM"
|
||||
// operation. The 2833x Boot Mode table is shown below.
|
||||
// For information on configuring the boot mode of an eZdsp,
|
||||
// please refer to the documentation included with the eZdsp,
|
||||
//
|
||||
// $Boot_Table:
|
||||
//
|
||||
// GPIO87 GPIO86 GPIO85 GPIO84
|
||||
// XA15 XA14 XA13 XA12
|
||||
// PU PU PU PU
|
||||
// ==========================================
|
||||
// 1 1 1 1 Jump to Flash
|
||||
// 1 1 1 0 SCI-A boot
|
||||
// 1 1 0 1 SPI-A boot
|
||||
// 1 1 0 0 I2C-A boot
|
||||
// 1 0 1 1 eCAN-A boot
|
||||
// 1 0 1 0 McBSP-A boot
|
||||
// 1 0 0 1 Jump to XINTF x16
|
||||
// 1 0 0 0 Jump to XINTF x32
|
||||
// 0 1 1 1 Jump to OTP
|
||||
// 0 1 1 0 Parallel GPIO I/O boot
|
||||
// 0 1 0 1 Parallel XINTF boot
|
||||
// 0 1 0 0 Jump to SARAM <- "boot to SARAM"
|
||||
// 0 0 1 1 Branch to check boot mode
|
||||
// 0 0 1 0 Boot to flash, bypass ADC cal
|
||||
// 0 0 0 1 Boot to SARAM, bypass ADC cal
|
||||
// 0 0 0 0 Boot to SCI-A, bypass ADC cal
|
||||
// Boot_Table_End$
|
||||
//
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// Code will perform a block copy of 1024 words from Zone 7 XINTF (DMABuf2)
|
||||
// to L4 SARAM (DMABuf1) .
|
||||
// Transfer will be started by Timer0.
|
||||
// We will use 32-bit DMA datasize. Note this is independent from the XINTF
|
||||
// data width which is x16. Code will end in local_DINTCH1_ISR once the transfer is
|
||||
// complete
|
||||
//
|
||||
// Watch Variables:
|
||||
// DMABuf1
|
||||
// DMABuf2
|
||||
//
|
||||
//###########################################################################
|
||||
//
|
||||
// Original source by: M.P.
|
||||
//
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
|
||||
|
||||
#define BUF_SIZE 1024 // Sample buffer size
|
||||
|
||||
|
||||
#pragma DATA_SECTION(DMABuf1,"DMARAML4");
|
||||
#pragma DATA_SECTION(DMABuf2,"ZONE7DATA");
|
||||
|
||||
volatile Uint16 DMABuf1[BUF_SIZE];
|
||||
volatile Uint16 DMABuf2[BUF_SIZE];
|
||||
|
||||
volatile Uint16 *DMADest;
|
||||
volatile Uint16 *DMASource;
|
||||
|
||||
interrupt void local_DINTCH1_ISR(void);
|
||||
void init_zone7(void);
|
||||
|
||||
|
||||
void main(void)
|
||||
{
|
||||
Uint16 i;
|
||||
// Step 1. Initialize System Control:
|
||||
// PLL, WatchDog, enable Peripheral Clocks
|
||||
// This example function is found in the DSP2833x_SysCtrl.c file.
|
||||
InitSysCtrl();
|
||||
|
||||
|
||||
// Step 2. Initialize GPIO:
|
||||
// This example function is found in the DSP2833x_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 DSP2833x_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 DSP2833x_DefaultIsr.c.
|
||||
// This function is found in DSP2833x_PieVect.c.
|
||||
InitPieVectTable();
|
||||
|
||||
// Interrupts that are used in this example are re-mapped to
|
||||
// ISR functions found within this file.
|
||||
EALLOW; // Allow access to EALLOW protected registers
|
||||
PieVectTable.DINTCH1= &local_DINTCH1_ISR;
|
||||
EDIS; // Disable access to EALLOW protected registers
|
||||
|
||||
IER = M_INT7 ; //Enable INT7 (7.1 DMA Ch1)
|
||||
EnableInterrupts();
|
||||
CpuTimer0Regs.TCR.bit.TSS = 1; //Stop Timer0 for now
|
||||
|
||||
|
||||
//Step 5. User specific code, enable interrupts:
|
||||
// Initialize DMA
|
||||
DMAInitialize();
|
||||
init_zone7();
|
||||
|
||||
// Initialize Tables
|
||||
for (i=0; i<BUF_SIZE; i++)
|
||||
{
|
||||
DMABuf1[i] = 0;
|
||||
DMABuf2[i] = i;
|
||||
}
|
||||
|
||||
|
||||
// Configure DMA Channel
|
||||
DMADest = &DMABuf1[0];
|
||||
DMASource = &DMABuf2[0];
|
||||
DMACH1AddrConfig(DMADest,DMASource);
|
||||
DMACH1BurstConfig(31,2,2); //Will set up to use 32-bit datasize, pointers are based on 16-bit words
|
||||
DMACH1TransferConfig(31,2,2); //so need to increment by 2 to grab the correct location
|
||||
DMACH1WrapConfig(0xFFFF,0,0xFFFF,0);
|
||||
//Use timer0 to start the x-fer.
|
||||
//Since this is a static copy use one shot mode, so only one trigger is needed
|
||||
//Also using 32-bit mode to decrease x-fer time
|
||||
DMACH1ModeConfig(DMA_TINT0,PERINT_ENABLE,ONESHOT_ENABLE,CONT_DISABLE,SYNC_DISABLE,SYNC_SRC,OVRFLOW_DISABLE,THIRTYTWO_BIT,CHINT_END,CHINT_ENABLE);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
StartDMACH1();
|
||||
|
||||
|
||||
//Init the timer 0
|
||||
|
||||
CpuTimer0Regs.TIM.half.LSW = 512; //load low value so we can start the DMA quickly
|
||||
CpuTimer0Regs.TCR.bit.SOFT = 1; //Allow to free run even if halted
|
||||
CpuTimer0Regs.TCR.bit.FREE = 1;
|
||||
CpuTimer0Regs.TCR.bit.TIE = 1; //Enable the timer0 interrupt signal
|
||||
CpuTimer0Regs.TCR.bit.TSS = 0; //restart the timer 0
|
||||
for(;;);
|
||||
|
||||
}
|
||||
|
||||
// INT7.1
|
||||
interrupt void local_DINTCH1_ISR(void) // DMA Channel 1
|
||||
{
|
||||
|
||||
// To receive more interrupts from this PIE group, acknowledge this interrupt
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP7;
|
||||
|
||||
// Next two lines for debug only to halt the processor here
|
||||
// Remove after inserting ISR Code
|
||||
asm (" ESTOP0");
|
||||
for(;;);
|
||||
}
|
||||
|
||||
|
||||
// Configure the timing paramaters for Zone 7.
|
||||
// Notes:
|
||||
// This function should not be executed from XINTF
|
||||
// Adjust the timing based on the data manual and
|
||||
// external device requirements.
|
||||
void init_zone7(void)
|
||||
{
|
||||
|
||||
// Make sure the XINTF clock is enabled
|
||||
SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1;
|
||||
|
||||
// Configure the GPIO for XINTF with a 16-bit data bus
|
||||
// This function is in DSP2833x_Xintf.c
|
||||
InitXintf16Gpio();
|
||||
EALLOW;
|
||||
// All Zones---------------------------------
|
||||
// Timing for all zones based on XTIMCLK = SYSCLKOUT
|
||||
XintfRegs.XINTCNF2.bit.XTIMCLK = 0;
|
||||
// Buffer up to 3 writes
|
||||
XintfRegs.XINTCNF2.bit.WRBUFF = 3;
|
||||
// XCLKOUT is enabled
|
||||
XintfRegs.XINTCNF2.bit.CLKOFF = 0;
|
||||
// XCLKOUT = XTIMCLK
|
||||
XintfRegs.XINTCNF2.bit.CLKMODE = 0;
|
||||
|
||||
// Zone 7------------------------------------
|
||||
// When using ready, ACTIVE must be 1 or greater
|
||||
// Lead must always be 1 or greater
|
||||
// Zone write timing
|
||||
XintfRegs.XTIMING7.bit.XWRLEAD = 1;
|
||||
XintfRegs.XTIMING7.bit.XWRACTIVE = 2;
|
||||
XintfRegs.XTIMING7.bit.XWRTRAIL = 1;
|
||||
// Zone read timing
|
||||
XintfRegs.XTIMING7.bit.XRDLEAD = 1;
|
||||
XintfRegs.XTIMING7.bit.XRDACTIVE = 3;
|
||||
XintfRegs.XTIMING7.bit.XRDTRAIL = 0;
|
||||
|
||||
// don't double all Zone read/write lead/active/trail timing
|
||||
XintfRegs.XTIMING7.bit.X2TIMING = 0;
|
||||
|
||||
// Zone will not sample XREADY signal
|
||||
XintfRegs.XTIMING7.bit.USEREADY = 0;
|
||||
XintfRegs.XTIMING7.bit.READYMODE = 0;
|
||||
|
||||
// 1,1 = x16 data bus
|
||||
// 0,1 = x32 data bus
|
||||
// other values are reserved
|
||||
XintfRegs.XTIMING7.bit.XSIZE = 3;
|
||||
EDIS;
|
||||
|
||||
//Force a pipeline flush to ensure that the write to
|
||||
//the last register configured occurs before returning.
|
||||
asm(" RPT #7 || NOP");
|
||||
}
|
||||
|
||||
|
||||
|
||||
36
Source/External/v120/DSP2833x_examples/dma_xintf_to_ram/Example_2833xDMA_xintf_to_ram.gel
vendored
Normal file
36
Source/External/v120/DSP2833x_examples/dma_xintf_to_ram/Example_2833xDMA_xintf_to_ram.gel
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
// TI File $Revision: /main/1 $
|
||||
// Checkin $Date: August 29, 2007 14:07:46 $
|
||||
//###########################################################################
|
||||
//
|
||||
// This .gel file can be used to help load and build the example project.
|
||||
// It should be unloaded from Code Composer Studio before loading another
|
||||
// project.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
menuitem "DSP2833x DMA XINTF to Ram Example"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xDMA_xintf_to_ram.pjt");
|
||||
GEL_ProjectBuild("Example_2833xDMA_xintf_to_ram.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xDMA_xintf_to_ram.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("DMABuf1,x");
|
||||
GEL_WatchAdd("DMABuf2,x");
|
||||
}
|
||||
48
Source/External/v120/DSP2833x_examples/dma_xintf_to_ram/Example_2833xDMA_xintf_to_ram.pjt
vendored
Normal file
48
Source/External/v120/DSP2833x_examples/dma_xintf_to_ram/Example_2833xDMA_xintf_to_ram.pjt
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
; Code Composer Project File, Version 2.0 (do not modify or remove this line)
|
||||
|
||||
[Project Settings]
|
||||
ProjectName="DSP28"
|
||||
ProjectDir="C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\dma_xintf_to_ram\"
|
||||
ProjectType=Executable
|
||||
CPUFamily=TMS320C28XX
|
||||
Tool="Compiler"
|
||||
Tool="CustomBuilder"
|
||||
Tool="DspBiosBuilder"
|
||||
Tool="Linker"
|
||||
Config="Debug"
|
||||
Config="Release"
|
||||
|
||||
[Source Files]
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_Adc.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ADC_cal.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CodeStartBranch.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DMA.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieVect.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_SysCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_usDelay.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_Xintf.c"
|
||||
Source="..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c"
|
||||
Source="Example_2833xDMA_xintf_to_ram.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\dma_xintf_to_ram\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\dma_xintf_to_ram\Debug" -i"..\..\DSP2833x_headers\include" -i"..\..\DSP2833x_common\include" -d"_DEBUG" -d"LARGE_MODEL" -ml -mt -v28 --float_support=fpu32
|
||||
|
||||
["Compiler" Settings: "Release"]
|
||||
Options=-q -o3 -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\dma_xintf_to_ram\Release" -d"LARGE_MODEL" -ml -v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Debug"]
|
||||
Options=-v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Release"]
|
||||
Options=-v28
|
||||
|
||||
["Linker" Settings: "Debug"]
|
||||
Options=-q -c -ecode_start -m".\Debug\Example_2833xDMA_xintf_to_ram.map" -o".\Debug\Example_2833xDMA_xintf_to_ram.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xDMA_ram_to_ram.out" -x
|
||||
|
||||
187
Source/External/v120/DSP2833x_examples/ecan_a_to_b_xmit/Example_2833xEcanA_to_B_Xmit.c
vendored
Normal file
187
Source/External/v120/DSP2833x_examples/ecan_a_to_b_xmit/Example_2833xEcanA_to_B_Xmit.c
vendored
Normal file
@@ -0,0 +1,187 @@
|
||||
// TI File $Revision: /main/9 $
|
||||
// Checkin $Date: April 21, 2008 15:41:13 $
|
||||
//###########################################################################
|
||||
// Filename: Example_28xEcan_A_to_B_Xmit.c
|
||||
//
|
||||
// Description: eCAN-A To eCAN-B TXLOOP - Transmit loop
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// Both CAN ports of the 2833x DSP need to be connected
|
||||
// to each other (via CAN transceivers)
|
||||
//
|
||||
// eCANA is on GPIO31 (CANTXA) and
|
||||
// GPIO30 (CANRXA)
|
||||
//
|
||||
// eCANB is on GPIO8 (CANTXB) and
|
||||
// GPIO10 (CANRXB)
|
||||
//
|
||||
// As supplied, this project is configured for "boot to SARAM"
|
||||
// operation. The 2833x Boot Mode table is shown below.
|
||||
// For information on configuring the boot mode of an eZdsp,
|
||||
// please refer to the documentation included with the eZdsp,
|
||||
//
|
||||
// $Boot_Table:
|
||||
//
|
||||
// GPIO87 GPIO86 GPIO85 GPIO84
|
||||
// XA15 XA14 XA13 XA12
|
||||
// PU PU PU PU
|
||||
// ==========================================
|
||||
// 1 1 1 1 Jump to Flash
|
||||
// 1 1 1 0 SCI-A boot
|
||||
// 1 1 0 1 SPI-A boot
|
||||
// 1 1 0 0 I2C-A boot
|
||||
// 1 0 1 1 eCAN-A boot
|
||||
// 1 0 1 0 McBSP-A boot
|
||||
// 1 0 0 1 Jump to XINTF x16
|
||||
// 1 0 0 0 Jump to XINTF x32
|
||||
// 0 1 1 1 Jump to OTP
|
||||
// 0 1 1 0 Parallel GPIO I/O boot
|
||||
// 0 1 0 1 Parallel XINTF boot
|
||||
// 0 1 0 0 Jump to SARAM <- "boot to SARAM"
|
||||
// 0 0 1 1 Branch to check boot mode
|
||||
// 0 0 1 0 Boot to flash, bypass ADC cal
|
||||
// 0 0 0 1 Boot to SARAM, bypass ADC cal
|
||||
// 0 0 0 0 Boot to SCI-A, bypass ADC cal
|
||||
// Boot_Table_End$
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// This example TRANSMITS data to another CAN module using MAILBOX5
|
||||
// This program could either loop forever or transmit "n" # of times,
|
||||
// where "n" is the TXCOUNT value.
|
||||
//
|
||||
// This example can be used to check CAN-A and CAN-B. Since CAN-B is
|
||||
// initialized in DSP2833x_ECan.c, it will acknowledge all frames
|
||||
// transmitted by the node on which this code runs. Both CAN ports of
|
||||
// the 2833x DSP need to be connected to each other (via CAN transceivers)
|
||||
//
|
||||
//###########################################################################
|
||||
// Original Author: HJ
|
||||
//
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
|
||||
#define TXCOUNT 100 // Transmission will take place (TXCOUNT) times..
|
||||
|
||||
// Globals for this example
|
||||
long i;
|
||||
long loopcount = 0;
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
|
||||
/* Create a shadow register structure for the CAN control registers. This is
|
||||
needed, since, only 32-bit access is allowed to these registers. 16-bit access
|
||||
to these registers could potentially corrupt the register contents. This is
|
||||
especially true while writing to a bit (or group of bits) among bits 16 - 31 */
|
||||
|
||||
struct ECAN_REGS ECanaShadow;
|
||||
|
||||
// Step 1. Initialize System Control:
|
||||
// PLL, WatchDog, enable Peripheral Clocks
|
||||
// This example function is found in the DSP2833x_SysCtrl.c file.
|
||||
InitSysCtrl();
|
||||
|
||||
// Step 2. Initalize GPIO:
|
||||
// This example function is found in the DSP2833x_Gpio.c file and
|
||||
// illustrates how to set the GPIO to it's default state.
|
||||
// InitGpio(); // Skipped for this example
|
||||
|
||||
// Just initalize eCAN pins for this example
|
||||
// This function is in DSP2833x_ECan.c
|
||||
InitECanGpio();
|
||||
|
||||
// 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 DSP2833x_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 DSP2833x_DefaultIsr.c.
|
||||
// This function is found in DSP2833x_PieVect.c.
|
||||
InitPieVectTable();
|
||||
|
||||
// Interrupts that are used in this example are re-mapped to
|
||||
// ISR functions found within this file.
|
||||
|
||||
// No interrupts used in this example.
|
||||
|
||||
// Step 4. Initialize all the Device Peripherals:
|
||||
// This function is found in DSP2833x_InitPeripherals.c
|
||||
// InitPeripherals(); // Not required for this example
|
||||
|
||||
// In this case just initalize eCAN-A and eCAN-B
|
||||
// This function is in DSP2833x_ECan.c
|
||||
InitECan();
|
||||
|
||||
// Step 5. User specific code:
|
||||
|
||||
/* Write to the MSGID field */
|
||||
|
||||
ECanaMboxes.MBOX25.MSGID.all = 0x95555555; // Extended Identifier
|
||||
|
||||
/* Configure Mailbox under test as a Transmit mailbox */
|
||||
|
||||
ECanaShadow.CANMD.all = ECanaRegs.CANMD.all;
|
||||
ECanaShadow.CANMD.bit.MD25 = 0;
|
||||
ECanaRegs.CANMD.all = ECanaShadow.CANMD.all;
|
||||
|
||||
/* Enable Mailbox under test */
|
||||
|
||||
ECanaShadow.CANME.all = ECanaRegs.CANME.all;
|
||||
ECanaShadow.CANME.bit.ME25 = 1;
|
||||
ECanaRegs.CANME.all = ECanaShadow.CANME.all;
|
||||
|
||||
/* Write to DLC field in Master Control reg */
|
||||
|
||||
ECanaMboxes.MBOX25.MSGCTRL.bit.DLC = 8;
|
||||
|
||||
/* Write to the mailbox RAM field */
|
||||
|
||||
ECanaMboxes.MBOX25.MDL.all = 0x55555555;
|
||||
ECanaMboxes.MBOX25.MDH.all = 0x55555555;
|
||||
|
||||
/* Begin transmitting */
|
||||
|
||||
|
||||
for(i=0; i < TXCOUNT; i++)
|
||||
{
|
||||
ECanaShadow.CANTRS.all = 0;
|
||||
ECanaShadow.CANTRS.bit.TRS25 = 1; // Set TRS for mailbox under test
|
||||
ECanaRegs.CANTRS.all = ECanaShadow.CANTRS.all;
|
||||
|
||||
do
|
||||
{
|
||||
ECanaShadow.CANTA.all = ECanaRegs.CANTA.all;
|
||||
} while(ECanaShadow.CANTA.bit.TA25 == 0 ); // Wait for TA5 bit to be set..
|
||||
|
||||
|
||||
ECanaShadow.CANTA.all = 0;
|
||||
ECanaShadow.CANTA.bit.TA25 = 1; // Clear TA5
|
||||
ECanaRegs.CANTA.all = ECanaShadow.CANTA.all;
|
||||
|
||||
loopcount ++;
|
||||
}
|
||||
asm(" ESTOP0"); // Stop here
|
||||
}
|
||||
|
||||
|
||||
37
Source/External/v120/DSP2833x_examples/ecan_a_to_b_xmit/Example_2833xEcanA_to_B_Xmit.gel
vendored
Normal file
37
Source/External/v120/DSP2833x_examples/ecan_a_to_b_xmit/Example_2833xEcanA_to_B_Xmit.gel
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:12:30 $
|
||||
//###########################################################################
|
||||
//
|
||||
// This .gel file can be used to help load and build the example project.
|
||||
// It should be unloaded from Code Composer Studio before loading another
|
||||
// project.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
menuitem "DSP2833x eCANA to eCANB"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xEcanA_to_B_Xmit.pjt");
|
||||
GEL_ProjectBuild("Example_2833xEcanA_to_B_Xmit.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xEcanA_to_B_Xmit.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("loopcount",,"");
|
||||
GEL_WatchAdd("ECanaRegs",,"");
|
||||
GEL_WatchAdd("ECanbRegs",,"");
|
||||
}
|
||||
45
Source/External/v120/DSP2833x_examples/ecan_a_to_b_xmit/Example_2833xEcanA_to_B_Xmit.pjt
vendored
Normal file
45
Source/External/v120/DSP2833x_examples/ecan_a_to_b_xmit/Example_2833xEcanA_to_B_Xmit.pjt
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
; Code Composer Project File, Version 2.0 (do not modify or remove this line)
|
||||
|
||||
[Project Settings]
|
||||
ProjectName="DSP2833x"
|
||||
ProjectDir="C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\ecan_a_to_b_xmit\"
|
||||
ProjectType=Executable
|
||||
CPUFamily=TMS320C28XX
|
||||
Tool="Compiler"
|
||||
Tool="DspBiosBuilder"
|
||||
Tool="Linker"
|
||||
Config="Debug"
|
||||
Config="Release"
|
||||
|
||||
[Source Files]
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ADC_cal.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CodeStartBranch.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ECan.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieVect.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_SysCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_usDelay.asm"
|
||||
Source="..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c"
|
||||
Source="Example_2833xEcanA_to_B_Xmit.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\ecan_a_to_b_xmit\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\ecan_a_to_b_xmit\Debug" -i"..\..\DSP2833x_headers\include" -i"..\..\DSP2833x_common\include" -d"_DEBUG" -d"LARGE_MODEL" --float_support=fpu32 -ml -mt -v28
|
||||
|
||||
["Compiler" Settings: "Release"]
|
||||
Options=-q -o3 -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\ecan_a_to_b_xmit\Release" -d"LARGE_MODEL" -ml -v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Debug"]
|
||||
Options=-v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Release"]
|
||||
Options=-v28
|
||||
|
||||
["Linker" Settings: "Debug"]
|
||||
Options=-q -c -ecode_start -m".\Debug\Example_2833xECanA_to_B_Xmit.map" -o".\Debug\Example_2833xECanA_to_B_Xmit.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xECanBack2Back.out" -x
|
||||
|
||||
309
Source/External/v120/DSP2833x_examples/ecan_back2back/Example_2833xECanBack2Back.c
vendored
Normal file
309
Source/External/v120/DSP2833x_examples/ecan_back2back/Example_2833xECanBack2Back.c
vendored
Normal file
@@ -0,0 +1,309 @@
|
||||
// TI File $Revision: /main/11 $
|
||||
// Checkin $Date: April 21, 2008 15:41:18 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xECanBack2Back.c
|
||||
//
|
||||
// TITLE: DSP2833x eCAN Back-to-back transmission and reception in
|
||||
// SELF-TEST mode
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// This progrm uses the peripheral's self test mode.
|
||||
// Other then boot mode configuration, no other hardware configuration
|
||||
// is required.
|
||||
//
|
||||
// As supplied, this project is configured for "boot to SARAM"
|
||||
// operation. The 2833x Boot Mode table is shown below.
|
||||
// For information on configuring the boot mode of an eZdsp,
|
||||
// please refer to the documentation included with the eZdsp,
|
||||
//
|
||||
// $Boot_Table:
|
||||
//
|
||||
// GPIO87 GPIO86 GPIO85 GPIO84
|
||||
// XA15 XA14 XA13 XA12
|
||||
// PU PU PU PU
|
||||
// ==========================================
|
||||
// 1 1 1 1 Jump to Flash
|
||||
// 1 1 1 0 SCI-A boot
|
||||
// 1 1 0 1 SPI-A boot
|
||||
// 1 1 0 0 I2C-A boot
|
||||
// 1 0 1 1 eCAN-A boot
|
||||
// 1 0 1 0 McBSP-A boot
|
||||
// 1 0 0 1 Jump to XINTF x16
|
||||
// 1 0 0 0 Jump to XINTF x32
|
||||
// 0 1 1 1 Jump to OTP
|
||||
// 0 1 1 0 Parallel GPIO I/O boot
|
||||
// 0 1 0 1 Parallel XINTF boot
|
||||
// 0 1 0 0 Jump to SARAM <- "boot to SARAM"
|
||||
// 0 0 1 1 Branch to check boot mode
|
||||
// 0 0 1 0 Boot to flash, bypass ADC cal
|
||||
// 0 0 0 1 Boot to SARAM, bypass ADC cal
|
||||
// 0 0 0 0 Boot to SCI-A, bypass ADC cal
|
||||
// Boot_Table_End$
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// This test transmits data back-to-back at high speed without
|
||||
// stopping.
|
||||
// The received data is verified. Any error is flagged.
|
||||
// MBX0 transmits to MBX16, MBX1 transmits to MBX17 and so on....
|
||||
// This program illustrates the use of self-test mode
|
||||
//
|
||||
//###########################################################################
|
||||
// Original Author H.J.
|
||||
//
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
|
||||
// Prototype statements for functions found within this file.
|
||||
void mailbox_check(int32 T1, int32 T2, int32 T3);
|
||||
void mailbox_read(int16 i);
|
||||
|
||||
// Global variable for this example
|
||||
Uint32 ErrorCount;
|
||||
Uint32 PassCount;
|
||||
Uint32 MessageReceivedCount;
|
||||
|
||||
Uint32 TestMbox1 = 0;
|
||||
Uint32 TestMbox2 = 0;
|
||||
Uint32 TestMbox3 = 0;
|
||||
|
||||
void main(void)
|
||||
{
|
||||
|
||||
Uint16 j;
|
||||
|
||||
// eCAN control registers require read/write access using 32-bits. Thus we
|
||||
// will create a set of shadow registers for this example. These shadow
|
||||
// registers will be used to make sure the access is 32-bits and not 16.
|
||||
struct ECAN_REGS ECanaShadow;
|
||||
|
||||
// Step 1. Initialize System Control:
|
||||
// PLL, WatchDog, enable Peripheral Clocks
|
||||
// This example function is found in the DSP2833x_SysCtrl.c file.
|
||||
InitSysCtrl();
|
||||
|
||||
// Step 2. Initalize GPIO:
|
||||
// This example function is found in the DSP2833x_Gpio.c file and
|
||||
// illustrates how to set the GPIO to it's default state.
|
||||
// InitGpio(); // Skipped for this example
|
||||
|
||||
// For this example, configure CAN pins using GPIO regs here
|
||||
// This function is found in DSP2833x_ECan.c
|
||||
InitECanGpio();
|
||||
|
||||
// Step 3. Clear all interrupts and initialize PIE vector table:
|
||||
// Disable CPU interrupts
|
||||
DINT;
|
||||
|
||||
// Initialize 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 DSP2833x_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 DSP2833x_DefaultIsr.c.
|
||||
// This function is found in DSP2833x_PieVect.c.
|
||||
InitPieVectTable();
|
||||
|
||||
// Step 4. Initialize all the Device Peripherals:
|
||||
// This function is found in DSP2833x_InitPeripherals.c
|
||||
// InitPeripherals(); // Not required for this example
|
||||
|
||||
// Step 5. User specific code, enable interrupts:
|
||||
|
||||
MessageReceivedCount = 0;
|
||||
ErrorCount = 0;
|
||||
PassCount = 0;
|
||||
|
||||
InitECana(); // Initialize eCAN-A module
|
||||
|
||||
// Mailboxs can be written to 16-bits or 32-bits at a time
|
||||
// Write to the MSGID field of TRANSMIT mailboxes MBOX0 - 15
|
||||
ECanaMboxes.MBOX0.MSGID.all = 0x9555AAA0;
|
||||
ECanaMboxes.MBOX1.MSGID.all = 0x9555AAA1;
|
||||
ECanaMboxes.MBOX2.MSGID.all = 0x9555AAA2;
|
||||
ECanaMboxes.MBOX3.MSGID.all = 0x9555AAA3;
|
||||
ECanaMboxes.MBOX4.MSGID.all = 0x9555AAA4;
|
||||
ECanaMboxes.MBOX5.MSGID.all = 0x9555AAA5;
|
||||
ECanaMboxes.MBOX6.MSGID.all = 0x9555AAA6;
|
||||
ECanaMboxes.MBOX7.MSGID.all = 0x9555AAA7;
|
||||
ECanaMboxes.MBOX8.MSGID.all = 0x9555AAA8;
|
||||
ECanaMboxes.MBOX9.MSGID.all = 0x9555AAA9;
|
||||
ECanaMboxes.MBOX10.MSGID.all = 0x9555AAAA;
|
||||
ECanaMboxes.MBOX11.MSGID.all = 0x9555AAAB;
|
||||
ECanaMboxes.MBOX12.MSGID.all = 0x9555AAAC;
|
||||
ECanaMboxes.MBOX13.MSGID.all = 0x9555AAAD;
|
||||
ECanaMboxes.MBOX14.MSGID.all = 0x9555AAAE;
|
||||
ECanaMboxes.MBOX15.MSGID.all = 0x9555AAAF;
|
||||
|
||||
// Write to the MSGID field of RECEIVE mailboxes MBOX16 - 31
|
||||
ECanaMboxes.MBOX16.MSGID.all = 0x9555AAA0;
|
||||
ECanaMboxes.MBOX17.MSGID.all = 0x9555AAA1;
|
||||
ECanaMboxes.MBOX18.MSGID.all = 0x9555AAA2;
|
||||
ECanaMboxes.MBOX19.MSGID.all = 0x9555AAA3;
|
||||
ECanaMboxes.MBOX20.MSGID.all = 0x9555AAA4;
|
||||
ECanaMboxes.MBOX21.MSGID.all = 0x9555AAA5;
|
||||
ECanaMboxes.MBOX22.MSGID.all = 0x9555AAA6;
|
||||
ECanaMboxes.MBOX23.MSGID.all = 0x9555AAA7;
|
||||
ECanaMboxes.MBOX24.MSGID.all = 0x9555AAA8;
|
||||
ECanaMboxes.MBOX25.MSGID.all = 0x9555AAA9;
|
||||
ECanaMboxes.MBOX26.MSGID.all = 0x9555AAAA;
|
||||
ECanaMboxes.MBOX27.MSGID.all = 0x9555AAAB;
|
||||
ECanaMboxes.MBOX28.MSGID.all = 0x9555AAAC;
|
||||
ECanaMboxes.MBOX29.MSGID.all = 0x9555AAAD;
|
||||
ECanaMboxes.MBOX30.MSGID.all = 0x9555AAAE;
|
||||
ECanaMboxes.MBOX31.MSGID.all = 0x9555AAAF;
|
||||
|
||||
// Configure Mailboxes 0-15 as Tx, 16-31 as Rx
|
||||
// Since this write is to the entire register (instead of a bit
|
||||
// field) a shadow register is not required.
|
||||
ECanaRegs.CANMD.all = 0xFFFF0000;
|
||||
|
||||
// Enable all Mailboxes */
|
||||
// Since this write is to the entire register (instead of a bit
|
||||
// field) a shadow register is not required.
|
||||
ECanaRegs.CANME.all = 0xFFFFFFFF;
|
||||
|
||||
// Specify that 8 bits will be sent/received
|
||||
ECanaMboxes.MBOX0.MSGCTRL.bit.DLC = 8;
|
||||
ECanaMboxes.MBOX1.MSGCTRL.bit.DLC = 8;
|
||||
ECanaMboxes.MBOX2.MSGCTRL.bit.DLC = 8;
|
||||
ECanaMboxes.MBOX3.MSGCTRL.bit.DLC = 8;
|
||||
ECanaMboxes.MBOX4.MSGCTRL.bit.DLC = 8;
|
||||
ECanaMboxes.MBOX5.MSGCTRL.bit.DLC = 8;
|
||||
ECanaMboxes.MBOX6.MSGCTRL.bit.DLC = 8;
|
||||
ECanaMboxes.MBOX7.MSGCTRL.bit.DLC = 8;
|
||||
ECanaMboxes.MBOX8.MSGCTRL.bit.DLC = 8;
|
||||
ECanaMboxes.MBOX9.MSGCTRL.bit.DLC = 8;
|
||||
ECanaMboxes.MBOX10.MSGCTRL.bit.DLC = 8;
|
||||
ECanaMboxes.MBOX11.MSGCTRL.bit.DLC = 8;
|
||||
ECanaMboxes.MBOX12.MSGCTRL.bit.DLC = 8;
|
||||
ECanaMboxes.MBOX13.MSGCTRL.bit.DLC = 8;
|
||||
ECanaMboxes.MBOX14.MSGCTRL.bit.DLC = 8;
|
||||
ECanaMboxes.MBOX15.MSGCTRL.bit.DLC = 8;
|
||||
|
||||
|
||||
// Write to the mailbox RAM field of MBOX0 - 15
|
||||
ECanaMboxes.MBOX0.MDL.all = 0x9555AAA0;
|
||||
ECanaMboxes.MBOX0.MDH.all = 0x89ABCDEF;
|
||||
|
||||
ECanaMboxes.MBOX1.MDL.all = 0x9555AAA1;
|
||||
ECanaMboxes.MBOX1.MDH.all = 0x89ABCDEF;
|
||||
|
||||
ECanaMboxes.MBOX2.MDL.all = 0x9555AAA2;
|
||||
ECanaMboxes.MBOX2.MDH.all = 0x89ABCDEF;
|
||||
|
||||
ECanaMboxes.MBOX3.MDL.all = 0x9555AAA3;
|
||||
ECanaMboxes.MBOX3.MDH.all = 0x89ABCDEF;
|
||||
|
||||
ECanaMboxes.MBOX4.MDL.all = 0x9555AAA4;
|
||||
ECanaMboxes.MBOX4.MDH.all = 0x89ABCDEF;
|
||||
|
||||
ECanaMboxes.MBOX5.MDL.all = 0x9555AAA5;
|
||||
ECanaMboxes.MBOX5.MDH.all = 0x89ABCDEF;
|
||||
|
||||
ECanaMboxes.MBOX6.MDL.all = 0x9555AAA6;
|
||||
ECanaMboxes.MBOX6.MDH.all = 0x89ABCDEF;
|
||||
|
||||
ECanaMboxes.MBOX7.MDL.all = 0x9555AAA7;
|
||||
ECanaMboxes.MBOX7.MDH.all = 0x89ABCDEF;
|
||||
|
||||
ECanaMboxes.MBOX8.MDL.all = 0x9555AAA8;
|
||||
ECanaMboxes.MBOX8.MDH.all = 0x89ABCDEF;
|
||||
|
||||
ECanaMboxes.MBOX9.MDL.all = 0x9555AAA9;
|
||||
ECanaMboxes.MBOX9.MDH.all = 0x89ABCDEF;
|
||||
|
||||
ECanaMboxes.MBOX10.MDL.all = 0x9555AAAA;
|
||||
ECanaMboxes.MBOX10.MDH.all = 0x89ABCDEF;
|
||||
|
||||
ECanaMboxes.MBOX11.MDL.all = 0x9555AAAB;
|
||||
ECanaMboxes.MBOX11.MDH.all = 0x89ABCDEF;
|
||||
|
||||
ECanaMboxes.MBOX12.MDL.all = 0x9555AAAC;
|
||||
ECanaMboxes.MBOX12.MDH.all = 0x89ABCDEF;
|
||||
|
||||
ECanaMboxes.MBOX13.MDL.all = 0x9555AAAD;
|
||||
ECanaMboxes.MBOX13.MDH.all = 0x89ABCDEF;
|
||||
|
||||
ECanaMboxes.MBOX14.MDL.all = 0x9555AAAE;
|
||||
ECanaMboxes.MBOX14.MDH.all = 0x89ABCDEF;
|
||||
|
||||
ECanaMboxes.MBOX15.MDL.all = 0x9555AAAF;
|
||||
ECanaMboxes.MBOX15.MDH.all = 0x89ABCDEF;
|
||||
|
||||
// Since this write is to the entire register (instead of a bit
|
||||
// field) a shadow register is not required.
|
||||
EALLOW;
|
||||
ECanaRegs.CANMIM.all = 0xFFFFFFFF;
|
||||
|
||||
// Configure the eCAN for self test mode
|
||||
// Enable the enhanced features of the eCAN.
|
||||
EALLOW;
|
||||
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
|
||||
ECanaShadow.CANMC.bit.STM = 1; // Configure CAN for self-test mode
|
||||
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
|
||||
EDIS;
|
||||
|
||||
// Begin transmitting
|
||||
for(;;)
|
||||
{
|
||||
|
||||
ECanaRegs.CANTRS.all = 0x0000FFFF; // Set TRS for all transmit mailboxes
|
||||
while(ECanaRegs.CANTA.all != 0x0000FFFF ) {} // Wait for all TAn bits to be set..
|
||||
ECanaRegs.CANTA.all = 0x0000FFFF; // Clear all TAn
|
||||
MessageReceivedCount++;
|
||||
|
||||
//Read from Receive mailboxes and begin checking for data */
|
||||
for(j=0; j<16; j++) // Read & check 16 mailboxes
|
||||
{
|
||||
mailbox_read(j); // This func reads the indicated mailbox data
|
||||
mailbox_check(TestMbox1,TestMbox2,TestMbox3); // Checks the received data
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This function reads out the contents of the indicated
|
||||
// by the Mailbox number (MBXnbr).
|
||||
void mailbox_read(int16 MBXnbr)
|
||||
{
|
||||
volatile struct MBOX *Mailbox;
|
||||
Mailbox = &ECanaMboxes.MBOX0 + MBXnbr;
|
||||
TestMbox1 = Mailbox->MDL.all; // = 0x9555AAAn (n is the MBX number)
|
||||
TestMbox2 = Mailbox->MDH.all; // = 0x89ABCDEF (a constant)
|
||||
TestMbox3 = Mailbox->MSGID.all;// = 0x9555AAAn (n is the MBX number)
|
||||
|
||||
} // MSGID of a rcv MBX is transmitted as the MDL data.
|
||||
|
||||
|
||||
void mailbox_check(int32 T1, int32 T2, int32 T3)
|
||||
{
|
||||
if((T1 != T3) || ( T2 != 0x89ABCDEF))
|
||||
{
|
||||
ErrorCount++;
|
||||
}
|
||||
else
|
||||
{
|
||||
PassCount++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//===========================================================================
|
||||
// No more.
|
||||
//===========================================================================
|
||||
43
Source/External/v120/DSP2833x_examples/ecan_back2back/Example_2833xECanBack2Back.gel
vendored
Normal file
43
Source/External/v120/DSP2833x_examples/ecan_back2back/Example_2833xECanBack2Back.gel
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:12:48 $
|
||||
//###########################################################################
|
||||
//
|
||||
// This .gel file can be used to help load and build the example project.
|
||||
// It should be unloaded from Code Composer Studio before loading another
|
||||
// project.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
menuitem "DSP2833x ECanBack2Back"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xECanBack2Back.pjt");
|
||||
GEL_ProjectBuild("Example_2833xECanBack2Back.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xECanBack2Back.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("MessageReceivedCount,x");
|
||||
GEL_WatchAdd("ErrorCount,x");
|
||||
GEL_WatchAdd("PassCount,x");
|
||||
GEL_WatchAdd("ECanaRegs,x");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
45
Source/External/v120/DSP2833x_examples/ecan_back2back/Example_2833xECanBack2Back.pjt
vendored
Normal file
45
Source/External/v120/DSP2833x_examples/ecan_back2back/Example_2833xECanBack2Back.pjt
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
; Code Composer Project File, Version 2.0 (do not modify or remove this line)
|
||||
|
||||
[Project Settings]
|
||||
ProjectName="DSP2833x"
|
||||
ProjectDir="C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\ecan_back2back\"
|
||||
ProjectType=Executable
|
||||
CPUFamily=TMS320C28XX
|
||||
Tool="Compiler"
|
||||
Tool="DspBiosBuilder"
|
||||
Tool="Linker"
|
||||
Config="Debug"
|
||||
Config="Release"
|
||||
|
||||
[Source Files]
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ADC_cal.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CodeStartBranch.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ECan.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieVect.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_SysCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_usDelay.asm"
|
||||
Source="..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c"
|
||||
Source="Example_2833xECanBack2Back.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\ecan_back2back\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\ecan_back2back\Debug" -i"..\..\DSP2833x_headers\include" -i"..\..\DSP2833x_common\include" -d"_DEBUG" -d"LARGE_MODEL" --float_support=fpu32 -ml -mt -v28
|
||||
|
||||
["Compiler" Settings: "Release"]
|
||||
Options=-q -o3 -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\ecan_back2back\Release" -d"LARGE_MODEL" -ml -v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Debug"]
|
||||
Options=-v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Release"]
|
||||
Options=-v28
|
||||
|
||||
["Linker" Settings: "Debug"]
|
||||
Options=-q -c -ecode_start -m".\Debug\Example_2833xECanBack2Back.map" -o".\Debug\Example_2833xECanBack2Back.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xECanBack2Back.out" -x
|
||||
|
||||
223
Source/External/v120/DSP2833x_examples/ecap_apwm/Example_2833xECap_apwm.c
vendored
Normal file
223
Source/External/v120/DSP2833x_examples/ecap_apwm/Example_2833xECap_apwm.c
vendored
Normal file
@@ -0,0 +1,223 @@
|
||||
// TI File $Revision: /main/10 $
|
||||
// Checkin $Date: April 21, 2008 15:41:24 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xECap_apwm.c
|
||||
//
|
||||
// TITLE: DSP2833x ECAP APWM Example
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// Monitor eCAP1 - eCAP4 pins on a oscilloscope as
|
||||
// described below.
|
||||
//
|
||||
// eCAP1 on GPIO24
|
||||
// eCAP2 on GPIO7
|
||||
// eCAP3 on GPIO9
|
||||
// eCAP4 on GPIO11
|
||||
//
|
||||
// As supplied, this project is configured for "boot to SARAM"
|
||||
// operation. The 2833x Boot Mode table is shown below.
|
||||
// For information on configuring the boot mode of an eZdsp,
|
||||
// please refer to the documentation included with the eZdsp,
|
||||
//
|
||||
// $Boot_Table:
|
||||
//
|
||||
// GPIO87 GPIO86 GPIO85 GPIO84
|
||||
// XA15 XA14 XA13 XA12
|
||||
// PU PU PU PU
|
||||
// ==========================================
|
||||
// 1 1 1 1 Jump to Flash
|
||||
// 1 1 1 0 SCI-A boot
|
||||
// 1 1 0 1 SPI-A boot
|
||||
// 1 1 0 0 I2C-A boot
|
||||
// 1 0 1 1 eCAN-A boot
|
||||
// 1 0 1 0 McBSP-A boot
|
||||
// 1 0 0 1 Jump to XINTF x16
|
||||
// 1 0 0 0 Jump to XINTF x32
|
||||
// 0 1 1 1 Jump to OTP
|
||||
// 0 1 1 0 Parallel GPIO I/O boot
|
||||
// 0 1 0 1 Parallel XINTF boot
|
||||
// 0 1 0 0 Jump to SARAM <- "boot to SARAM"
|
||||
// 0 0 1 1 Branch to check boot mode
|
||||
// 0 0 1 0 Boot to flash, bypass ADC cal
|
||||
// 0 0 0 1 Boot to SARAM, bypass ADC cal
|
||||
// 0 0 0 0 Boot to SCI-A, bypass ADC cal
|
||||
// Boot_Table_End$
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// This program sets up the eCAP pins in the APWM mode.
|
||||
// This program runs at 150 MHz SYSCLKOUT assuming a 30 MHz
|
||||
// XCLKIN or 100 MHz SYSCLKOUT assuming a 20 MHz XCLKIN.
|
||||
//
|
||||
// For 150 MHz devices:
|
||||
//
|
||||
// eCAP1 will come out on the GPIO24 pin
|
||||
// This pin is configured to vary between 7.5 Hz and 15 Hz using
|
||||
// the shadow registers to load the next period/compare values
|
||||
//
|
||||
// eCAP2 will come out on the GPIO7 pin
|
||||
// this pin is configured as a 7.5 Hz output
|
||||
//
|
||||
// eCAP3 will come out on the GPIO9 pin
|
||||
// this pin is configured as a 1.5 Hz output
|
||||
//
|
||||
//
|
||||
// eCAP4 will come out on the GPIO11 pin
|
||||
// this pin is configured as a 30 kHz output
|
||||
//
|
||||
// All frequencies assume a 30 Mhz input clock. The XCLKOUT pin
|
||||
// should show 150Mhz.
|
||||
// --------------------------------------------------------------
|
||||
// For 100 MHz devices:
|
||||
//
|
||||
// eCAP1 will come out on the GPIO24 pin
|
||||
// This pin is configured to vary between 5 Hz and 10 Hz using
|
||||
// the shadow registers to load the next period/compare values
|
||||
//
|
||||
// eCAP2 will come out on the GPIO7 pin
|
||||
// this pin is configured as a 5 Hz output
|
||||
//
|
||||
// eCAP3 will come out on the GPIO9 pin
|
||||
// this pin is configured as a 1 Hz output
|
||||
//
|
||||
// eCAP4 will come out on the GPIO11 pin
|
||||
// this pin is configured as a 20kHz output
|
||||
//
|
||||
// All frequencies assume a 20 Mhz input clock. The XCLKOUT pin
|
||||
// should show 100Mhz.
|
||||
//
|
||||
//
|
||||
// Watch Variables:
|
||||
//
|
||||
//
|
||||
//
|
||||
//###########################################################################
|
||||
// Original Author: D.F.
|
||||
//
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
|
||||
// Global variables
|
||||
Uint16 direction = 0;
|
||||
|
||||
void main(void)
|
||||
{
|
||||
|
||||
// Step 1. Initialize System Control:
|
||||
// PLL, WatchDog, enable Peripheral Clocks
|
||||
// This example function is found in the DSP2833x_SysCtrl.c file.
|
||||
InitSysCtrl();
|
||||
|
||||
// Step 2. Initalize GPIO:
|
||||
// This example function is found in the DSP2833x_Gpio.c file and
|
||||
// illustrates how to set the GPIO to it's default state.
|
||||
// InitGpio(); // Skipped for this example
|
||||
|
||||
// Initialize the GPIO pins for eCAP.
|
||||
// This function is found in the DSP2833x_ECap.c file
|
||||
InitECapGpio();
|
||||
|
||||
// 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 DSP2833x_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 DSP2833x_DefaultIsr.c.
|
||||
// This function is found in DSP2833x_PieVect.c.
|
||||
InitPieVectTable();
|
||||
|
||||
// Interrupts that are used in this example are re-mapped to
|
||||
// ISR functions found within this file.
|
||||
// No interrupts used for this example.
|
||||
|
||||
// Step 4. Initialize all the Device Peripherals:
|
||||
// This function is found in DSP2833x_InitPeripherals.c
|
||||
// InitPeripherals(); // Not required for this example
|
||||
|
||||
// Step 5. User specific code
|
||||
|
||||
|
||||
// Setup APWM mode on CAP1, set period and compare registers
|
||||
ECap1Regs.ECCTL2.bit.CAP_APWM = 1; // Enable APWM mode
|
||||
ECap1Regs.CAP1 = 0x01312D00; // Set Period value
|
||||
ECap1Regs.CAP2 = 0x00989680; // Set Compare value
|
||||
ECap1Regs.ECCLR.all = 0x0FF; // Clear pending interrupts
|
||||
ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int
|
||||
|
||||
// Setup APWM mode on CAP2, set period and compare registers
|
||||
ECap2Regs.ECCTL2.bit.CAP_APWM = 1; // Enable APWM mode
|
||||
ECap2Regs.CAP1 = 0x01312D00; // Set Period value
|
||||
ECap2Regs.CAP2 = 0x00989680; // Set Compare value
|
||||
ECap2Regs.ECCLR.all = 0x0FF; // Clear pending interrupts
|
||||
ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int
|
||||
|
||||
// Setup APWM mode on CAP3, set period and compare registers
|
||||
ECap3Regs.ECCTL2.bit.CAP_APWM = 1; // Enable APWM mode
|
||||
ECap3Regs.CAP1 = 0x05F5E100; // Set Period value
|
||||
ECap3Regs.CAP2 = 0x02FAF080; // Set Compare value
|
||||
ECap3Regs.ECCLR.all = 0x0FF; // Clear pending interrupts
|
||||
ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int
|
||||
|
||||
// Setup APWM mode on CAP4, set period and compare registers
|
||||
ECap4Regs.ECCTL2.bit.CAP_APWM = 1; // Enable APWM mode
|
||||
ECap4Regs.CAP1 = 0x00001388; // Set Period value
|
||||
ECap4Regs.CAP2 = 0x000009C4; // Set Compare value
|
||||
ECap4Regs.ECCLR.all = 0x0FF; // Clear pending interrupts
|
||||
ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int
|
||||
|
||||
// Start counters
|
||||
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1;
|
||||
ECap2Regs.ECCTL2.bit.TSCTRSTOP = 1;
|
||||
ECap3Regs.ECCTL2.bit.TSCTRSTOP = 1;
|
||||
ECap4Regs.ECCTL2.bit.TSCTRSTOP = 1;
|
||||
|
||||
for(;;)
|
||||
{
|
||||
// set next duty cycle to 50%
|
||||
ECap1Regs.CAP4 = ECap1Regs.CAP1 >> 1;
|
||||
|
||||
// vary freq between 7.5 Hz and 15 Hz (for 150MHz SYSCLKOUT) 5 Hz and 10 Hz (for 100 MHz SYSCLKOUT)
|
||||
if(ECap1Regs.CAP1 >= 0x01312D00)
|
||||
{
|
||||
direction = 0;
|
||||
} else if (ECap1Regs.CAP1 <= 0x00989680)
|
||||
{
|
||||
direction = 1;
|
||||
}
|
||||
|
||||
if(direction == 0)
|
||||
{
|
||||
ECap1Regs.CAP3 = ECap1Regs.CAP1 - 500000;
|
||||
} else
|
||||
{
|
||||
ECap1Regs.CAP3 = ECap1Regs.CAP1 + 500000;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//===========================================================================
|
||||
// No more.
|
||||
//===========================================================================
|
||||
39
Source/External/v120/DSP2833x_examples/ecap_apwm/Example_2833xECap_apwm.gel
vendored
Normal file
39
Source/External/v120/DSP2833x_examples/ecap_apwm/Example_2833xECap_apwm.gel
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:13:02 $
|
||||
//###########################################################################
|
||||
//
|
||||
// This .gel file can be used to help load and build the example project.
|
||||
// It should be unloaded from Code Composer Studio before loading another
|
||||
// project.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
menuitem "DSP2833x eCAP Asym PWM"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xECap_apwm.pjt");
|
||||
GEL_ProjectBuild("Example_2833xECap_apwm.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xECap_apwm.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("ECap1Regs,x");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
46
Source/External/v120/DSP2833x_examples/ecap_apwm/Example_2833xECap_apwm.pjt
vendored
Normal file
46
Source/External/v120/DSP2833x_examples/ecap_apwm/Example_2833xECap_apwm.pjt
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
; Code Composer Project File, Version 2.0 (do not modify or remove this line)
|
||||
|
||||
[Project Settings]
|
||||
ProjectName="DSP2833x"
|
||||
ProjectDir="C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\ecap_apwm\"
|
||||
ProjectType=Executable
|
||||
CPUFamily=TMS320C28XX
|
||||
Tool="Compiler"
|
||||
Tool="DspBiosBuilder"
|
||||
Tool="Linker"
|
||||
Config="Debug"
|
||||
Config="Release"
|
||||
|
||||
[Source Files]
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ADC_cal.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CodeStartBranch.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CpuTimers.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ECap.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieVect.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_SysCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_usDelay.asm"
|
||||
Source="..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c"
|
||||
Source="Example_2833xECap_apwm.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\ecap_apwm\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\ecap_apwm\Debug" -i"..\..\DSP2833x_headers\include" -i"..\..\DSP2833x_common\include" -d"_DEBUG" -d"LARGE_MODEL" --float_support=fpu32 -ml -mt -v28
|
||||
|
||||
["Compiler" Settings: "Release"]
|
||||
Options=-q -o3 -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\ecap_apwm\Release" -d"LARGE_MODEL" -ml -v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Debug"]
|
||||
Options=-v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Release"]
|
||||
Options=-v28
|
||||
|
||||
["Linker" Settings: "Debug"]
|
||||
Options=-q -c -ecode_start -m".\Debug\Example_2833xECap_apwm.map" -o".\Debug\Example_2833xECap_apwm.out" -stack0x380 -w -x -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xECap_apwm.out" -x
|
||||
|
||||
288
Source/External/v120/DSP2833x_examples/ecap_capture_pwm/Example_2833xECap_Capture_Pwm.c
vendored
Normal file
288
Source/External/v120/DSP2833x_examples/ecap_capture_pwm/Example_2833xECap_Capture_Pwm.c
vendored
Normal file
@@ -0,0 +1,288 @@
|
||||
// TI File $Revision: /main/8 $
|
||||
// Checkin $Date: April 21, 2008 15:41:29 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xECap_Capture_Pwm.c
|
||||
//
|
||||
// TITLE: Capture EPWM3.
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// Make the following external connection:
|
||||
// EPWM3 on GPIO4 should be connected to ECAP1 on GPIO24.
|
||||
//
|
||||
// As supplied, this project is configured for "boot to SARAM"
|
||||
// operation. The 2833x Boot Mode table is shown below.
|
||||
// For information on configuring the boot mode of an eZdsp,
|
||||
// please refer to the documentation included with the eZdsp,
|
||||
//
|
||||
// $Boot_Table:
|
||||
//
|
||||
// GPIO87 GPIO86 GPIO85 GPIO84
|
||||
// XA15 XA14 XA13 XA12
|
||||
// PU PU PU PU
|
||||
// ==========================================
|
||||
// 1 1 1 1 Jump to Flash
|
||||
// 1 1 1 0 SCI-A boot
|
||||
// 1 1 0 1 SPI-A boot
|
||||
// 1 1 0 0 I2C-A boot
|
||||
// 1 0 1 1 eCAN-A boot
|
||||
// 1 0 1 0 McBSP-A boot
|
||||
// 1 0 0 1 Jump to XINTF x16
|
||||
// 1 0 0 0 Jump to XINTF x32
|
||||
// 0 1 1 1 Jump to OTP
|
||||
// 0 1 1 0 Parallel GPIO I/O boot
|
||||
// 0 1 0 1 Parallel XINTF boot
|
||||
// 0 1 0 0 Jump to SARAM <- "boot to SARAM"
|
||||
// 0 0 1 1 Branch to check boot mode
|
||||
// 0 0 1 0 Boot to flash, bypass ADC cal
|
||||
// 0 0 0 1 Boot to SARAM, bypass ADC cal
|
||||
// 0 0 0 0 Boot to SCI-A, bypass ADC cal
|
||||
// Boot_Table_End$
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// This example configures ePWM3A for:
|
||||
// - Up count
|
||||
// - Period starts at 2 and goes up to 1000
|
||||
// - Toggle output on PRD
|
||||
//
|
||||
// eCAP1 is configured to capture the time between rising
|
||||
// and falling edge of the PWM3A output.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
|
||||
|
||||
// Configure the start/end period for the timer
|
||||
#define PWM3_TIMER_MIN 10
|
||||
#define PWM3_TIMER_MAX 8000
|
||||
|
||||
// Prototype statements for functions found within this file.
|
||||
interrupt void ecap1_isr(void);
|
||||
void InitECapture(void);
|
||||
void InitEPwmTimer(void);
|
||||
void Fail(void);
|
||||
|
||||
// Global variables used in this example
|
||||
Uint32 ECap1IntCount;
|
||||
Uint32 ECap1PassCount;
|
||||
Uint32 EPwm3TimerDirection;
|
||||
|
||||
// To keep track of which way the timer value is moving
|
||||
#define EPWM_TIMER_UP 1
|
||||
#define EPWM_TIMER_DOWN 0
|
||||
|
||||
void main(void)
|
||||
{
|
||||
|
||||
// Step 1. Initialize System Control:
|
||||
// PLL, WatchDog, enable Peripheral Clocks
|
||||
// This example function is found in the DSP2833x_SysCtrl.c file.
|
||||
InitSysCtrl();
|
||||
|
||||
// Step 2. Initalize GPIO:
|
||||
// This example function is found in the DSP2833x_Gpio.c file and
|
||||
// illustrates how to set the GPIO to it's default state.
|
||||
// InitGpio(); // Skipped for this example
|
||||
|
||||
InitEPwm3Gpio();
|
||||
InitECap1Gpio();
|
||||
|
||||
// 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 DSP2833x_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 DSP2833x_DefaultIsr.c.
|
||||
// This function is found in DSP2833x_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.ECAP1_INT = &ecap1_isr;
|
||||
EDIS; // This is needed to disable write to EALLOW protected registers
|
||||
|
||||
// Step 4. Initialize all the Device Peripherals:
|
||||
// This function is found in DSP2833x_InitPeripherals.c
|
||||
// InitPeripherals(); // Not required for this example
|
||||
InitEPwmTimer(); // For this example, only initialize the ePWM Timers
|
||||
InitECapture();
|
||||
|
||||
|
||||
// Step 5. User specific code, enable interrupts:
|
||||
|
||||
// Initalize counters:
|
||||
ECap1IntCount = 0;
|
||||
ECap1PassCount = 0;
|
||||
|
||||
// Enable CPU INT4 which is connected to ECAP1-4 INT:
|
||||
IER |= M_INT4;
|
||||
|
||||
// Enable eCAP INTn in the PIE: Group 3 interrupt 1-6
|
||||
PieCtrlRegs.PIEIER4.bit.INTx1 = 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(;;)
|
||||
{
|
||||
asm(" NOP");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void InitEPwmTimer()
|
||||
{
|
||||
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
|
||||
EDIS;
|
||||
|
||||
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up
|
||||
EPwm3Regs.TBPRD = PWM3_TIMER_MIN;
|
||||
EPwm3Regs.TBPHS.all = 0x00000000;
|
||||
EPwm3Regs.AQCTLA.bit.PRD = AQ_TOGGLE; // Toggle on PRD
|
||||
|
||||
// TBCLK = SYSCLKOUT
|
||||
EPwm3Regs.TBCTL.bit.HSPCLKDIV = 1;
|
||||
EPwm3Regs.TBCTL.bit.CLKDIV = 0;
|
||||
|
||||
|
||||
EPwm3TimerDirection = EPWM_TIMER_UP;
|
||||
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
|
||||
EDIS;
|
||||
|
||||
}
|
||||
|
||||
void InitECapture()
|
||||
{
|
||||
ECap1Regs.ECEINT.all = 0x0000; // Disable all capture interrupts
|
||||
ECap1Regs.ECCLR.all = 0xFFFF; // Clear all CAP interrupt flags
|
||||
ECap1Regs.ECCTL1.bit.CAPLDEN = 0; // Disable CAP1-CAP4 register loads
|
||||
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0; // Make sure the counter is stopped
|
||||
|
||||
// Configure peripheral registers
|
||||
ECap1Regs.ECCTL2.bit.CONT_ONESHT = 1; // One-shot
|
||||
ECap1Regs.ECCTL2.bit.STOP_WRAP = 3; // Stop at 4 events
|
||||
ECap1Regs.ECCTL1.bit.CAP1POL = 1; // Falling edge
|
||||
ECap1Regs.ECCTL1.bit.CAP2POL = 0; // Rising edge
|
||||
ECap1Regs.ECCTL1.bit.CAP3POL = 1; // Falling edge
|
||||
ECap1Regs.ECCTL1.bit.CAP4POL = 0; // Rising edge
|
||||
ECap1Regs.ECCTL1.bit.CTRRST1 = 1; // Difference operation
|
||||
ECap1Regs.ECCTL1.bit.CTRRST2 = 1; // Difference operation
|
||||
ECap1Regs.ECCTL1.bit.CTRRST3 = 1; // Difference operation
|
||||
ECap1Regs.ECCTL1.bit.CTRRST4 = 1; // Difference operation
|
||||
ECap1Regs.ECCTL2.bit.SYNCI_EN = 1; // Enable sync in
|
||||
ECap1Regs.ECCTL2.bit.SYNCO_SEL = 0; // Pass through
|
||||
ECap1Regs.ECCTL1.bit.CAPLDEN = 1; // Enable capture units
|
||||
|
||||
|
||||
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1; // Start Counter
|
||||
ECap1Regs.ECCTL2.bit.REARM = 1; // arm one-shot
|
||||
ECap1Regs.ECCTL1.bit.CAPLDEN = 1; // Enable CAP1-CAP4 register loads
|
||||
ECap1Regs.ECEINT.bit.CEVT4 = 1; // 4 events = interrupt
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
interrupt void ecap1_isr(void)
|
||||
{
|
||||
|
||||
// Cap input is syc'ed to SYSCLKOUT so there may be
|
||||
// a +/- 1 cycle variation
|
||||
|
||||
if(ECap1Regs.CAP2 > EPwm3Regs.TBPRD*2+1 || ECap1Regs.CAP2 < EPwm3Regs.TBPRD*2-1)
|
||||
{
|
||||
Fail();
|
||||
}
|
||||
|
||||
if(ECap1Regs.CAP3 > EPwm3Regs.TBPRD*2+1 || ECap1Regs.CAP3 < EPwm3Regs.TBPRD*2-1)
|
||||
{
|
||||
Fail();
|
||||
}
|
||||
|
||||
if(ECap1Regs.CAP4 > EPwm3Regs.TBPRD*2+1 || ECap1Regs.CAP4 < EPwm3Regs.TBPRD*2-1)
|
||||
{
|
||||
Fail();
|
||||
}
|
||||
|
||||
|
||||
ECap1IntCount++;
|
||||
|
||||
if(EPwm3TimerDirection == EPWM_TIMER_UP)
|
||||
{
|
||||
if(EPwm3Regs.TBPRD < PWM3_TIMER_MAX)
|
||||
{
|
||||
EPwm3Regs.TBPRD++;
|
||||
}
|
||||
else
|
||||
{
|
||||
EPwm3TimerDirection = EPWM_TIMER_DOWN;
|
||||
EPwm3Regs.TBPRD--;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(EPwm3Regs.TBPRD > PWM3_TIMER_MIN)
|
||||
{
|
||||
EPwm3Regs.TBPRD--;
|
||||
}
|
||||
else
|
||||
{
|
||||
EPwm3TimerDirection = EPWM_TIMER_UP;
|
||||
EPwm3Regs.TBPRD++;
|
||||
}
|
||||
}
|
||||
|
||||
ECap1PassCount++;
|
||||
|
||||
ECap1Regs.ECCLR.bit.CEVT4 = 1;
|
||||
ECap1Regs.ECCLR.bit.INT = 1;
|
||||
ECap1Regs.ECCTL2.bit.REARM = 1;
|
||||
|
||||
// Acknowledge this interrupt to receive more interrupts from group 4
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
|
||||
}
|
||||
|
||||
|
||||
void Fail()
|
||||
{
|
||||
asm(" ESTOP0");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//===========================================================================
|
||||
// No more.
|
||||
//===========================================================================
|
||||
46
Source/External/v120/DSP2833x_examples/ecap_capture_pwm/Example_2833xECap_Capture_Pwm.gel
vendored
Normal file
46
Source/External/v120/DSP2833x_examples/ecap_capture_pwm/Example_2833xECap_Capture_Pwm.gel
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:13:13 $
|
||||
//###########################################################################
|
||||
//
|
||||
// This .gel file can be used to help load and build the example project.
|
||||
// It should be unloaded from Code Composer Studio before loading another
|
||||
// project.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
menuitem "DSP2833x eCAP Capture PWM"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xECap_Capture_Pwm.pjt");
|
||||
GEL_ProjectBuild("Example_2833xECap_Capture_Pwm.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xECap_Capture_Pwm.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("ECap1IntCount,x");
|
||||
GEL_WatchAdd("ECap1PassCount,x");
|
||||
GEL_WatchAdd("EPwm3Regs.TBPRD,x");
|
||||
GEL_WatchAdd("ECap1Regs.CAP2,x");
|
||||
GEL_WatchAdd("ECap1Regs.CAP3,x");
|
||||
GEL_WatchAdd("ECap1Regs.CAP4,x");
|
||||
GEL_WatchAdd("EPwm3Regs,x");
|
||||
GEL_WatchAdd("ECap1Regs,x");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
47
Source/External/v120/DSP2833x_examples/ecap_capture_pwm/Example_2833xECap_Capture_Pwm.pjt
vendored
Normal file
47
Source/External/v120/DSP2833x_examples/ecap_capture_pwm/Example_2833xECap_Capture_Pwm.pjt
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
; Code Composer Project File, Version 2.0 (do not modify or remove this line)
|
||||
|
||||
[Project Settings]
|
||||
ProjectName="DSP2833x"
|
||||
ProjectDir="C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\ecap_capture_pwm\"
|
||||
ProjectType=Executable
|
||||
CPUFamily=TMS320C28XX
|
||||
Tool="Compiler"
|
||||
Tool="DspBiosBuilder"
|
||||
Tool="Linker"
|
||||
Config="Debug"
|
||||
Config="Release"
|
||||
|
||||
[Source Files]
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ADC_cal.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CodeStartBranch.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CpuTimers.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ECap.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_EPwm.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieVect.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_SysCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_usDelay.asm"
|
||||
Source="..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c"
|
||||
Source="Example_2833xECap_Capture_Pwm.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\ecap_capture_pwm\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\ecap_capture_pwm\Debug" -i"..\..\DSP2833x_headers\include" -i"..\..\DSP2833x_common\include" -d"_DEBUG" -d"LARGE_MODEL" --float_support=fpu32 -ml -mt -v28
|
||||
|
||||
["Compiler" Settings: "Release"]
|
||||
Options=-q -o3 -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\ecap_capture_pwm\Release" -d"LARGE_MODEL" -ml -v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Debug"]
|
||||
Options=-v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Release"]
|
||||
Options=-v28
|
||||
|
||||
["Linker" Settings: "Debug"]
|
||||
Options=-q -c -ecode_start -m".\Debug\Example_2833xECap_Capture_Pwm.map" -o".\Debug\Example_2833xECap_Capture_Pwm.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xCpuTimer.out" -x
|
||||
|
||||
457
Source/External/v120/DSP2833x_examples/epwm_deadband/Example_2833xEPwmDeadBand.c
vendored
Normal file
457
Source/External/v120/DSP2833x_examples/epwm_deadband/Example_2833xEPwmDeadBand.c
vendored
Normal file
@@ -0,0 +1,457 @@
|
||||
// TI File $Revision: /main/9 $
|
||||
// Checkin $Date: April 21, 2008 15:41:33 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xEpwmDeadBand.c
|
||||
//
|
||||
// TITLE: Check PWM deadband generation
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// Monitor ePWM1 - ePWM3 on an Oscilloscope as described
|
||||
// below.
|
||||
//
|
||||
// EPWM1A is on GPIO0
|
||||
// EPWM1B is on GPIO1
|
||||
//
|
||||
// EPWM2A is on GPIO2
|
||||
// EPWM2B is on GPIO3
|
||||
//
|
||||
// EPWM3A is on GPIO4
|
||||
// EPWM3B is on GPIO5
|
||||
//
|
||||
// As supplied, this project is configured for "boot to SARAM"
|
||||
// operation. The 2833x Boot Mode table is shown below.
|
||||
// For information on configuring the boot mode of an eZdsp,
|
||||
// please refer to the documentation included with the eZdsp,
|
||||
//
|
||||
// $Boot_Table:
|
||||
//
|
||||
// GPIO87 GPIO86 GPIO85 GPIO84
|
||||
// XA15 XA14 XA13 XA12
|
||||
// PU PU PU PU
|
||||
// ==========================================
|
||||
// 1 1 1 1 Jump to Flash
|
||||
// 1 1 1 0 SCI-A boot
|
||||
// 1 1 0 1 SPI-A boot
|
||||
// 1 1 0 0 I2C-A boot
|
||||
// 1 0 1 1 eCAN-A boot
|
||||
// 1 0 1 0 McBSP-A boot
|
||||
// 1 0 0 1 Jump to XINTF x16
|
||||
// 1 0 0 0 Jump to XINTF x32
|
||||
// 0 1 1 1 Jump to OTP
|
||||
// 0 1 1 0 Parallel GPIO I/O boot
|
||||
// 0 1 0 1 Parallel XINTF boot
|
||||
// 0 1 0 0 Jump to SARAM <- "boot to SARAM"
|
||||
// 0 0 1 1 Branch to check boot mode
|
||||
// 0 0 1 0 Boot to flash, bypass ADC cal
|
||||
// 0 0 0 1 Boot to SARAM, bypass ADC cal
|
||||
// 0 0 0 0 Boot to SCI-A, bypass ADC cal
|
||||
// Boot_Table_End$
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// This example configures ePWM1, ePWM2 and ePWM3 for:
|
||||
// - Count up/down
|
||||
// - Deadband
|
||||
//
|
||||
// 3 Examples are included:
|
||||
// * ePWM1: Active low PWMs
|
||||
// * ePWM2: Active low complementary PWMs
|
||||
// * ePWM3: Active high complementary PWMs
|
||||
//
|
||||
// Each ePWM is configured to interrupt on the 3rd zero event
|
||||
// when this happens the deadband is modified such that
|
||||
// 0 <= DB <= DB_MAX. That is, the deadband will move up and
|
||||
// down between 0 and the maximum value.
|
||||
//
|
||||
//
|
||||
// View the EPWM1A/B, EPWM2A/B and EPWM3A/B waveforms
|
||||
// via an oscilloscope
|
||||
//
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
|
||||
// Prototype statements for functions found within this file.
|
||||
void InitEPwm1Example(void);
|
||||
void InitEPwm2Example(void);
|
||||
void InitEPwm3Example(void);
|
||||
interrupt void epwm1_isr(void);
|
||||
interrupt void epwm2_isr(void);
|
||||
interrupt void epwm3_isr(void);
|
||||
|
||||
// Global variables used in this example
|
||||
Uint32 EPwm1TimerIntCount;
|
||||
Uint32 EPwm2TimerIntCount;
|
||||
Uint32 EPwm3TimerIntCount;
|
||||
Uint16 EPwm1_DB_Direction;
|
||||
Uint16 EPwm2_DB_Direction;
|
||||
Uint16 EPwm3_DB_Direction;
|
||||
|
||||
// Maximum Dead Band values
|
||||
#define EPWM1_MAX_DB 0x03FF
|
||||
#define EPWM2_MAX_DB 0x03FF
|
||||
#define EPWM3_MAX_DB 0x03FF
|
||||
|
||||
#define EPWM1_MIN_DB 0
|
||||
#define EPWM2_MIN_DB 0
|
||||
#define EPWM3_MIN_DB 0
|
||||
|
||||
// To keep track of which way the Dead Band is moving
|
||||
#define DB_UP 1
|
||||
#define DB_DOWN 0
|
||||
|
||||
void main(void)
|
||||
{
|
||||
// Step 1. Initialize System Control:
|
||||
// PLL, WatchDog, enable Peripheral Clocks
|
||||
// This example function is found in the DSP2833x_SysCtrl.c file.
|
||||
InitSysCtrl();
|
||||
|
||||
// Step 2. Initalize GPIO:
|
||||
// This example function is found in the DSP2833x_Gpio.c file and
|
||||
// illustrates how to set the GPIO to it's default state.
|
||||
// InitGpio(); // Skipped for this example
|
||||
|
||||
// For this case just init GPIO pins for ePWM1, ePWM2, ePWM3
|
||||
// These functions are in the DSP2833x_EPwm.c file
|
||||
InitEPwm1Gpio();
|
||||
InitEPwm2Gpio();
|
||||
InitEPwm3Gpio();
|
||||
|
||||
// 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 DSP2833x_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 DSP2833x_DefaultIsr.c.
|
||||
// This function is found in DSP2833x_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.EPWM1_INT = &epwm1_isr;
|
||||
PieVectTable.EPWM2_INT = &epwm2_isr;
|
||||
PieVectTable.EPWM3_INT = &epwm3_isr;
|
||||
EDIS; // This is needed to disable write to EALLOW protected registers
|
||||
|
||||
// Step 4. Initialize all the Device Peripherals:
|
||||
// This function is found in DSP2833x_InitPeripherals.c
|
||||
// InitPeripherals(); // Not required for this example
|
||||
|
||||
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
|
||||
EDIS;
|
||||
|
||||
InitEPwm1Example();
|
||||
InitEPwm2Example();
|
||||
InitEPwm3Example();
|
||||
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
|
||||
EDIS;
|
||||
|
||||
// Step 5. User specific code, enable interrupts
|
||||
// Initalize counters:
|
||||
EPwm1TimerIntCount = 0;
|
||||
EPwm2TimerIntCount = 0;
|
||||
EPwm3TimerIntCount = 0;
|
||||
|
||||
// Enable CPU INT3 which is connected to EPWM1-3 INT:
|
||||
IER |= M_INT3;
|
||||
|
||||
// Enable EPWM INTn in the PIE: Group 3 interrupt 1-3
|
||||
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
|
||||
PieCtrlRegs.PIEIER3.bit.INTx2 = 1;
|
||||
PieCtrlRegs.PIEIER3.bit.INTx3 = 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(;;)
|
||||
{
|
||||
asm(" NOP");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
interrupt void epwm1_isr(void)
|
||||
{
|
||||
if(EPwm1_DB_Direction == DB_UP)
|
||||
{
|
||||
if(EPwm1Regs.DBFED < EPWM1_MAX_DB)
|
||||
{
|
||||
EPwm1Regs.DBFED++;
|
||||
EPwm1Regs.DBRED++;
|
||||
}
|
||||
else
|
||||
{
|
||||
EPwm1_DB_Direction = DB_DOWN;
|
||||
EPwm1Regs.DBFED--;
|
||||
EPwm1Regs.DBRED--;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(EPwm1Regs.DBFED == EPWM1_MIN_DB)
|
||||
{
|
||||
EPwm1_DB_Direction = DB_UP;
|
||||
EPwm1Regs.DBFED++;
|
||||
EPwm1Regs.DBRED++;
|
||||
}
|
||||
else
|
||||
{
|
||||
EPwm1Regs.DBFED--;
|
||||
EPwm1Regs.DBRED--;
|
||||
}
|
||||
}
|
||||
EPwm1TimerIntCount++;
|
||||
|
||||
// Clear INT flag for this timer
|
||||
EPwm1Regs.ETCLR.bit.INT = 1;
|
||||
|
||||
// Acknowledge this interrupt to receive more interrupts from group 3
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
|
||||
|
||||
}
|
||||
|
||||
interrupt void epwm2_isr(void)
|
||||
{
|
||||
|
||||
if(EPwm2_DB_Direction == DB_UP)
|
||||
{
|
||||
if(EPwm2Regs.DBFED < EPWM2_MAX_DB)
|
||||
{
|
||||
EPwm2Regs.DBFED++;
|
||||
EPwm2Regs.DBRED++;
|
||||
}
|
||||
else
|
||||
{
|
||||
EPwm2_DB_Direction = DB_DOWN;
|
||||
EPwm2Regs.DBFED--;
|
||||
EPwm2Regs.DBRED--;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(EPwm2Regs.DBFED == EPWM2_MIN_DB)
|
||||
{
|
||||
EPwm2_DB_Direction = DB_UP;
|
||||
EPwm2Regs.DBFED++;
|
||||
EPwm2Regs.DBRED++;
|
||||
}
|
||||
else
|
||||
{
|
||||
EPwm2Regs.DBFED--;
|
||||
EPwm2Regs.DBRED--;
|
||||
}
|
||||
}
|
||||
|
||||
EPwm2TimerIntCount++;
|
||||
|
||||
// Clear INT flag for this timer
|
||||
EPwm2Regs.ETCLR.bit.INT = 1;
|
||||
|
||||
// Acknowledge this interrupt to receive more interrupts from group 3
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
|
||||
|
||||
}
|
||||
|
||||
interrupt void epwm3_isr(void)
|
||||
{
|
||||
if(EPwm3_DB_Direction == DB_UP)
|
||||
{
|
||||
if(EPwm3Regs.DBFED < EPWM3_MAX_DB)
|
||||
{
|
||||
EPwm3Regs.DBFED++;
|
||||
EPwm3Regs.DBRED++;
|
||||
}
|
||||
else
|
||||
{
|
||||
EPwm3_DB_Direction = DB_DOWN;
|
||||
EPwm3Regs.DBFED--;
|
||||
EPwm3Regs.DBRED--;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(EPwm3Regs.DBFED == EPWM3_MIN_DB)
|
||||
{
|
||||
EPwm3_DB_Direction = DB_UP;
|
||||
EPwm3Regs.DBFED++;
|
||||
EPwm3Regs.DBRED++;
|
||||
}
|
||||
else
|
||||
{
|
||||
EPwm3Regs.DBFED--;
|
||||
EPwm3Regs.DBRED--;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
EPwm3TimerIntCount++;
|
||||
|
||||
// Clear INT flag for this timer
|
||||
EPwm3Regs.ETCLR.bit.INT = 1;
|
||||
|
||||
// Acknowledge this interrupt to receive more interrupts from group 3
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void InitEPwm1Example()
|
||||
{
|
||||
|
||||
EPwm1Regs.TBPRD = 6000; // Set timer period
|
||||
EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
|
||||
EPwm1Regs.TBCTR = 0x0000; // Clear counter
|
||||
|
||||
// Setup TBCLK
|
||||
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
|
||||
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
|
||||
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV4; // Clock ratio to SYSCLKOUT
|
||||
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV4;
|
||||
|
||||
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // Load registers every ZERO
|
||||
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
|
||||
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
|
||||
// Setup compare
|
||||
EPwm1Regs.CMPA.half.CMPA = 3000;
|
||||
|
||||
// Set actions
|
||||
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM1A on Zero
|
||||
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
|
||||
|
||||
|
||||
EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR; // Set PWM1A on Zero
|
||||
EPwm1Regs.AQCTLB.bit.CAD = AQ_SET;
|
||||
|
||||
// Active Low PWMs - Setup Deadband
|
||||
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
|
||||
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_LO;
|
||||
EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL;
|
||||
EPwm1Regs.DBRED = EPWM1_MIN_DB;
|
||||
EPwm1Regs.DBFED = EPWM1_MIN_DB;
|
||||
EPwm1_DB_Direction = DB_UP;
|
||||
|
||||
// Interrupt where we will change the Deadband
|
||||
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event
|
||||
EPwm1Regs.ETSEL.bit.INTEN = 1; // Enable INT
|
||||
EPwm1Regs.ETPS.bit.INTPRD = ET_3RD; // Generate INT on 3rd event
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
void InitEPwm2Example()
|
||||
{
|
||||
|
||||
EPwm2Regs.TBPRD = 6000; // Set timer period
|
||||
EPwm2Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
|
||||
EPwm2Regs.TBCTR = 0x0000; // Clear counter
|
||||
|
||||
// Setup TBCLK
|
||||
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
|
||||
EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
|
||||
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV4; // Clock ratio to SYSCLKOUT
|
||||
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV4; // Slow just to observe on the scope
|
||||
|
||||
// Setup compare
|
||||
EPwm2Regs.CMPA.half.CMPA = 3000;
|
||||
|
||||
// Set actions
|
||||
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM2A on Zero
|
||||
EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR;
|
||||
|
||||
|
||||
EPwm2Regs.AQCTLB.bit.CAU = AQ_CLEAR; // Set PWM2A on Zero
|
||||
EPwm2Regs.AQCTLB.bit.CAD = AQ_SET;
|
||||
|
||||
// Active Low complementary PWMs - setup the deadband
|
||||
EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
|
||||
EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_LOC;
|
||||
EPwm2Regs.DBCTL.bit.IN_MODE = DBA_ALL;
|
||||
EPwm2Regs.DBRED = EPWM2_MIN_DB;
|
||||
EPwm2Regs.DBFED = EPWM2_MIN_DB;
|
||||
EPwm2_DB_Direction = DB_UP;
|
||||
|
||||
// Interrupt where we will modify the deadband
|
||||
EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event
|
||||
EPwm2Regs.ETSEL.bit.INTEN = 1; // Enable INT
|
||||
EPwm2Regs.ETPS.bit.INTPRD = ET_3RD; // Generate INT on 3rd event
|
||||
|
||||
}
|
||||
|
||||
void InitEPwm3Example()
|
||||
{
|
||||
|
||||
EPwm3Regs.TBPRD = 6000; // Set timer period
|
||||
EPwm3Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
|
||||
EPwm3Regs.TBCTR = 0x0000; // Clear counter
|
||||
|
||||
|
||||
// Setup TBCLK
|
||||
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
|
||||
EPwm3Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
|
||||
EPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV4; // Clock ratio to SYSCLKOUT
|
||||
EPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV4; // Slow so we can observe on the scope
|
||||
|
||||
// Setup compare
|
||||
EPwm3Regs.CMPA.half.CMPA = 3000;
|
||||
|
||||
// Set actions
|
||||
EPwm3Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM3A on Zero
|
||||
EPwm3Regs.AQCTLA.bit.CAD = AQ_CLEAR;
|
||||
|
||||
|
||||
EPwm3Regs.AQCTLB.bit.CAU = AQ_CLEAR; // Set PWM3A on Zero
|
||||
EPwm3Regs.AQCTLB.bit.CAD = AQ_SET;
|
||||
|
||||
// Active high complementary PWMs - Setup the deadband
|
||||
EPwm3Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
|
||||
EPwm3Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
|
||||
EPwm3Regs.DBCTL.bit.IN_MODE = DBA_ALL;
|
||||
EPwm3Regs.DBRED = EPWM3_MIN_DB;
|
||||
EPwm3Regs.DBFED = EPWM3_MIN_DB;
|
||||
EPwm3_DB_Direction = DB_UP;
|
||||
|
||||
// Interrupt where we will change the deadband
|
||||
EPwm3Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event
|
||||
EPwm3Regs.ETSEL.bit.INTEN = 1; // Enable INT
|
||||
EPwm3Regs.ETPS.bit.INTPRD = ET_3RD; // Generate INT on 3rd event
|
||||
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
// No more.
|
||||
//===========================================================================
|
||||
46
Source/External/v120/DSP2833x_examples/epwm_deadband/Example_2833xEPwmDeadBand.pjt
vendored
Normal file
46
Source/External/v120/DSP2833x_examples/epwm_deadband/Example_2833xEPwmDeadBand.pjt
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
; Code Composer Project File, Version 2.0 (do not modify or remove this line)
|
||||
|
||||
[Project Settings]
|
||||
ProjectName="DSP2833x"
|
||||
ProjectDir="C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\epwm_deadband\"
|
||||
ProjectType=Executable
|
||||
CPUFamily=TMS320C28XX
|
||||
Tool="Compiler"
|
||||
Tool="DspBiosBuilder"
|
||||
Tool="Linker"
|
||||
Config="Debug"
|
||||
Config="Release"
|
||||
|
||||
[Source Files]
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ADC_cal.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CodeStartBranch.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CpuTimers.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_EPwm.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieVect.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_SysCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_usDelay.asm"
|
||||
Source="..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c"
|
||||
Source="Example_2833xEPwmDeadBand.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\epwm_deadband\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\epwm_deadband\Debug" -i"..\..\DSP2833x_headers\include" -i"..\..\DSP2833x_common\include" -d"_DEBUG" -d"LARGE_MODEL" --float_support=fpu32 -ml -mt -v28
|
||||
|
||||
["Compiler" Settings: "Release"]
|
||||
Options=-q -o3 -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\epwm_deadband\Release" -d"LARGE_MODEL" -ml -v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Debug"]
|
||||
Options=-v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Release"]
|
||||
Options=-v28
|
||||
|
||||
["Linker" Settings: "Debug"]
|
||||
Options=-q -c -ecode_start -m".\Debug\Example_2833xEPwmDeadBand.map" -o".\Debug\Example_2833xEPwmDeadBand.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -m".\Release\Example_2833xEPwmDeadBand.map" -o".\Release\Example_2833xEPwmDeadBand.out" -x
|
||||
|
||||
39
Source/External/v120/DSP2833x_examples/epwm_deadband/Example_2833xEPwmDeadband.gel
vendored
Normal file
39
Source/External/v120/DSP2833x_examples/epwm_deadband/Example_2833xEPwmDeadband.gel
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:13:25 $
|
||||
//###########################################################################
|
||||
//
|
||||
// This .gel file can be used to help load and build the example project.
|
||||
// It should be unloaded from Code Composer Studio before loading another
|
||||
// project.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
menuitem "DSP2833x ePWM Deadband"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xEPwmDeadBand.pjt");
|
||||
GEL_ProjectBuild("Example_2833xEPwmDeadBand.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xEPwmDeadBand.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("EPwm1Regs,x");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
183
Source/External/v120/DSP2833x_examples/epwm_dma/DSP2833x_EPWMDM_Headers_BIOS.cmd
vendored
Normal file
183
Source/External/v120/DSP2833x_examples/epwm_dma/DSP2833x_EPWMDM_Headers_BIOS.cmd
vendored
Normal file
@@ -0,0 +1,183 @@
|
||||
/*
|
||||
// TI File $Revision: /main/1 $
|
||||
// Checkin $Date: June 19, 2008 10:23:49 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: DSP2833x_Headers_BIOS.cmd
|
||||
//
|
||||
// TITLE: DSP2833x Peripheral registers linker command file
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// This file is for use in BIOS applications.
|
||||
//
|
||||
// Linker command file to place the peripheral structures
|
||||
// used within the DSP2833x headerfiles into the correct memory
|
||||
// mapped locations.
|
||||
//
|
||||
// This version of the file does not include the PieVectorTable structure.
|
||||
// For non-BIOS applications, please use the DSP2833x_Headers_nonBIOS.cmd
|
||||
// file which includes the PieVectorTable structure.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
MEMORY
|
||||
{
|
||||
PAGE 0: /* Program Memory */
|
||||
|
||||
PAGE 1: /* Data Memory */
|
||||
|
||||
DEV_EMU : origin = 0x000880, length = 0x000180 /* device emulation registers */
|
||||
FLASH_REGS : origin = 0x000A80, length = 0x000060 /* FLASH registers */
|
||||
CSM : origin = 0x000AE0, length = 0x000010 /* code security module registers */
|
||||
|
||||
ADC_MIRROR : origin = 0x000B00, length = 0x000010 /* ADC Results register mirror */
|
||||
|
||||
XINTF : origin = 0x000B20, length = 0x000020 /* external interface registers */
|
||||
|
||||
CPU_TIMER0 : origin = 0x000C00, length = 0x000008 /* CPU Timer0 registers */
|
||||
CPU_TIMER1 : origin = 0x000C08, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/
|
||||
CPU_TIMER2 : origin = 0x000C10, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/
|
||||
|
||||
PIE_CTRL : origin = 0x000CE0, length = 0x000020 /* PIE control registers */
|
||||
|
||||
DMA : origin = 0x001000, length = 0x000200 /* DMA registers */
|
||||
|
||||
MCBSPA : origin = 0x005000, length = 0x000040 /* McBSP-A registers */
|
||||
MCBSPB : origin = 0x005040, length = 0x000040 /* McBSP-B registers */
|
||||
|
||||
ECANA : origin = 0x006000, length = 0x000040 /* eCAN-A control and status registers */
|
||||
ECANA_LAM : origin = 0x006040, length = 0x000040 /* eCAN-A local acceptance masks */
|
||||
ECANA_MOTS : origin = 0x006080, length = 0x000040 /* eCAN-A message object time stamps */
|
||||
ECANA_MOTO : origin = 0x0060C0, length = 0x000040 /* eCAN-A object time-out registers */
|
||||
ECANA_MBOX : origin = 0x006100, length = 0x000100 /* eCAN-A mailboxes */
|
||||
|
||||
ECANB : origin = 0x006200, length = 0x000040 /* eCAN-B control and status registers */
|
||||
ECANB_LAM : origin = 0x006240, length = 0x000040 /* eCAN-B local acceptance masks */
|
||||
ECANB_MOTS : origin = 0x006280, length = 0x000040 /* eCAN-B message object time stamps */
|
||||
ECANB_MOTO : origin = 0x0062C0, length = 0x000040 /* eCAN-B object time-out registers */
|
||||
ECANB_MBOX : origin = 0x006300, length = 0x000100 /* eCAN-B mailboxes */
|
||||
|
||||
EPWM1 : origin = 0x005800, length = 0x000022 /* Enhanced PWM 1 registers */
|
||||
EPWM2 : origin = 0x005840, length = 0x000022 /* Enhanced PWM 2 registers */
|
||||
EPWM3 : origin = 0x005880, length = 0x000022 /* Enhanced PWM 3 registers */
|
||||
EPWM4 : origin = 0x0058C0, length = 0x000022 /* Enhanced PWM 4 registers */
|
||||
EPWM5 : origin = 0x005900, length = 0x000022 /* Enhanced PWM 5 registers */
|
||||
EPWM6 : origin = 0x005940, length = 0x000022 /* Enhanced PWM 6 registers */
|
||||
|
||||
ECAP1 : origin = 0x006A00, length = 0x000020 /* Enhanced Capture 1 registers */
|
||||
ECAP2 : origin = 0x006A20, length = 0x000020 /* Enhanced Capture 2 registers */
|
||||
ECAP3 : origin = 0x006A40, length = 0x000020 /* Enhanced Capture 3 registers */
|
||||
ECAP4 : origin = 0x006A60, length = 0x000020 /* Enhanced Capture 4 registers */
|
||||
ECAP5 : origin = 0x006A80, length = 0x000020 /* Enhanced Capture 5 registers */
|
||||
ECAP6 : origin = 0x006AA0, length = 0x000020 /* Enhanced Capture 6 registers */
|
||||
|
||||
EQEP1 : origin = 0x006B00, length = 0x000040 /* Enhanced QEP 1 registers */
|
||||
EQEP2 : origin = 0x006B40, length = 0x000040 /* Enhanced QEP 2 registers */
|
||||
|
||||
GPIOCTRL : origin = 0x006F80, length = 0x000040 /* GPIO control registers */
|
||||
GPIODAT : origin = 0x006FC0, length = 0x000020 /* GPIO data registers */
|
||||
GPIOINT : origin = 0x006FE0, length = 0x000020 /* GPIO interrupt/LPM registers */
|
||||
|
||||
SYSTEM : origin = 0x007010, length = 0x000020 /* System control registers */
|
||||
SPIA : origin = 0x007040, length = 0x000010 /* SPI-A registers */
|
||||
SCIA : origin = 0x007050, length = 0x000010 /* SCI-A registers */
|
||||
XINTRUPT : origin = 0x007070, length = 0x000010 /* external interrupt registers */
|
||||
|
||||
ADC : origin = 0x007100, length = 0x000020 /* ADC registers */
|
||||
|
||||
SCIB : origin = 0x007750, length = 0x000010 /* SCI-B registers */
|
||||
|
||||
SCIC : origin = 0x007770, length = 0x000010 /* SCI-C registers */
|
||||
|
||||
I2CA : origin = 0x007900, length = 0x000040 /* I2C-A registers */
|
||||
|
||||
CSM_PWL : origin = 0x3F7FF8, length = 0x000008 /* Part of FLASHA. CSM password locations. */
|
||||
|
||||
PARTID : origin = 0x380090, length = 0x000001 /* Part ID register location */
|
||||
|
||||
}
|
||||
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
/*** The PIE Vector table is called PIEVECT by DSP/BIOS ***/
|
||||
PieVectTableFile : > PIEVECT, PAGE = 1, TYPE = DSECT
|
||||
|
||||
/*** Peripheral Frame 0 Register Structures ***/
|
||||
DevEmuRegsFile : > DEV_EMU, PAGE = 1
|
||||
FlashRegsFile : > FLASH_REGS, PAGE = 1
|
||||
CsmRegsFile : > CSM, PAGE = 1
|
||||
AdcMirrorFile : > ADC_MIRROR, PAGE = 1
|
||||
XintfRegsFile : > XINTF, PAGE = 1
|
||||
CpuTimer0RegsFile : > CPU_TIMER0, PAGE = 1
|
||||
CpuTimer1RegsFile : > CPU_TIMER1, PAGE = 1
|
||||
CpuTimer2RegsFile : > CPU_TIMER2, PAGE = 1
|
||||
PieCtrlRegsFile : > PIE_CTRL, PAGE = 1
|
||||
DmaRegsFile : > DMA, PAGE = 1
|
||||
|
||||
/*** Peripheral Frame 3 Register Structures ***/
|
||||
McbspaRegsFile : > MCBSPA, PAGE = 1
|
||||
McbspbRegsFile : > MCBSPB, PAGE = 1
|
||||
|
||||
/*** Peripheral Frame 1 Register Structures ***/
|
||||
ECanaRegsFile : > ECANA, PAGE = 1
|
||||
ECanaLAMRegsFile : > ECANA_LAM PAGE = 1
|
||||
ECanaMboxesFile : > ECANA_MBOX PAGE = 1
|
||||
ECanaMOTSRegsFile : > ECANA_MOTS PAGE = 1
|
||||
ECanaMOTORegsFile : > ECANA_MOTO PAGE = 1
|
||||
|
||||
ECanbRegsFile : > ECANB, PAGE = 1
|
||||
ECanbLAMRegsFile : > ECANB_LAM PAGE = 1
|
||||
ECanbMboxesFile : > ECANB_MBOX PAGE = 1
|
||||
ECanbMOTSRegsFile : > ECANB_MOTS PAGE = 1
|
||||
ECanbMOTORegsFile : > ECANB_MOTO PAGE = 1
|
||||
|
||||
EPwm1RegsFile : > EPWM1 PAGE = 1
|
||||
EPwm2RegsFile : > EPWM2 PAGE = 1
|
||||
EPwm3RegsFile : > EPWM3 PAGE = 1
|
||||
EPwm4RegsFile : > EPWM4 PAGE = 1
|
||||
EPwm5RegsFile : > EPWM5 PAGE = 1
|
||||
EPwm6RegsFile : > EPWM6 PAGE = 1
|
||||
|
||||
ECap1RegsFile : > ECAP1 PAGE = 1
|
||||
ECap2RegsFile : > ECAP2 PAGE = 1
|
||||
ECap3RegsFile : > ECAP3 PAGE = 1
|
||||
ECap4RegsFile : > ECAP4 PAGE = 1
|
||||
ECap5RegsFile : > ECAP5 PAGE = 1
|
||||
ECap6RegsFile : > ECAP6 PAGE = 1
|
||||
|
||||
EQep1RegsFile : > EQEP1 PAGE = 1
|
||||
EQep2RegsFile : > EQEP2 PAGE = 1
|
||||
|
||||
GpioCtrlRegsFile : > GPIOCTRL PAGE = 1
|
||||
GpioDataRegsFile : > GPIODAT PAGE = 1
|
||||
GpioIntRegsFile : > GPIOINT PAGE = 1
|
||||
|
||||
/*** Peripheral Frame 2 Register Structures ***/
|
||||
SysCtrlRegsFile : > SYSTEM, PAGE = 1
|
||||
SpiaRegsFile : > SPIA, PAGE = 1
|
||||
SciaRegsFile : > SCIA, PAGE = 1
|
||||
XIntruptRegsFile : > XINTRUPT, PAGE = 1
|
||||
AdcRegsFile : > ADC, PAGE = 1
|
||||
ScibRegsFile : > SCIB, PAGE = 1
|
||||
ScicRegsFile : > SCIC, PAGE = 1
|
||||
I2caRegsFile : > I2CA, PAGE = 1
|
||||
|
||||
/*** Code Security Module Register Structures ***/
|
||||
CsmPwlFile : > CSM_PWL, PAGE = 1
|
||||
|
||||
/*** Device Part ID Register Structures ***/
|
||||
PartIdRegsFile : > PARTID, PAGE = 1
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
//===========================================================================
|
||||
// End of file.
|
||||
//===========================================================================
|
||||
*/
|
||||
182
Source/External/v120/DSP2833x_examples/epwm_dma/DSP2833x_EPWMDM_Headers_nonBIOS.cmd
vendored
Normal file
182
Source/External/v120/DSP2833x_examples/epwm_dma/DSP2833x_EPWMDM_Headers_nonBIOS.cmd
vendored
Normal file
@@ -0,0 +1,182 @@
|
||||
/*
|
||||
// TI File $Revision: /main/1 $
|
||||
// Checkin $Date: June 19, 2008 10:23:45 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: DSP2833x_Headers_nonBIOS.cmd
|
||||
//
|
||||
// TITLE: DSP2833x Peripheral registers linker command file
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// This file is for use in Non-BIOS applications.
|
||||
//
|
||||
// Linker command file to place the peripheral structures
|
||||
// used within the DSP2833x headerfiles into the correct memory
|
||||
// mapped locations.
|
||||
//
|
||||
// This version of the file includes the PieVectorTable structure.
|
||||
// For BIOS applications, please use the DSP2833x_Headers_BIOS.cmd file
|
||||
// which does not include the PieVectorTable structure.
|
||||
//
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
MEMORY
|
||||
{
|
||||
PAGE 0: /* Program Memory */
|
||||
|
||||
PAGE 1: /* Data Memory */
|
||||
|
||||
DEV_EMU : origin = 0x000880, length = 0x000180 /* device emulation registers */
|
||||
FLASH_REGS : origin = 0x000A80, length = 0x000060 /* FLASH registers */
|
||||
CSM : origin = 0x000AE0, length = 0x000010 /* code security module registers */
|
||||
|
||||
ADC_MIRROR : origin = 0x000B00, length = 0x000010 /* ADC Results register mirror */
|
||||
|
||||
XINTF : origin = 0x000B20, length = 0x000020 /* external interface registers */
|
||||
|
||||
CPU_TIMER0 : origin = 0x000C00, length = 0x000008 /* CPU Timer0 registers */
|
||||
CPU_TIMER1 : origin = 0x000C08, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/
|
||||
CPU_TIMER2 : origin = 0x000C10, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/
|
||||
|
||||
PIE_CTRL : origin = 0x000CE0, length = 0x000020 /* PIE control registers */
|
||||
PIE_VECT : origin = 0x000D00, length = 0x000100 /* PIE Vector Table */
|
||||
|
||||
DMA : origin = 0x001000, length = 0x000200 /* DMA registers */
|
||||
|
||||
MCBSPA : origin = 0x005000, length = 0x000040 /* McBSP-A registers */
|
||||
MCBSPB : origin = 0x005040, length = 0x000040 /* McBSP-B registers */
|
||||
|
||||
ECANA : origin = 0x006000, length = 0x000040 /* eCAN-A control and status registers */
|
||||
ECANA_LAM : origin = 0x006040, length = 0x000040 /* eCAN-A local acceptance masks */
|
||||
ECANA_MOTS : origin = 0x006080, length = 0x000040 /* eCAN-A message object time stamps */
|
||||
ECANA_MOTO : origin = 0x0060C0, length = 0x000040 /* eCAN-A object time-out registers */
|
||||
ECANA_MBOX : origin = 0x006100, length = 0x000100 /* eCAN-A mailboxes */
|
||||
|
||||
ECANB : origin = 0x006200, length = 0x000040 /* eCAN-B control and status registers */
|
||||
ECANB_LAM : origin = 0x006240, length = 0x000040 /* eCAN-B local acceptance masks */
|
||||
ECANB_MOTS : origin = 0x006280, length = 0x000040 /* eCAN-B message object time stamps */
|
||||
ECANB_MOTO : origin = 0x0062C0, length = 0x000040 /* eCAN-B object time-out registers */
|
||||
ECANB_MBOX : origin = 0x006300, length = 0x000100 /* eCAN-B mailboxes */
|
||||
|
||||
EPWM1 : origin = 0x005800, length = 0x000022 /* Enhanced PWM 1 registers */
|
||||
EPWM2 : origin = 0x005840, length = 0x000022 /* Enhanced PWM 2 registers */
|
||||
EPWM3 : origin = 0x005880, length = 0x000022 /* Enhanced PWM 3 registers */
|
||||
EPWM4 : origin = 0x0058C0, length = 0x000022 /* Enhanced PWM 4 registers */
|
||||
EPWM5 : origin = 0x005900, length = 0x000022 /* Enhanced PWM 5 registers */
|
||||
EPWM6 : origin = 0x005940, length = 0x000022 /* Enhanced PWM 6 registers */
|
||||
|
||||
ECAP1 : origin = 0x006A00, length = 0x000020 /* Enhanced Capture 1 registers */
|
||||
ECAP2 : origin = 0x006A20, length = 0x000020 /* Enhanced Capture 2 registers */
|
||||
ECAP3 : origin = 0x006A40, length = 0x000020 /* Enhanced Capture 3 registers */
|
||||
ECAP4 : origin = 0x006A60, length = 0x000020 /* Enhanced Capture 4 registers */
|
||||
ECAP5 : origin = 0x006A80, length = 0x000020 /* Enhanced Capture 5 registers */
|
||||
ECAP6 : origin = 0x006AA0, length = 0x000020 /* Enhanced Capture 6 registers */
|
||||
|
||||
EQEP1 : origin = 0x006B00, length = 0x000040 /* Enhanced QEP 1 registers */
|
||||
EQEP2 : origin = 0x006B40, length = 0x000040 /* Enhanced QEP 2 registers */
|
||||
|
||||
GPIOCTRL : origin = 0x006F80, length = 0x000040 /* GPIO control registers */
|
||||
GPIODAT : origin = 0x006FC0, length = 0x000020 /* GPIO data registers */
|
||||
GPIOINT : origin = 0x006FE0, length = 0x000020 /* GPIO interrupt/LPM registers */
|
||||
|
||||
SYSTEM : origin = 0x007010, length = 0x000020 /* System control registers */
|
||||
SPIA : origin = 0x007040, length = 0x000010 /* SPI-A registers */
|
||||
SCIA : origin = 0x007050, length = 0x000010 /* SCI-A registers */
|
||||
XINTRUPT : origin = 0x007070, length = 0x000010 /* external interrupt registers */
|
||||
|
||||
ADC : origin = 0x007100, length = 0x000020 /* ADC registers */
|
||||
|
||||
SCIB : origin = 0x007750, length = 0x000010 /* SCI-B registers */
|
||||
|
||||
SCIC : origin = 0x007770, length = 0x000010 /* SCI-C registers */
|
||||
|
||||
I2CA : origin = 0x007900, length = 0x000040 /* I2C-A registers */
|
||||
|
||||
CSM_PWL : origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations. */
|
||||
|
||||
PARTID : origin = 0x380090, length = 0x000001 /* Part ID register location */
|
||||
|
||||
}
|
||||
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
PieVectTableFile : > PIE_VECT, PAGE = 1
|
||||
|
||||
/*** Peripheral Frame 0 Register Structures ***/
|
||||
DevEmuRegsFile : > DEV_EMU, PAGE = 1
|
||||
FlashRegsFile : > FLASH_REGS, PAGE = 1
|
||||
CsmRegsFile : > CSM, PAGE = 1
|
||||
AdcMirrorFile : > ADC_MIRROR, PAGE = 1
|
||||
XintfRegsFile : > XINTF, PAGE = 1
|
||||
CpuTimer0RegsFile : > CPU_TIMER0, PAGE = 1
|
||||
CpuTimer1RegsFile : > CPU_TIMER1, PAGE = 1
|
||||
CpuTimer2RegsFile : > CPU_TIMER2, PAGE = 1
|
||||
PieCtrlRegsFile : > PIE_CTRL, PAGE = 1
|
||||
DmaRegsFile : > DMA, PAGE = 1
|
||||
|
||||
/*** Peripheral Frame 3 Register Structures ***/
|
||||
McbspaRegsFile : > MCBSPA, PAGE = 1
|
||||
McbspbRegsFile : > MCBSPB, PAGE = 1
|
||||
|
||||
/*** Peripheral Frame 1 Register Structures ***/
|
||||
ECanaRegsFile : > ECANA, PAGE = 1
|
||||
ECanaLAMRegsFile : > ECANA_LAM PAGE = 1
|
||||
ECanaMboxesFile : > ECANA_MBOX PAGE = 1
|
||||
ECanaMOTSRegsFile : > ECANA_MOTS PAGE = 1
|
||||
ECanaMOTORegsFile : > ECANA_MOTO PAGE = 1
|
||||
|
||||
ECanbRegsFile : > ECANB, PAGE = 1
|
||||
ECanbLAMRegsFile : > ECANB_LAM PAGE = 1
|
||||
ECanbMboxesFile : > ECANB_MBOX PAGE = 1
|
||||
ECanbMOTSRegsFile : > ECANB_MOTS PAGE = 1
|
||||
ECanbMOTORegsFile : > ECANB_MOTO PAGE = 1
|
||||
|
||||
EPwm1RegsFile : > EPWM1 PAGE = 1
|
||||
EPwm2RegsFile : > EPWM2 PAGE = 1
|
||||
EPwm3RegsFile : > EPWM3 PAGE = 1
|
||||
EPwm4RegsFile : > EPWM4 PAGE = 1
|
||||
EPwm5RegsFile : > EPWM5 PAGE = 1
|
||||
EPwm6RegsFile : > EPWM6 PAGE = 1
|
||||
|
||||
ECap1RegsFile : > ECAP1 PAGE = 1
|
||||
ECap2RegsFile : > ECAP2 PAGE = 1
|
||||
ECap3RegsFile : > ECAP3 PAGE = 1
|
||||
ECap4RegsFile : > ECAP4 PAGE = 1
|
||||
ECap5RegsFile : > ECAP5 PAGE = 1
|
||||
ECap6RegsFile : > ECAP6 PAGE = 1
|
||||
|
||||
EQep1RegsFile : > EQEP1 PAGE = 1
|
||||
EQep2RegsFile : > EQEP2 PAGE = 1
|
||||
|
||||
GpioCtrlRegsFile : > GPIOCTRL PAGE = 1
|
||||
GpioDataRegsFile : > GPIODAT PAGE = 1
|
||||
GpioIntRegsFile : > GPIOINT PAGE = 1
|
||||
|
||||
/*** Peripheral Frame 2 Register Structures ***/
|
||||
SysCtrlRegsFile : > SYSTEM, PAGE = 1
|
||||
SpiaRegsFile : > SPIA, PAGE = 1
|
||||
SciaRegsFile : > SCIA, PAGE = 1
|
||||
XIntruptRegsFile : > XINTRUPT, PAGE = 1
|
||||
AdcRegsFile : > ADC, PAGE = 1
|
||||
ScibRegsFile : > SCIB, PAGE = 1
|
||||
ScicRegsFile : > SCIC, PAGE = 1
|
||||
I2caRegsFile : > I2CA, PAGE = 1
|
||||
|
||||
/*** Code Security Module Register Structures ***/
|
||||
CsmPwlFile : > CSM_PWL, PAGE = 1
|
||||
|
||||
/*** Device Part ID Register Structures ***/
|
||||
PartIdRegsFile : > PARTID, PAGE = 1
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
//===========================================================================
|
||||
// End of file.
|
||||
//===========================================================================
|
||||
*/
|
||||
455
Source/External/v120/DSP2833x_examples/epwm_dma/Example_2833xEPwm_DMA.c
vendored
Normal file
455
Source/External/v120/DSP2833x_examples/epwm_dma/Example_2833xEPwm_DMA.c
vendored
Normal file
@@ -0,0 +1,455 @@
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xEPwm_DMA.c
|
||||
//
|
||||
// TITLE: DSP2833x Device DMA interface with ePWM example.
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// As supplied, this project is configured for "boot to SARAM"
|
||||
// operation. The 2833x Boot Mode table is shown below.
|
||||
// For information on configuring the boot mode of an eZdsp,
|
||||
// please refer to the documentation included with the eZdsp,
|
||||
//
|
||||
// $Boot_Table:
|
||||
//
|
||||
// GPIO87 GPIO86 GPIO85 GPIO84
|
||||
// XA15 XA14 XA13 XA12
|
||||
// PU PU PU PU
|
||||
// ==========================================
|
||||
// 1 1 1 1 Jump to Flash
|
||||
// 1 1 1 0 SCI-A boot
|
||||
// 1 1 0 1 SPI-A boot
|
||||
// 1 1 0 0 I2C-A boot
|
||||
// 1 0 1 1 eCAN-A boot
|
||||
// 1 0 1 0 McBSP-A boot
|
||||
// 1 0 0 1 Jump to XINTF x16
|
||||
// 1 0 0 0 Jump to XINTF x32
|
||||
// 0 1 1 1 Jump to OTP
|
||||
// 0 1 1 0 Parallel GPIO I/O boot
|
||||
// 0 1 0 1 Parallel XINTF boot
|
||||
// 0 1 0 0 Jump to SARAM <- "boot to SARAM"
|
||||
// 0 0 1 1 Branch to check boot mode
|
||||
// 0 0 1 0 Boot to flash, bypass ADC cal
|
||||
// 0 0 0 1 Boot to SARAM, bypass ADC cal
|
||||
// 0 0 0 0 Boot to SCI-A, bypass ADC cal
|
||||
// Boot_Table_End$
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// This example demonstrates several cases where the DMA is triggered from
|
||||
// SOC signals generated by ePWM modules.
|
||||
//
|
||||
// DMA CH1 setup:
|
||||
// Trigger = ADCSOCA from ePWM1
|
||||
// Datasize = 16 bits
|
||||
// Source = VarA
|
||||
// Dest = EPwm1Regs.TBPRD
|
||||
// Burst = One word / burst
|
||||
// Transfer = One burst / transfer
|
||||
// CPU int = every transfer
|
||||
//
|
||||
// DMA CH2 setup:
|
||||
// Trigger = ADCSOCB from ePWM2
|
||||
// Datasize = 32 bits
|
||||
// Source = VarB
|
||||
// Dest = EPwm1Regs.CMPA.all
|
||||
// Burst = One 32-bit word / burst
|
||||
// Transfer = One burst / transfer
|
||||
// CPU int = none
|
||||
//
|
||||
// DMA CH3 setup:
|
||||
// Trigger = ADC SEQ1INT
|
||||
// Datasize = 32 bits
|
||||
// Source = AdcMirror.ADCRESULT[0-5]
|
||||
// Dest = ADCbuffer
|
||||
// Burst = Three 32-bit words / burst
|
||||
// Transfer = One burst / transfer
|
||||
// CPU int = none
|
||||
//
|
||||
// Watch Variables:
|
||||
//
|
||||
// EPwm1Regs.TBPRD
|
||||
// EPwm1Regs.CMPA.all
|
||||
// ADCbuffer
|
||||
// InterruptCount
|
||||
//
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
|
||||
|
||||
// Prototype statements for functions found within this file.
|
||||
void delay_loop(void);
|
||||
void DMAInitialize(void);
|
||||
void DMACH1Config(void);
|
||||
void DMACH2Config(void);
|
||||
void DMACH3Config(void);
|
||||
void ConfigAdc(void);
|
||||
void config_ePWM1_to_generate_ADCSOCA(void);
|
||||
void config_ePWM2_to_generate_ADCSOCB(void);
|
||||
interrupt void local_DINTCH1_ISR(void);
|
||||
|
||||
|
||||
// Global Variables
|
||||
#pragma DATA_SECTION(ADCbuffer,"DMARAML4");
|
||||
volatile Uint32 ADCbuffer[3];
|
||||
|
||||
Uint16 VarA;
|
||||
Uint32 VarB;
|
||||
|
||||
volatile Uint16 *MAPCNF = (Uint16 *)0x00702E;
|
||||
|
||||
Uint16 InterruptCount;
|
||||
|
||||
void main(void)
|
||||
{
|
||||
Uint16 i;
|
||||
|
||||
// Step 1. Initialize System Control:
|
||||
// PLL, WatchDog, enable Peripheral Clocks
|
||||
// This example function is found in the DSP2833x_SysCtrl.c file.
|
||||
InitSysCtrl();
|
||||
|
||||
// Step 2. Initalize GPIO:
|
||||
// This example function is found in the DSP2833x_Gpio.c file and
|
||||
// illustrates how to set the GPIO to it's default state.
|
||||
// InitGpio(); // Skipped for this example
|
||||
|
||||
// For this example use the following configuration:
|
||||
|
||||
// Step 3. Clear all interrupts and initialize PIE vector table:
|
||||
// Disable CPU interrupts
|
||||
DINT;
|
||||
|
||||
// Initialize 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 DSP2833x_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 DSP2833x_DefaultIsr.c.
|
||||
// This function is found in DSP2833x_PieVect.c.
|
||||
InitPieVectTable();
|
||||
|
||||
EALLOW;
|
||||
// Initialize PIE vector for CPU interrupt:
|
||||
PieVectTable.DINTCH1 = &local_DINTCH1_ISR; // Point to DMA CH1 ISR
|
||||
PieCtrlRegs.PIEIER7.bit.INTx1 = 1; // Enable DMA CH1 interrupt in PIE
|
||||
EDIS;
|
||||
|
||||
// Step 4. Initialize all the Device Peripherals:
|
||||
// This function is found in DSP2833x_InitPeripherals.c
|
||||
// InitPeripherals(); // Not required for this example
|
||||
|
||||
// Step 5. User specific code:
|
||||
|
||||
InterruptCount = 0;
|
||||
|
||||
EALLOW;
|
||||
GpioCtrlRegs.GPADIR.all = 0xFFFFFFFF; // All outputs
|
||||
SysCtrlRegs.MAPCNF.bit.MAPEPWM = 1; // Remap ePWMs for DMA access
|
||||
EDIS;
|
||||
|
||||
GpioDataRegs.GPASET.all = 0xFFFFFFFF;
|
||||
delay_loop();
|
||||
GpioDataRegs.GPACLEAR.all = 0x00000002;
|
||||
|
||||
for(i=0; i<3; i++)
|
||||
{
|
||||
ADCbuffer[i] = ((Uint32)i*0x00011000) + 0x00044000;
|
||||
}
|
||||
|
||||
VarA = 75;
|
||||
VarB = 0x652000;
|
||||
|
||||
// Enable and configure clocks to peripherals:
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR3.bit.DMAENCLK = 1; // Enable SYSCLK to DMA
|
||||
EDIS;
|
||||
|
||||
DMAInitialize();
|
||||
DMACH1Config();
|
||||
DMACH2Config();
|
||||
DMACH3Config();
|
||||
|
||||
// Enable all interrupts:
|
||||
IER = M_INT7; // Enable INT7 (7.1 DMA Ch1)
|
||||
EINT;
|
||||
|
||||
InitAdc();
|
||||
ConfigAdc();
|
||||
|
||||
config_ePWM1_to_generate_ADCSOCA();
|
||||
config_ePWM2_to_generate_ADCSOCB();
|
||||
|
||||
|
||||
EALLOW;
|
||||
DmaRegs.CH1.CONTROL.bit.RUN = 1;
|
||||
DmaRegs.CH2.CONTROL.bit.RUN = 1;
|
||||
DmaRegs.CH3.CONTROL.bit.RUN = 1;
|
||||
asm(" NOP");
|
||||
EPwm1Regs.TBCTL.bit.CTRMODE = 0; // Up count mode
|
||||
EPwm2Regs.TBCTL.bit.CTRMODE = 0; // Up count mode
|
||||
EDIS;
|
||||
|
||||
for(;;) {}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//===========================================================================
|
||||
// DMA Functions
|
||||
//===========================================================================
|
||||
|
||||
void DMAInitialize(void)
|
||||
{
|
||||
EALLOW;
|
||||
|
||||
// Perform a hard reset on DMA
|
||||
DmaRegs.DMACTRL.bit.HARDRESET = 1;
|
||||
|
||||
// always perform one NOP after a HARDRESET
|
||||
asm(" NOP");
|
||||
|
||||
// Stop DMA on emulation suspend
|
||||
DmaRegs.DEBUGCTRL.bit.FREE = 0;
|
||||
|
||||
EDIS;
|
||||
}
|
||||
|
||||
|
||||
void DMACH1Config(void)
|
||||
{
|
||||
EALLOW;
|
||||
// Configure CH1:
|
||||
//
|
||||
// Reset selected channel via CONTROL Register:
|
||||
// DmaRegs.CH1.CONTROL.bit.SOFTRESET = 1; // Perform SOFT reset on channel (clears all counters)
|
||||
|
||||
// Set up MODE Register:
|
||||
DmaRegs.CH1.MODE.bit.PERINTSEL = 18; // ePWM1 SOCA as peripheral interrupt source
|
||||
DmaRegs.CH1.MODE.bit.PERINTE = 1; // Peripheral interrupt enabled
|
||||
DmaRegs.CH1.MODE.bit.ONESHOT = 0; // 1 burst per SW interrupt
|
||||
DmaRegs.CH1.MODE.bit.CONTINUOUS = 1; // Do not stop after each transfer
|
||||
DmaRegs.CH1.MODE.bit.SYNCE = 0; // No sync signal
|
||||
DmaRegs.CH1.MODE.bit.SYNCSEL = 0; // No sync signal
|
||||
DmaRegs.CH1.MODE.bit.DATASIZE = 0; // 16-bit data size transfers
|
||||
DmaRegs.CH1.MODE.bit.CHINTMODE = 0; // Generate interrupt to CPU at the beg of transfer
|
||||
DmaRegs.CH1.MODE.bit.CHINTE = 1; // Channel Interrupt to CPU enabled
|
||||
|
||||
// Set up BURST registers:
|
||||
DmaRegs.CH1.BURST_SIZE.all = 0; // Number (N-1) of 16-bit words transferred in a burst
|
||||
DmaRegs.CH1.SRC_BURST_STEP = 0; // Not needed since BURST_SIZE = 0
|
||||
DmaRegs.CH1.DST_BURST_STEP = 0; // Not needed since BURST_SIZE = 0
|
||||
|
||||
// Set up TRANSFER registers:
|
||||
DmaRegs.CH1.TRANSFER_SIZE = 0; // Bursts (N-1) per transfer
|
||||
DmaRegs.CH1.SRC_TRANSFER_STEP = 0; // Not needed since TRANSFER_SIZE = 0
|
||||
DmaRegs.CH1.DST_TRANSFER_STEP = 0; // Not needed since TRANSFER_SIZE = 0
|
||||
|
||||
// Set up WRAP registers:
|
||||
DmaRegs.CH1.SRC_WRAP_SIZE = 0xFFFF; // No source wrap-around
|
||||
DmaRegs.CH1.DST_WRAP_SIZE = 0xFFFF; // No destination wrap-around
|
||||
DmaRegs.CH1.SRC_WRAP_STEP = 0;
|
||||
DmaRegs.CH1.DST_WRAP_STEP = 0;
|
||||
|
||||
// Set up SOURCE address:
|
||||
DmaRegs.CH1.SRC_ADDR_SHADOW = (Uint32) &VarA; // Point to variable in RAM
|
||||
|
||||
// Set up DESTINATION address:
|
||||
DmaRegs.CH1.DST_ADDR_SHADOW = (Uint32) &EPwm1Regs.TBPRD; // Point to ePWM1 TBPRD register remapped for DMA
|
||||
// need to make sure .cmd file has ePWMs remapped
|
||||
// Clear any spurious flags:
|
||||
DmaRegs.CH1.CONTROL.bit.PERINTCLR = 1; // Clear any spurious interrupt flags
|
||||
DmaRegs.CH1.CONTROL.bit.SYNCCLR = 1; // Clear any spurious sync flags
|
||||
DmaRegs.CH1.CONTROL.bit.ERRCLR = 1; // Clear any spurious sync error flags
|
||||
|
||||
EDIS;
|
||||
}
|
||||
|
||||
void DMACH2Config(void)
|
||||
{
|
||||
EALLOW;
|
||||
// Configure CH2:
|
||||
//
|
||||
// Reset selected channel via CONTROL Register:
|
||||
// DmaRegs.CH2.CONTROL.bit.SOFTRESET = 1; // Perform SOFT reset on channel (clears all counters)
|
||||
|
||||
// Set up MODE Register:
|
||||
DmaRegs.CH2.MODE.bit.PERINTSEL = 21; // ePWM2 SOCB as peripheral interrupt source
|
||||
DmaRegs.CH2.MODE.bit.PERINTE = 1; // Peripheral interrupt enabled
|
||||
DmaRegs.CH2.MODE.bit.ONESHOT = 0; // 1 burst per SW interrupt
|
||||
DmaRegs.CH2.MODE.bit.CONTINUOUS = 1; // Do not stop after each transfer
|
||||
DmaRegs.CH2.MODE.bit.SYNCE = 0; // No sync signal
|
||||
DmaRegs.CH2.MODE.bit.SYNCSEL = 0; // No sync signal
|
||||
DmaRegs.CH2.MODE.bit.DATASIZE = 1; // 32-bit data size transfers
|
||||
DmaRegs.CH2.MODE.bit.CHINTMODE = 0;
|
||||
DmaRegs.CH2.MODE.bit.CHINTE = 0; // Channel Interrupt to CPU disabled
|
||||
|
||||
// Set up BURST registers:
|
||||
DmaRegs.CH2.BURST_SIZE.all = 1; // Number (N-1) of 16-bit words transferred in a burst
|
||||
DmaRegs.CH2.SRC_BURST_STEP = 0x0000; // Not needed since only 1 32-bit move per burst
|
||||
DmaRegs.CH2.DST_BURST_STEP = 0x0000; // Not needed since only 1 32-bit move per burst
|
||||
|
||||
// Set up TRANSFER registers:
|
||||
DmaRegs.CH2.TRANSFER_SIZE = 0; // Bursts (N-1) per transfer
|
||||
DmaRegs.CH2.SRC_TRANSFER_STEP = 0; // Not needed since TRANSFER_SIZE = 0
|
||||
DmaRegs.CH2.DST_TRANSFER_STEP = 0; // Not needed since TRANSFER_SIZE = 0
|
||||
|
||||
// Set up WRAP registers:
|
||||
DmaRegs.CH2.SRC_WRAP_SIZE = 0xFFFF; // No source wrap-around
|
||||
DmaRegs.CH2.DST_WRAP_SIZE = 0xFFFF; // No destination wrap-around
|
||||
DmaRegs.CH2.SRC_WRAP_STEP = 0;
|
||||
DmaRegs.CH2.DST_WRAP_STEP = 0;
|
||||
|
||||
// Set up SOURCE address:
|
||||
DmaRegs.CH2.SRC_ADDR_SHADOW = (Uint32) &VarB; // Point to variable in RAM
|
||||
|
||||
// Set up DESTINATION address:
|
||||
DmaRegs.CH2.DST_ADDR_SHADOW = (Uint32) &EPwm1Regs.CMPA.all; // Point to ePWM1 CMPAHR/CMPA registers
|
||||
|
||||
// Clear any spurious flags:
|
||||
DmaRegs.CH2.CONTROL.bit.PERINTCLR = 1; // Clear any spurious interrupt flags
|
||||
DmaRegs.CH2.CONTROL.bit.SYNCCLR = 1; // Clear any spurious sync flags
|
||||
DmaRegs.CH2.CONTROL.bit.ERRCLR = 1; // Clear any spurious sync error flags
|
||||
|
||||
EDIS;
|
||||
}
|
||||
|
||||
void DMACH3Config(void)
|
||||
{
|
||||
EALLOW;
|
||||
// Configure CH3:
|
||||
//
|
||||
|
||||
// Set up MODE Register:
|
||||
DmaRegs.CH3.MODE.bit.PERINTSEL = 1; // ADC SEQ1INT as peripheral interrupt source
|
||||
DmaRegs.CH3.MODE.bit.PERINTE = 1; // Peripheral interrupt enabled
|
||||
DmaRegs.CH3.MODE.bit.ONESHOT = 0; // 1 burst per SW interrupt
|
||||
DmaRegs.CH3.MODE.bit.CONTINUOUS = 1; // Do not stop after each transfer
|
||||
DmaRegs.CH3.MODE.bit.SYNCE = 0; // No sync signal
|
||||
DmaRegs.CH3.MODE.bit.SYNCSEL = 0; // No sync signal
|
||||
DmaRegs.CH3.MODE.bit.DATASIZE = 1; // 32-bit data size transfers
|
||||
DmaRegs.CH3.MODE.bit.CHINTMODE = 0;
|
||||
DmaRegs.CH3.MODE.bit.CHINTE = 0; // Channel Interrupt to CPU disabled
|
||||
|
||||
// Set up BURST registers:
|
||||
DmaRegs.CH3.BURST_SIZE.all = 5; // Number (N-1) of 16-bit words transferred in a burst
|
||||
DmaRegs.CH3.SRC_BURST_STEP = 2; // Increment source burst address by 2 (32-bit)
|
||||
DmaRegs.CH3.DST_BURST_STEP = 2; // Increment destination burst address by 2 (32-bit)
|
||||
|
||||
// Set up TRANSFER registers:
|
||||
DmaRegs.CH3.TRANSFER_SIZE = 0; // Bursts (N-1) per transfer
|
||||
DmaRegs.CH3.SRC_TRANSFER_STEP = 0; // Not needed since TRANSFER_SIZE = 0
|
||||
DmaRegs.CH3.DST_TRANSFER_STEP = 0; // Not needed since TRANSFER_SIZE = 0
|
||||
|
||||
// Set up WRAP registers:
|
||||
DmaRegs.CH3.SRC_WRAP_SIZE = 0xFFFF; // No source wrap-around
|
||||
DmaRegs.CH3.DST_WRAP_SIZE = 0xFFFF; // No destination wrap-around
|
||||
DmaRegs.CH3.SRC_WRAP_STEP = 0;
|
||||
DmaRegs.CH3.DST_WRAP_STEP = 0;
|
||||
|
||||
// Set up SOURCE address:
|
||||
DmaRegs.CH3.SRC_ADDR_SHADOW = (Uint32) &AdcMirror.ADCRESULT0; // Point to first RESULT reg
|
||||
|
||||
// Set up DESTINATION address:
|
||||
DmaRegs.CH3.DST_ADDR_SHADOW = (Uint32) &ADCbuffer[0]; // Point to beginning of ADCbuffer
|
||||
|
||||
// Clear any spurious flags:
|
||||
DmaRegs.CH3.CONTROL.bit.PERINTCLR = 1; // Clear any spurious interrupt flags
|
||||
DmaRegs.CH3.CONTROL.bit.SYNCCLR = 1; // Clear any spurious sync flags
|
||||
DmaRegs.CH3.CONTROL.bit.ERRCLR = 1; // Clear any spurious sync error flags
|
||||
|
||||
EDIS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
interrupt void local_DINTCH1_ISR(void) // DMA INT7.1
|
||||
{
|
||||
GpioDataRegs.GPATOGGLE.all = 0x00000001; // Toggle GPIOA0
|
||||
|
||||
InterruptCount++;
|
||||
|
||||
|
||||
if((DmaRegs.CH1.CONTROL.bit.OVRFLG == 1) || (DmaRegs.CH2.CONTROL.bit.OVRFLG == 1) ||
|
||||
(DmaRegs.CH3.CONTROL.bit.OVRFLG == 1))
|
||||
{
|
||||
asm(" ESTOP0");
|
||||
}
|
||||
|
||||
PieCtrlRegs.PIEACK.bit.ACK7 = 1; // Clear PIEIFR bit
|
||||
}
|
||||
|
||||
|
||||
void ConfigAdc(void)
|
||||
{
|
||||
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 7;
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0; // ADCINA0
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 1; // ADCINA1
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 2; // ADCINA2
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 3; // ADCINA3
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 4; // ADCINA4
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 5; // ADCINA5
|
||||
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1; // Enable ADC to accept ePWM_SOCA trigger
|
||||
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;
|
||||
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;
|
||||
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // Clear interrupt flag
|
||||
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt
|
||||
}
|
||||
|
||||
|
||||
void config_ePWM1_to_generate_ADCSOCA(void)
|
||||
{
|
||||
// Configure ePWM1 Timer
|
||||
// Interrupt triggers ADCSOCA
|
||||
|
||||
EALLOW;
|
||||
EPwm1Regs.TBPRD = 74; // Setup period (one off so DMA transfer will be obvious)
|
||||
EPwm1Regs.CMPA.all = 0x501000;
|
||||
EPwm1Regs.ETSEL.bit.SOCASEL = 2; // ADCSOCA on TBCTR=TBPRD
|
||||
EPwm1Regs.ETPS.bit.SOCAPRD = 1; // Generate SOCA on 1st event
|
||||
EPwm1Regs.ETSEL.bit.SOCAEN = 1; // Enable SOCA generation
|
||||
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0; // /1 clock mode
|
||||
EDIS;
|
||||
}
|
||||
|
||||
|
||||
void config_ePWM2_to_generate_ADCSOCB(void)
|
||||
{
|
||||
// Configure ePWM2 Timer
|
||||
// Interrupt triggers ADCSOCB
|
||||
|
||||
EALLOW;
|
||||
EPwm2Regs.TBPRD = 150; // Setup periodSetup period
|
||||
EPwm2Regs.CMPA.all = 0x200000;
|
||||
EPwm2Regs.ETSEL.bit.SOCBSEL = 2; // ADCSOCB on TBCTR=TBPRD
|
||||
EPwm2Regs.ETPS.bit.SOCBPRD = 1; // Generate SOCB on 1st event
|
||||
EPwm2Regs.ETSEL.bit.SOCBEN = 1; // Enable SOCB generation
|
||||
EPwm2Regs.TBCTL.bit.HSPCLKDIV = 0; // /1 clock mode
|
||||
EDIS;
|
||||
}
|
||||
|
||||
|
||||
void delay_loop()
|
||||
{
|
||||
short i;
|
||||
for (i = 0; i < 1000; i++) {}
|
||||
}
|
||||
|
||||
|
||||
//===========================================================================
|
||||
// No more.
|
||||
//===========================================================================
|
||||
|
||||
43
Source/External/v120/DSP2833x_examples/epwm_dma/Example_2833xEPwm_DMA.gel
vendored
Normal file
43
Source/External/v120/DSP2833x_examples/epwm_dma/Example_2833xEPwm_DMA.gel
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
// TI File $Revision: /main/1 $
|
||||
// Checkin $Date: June 19, 2008 10:25:20 $
|
||||
//###########################################################################
|
||||
//
|
||||
// This .gel file can be used to help load and build the example project.
|
||||
// It should be unloaded from Code Composer Studio before loading another
|
||||
// project.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
menuitem "DSP2833x ePWM DMA"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xEPwm_DMA.pjt");
|
||||
GEL_ProjectBuild("Example_2833xEPwm_DMA.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xEPwm_DMA.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("EPwm1Regs.TBPRD,x");
|
||||
GEL_WatchAdd("EPwm1Regs.CMPA.all,x");
|
||||
GEL_WatchAdd("ADCbuffer,x");
|
||||
GEL_WatchAdd("InterruptCount,x");
|
||||
GEL_WatchAdd("EPwm1Regs,x");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
46
Source/External/v120/DSP2833x_examples/epwm_dma/Example_2833xEPwm_DMA.pjt
vendored
Normal file
46
Source/External/v120/DSP2833x_examples/epwm_dma/Example_2833xEPwm_DMA.pjt
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
; Code Composer Project File, Version 2.0 (do not modify or remove this line)
|
||||
|
||||
[Project Settings]
|
||||
ProjectName="DSP2833x"
|
||||
ProjectDir="C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\epwm_dma\"
|
||||
ProjectType=Executable
|
||||
CPUFamily=TMS320C28XX
|
||||
Tool="Compiler"
|
||||
Tool="CustomBuilder"
|
||||
Tool="DspBiosBuilder"
|
||||
Tool="Linker"
|
||||
Config="Debug"
|
||||
Config="Release"
|
||||
|
||||
[Source Files]
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_Adc.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ADC_cal.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CodeStartBranch.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieVect.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_SysCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_usDelay.asm"
|
||||
Source="..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c"
|
||||
Source="Example_2833xEPwm_DMA.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="DSP2833x_EPWMDM_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\epwm_dma\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\epwm_dma\Debug" -i"..\..\DSP2833x_headers\include" -i"..\..\DSP2833x_common\include" -d"_DEBUG" -d"LARGE_MODEL" -ml -mt -v28 --float_support=fpu32
|
||||
|
||||
["Compiler" Settings: "Release"]
|
||||
Options=-q -o3 -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\epwm_dma\Release" -d"LARGE_MODEL" -ml -v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Debug"]
|
||||
Options=-v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Release"]
|
||||
Options=-v28
|
||||
|
||||
["Linker" Settings: "Debug"]
|
||||
Options=-q -c -ecode_start -m".\Debug\Example_2833xEPwm_DMA.map" -o".\Debug\Example_2833xEPwm_DMA.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -m".\Release\Example_2833xEPwm_DMA.map" -o".\Release\Example_2833xEPwm_DMA.out" -x
|
||||
|
||||
360
Source/External/v120/DSP2833x_examples/epwm_timer_interrupts/Example_2833xEPwmTimerInt.c
vendored
Normal file
360
Source/External/v120/DSP2833x_examples/epwm_timer_interrupts/Example_2833xEPwmTimerInt.c
vendored
Normal file
@@ -0,0 +1,360 @@
|
||||
// TI File $Revision: /main/9 $
|
||||
// Checkin $Date: April 21, 2008 15:41:38 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xEPwmTimerInt.c
|
||||
//
|
||||
// TITLE: DSP2833x ePWM Timer Interrupt example.
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// Other then boot mode configuration, no other hardware configuration
|
||||
// is required.
|
||||
//
|
||||
// As supplied, this project is configured for "boot to SARAM"
|
||||
// operation. The 2833x Boot Mode table is shown below.
|
||||
// For information on configuring the boot mode of an eZdsp,
|
||||
// please refer to the documentation included with the eZdsp,
|
||||
//
|
||||
// $Boot_Table:
|
||||
//
|
||||
// GPIO87 GPIO86 GPIO85 GPIO84
|
||||
// XA15 XA14 XA13 XA12
|
||||
// PU PU PU PU
|
||||
// ==========================================
|
||||
// 1 1 1 1 Jump to Flash
|
||||
// 1 1 1 0 SCI-A boot
|
||||
// 1 1 0 1 SPI-A boot
|
||||
// 1 1 0 0 I2C-A boot
|
||||
// 1 0 1 1 eCAN-A boot
|
||||
// 1 0 1 0 McBSP-A boot
|
||||
// 1 0 0 1 Jump to XINTF x16
|
||||
// 1 0 0 0 Jump to XINTF x32
|
||||
// 0 1 1 1 Jump to OTP
|
||||
// 0 1 1 0 Parallel GPIO I/O boot
|
||||
// 0 1 0 1 Parallel XINTF boot
|
||||
// 0 1 0 0 Jump to SARAM <- "boot to SARAM"
|
||||
// 0 0 1 1 Branch to check boot mode
|
||||
// 0 0 1 0 Boot to flash, bypass ADC cal
|
||||
// 0 0 0 1 Boot to SARAM, bypass ADC cal
|
||||
// 0 0 0 0 Boot to SCI-A, bypass ADC cal
|
||||
// Boot_Table_End$
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// This example configures the ePWM Timers and increments
|
||||
// a counter each time an interrupt is taken.
|
||||
//
|
||||
// As supplied:
|
||||
//
|
||||
// All ePWM's are initalized. Note that not all devices in the 2833x
|
||||
// family have all 6 ePWMs.
|
||||
//
|
||||
// All timers have the same period
|
||||
// The timers are started sync'ed
|
||||
// An interrupt is taken on a zero event for each ePWM timer
|
||||
//
|
||||
// ePWM1: takes an interrupt every event
|
||||
// ePWM2: takes an interrupt every 2nd event
|
||||
// ePWM3: takes an interrupt every 3rd event
|
||||
// ePWM4-ePWM6: take an interrupt every event
|
||||
//
|
||||
// Thus the Interrupt count for ePWM1, ePWM4-ePWM6 should be equal
|
||||
// The interrupt count for ePWM2 should be about half that of ePWM1
|
||||
// and the interrupt count for ePWM3 should be about 1/3 that of ePWM1
|
||||
//
|
||||
// Watch Variables:
|
||||
// EPwm1TimerIntCount
|
||||
// EPwm2TimerIntCount
|
||||
// EPwm3TimerIntCount
|
||||
// EPwm4TimerIntCount
|
||||
// EPwm5TimerIntCount
|
||||
// EPwm6TimerIntCount
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
|
||||
// Configure which ePWM timer interrupts are enabled at the PIE level:
|
||||
// 1 = enabled, 0 = disabled
|
||||
#define PWM1_INT_ENABLE 1
|
||||
#define PWM2_INT_ENABLE 1
|
||||
#define PWM3_INT_ENABLE 1
|
||||
#define PWM4_INT_ENABLE 1
|
||||
#define PWM5_INT_ENABLE 1
|
||||
#define PWM6_INT_ENABLE 1
|
||||
|
||||
// Configure the period for each timer
|
||||
#define PWM1_TIMER_TBPRD 0x1FFF
|
||||
#define PWM2_TIMER_TBPRD 0x1FFF
|
||||
#define PWM3_TIMER_TBPRD 0x1FFF
|
||||
#define PWM4_TIMER_TBPRD 0x1FFF
|
||||
#define PWM5_TIMER_TBPRD 0x1FFF
|
||||
#define PWM6_TIMER_TBPRD 0x1FFF
|
||||
|
||||
|
||||
// Prototype statements for functions found within this file.
|
||||
interrupt void epwm1_timer_isr(void);
|
||||
interrupt void epwm2_timer_isr(void);
|
||||
interrupt void epwm3_timer_isr(void);
|
||||
interrupt void epwm4_timer_isr(void);
|
||||
interrupt void epwm5_timer_isr(void);
|
||||
interrupt void epwm6_timer_isr(void);
|
||||
void InitEPwmTimer(void);
|
||||
|
||||
// Global variables used in this example
|
||||
Uint32 EPwm1TimerIntCount;
|
||||
Uint32 EPwm2TimerIntCount;
|
||||
Uint32 EPwm3TimerIntCount;
|
||||
Uint32 EPwm4TimerIntCount;
|
||||
Uint32 EPwm5TimerIntCount;
|
||||
Uint32 EPwm6TimerIntCount;
|
||||
|
||||
|
||||
void main(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
// Step 1. Initialize System Control:
|
||||
// PLL, WatchDog, enable Peripheral Clocks
|
||||
// This example function is found in the DSP2833x_SysCtrl.c file.
|
||||
InitSysCtrl();
|
||||
|
||||
// Step 2. Initalize GPIO:
|
||||
// This example function is found in the DSP2833x_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 DSP2833x_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 DSP2833x_DefaultIsr.c.
|
||||
// This function is found in DSP2833x_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.EPWM1_INT = &epwm1_timer_isr;
|
||||
PieVectTable.EPWM2_INT = &epwm2_timer_isr;
|
||||
PieVectTable.EPWM3_INT = &epwm3_timer_isr;
|
||||
PieVectTable.EPWM4_INT = &epwm4_timer_isr;
|
||||
PieVectTable.EPWM5_INT = &epwm5_timer_isr;
|
||||
PieVectTable.EPWM6_INT = &epwm6_timer_isr;
|
||||
EDIS; // This is needed to disable write to EALLOW protected registers
|
||||
|
||||
// Step 4. Initialize all the Device Peripherals:
|
||||
// This function is found in DSP2833x_InitPeripherals.c
|
||||
// InitPeripherals(); // Not required for this example
|
||||
InitEPwmTimer(); // For this example, only initialize the ePWM Timers
|
||||
|
||||
// Step 5. User specific code, enable interrupts:
|
||||
|
||||
// Initalize counters:
|
||||
EPwm1TimerIntCount = 0;
|
||||
EPwm2TimerIntCount = 0;
|
||||
EPwm3TimerIntCount = 0;
|
||||
EPwm4TimerIntCount = 0;
|
||||
EPwm5TimerIntCount = 0;
|
||||
EPwm6TimerIntCount = 0;
|
||||
|
||||
// Enable CPU INT3 which is connected to EPWM1-6 INT:
|
||||
IER |= M_INT3;
|
||||
|
||||
// Enable EPWM INTn in the PIE: Group 3 interrupt 1-6
|
||||
PieCtrlRegs.PIEIER3.bit.INTx1 = PWM1_INT_ENABLE;
|
||||
PieCtrlRegs.PIEIER3.bit.INTx2 = PWM2_INT_ENABLE;
|
||||
PieCtrlRegs.PIEIER3.bit.INTx3 = PWM3_INT_ENABLE;
|
||||
PieCtrlRegs.PIEIER3.bit.INTx4 = PWM4_INT_ENABLE;
|
||||
PieCtrlRegs.PIEIER3.bit.INTx5 = PWM5_INT_ENABLE;
|
||||
PieCtrlRegs.PIEIER3.bit.INTx6 = PWM6_INT_ENABLE;
|
||||
|
||||
// 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(;;)
|
||||
{
|
||||
asm(" NOP");
|
||||
for(i=1;i<=10;i++)
|
||||
{}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void InitEPwmTimer()
|
||||
{
|
||||
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Stop all the TB clocks
|
||||
EDIS;
|
||||
|
||||
// Setup Sync
|
||||
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // Pass through
|
||||
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // Pass through
|
||||
EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // Pass through
|
||||
EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // Pass through
|
||||
EPwm5Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // Pass through
|
||||
EPwm6Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // Pass through
|
||||
|
||||
// Allow each timer to be sync'ed
|
||||
|
||||
EPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE;
|
||||
EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE;
|
||||
EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE;
|
||||
EPwm4Regs.TBCTL.bit.PHSEN = TB_ENABLE;
|
||||
EPwm5Regs.TBCTL.bit.PHSEN = TB_ENABLE;
|
||||
EPwm6Regs.TBCTL.bit.PHSEN = TB_ENABLE;
|
||||
|
||||
EPwm1Regs.TBPHS.half.TBPHS = 100;
|
||||
EPwm2Regs.TBPHS.half.TBPHS = 200;
|
||||
EPwm3Regs.TBPHS.half.TBPHS = 300;
|
||||
EPwm4Regs.TBPHS.half.TBPHS = 400;
|
||||
EPwm5Regs.TBPHS.half.TBPHS = 500;
|
||||
EPwm6Regs.TBPHS.half.TBPHS = 600;
|
||||
|
||||
EPwm1Regs.TBPRD = PWM1_TIMER_TBPRD;
|
||||
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up
|
||||
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event
|
||||
EPwm1Regs.ETSEL.bit.INTEN = PWM1_INT_ENABLE; // Enable INT
|
||||
EPwm1Regs.ETPS.bit.INTPRD = ET_1ST; // Generate INT on 1st event
|
||||
|
||||
|
||||
EPwm2Regs.TBPRD = PWM2_TIMER_TBPRD;
|
||||
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up
|
||||
EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Enable INT on Zero event
|
||||
EPwm2Regs.ETSEL.bit.INTEN = PWM2_INT_ENABLE; // Enable INT
|
||||
EPwm2Regs.ETPS.bit.INTPRD = ET_2ND; // Generate INT on 2nd event
|
||||
|
||||
|
||||
EPwm3Regs.TBPRD = PWM3_TIMER_TBPRD;
|
||||
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up
|
||||
EPwm3Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Enable INT on Zero event
|
||||
EPwm3Regs.ETSEL.bit.INTEN = PWM3_INT_ENABLE; // Enable INT
|
||||
EPwm3Regs.ETPS.bit.INTPRD = ET_3RD; // Generate INT on 3rd event
|
||||
|
||||
EPwm4Regs.TBPRD = PWM4_TIMER_TBPRD;
|
||||
EPwm4Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up
|
||||
EPwm4Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Enable INT on Zero event
|
||||
EPwm4Regs.ETSEL.bit.INTEN = PWM4_INT_ENABLE; // Enable INT
|
||||
EPwm4Regs.ETPS.bit.INTPRD = ET_1ST; // Generate INT on 1st event
|
||||
|
||||
|
||||
EPwm5Regs.TBPRD = PWM5_TIMER_TBPRD;
|
||||
EPwm5Regs.TBCTL.bit.CTRMODE= TB_COUNT_UP; // Count up
|
||||
EPwm5Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Enable INT on Zero event
|
||||
EPwm5Regs.ETSEL.bit.INTEN = PWM5_INT_ENABLE; // Enable INT
|
||||
EPwm5Regs.ETPS.bit.INTPRD = ET_1ST; // Generate INT on 1st event
|
||||
|
||||
|
||||
EPwm6Regs.TBPRD = PWM6_TIMER_TBPRD;
|
||||
EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up
|
||||
EPwm6Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Enable INT on Zero event
|
||||
EPwm6Regs.ETSEL.bit.INTEN = PWM6_INT_ENABLE; // Enable INT
|
||||
EPwm6Regs.ETPS.bit.INTPRD = ET_1ST; // Generate INT on 1st event
|
||||
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Start all the timers synced
|
||||
EDIS;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Interrupt routines uses in this example:
|
||||
interrupt void epwm1_timer_isr(void)
|
||||
{
|
||||
EPwm1TimerIntCount++;
|
||||
|
||||
// Clear INT flag for this timer
|
||||
EPwm1Regs.ETCLR.bit.INT = 1;
|
||||
|
||||
// Acknowledge this interrupt to receive more interrupts from group 3
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
|
||||
}
|
||||
|
||||
interrupt void epwm2_timer_isr(void)
|
||||
{
|
||||
EPwm2TimerIntCount++;
|
||||
|
||||
// Clear INT flag for this timer
|
||||
EPwm2Regs.ETCLR.bit.INT = 1;
|
||||
|
||||
// Acknowledge this interrupt to receive more interrupts from group 3
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
|
||||
}
|
||||
|
||||
interrupt void epwm3_timer_isr(void)
|
||||
{
|
||||
EPwm3TimerIntCount++;
|
||||
|
||||
// Clear INT flag for this timer
|
||||
EPwm3Regs.ETCLR.bit.INT = 1;
|
||||
|
||||
// Acknowledge this interrupt to receive more interrupts from group 3
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
|
||||
}
|
||||
|
||||
interrupt void epwm4_timer_isr(void)
|
||||
{
|
||||
EPwm4TimerIntCount++;
|
||||
|
||||
// Clear INT flag for this timer
|
||||
EPwm4Regs.ETCLR.bit.INT = 1;
|
||||
|
||||
// Acknowledge this interrupt to receive more interrupts from group 3
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
|
||||
}
|
||||
|
||||
interrupt void epwm5_timer_isr(void)
|
||||
{
|
||||
EPwm5TimerIntCount++;
|
||||
|
||||
// Clear INT flag for this timer
|
||||
EPwm5Regs.ETCLR.bit.INT = 1;
|
||||
|
||||
// Acknowledge this interrupt to receive more interrupts from group 3
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
|
||||
}
|
||||
|
||||
interrupt void epwm6_timer_isr(void)
|
||||
{
|
||||
EPwm6TimerIntCount++;
|
||||
|
||||
// Clear INT flag for this timer
|
||||
EPwm6Regs.ETCLR.bit.INT = 1;
|
||||
|
||||
// Acknowledge this interrupt to receive more interrupts from group 3
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//===========================================================================
|
||||
// No more.
|
||||
//===========================================================================
|
||||
47
Source/External/v120/DSP2833x_examples/epwm_timer_interrupts/Example_2833xEPwmTimerInt.gel
vendored
Normal file
47
Source/External/v120/DSP2833x_examples/epwm_timer_interrupts/Example_2833xEPwmTimerInt.gel
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:13:37 $
|
||||
//###########################################################################
|
||||
//
|
||||
// This .gel file can be used to help load and build the example project.
|
||||
// It should be unloaded from Code Composer Studio before loading another
|
||||
// project.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
menuitem "DSP2833x ePWM Interrupt Example"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xEPwmTimerInt.pjt");
|
||||
GEL_ProjectBuild("Example_2833xEPwmTimerInt.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xEPwmTimerInt.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("EPwm1TimerIntCount",,"PWM1 ISR Count");
|
||||
GEL_WatchAdd("EPwm2TimerIntCount",,"PWM2 ISR Count");
|
||||
GEL_WatchAdd("EPwm3TimerIntCount",,"PWM3 ISR Count");
|
||||
GEL_WatchAdd("EPwm4TimerIntCount",,"PWM4 ISR Count");
|
||||
GEL_WatchAdd("EPwm5TimerIntCount",,"PWM5 ISR Count");
|
||||
GEL_WatchAdd("EPwm6TimerIntCount",,"PWM6 ISR Count");
|
||||
GEL_WatchAdd("EPwm1Regs,x");
|
||||
GEL_WatchAdd("EPwm2Regs,x");
|
||||
GEL_WatchAdd("EPwm3Regs,x");
|
||||
GEL_WatchAdd("EPwm4Regs,x");
|
||||
GEL_WatchAdd("EPwm5Regs,x");
|
||||
GEL_WatchAdd("EPwm6Regs,x");
|
||||
}
|
||||
45
Source/External/v120/DSP2833x_examples/epwm_timer_interrupts/Example_2833xEPwmTimerInt.pjt
vendored
Normal file
45
Source/External/v120/DSP2833x_examples/epwm_timer_interrupts/Example_2833xEPwmTimerInt.pjt
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
; Code Composer Project File, Version 2.0 (do not modify or remove this line)
|
||||
|
||||
[Project Settings]
|
||||
ProjectName="DSP2833x"
|
||||
ProjectDir="C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\epwm_timer_interrupts\"
|
||||
ProjectType=Executable
|
||||
CPUFamily=TMS320C28XX
|
||||
Tool="Compiler"
|
||||
Tool="DspBiosBuilder"
|
||||
Tool="Linker"
|
||||
Config="Debug"
|
||||
Config="Release"
|
||||
|
||||
[Source Files]
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ADC_cal.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CodeStartBranch.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CpuTimers.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieVect.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_SysCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_usDelay.asm"
|
||||
Source="..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c"
|
||||
Source="Example_2833xEPwmTimerInt.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\epwm_timer_interrupts\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\epwm_timer_interrupts\Debug" -i"..\..\DSP2833x_headers\include" -i"..\..\DSP2833x_common\include" -d"_DEBUG" -d"LARGE_MODEL" --float_support=fpu32 -ml -mt -v28
|
||||
|
||||
["Compiler" Settings: "Release"]
|
||||
Options=-q -o3 -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\epwm_timer_interrupts\Release" -d"LARGE_MODEL" -ml -v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Debug"]
|
||||
Options=-v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Release"]
|
||||
Options=-v28
|
||||
|
||||
["Linker" Settings: "Debug"]
|
||||
Options=-q -c -ecode_start -m".\Debug\Example_2833xEPwmTimerInt.map" -o".\Debug\Example_2833xEPwmTimerInt.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xCpuTimer.out" -x
|
||||
|
||||
305
Source/External/v120/DSP2833x_examples/epwm_trip_zone/Example_2833xEPwmTripZone.c
vendored
Normal file
305
Source/External/v120/DSP2833x_examples/epwm_trip_zone/Example_2833xEPwmTripZone.c
vendored
Normal file
@@ -0,0 +1,305 @@
|
||||
// TI File $Revision: /main/8 $
|
||||
// Checkin $Date: April 21, 2008 15:41:42 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xEpwmTripZone.c
|
||||
//
|
||||
// TITLE: Check PWM Trip Zone Test
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// Initially tie TZ1 (GPIO12) and TZ2 (GPIO13) high.
|
||||
//
|
||||
// During the test, monitor ePWM1 or ePWM2 outputs
|
||||
// on a scope Pull TZ1 or TZ2 low to see the effect.
|
||||
//
|
||||
// EPWM1A is on GPIO0
|
||||
// EPWM1B is on GPIO1
|
||||
// EPWM2A is on GPIO2
|
||||
// EPWM2B is on GPIO3
|
||||
//
|
||||
// ePWM1 will react as a 1 shot trip
|
||||
//
|
||||
// ePWM2 will react as a cycle by cycle trip and will be
|
||||
// cleared if TZ1 and TZ2 are both pulled back high.
|
||||
//
|
||||
//
|
||||
// As supplied, this project is configured for "boot to SARAM"
|
||||
// operation. The 2833x Boot Mode table is shown below.
|
||||
// For information on configuring the boot mode of an eZdsp,
|
||||
// please refer to the documentation included with the eZdsp,
|
||||
//
|
||||
// $Boot_Table:
|
||||
//
|
||||
// GPIO87 GPIO86 GPIO85 GPIO84
|
||||
// XA15 XA14 XA13 XA12
|
||||
// PU PU PU PU
|
||||
// ==========================================
|
||||
// 1 1 1 1 Jump to Flash
|
||||
// 1 1 1 0 SCI-A boot
|
||||
// 1 1 0 1 SPI-A boot
|
||||
// 1 1 0 0 I2C-A boot
|
||||
// 1 0 1 1 eCAN-A boot
|
||||
// 1 0 1 0 McBSP-A boot
|
||||
// 1 0 0 1 Jump to XINTF x16
|
||||
// 1 0 0 0 Jump to XINTF x32
|
||||
// 0 1 1 1 Jump to OTP
|
||||
// 0 1 1 0 Parallel GPIO I/O boot
|
||||
// 0 1 0 1 Parallel XINTF boot
|
||||
// 0 1 0 0 Jump to SARAM <- "boot to SARAM"
|
||||
// 0 0 1 1 Branch to check boot mode
|
||||
// 0 0 1 0 Boot to flash, bypass ADC cal
|
||||
// 0 0 0 1 Boot to SARAM, bypass ADC cal
|
||||
// 0 0 0 0 Boot to SCI-A, bypass ADC cal
|
||||
// Boot_Table_End$
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// This example configures ePWM1 and ePWM2
|
||||
//
|
||||
// 2 Examples are included:
|
||||
// * ePWM1 has TZ1 and TZ2 as one shot trip sources
|
||||
// * ePWM2 has TZ1 and TZ2 as cycle by cycle trip sources
|
||||
//
|
||||
// Each ePWM is configured to interrupt on the 3rd zero event
|
||||
// when this happens the deadband is modified such that
|
||||
// 0 <= DB <= DB_MAX. That is, the deadband will move up and
|
||||
// down between 0 and the maximum value.
|
||||
//
|
||||
//
|
||||
// View the EPWM1A/B, EPWM2A/B waveforms
|
||||
// via an oscilloscope to see the effect of TZ1 and TZ2
|
||||
//
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
|
||||
// Prototype statements for functions found within this file.
|
||||
void InitEPwm1Example(void);
|
||||
void InitEPwm2Example(void);
|
||||
interrupt void epwm1_tzint_isr(void);
|
||||
interrupt void epwm2_tzint_isr(void);
|
||||
|
||||
|
||||
// Global variables used in this example
|
||||
Uint32 EPwm1TZIntCount;
|
||||
Uint32 EPwm2TZIntCount;
|
||||
|
||||
void main(void)
|
||||
{
|
||||
// Step 1. Initialize System Control:
|
||||
// PLL, WatchDog, enable Peripheral Clocks
|
||||
// This example function is found in the DSP2833x_SysCtrl.c file.
|
||||
InitSysCtrl();
|
||||
|
||||
// Step 2. Initalize GPIO:
|
||||
// This example function is found in the DSP2833x_Gpio.c file and
|
||||
// illustrates how to set the GPIO to it's default state.
|
||||
// InitGpio(); // Skipped for this example
|
||||
|
||||
// For this case just init GPIO pins for ePWM1, ePWM2, and TZ pins
|
||||
InitEPwm1Gpio();
|
||||
InitEPwm2Gpio();
|
||||
InitTzGpio();
|
||||
|
||||
// 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 DSP2833x_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 DSP2833x_DefaultIsr.c.
|
||||
// This function is found in DSP2833x_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.EPWM1_TZINT = &epwm1_tzint_isr;
|
||||
PieVectTable.EPWM2_TZINT = &epwm2_tzint_isr;
|
||||
EDIS; // This is needed to disable write to EALLOW protected registers
|
||||
|
||||
// Step 4. Initialize all the Device Peripherals:
|
||||
// This function is found in DSP2833x_InitPeripherals.c
|
||||
// InitPeripherals(); // Not required for this example
|
||||
|
||||
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
|
||||
EDIS;
|
||||
|
||||
InitEPwm1Example();
|
||||
InitEPwm2Example();
|
||||
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
|
||||
EDIS;
|
||||
|
||||
// Step 5. User specific code, enable interrupts
|
||||
// Initalize counters:
|
||||
EPwm1TZIntCount = 0;
|
||||
EPwm2TZIntCount = 0;
|
||||
|
||||
// Enable CPU INT3 which is connected to EPWM1-3 INT:
|
||||
IER |= M_INT2;
|
||||
|
||||
// Enable EPWM INTn in the PIE: Group 2 interrupt 1-3
|
||||
PieCtrlRegs.PIEIER2.bit.INTx1 = 1;
|
||||
PieCtrlRegs.PIEIER2.bit.INTx2 = 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(;;)
|
||||
{
|
||||
asm(" NOP");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
interrupt void epwm1_tzint_isr(void)
|
||||
{
|
||||
EPwm1TZIntCount++;
|
||||
|
||||
// Leave these flags set so we only take this
|
||||
// interrupt once
|
||||
//
|
||||
// EALLOW;
|
||||
// EPwm1Regs.TZCLR.bit.OST = 1;
|
||||
// EPwm1Regs.TZCLR.bit.INT = 1;
|
||||
// EDIS;
|
||||
|
||||
// Acknowledge this interrupt to receive more interrupts from group 2
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;
|
||||
|
||||
}
|
||||
|
||||
interrupt void epwm2_tzint_isr(void)
|
||||
{
|
||||
|
||||
EPwm2TZIntCount++;
|
||||
|
||||
// Clear the flags - we will continue to take
|
||||
// this interrupt until the TZ pin goes high
|
||||
//
|
||||
EALLOW;
|
||||
EPwm2Regs.TZCLR.bit.CBC = 1;
|
||||
EPwm2Regs.TZCLR.bit.INT = 1;
|
||||
EDIS;
|
||||
|
||||
// Acknowledge this interrupt to receive more interrupts from group 2
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void InitEPwm1Example()
|
||||
{
|
||||
// Enable TZ1 and TZ2 as one shot trip sources
|
||||
EALLOW;
|
||||
EPwm1Regs.TZSEL.bit.OSHT1 = 1;
|
||||
EPwm1Regs.TZSEL.bit.OSHT2 = 1;
|
||||
|
||||
// What do we want the TZ1 and TZ2 to do?
|
||||
EPwm1Regs.TZCTL.bit.TZA = TZ_FORCE_HI;
|
||||
EPwm1Regs.TZCTL.bit.TZB = TZ_FORCE_LO;
|
||||
|
||||
// Enable TZ interrupt
|
||||
EPwm1Regs.TZEINT.bit.OST = 1;
|
||||
EDIS;
|
||||
|
||||
EPwm1Regs.TBPRD = 6000; // Set timer period
|
||||
EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
|
||||
EPwm1Regs.TBCTR = 0x0000; // Clear counter
|
||||
|
||||
// Setup TBCLK
|
||||
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
|
||||
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
|
||||
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV4; // Clock ratio to SYSCLKOUT
|
||||
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV4;
|
||||
|
||||
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // Load registers every ZERO
|
||||
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
|
||||
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
|
||||
// Setup compare
|
||||
EPwm1Regs.CMPA.half.CMPA = 3000;
|
||||
|
||||
// Set actions
|
||||
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM1A on Zero
|
||||
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
|
||||
|
||||
|
||||
EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR; // Set PWM1A on Zero
|
||||
EPwm1Regs.AQCTLB.bit.CAD = AQ_SET;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void InitEPwm2Example()
|
||||
{
|
||||
|
||||
// Enable TZ1 and TZ2 as one cycle-by-cycle trip sources
|
||||
EALLOW;
|
||||
EPwm2Regs.TZSEL.bit.CBC1 = 1;
|
||||
EPwm2Regs.TZSEL.bit.CBC2 = 1;
|
||||
|
||||
// What do we want the TZ1 and TZ2 to do?
|
||||
EPwm2Regs.TZCTL.bit.TZA = TZ_FORCE_HI;
|
||||
EPwm2Regs.TZCTL.bit.TZB = TZ_FORCE_LO;
|
||||
|
||||
// Enable TZ interrupt
|
||||
EPwm2Regs.TZEINT.bit.CBC = 1;
|
||||
EDIS;
|
||||
|
||||
EPwm2Regs.TBPRD = 6000; // Set timer period
|
||||
EPwm2Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
|
||||
EPwm2Regs.TBCTR = 0x0000; // Clear counter
|
||||
|
||||
// Setup TBCLK
|
||||
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
|
||||
EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
|
||||
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV4; // Clock ratio to SYSCLKOUT
|
||||
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV4; // Slow just to observe on the scope
|
||||
|
||||
// Setup compare
|
||||
EPwm2Regs.CMPA.half.CMPA = 3000;
|
||||
|
||||
// Set actions
|
||||
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM2A on Zero
|
||||
EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR;
|
||||
|
||||
|
||||
EPwm2Regs.AQCTLB.bit.CAU = AQ_CLEAR; // Set PWM2A on Zero
|
||||
EPwm2Regs.AQCTLB.bit.CAD = AQ_SET;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//===========================================================================
|
||||
// No more.
|
||||
//===========================================================================
|
||||
40
Source/External/v120/DSP2833x_examples/epwm_trip_zone/Example_2833xEPwmTripZone.gel
vendored
Normal file
40
Source/External/v120/DSP2833x_examples/epwm_trip_zone/Example_2833xEPwmTripZone.gel
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:13:58 $
|
||||
//###########################################################################
|
||||
//
|
||||
// This .gel file can be used to help load and build the example project.
|
||||
// It should be unloaded from Code Composer Studio before loading another
|
||||
// project.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
menuitem "DSP2833x ePWM TripZone"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xEPwmTripZone.pjt");
|
||||
GEL_ProjectBuild("Example_2833xEPwmTripZone.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xEPwmTripZone.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("EPwm1Regs,x");
|
||||
GEL_WatchAdd("EPwm2Regs,x");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
46
Source/External/v120/DSP2833x_examples/epwm_trip_zone/Example_2833xEPwmTripZone.pjt
vendored
Normal file
46
Source/External/v120/DSP2833x_examples/epwm_trip_zone/Example_2833xEPwmTripZone.pjt
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
; Code Composer Project File, Version 2.0 (do not modify or remove this line)
|
||||
|
||||
[Project Settings]
|
||||
ProjectName="DSP2833x"
|
||||
ProjectDir="C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\epwm_trip_zone\"
|
||||
ProjectType=Executable
|
||||
CPUFamily=TMS320C28XX
|
||||
Tool="Compiler"
|
||||
Tool="DspBiosBuilder"
|
||||
Tool="Linker"
|
||||
Config="Debug"
|
||||
Config="Release"
|
||||
|
||||
[Source Files]
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ADC_cal.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CodeStartBranch.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CpuTimers.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_EPwm.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieVect.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_SysCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_usDelay.asm"
|
||||
Source="..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c"
|
||||
Source="Example_2833xEPwmTripZone.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\epwm_trip_zone\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\epwm_trip_zone\Debug" -i"..\..\DSP2833x_headers\include" -i"..\..\DSP2833x_common\include" -d"_DEBUG" -d"LARGE_MODEL" --float_support=fpu32 -ml -mt -v28
|
||||
|
||||
["Compiler" Settings: "Release"]
|
||||
Options=-q -o3 -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\epwm_trip_zone\Release" -d"LARGE_MODEL" -ml -v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Debug"]
|
||||
Options=-v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Release"]
|
||||
Options=-v28
|
||||
|
||||
["Linker" Settings: "Debug"]
|
||||
Options=-q -c -ecode_start -m".\Debug\Example_2833xEPwmTripZone.map" -o".\Debug\Example_2833xEPwmTripZone.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -m".\Release\Example_2833xEPwmDeadBand.map" -o".\Release\Example_2833xEPwmTripZone.out" -x
|
||||
|
||||
490
Source/External/v120/DSP2833x_examples/epwm_up_aq/Example_2833xEPwmUpAQ.c
vendored
Normal file
490
Source/External/v120/DSP2833x_examples/epwm_up_aq/Example_2833xEPwmUpAQ.c
vendored
Normal file
@@ -0,0 +1,490 @@
|
||||
// TI File $Revision: /main/9 $
|
||||
// Checkin $Date: April 21, 2008 15:41:47 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xEPwm3UpAQ.c
|
||||
//
|
||||
// TITLE: Action Qualifier Module Upcount mode.
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// Monitor the ePWM1 - ePWM3 pins on a oscilloscope as
|
||||
// described below.
|
||||
//
|
||||
// EPWM1A is on GPIO0
|
||||
// EPWM1B is on GPIO1
|
||||
//
|
||||
// EPWM2A is on GPIO2
|
||||
// EPWM2B is on GPIO3
|
||||
//
|
||||
// EPWM3A is on GPIO4
|
||||
// EPWM3B is on GPIO5
|
||||
//
|
||||
// As supplied, this project is configured for "boot to SARAM"
|
||||
// operation. The 2833x Boot Mode table is shown below.
|
||||
// For information on configuring the boot mode of an eZdsp,
|
||||
// please refer to the documentation included with the eZdsp,
|
||||
//
|
||||
// $Boot_Table:
|
||||
//
|
||||
// GPIO87 GPIO86 GPIO85 GPIO84
|
||||
// XA15 XA14 XA13 XA12
|
||||
// PU PU PU PU
|
||||
// ==========================================
|
||||
// 1 1 1 1 Jump to Flash
|
||||
// 1 1 1 0 SCI-A boot
|
||||
// 1 1 0 1 SPI-A boot
|
||||
// 1 1 0 0 I2C-A boot
|
||||
// 1 0 1 1 eCAN-A boot
|
||||
// 1 0 1 0 McBSP-A boot
|
||||
// 1 0 0 1 Jump to XINTF x16
|
||||
// 1 0 0 0 Jump to XINTF x32
|
||||
// 0 1 1 1 Jump to OTP
|
||||
// 0 1 1 0 Parallel GPIO I/O boot
|
||||
// 0 1 0 1 Parallel XINTF boot
|
||||
// 0 1 0 0 Jump to SARAM <- "boot to SARAM"
|
||||
// 0 0 1 1 Branch to check boot mode
|
||||
// 0 0 1 0 Boot to flash, bypass ADC cal
|
||||
// 0 0 0 1 Boot to SARAM, bypass ADC cal
|
||||
// 0 0 0 0 Boot to SCI-A, bypass ADC cal
|
||||
// Boot_Table_End$
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// This example configures ePWM1, ePWM2, ePWM3 to produce an
|
||||
// waveform with independant modulation on EPWMxA and
|
||||
// EPWMxB.
|
||||
//
|
||||
// The compare values CMPA and CMPB are modified within the ePWM's ISR
|
||||
//
|
||||
// The TB counter is in upmode for this example.
|
||||
//
|
||||
// View the EPWM1A/B, EPWM2A/B and EPWM3A/B waveforms
|
||||
// via an oscilloscope
|
||||
//
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
volatile struct EPWM_REGS *EPwmRegHandle;
|
||||
Uint16 EPwm_CMPA_Direction;
|
||||
Uint16 EPwm_CMPB_Direction;
|
||||
Uint16 EPwmTimerIntCount;
|
||||
Uint16 EPwmMaxCMPA;
|
||||
Uint16 EPwmMinCMPA;
|
||||
Uint16 EPwmMaxCMPB;
|
||||
Uint16 EPwmMinCMPB;
|
||||
}EPWM_INFO;
|
||||
|
||||
|
||||
// Prototype statements for functions found within this file.
|
||||
void InitEPwm1Example(void);
|
||||
void InitEPwm2Example(void);
|
||||
void InitEPwm3Example(void);
|
||||
interrupt void epwm1_isr(void);
|
||||
interrupt void epwm2_isr(void);
|
||||
interrupt void epwm3_isr(void);
|
||||
void update_compare(EPWM_INFO*);
|
||||
|
||||
// Global variables used in this example
|
||||
EPWM_INFO epwm1_info;
|
||||
EPWM_INFO epwm2_info;
|
||||
EPWM_INFO epwm3_info;
|
||||
|
||||
// Configure the period for each timer
|
||||
#define EPWM1_TIMER_TBPRD 2000 // Period register
|
||||
#define EPWM1_MAX_CMPA 1950
|
||||
#define EPWM1_MIN_CMPA 50
|
||||
#define EPWM1_MAX_CMPB 1950
|
||||
#define EPWM1_MIN_CMPB 50
|
||||
|
||||
#define EPWM2_TIMER_TBPRD 2000 // Period register
|
||||
#define EPWM2_MAX_CMPA 1950
|
||||
#define EPWM2_MIN_CMPA 50
|
||||
#define EPWM2_MAX_CMPB 1950
|
||||
#define EPWM2_MIN_CMPB 50
|
||||
|
||||
#define EPWM3_TIMER_TBPRD 2000 // Period register
|
||||
#define EPWM3_MAX_CMPA 950
|
||||
#define EPWM3_MIN_CMPA 50
|
||||
#define EPWM3_MAX_CMPB 1950
|
||||
#define EPWM3_MIN_CMPB 1050
|
||||
|
||||
|
||||
// To keep track of which way the compare value is moving
|
||||
#define EPWM_CMP_UP 1
|
||||
#define EPWM_CMP_DOWN 0
|
||||
|
||||
|
||||
|
||||
void main(void)
|
||||
{
|
||||
// Step 1. Initialize System Control:
|
||||
// PLL, WatchDog, enable Peripheral Clocks
|
||||
// This example function is found in the DSP2833x_SysCtrl.c file.
|
||||
InitSysCtrl();
|
||||
|
||||
// Step 2. Initalize GPIO:
|
||||
// This example function is found in the DSP2833x_Gpio.c file and
|
||||
// illustrates how to set the GPIO to it's default state.
|
||||
// InitGpio(); // Skipped for this example
|
||||
|
||||
// For this case just init GPIO pins for ePWM1, ePWM2, ePWM3
|
||||
// These functions are in the DSP2833x_EPwm.c file
|
||||
InitEPwm1Gpio();
|
||||
InitEPwm2Gpio();
|
||||
InitEPwm3Gpio();
|
||||
|
||||
|
||||
// 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 DSP2833x_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 DSP2833x_DefaultIsr.c.
|
||||
// This function is found in DSP2833x_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.EPWM1_INT = &epwm1_isr;
|
||||
PieVectTable.EPWM2_INT = &epwm2_isr;
|
||||
PieVectTable.EPWM3_INT = &epwm3_isr;
|
||||
EDIS; // This is needed to disable write to EALLOW protected registers
|
||||
|
||||
// Step 4. Initialize all the Device Peripherals:
|
||||
// This function is found in DSP2833x_InitPeripherals.c
|
||||
// InitPeripherals(); // Not required for this example
|
||||
|
||||
// For this example, only initialize the ePWM
|
||||
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
|
||||
EDIS;
|
||||
|
||||
InitEPwm1Example();
|
||||
InitEPwm2Example();
|
||||
InitEPwm3Example();
|
||||
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
|
||||
EDIS;
|
||||
|
||||
|
||||
// Step 5. User specific code, enable interrupts:
|
||||
|
||||
// Enable CPU INT3 which is connected to EPWM1-3 INT:
|
||||
IER |= M_INT3;
|
||||
|
||||
// Enable EPWM INTn in the PIE: Group 3 interrupt 1-3
|
||||
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
|
||||
PieCtrlRegs.PIEIER3.bit.INTx2 = 1;
|
||||
PieCtrlRegs.PIEIER3.bit.INTx3 = 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(;;)
|
||||
{
|
||||
asm(" NOP");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
interrupt void epwm1_isr(void)
|
||||
{
|
||||
// Update the CMPA and CMPB values
|
||||
update_compare(&epwm1_info);
|
||||
|
||||
// Clear INT flag for this timer
|
||||
EPwm1Regs.ETCLR.bit.INT = 1;
|
||||
|
||||
// Acknowledge this interrupt to receive more interrupts from group 3
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
|
||||
}
|
||||
|
||||
|
||||
interrupt void epwm2_isr(void)
|
||||
{
|
||||
|
||||
// Update the CMPA and CMPB values
|
||||
update_compare(&epwm2_info);
|
||||
|
||||
// Clear INT flag for this timer
|
||||
EPwm2Regs.ETCLR.bit.INT = 1;
|
||||
|
||||
// Acknowledge this interrupt to receive more interrupts from group 3
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
|
||||
}
|
||||
|
||||
interrupt void epwm3_isr(void)
|
||||
{
|
||||
|
||||
// Update the CMPA and CMPB values
|
||||
update_compare(&epwm3_info);
|
||||
|
||||
// Clear INT flag for this timer
|
||||
EPwm3Regs.ETCLR.bit.INT = 1;
|
||||
|
||||
// Acknowledge this interrupt to receive more interrupts from group 3
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
|
||||
}
|
||||
|
||||
void InitEPwm1Example()
|
||||
{
|
||||
|
||||
// Setup TBCLK
|
||||
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up
|
||||
EPwm1Regs.TBPRD = EPWM1_TIMER_TBPRD; // Set timer period
|
||||
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
|
||||
EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
|
||||
EPwm1Regs.TBCTR = 0x0000; // Clear counter
|
||||
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2; // Clock ratio to SYSCLKOUT
|
||||
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV2;
|
||||
|
||||
// Setup shadow register load on ZERO
|
||||
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
|
||||
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
|
||||
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
|
||||
// Set Compare values
|
||||
EPwm1Regs.CMPA.half.CMPA = EPWM1_MIN_CMPA; // Set compare A value
|
||||
EPwm1Regs.CMPB = EPWM1_MIN_CMPB; // Set Compare B value
|
||||
|
||||
// Set actions
|
||||
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // Set PWM1A on Zero
|
||||
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; // Clear PWM1A on event A, up count
|
||||
|
||||
EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET; // Set PWM1B on Zero
|
||||
EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR; // Clear PWM1B on event B, up count
|
||||
|
||||
// Interrupt where we will change the Compare Values
|
||||
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event
|
||||
EPwm1Regs.ETSEL.bit.INTEN = 1; // Enable INT
|
||||
EPwm1Regs.ETPS.bit.INTPRD = ET_3RD; // Generate INT on 3rd event
|
||||
|
||||
// Information this example uses to keep track
|
||||
// of the direction the CMPA/CMPB values are
|
||||
// moving, the min and max allowed values and
|
||||
// a pointer to the correct ePWM registers
|
||||
epwm1_info.EPwm_CMPA_Direction = EPWM_CMP_UP; // Start by increasing CMPA & CMPB
|
||||
epwm1_info.EPwm_CMPB_Direction = EPWM_CMP_UP;
|
||||
epwm1_info.EPwmTimerIntCount = 0; // Zero the interrupt counter
|
||||
epwm1_info.EPwmRegHandle = &EPwm1Regs; // Set the pointer to the ePWM module
|
||||
epwm1_info.EPwmMaxCMPA = EPWM1_MAX_CMPA; // Setup min/max CMPA/CMPB values
|
||||
epwm1_info.EPwmMinCMPA = EPWM1_MIN_CMPA;
|
||||
epwm1_info.EPwmMaxCMPB = EPWM1_MAX_CMPB;
|
||||
epwm1_info.EPwmMinCMPB = EPWM1_MIN_CMPB;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void InitEPwm2Example()
|
||||
{
|
||||
// Setup TBCLK
|
||||
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up
|
||||
EPwm2Regs.TBPRD = EPWM2_TIMER_TBPRD; // Set timer period
|
||||
EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
|
||||
EPwm2Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
|
||||
EPwm2Regs.TBCTR = 0x0000; // Clear counter
|
||||
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2; // Clock ratio to SYSCLKOUT
|
||||
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV2;
|
||||
|
||||
// Setup shadow register load on ZERO
|
||||
EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
|
||||
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
|
||||
EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
|
||||
// Set Compare values
|
||||
EPwm2Regs.CMPA.half.CMPA = EPWM2_MIN_CMPA; // Set compare A value
|
||||
EPwm2Regs.CMPB = EPWM2_MAX_CMPB; // Set Compare B value
|
||||
|
||||
// Set actions
|
||||
EPwm2Regs.AQCTLA.bit.PRD = AQ_CLEAR; // Clear PWM2A on Period
|
||||
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM2A on event A, up count
|
||||
|
||||
EPwm2Regs.AQCTLB.bit.PRD = AQ_CLEAR; // Clear PWM2B on Period
|
||||
EPwm2Regs.AQCTLB.bit.CBU = AQ_SET; // Set PWM2B on event B, up count
|
||||
|
||||
// Interrupt where we will change the Compare Values
|
||||
EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event
|
||||
EPwm2Regs.ETSEL.bit.INTEN = 1; // Enable INT
|
||||
EPwm2Regs.ETPS.bit.INTPRD = ET_3RD; // Generate INT on 3rd event
|
||||
|
||||
// Information this example uses to keep track
|
||||
// of the direction the CMPA/CMPB values are
|
||||
// moving, the min and max allowed values and
|
||||
// a pointer to the correct ePWM registers
|
||||
epwm2_info.EPwm_CMPA_Direction = EPWM_CMP_UP; // Start by increasing CMPA
|
||||
epwm2_info.EPwm_CMPB_Direction = EPWM_CMP_DOWN; // and decreasing CMPB
|
||||
epwm2_info.EPwmTimerIntCount = 0; // Zero the interrupt counter
|
||||
epwm2_info.EPwmRegHandle = &EPwm2Regs; // Set the pointer to the ePWM module
|
||||
epwm2_info.EPwmMaxCMPA = EPWM2_MAX_CMPA; // Setup min/max CMPA/CMPB values
|
||||
epwm2_info.EPwmMinCMPA = EPWM2_MIN_CMPA;
|
||||
epwm2_info.EPwmMaxCMPB = EPWM2_MAX_CMPB;
|
||||
epwm2_info.EPwmMinCMPB = EPWM2_MIN_CMPB;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void InitEPwm3Example(void)
|
||||
{
|
||||
|
||||
|
||||
// Setup TBCLK
|
||||
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up
|
||||
EPwm3Regs.TBPRD = EPWM3_TIMER_TBPRD; // Set timer period
|
||||
EPwm3Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
|
||||
EPwm3Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
|
||||
EPwm3Regs.TBCTR = 0x0000; // Clear counter
|
||||
EPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
|
||||
EPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV1;
|
||||
|
||||
// Setup shadow register load on ZERO
|
||||
EPwm3Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
|
||||
EPwm3Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
EPwm3Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
|
||||
EPwm3Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
|
||||
// Set Compare values
|
||||
EPwm3Regs.CMPA.half.CMPA = EPWM3_MIN_CMPA; // Set compare A value
|
||||
EPwm3Regs.CMPB = EPWM3_MAX_CMPB; // Set Compare B value
|
||||
|
||||
// Set Actions
|
||||
EPwm3Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM3A on event B, up count
|
||||
EPwm3Regs.AQCTLA.bit.CBU = AQ_CLEAR; // Clear PWM3A on event B, up count
|
||||
|
||||
EPwm3Regs.AQCTLB.bit.ZRO = AQ_TOGGLE; // Toggle EPWM3B on Zero
|
||||
|
||||
// Interrupt where we will change the Compare Values
|
||||
EPwm3Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event
|
||||
EPwm3Regs.ETSEL.bit.INTEN = 1; // Enable INT
|
||||
EPwm3Regs.ETPS.bit.INTPRD = ET_3RD; // Generate INT on 3rd event
|
||||
|
||||
// Start by increasing the compare A and decreasing compare B
|
||||
epwm3_info.EPwm_CMPA_Direction = EPWM_CMP_UP;
|
||||
epwm3_info.EPwm_CMPB_Direction = EPWM_CMP_DOWN;
|
||||
// Start the cout at 0
|
||||
epwm3_info.EPwmTimerIntCount = 0;
|
||||
epwm3_info.EPwmRegHandle = &EPwm3Regs;
|
||||
epwm3_info.EPwmMaxCMPA = EPWM3_MAX_CMPA;
|
||||
epwm3_info.EPwmMinCMPA = EPWM3_MIN_CMPA;
|
||||
epwm3_info.EPwmMaxCMPB = EPWM3_MAX_CMPB;
|
||||
epwm3_info.EPwmMinCMPB = EPWM3_MIN_CMPB;
|
||||
}
|
||||
|
||||
|
||||
void update_compare(EPWM_INFO *epwm_info)
|
||||
{
|
||||
|
||||
|
||||
// Every 10'th interrupt, change the CMPA/CMPB values
|
||||
if(epwm_info->EPwmTimerIntCount == 10)
|
||||
{
|
||||
epwm_info->EPwmTimerIntCount = 0;
|
||||
|
||||
// If we were increasing CMPA, check to see if
|
||||
// we reached the max value. If not, increase CMPA
|
||||
// else, change directions and decrease CMPA
|
||||
if(epwm_info->EPwm_CMPA_Direction == EPWM_CMP_UP)
|
||||
{
|
||||
if(epwm_info->EPwmRegHandle->CMPA.half.CMPA < epwm_info->EPwmMaxCMPA)
|
||||
{
|
||||
epwm_info->EPwmRegHandle->CMPA.half.CMPA++;
|
||||
}
|
||||
else
|
||||
{
|
||||
epwm_info->EPwm_CMPA_Direction = EPWM_CMP_DOWN;
|
||||
epwm_info->EPwmRegHandle->CMPA.half.CMPA--;
|
||||
}
|
||||
}
|
||||
|
||||
// If we were decreasing CMPA, check to see if
|
||||
// we reached the min value. If not, decrease CMPA
|
||||
// else, change directions and increase CMPA
|
||||
else
|
||||
{
|
||||
if(epwm_info->EPwmRegHandle->CMPA.half.CMPA == epwm_info->EPwmMinCMPA)
|
||||
{
|
||||
epwm_info->EPwm_CMPA_Direction = EPWM_CMP_UP;
|
||||
epwm_info->EPwmRegHandle->CMPA.half.CMPA++;
|
||||
}
|
||||
else
|
||||
{
|
||||
epwm_info->EPwmRegHandle->CMPA.half.CMPA--;
|
||||
}
|
||||
}
|
||||
|
||||
// If we were increasing CMPB, check to see if
|
||||
// we reached the max value. If not, increase CMPB
|
||||
// else, change directions and decrease CMPB
|
||||
if(epwm_info->EPwm_CMPB_Direction == EPWM_CMP_UP)
|
||||
{
|
||||
if(epwm_info->EPwmRegHandle->CMPB < epwm_info->EPwmMaxCMPB)
|
||||
{
|
||||
epwm_info->EPwmRegHandle->CMPB++;
|
||||
}
|
||||
else
|
||||
{
|
||||
epwm_info->EPwm_CMPB_Direction = EPWM_CMP_DOWN;
|
||||
epwm_info->EPwmRegHandle->CMPB--;
|
||||
}
|
||||
}
|
||||
|
||||
// If we were decreasing CMPB, check to see if
|
||||
// we reached the min value. If not, decrease CMPB
|
||||
// else, change directions and increase CMPB
|
||||
|
||||
else
|
||||
{
|
||||
if(epwm_info->EPwmRegHandle->CMPB == epwm_info->EPwmMinCMPB)
|
||||
{
|
||||
epwm_info->EPwm_CMPB_Direction = EPWM_CMP_UP;
|
||||
epwm_info->EPwmRegHandle->CMPB++;
|
||||
}
|
||||
else
|
||||
{
|
||||
epwm_info->EPwmRegHandle->CMPB--;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
epwm_info->EPwmTimerIntCount++;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
//===========================================================================
|
||||
// No more.
|
||||
//===========================================================================
|
||||
41
Source/External/v120/DSP2833x_examples/epwm_up_aq/Example_2833xEPwmUpAQ.gel
vendored
Normal file
41
Source/External/v120/DSP2833x_examples/epwm_up_aq/Example_2833xEPwmUpAQ.gel
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:14:13 $
|
||||
//###########################################################################
|
||||
//
|
||||
// This .gel file can be used to help load and build the example project.
|
||||
// It should be unloaded from Code Composer Studio before loading another
|
||||
// project.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
menuitem "DSP2833x ePWM UP AQ"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xEPwmUpAQ.pjt");
|
||||
GEL_ProjectBuild("Example_2833xEPwmUpAQ.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xEPwmUpAQ.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("EPwm1Regs,x");
|
||||
GEL_WatchAdd("EPwm2Regs,x");
|
||||
GEL_WatchAdd("EPwm3Regs,x");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
46
Source/External/v120/DSP2833x_examples/epwm_up_aq/Example_2833xEPwmUpAQ.pjt
vendored
Normal file
46
Source/External/v120/DSP2833x_examples/epwm_up_aq/Example_2833xEPwmUpAQ.pjt
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
; Code Composer Project File, Version 2.0 (do not modify or remove this line)
|
||||
|
||||
[Project Settings]
|
||||
ProjectName="DSP2833x"
|
||||
ProjectDir="C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\epwm_up_aq\"
|
||||
ProjectType=Executable
|
||||
CPUFamily=TMS320C28XX
|
||||
Tool="Compiler"
|
||||
Tool="DspBiosBuilder"
|
||||
Tool="Linker"
|
||||
Config="Debug"
|
||||
Config="Release"
|
||||
|
||||
[Source Files]
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_ADC_cal.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CodeStartBranch.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_CpuTimers.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_EPwm.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_PieVect.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_SysCtrl.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_usDelay.asm"
|
||||
Source="..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c"
|
||||
Source="Example_2833xEPwmUpAQ.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\epwm_up_aq\Debug" -fs"C:\tidcs\c28\DSP2833x\006\DSP2833x_examples\epwm_asymmetic_aq\Debug" -i"..\..\DSP2833x_headers\include" -i"..\..\DSP2833x_common\include" -d"_DEBUG" -d"LARGE_MODEL" --float_support=fpu32 -ml -mt -v28
|
||||
|
||||
["Compiler" Settings: "Release"]
|
||||
Options=-q -o3 -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\epwm_up_aq\Release" -d"LARGE_MODEL" -ml -v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Debug"]
|
||||
Options=-v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Release"]
|
||||
Options=-v28
|
||||
|
||||
["Linker" Settings: "Debug"]
|
||||
Options=-q -c -ecode_start -m".\Debug\Example_2833xEPwmUpAQ.map" -o".\Debug\Example_2833xEPwmUpAQ.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xEPwmUpAQ.out" -x
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user