Начало
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
|
||||
|
||||
499
Source/External/v120/DSP2833x_examples/epwm_updown_aq/Example_2833xEPwmUpDownAQ.c
vendored
Normal file
499
Source/External/v120/DSP2833x_examples/epwm_updown_aq/Example_2833xEPwmUpDownAQ.c
vendored
Normal file
@@ -0,0 +1,499 @@
|
||||
// TI File $Revision: /main/8 $
|
||||
// Checkin $Date: April 21, 2008 15:41:53 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xEPwmUpDownAQ.c
|
||||
//
|
||||
// TITLE: Action Qualifier Module - Using up/down count
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// Monitor ePWM1-ePWM3 pins 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, 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 up/down count mode 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.TBPRD = EPWM1_TIMER_TBPRD; // Set timer period 801 TBCLKs
|
||||
EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
|
||||
EPwm1Regs.TBCTR = 0x0000; // Clear counter
|
||||
|
||||
// Set Compare values
|
||||
EPwm1Regs.CMPA.half.CMPA = EPWM1_MIN_CMPA; // Set compare A value
|
||||
EPwm1Regs.CMPB = EPWM1_MAX_CMPB; // Set Compare B value
|
||||
|
||||
// Setup counter mode
|
||||
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
|
||||
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
|
||||
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
|
||||
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
|
||||
|
||||
// Setup shadowing
|
||||
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
|
||||
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // Load on Zero
|
||||
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
|
||||
|
||||
// Set actions
|
||||
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM1A on event A, up count
|
||||
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // Clear PWM1A on event A, down count
|
||||
|
||||
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET; // Set PWM1B on event B, up count
|
||||
EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR; // Clear PWM1B on event B, down 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 &
|
||||
epwm1_info.EPwm_CMPB_Direction = EPWM_CMP_DOWN; // decreasing CMPB
|
||||
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.TBPRD = EPWM2_TIMER_TBPRD; // Set timer period 801 TBCLKs
|
||||
EPwm2Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
|
||||
EPwm2Regs.TBCTR = 0x0000; // Clear counter
|
||||
|
||||
// Set Compare values
|
||||
EPwm2Regs.CMPA.half.CMPA = EPWM2_MIN_CMPA; // Set compare A value
|
||||
EPwm2Regs.CMPB = EPWM2_MIN_CMPB; // Set Compare B value
|
||||
|
||||
// Setup counter mode
|
||||
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
|
||||
EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
|
||||
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
|
||||
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;
|
||||
|
||||
// Setup shadowing
|
||||
EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
|
||||
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // Load on Zero
|
||||
EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
|
||||
|
||||
// Set actions
|
||||
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM2A on event A, up count
|
||||
EPwm2Regs.AQCTLA.bit.CBD = AQ_CLEAR; // Clear PWM2A on event B, down count
|
||||
|
||||
EPwm2Regs.AQCTLB.bit.ZRO = AQ_CLEAR; // Clear PWM2B on zero
|
||||
EPwm2Regs.AQCTLB.bit.PRD = AQ_SET ; // Set PWM2B on period
|
||||
|
||||
// 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_UP; // increasing 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_UPDOWN;// Count up/down
|
||||
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.PRD = AQ_SET; // Set PWM3A on period
|
||||
EPwm3Regs.AQCTLA.bit.CBD = AQ_CLEAR; // Clear PWM3A on event B, down count
|
||||
|
||||
EPwm3Regs.AQCTLB.bit.PRD = AQ_CLEAR; // Clear PWM3A on period
|
||||
EPwm3Regs.AQCTLB.bit.CAU = AQ_SET; // Set PWM3A on event A, up count
|
||||
|
||||
// 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
|
||||
|
||||
// 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
|
||||
epwm3_info.EPwm_CMPA_Direction = EPWM_CMP_UP; // Start by increasing CMPA &
|
||||
epwm3_info.EPwm_CMPB_Direction = EPWM_CMP_DOWN; // decreasing CMPB
|
||||
epwm3_info.EPwmTimerIntCount = 0; // Zero the interrupt counter
|
||||
epwm3_info.EPwmRegHandle = &EPwm3Regs; // Set the pointer to the ePWM module
|
||||
epwm3_info.EPwmMaxCMPA = EPWM3_MAX_CMPA; // Setup min/max CMPA/CMPB values
|
||||
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.
|
||||
//===========================================================================
|
||||
40
Source/External/v120/DSP2833x_examples/epwm_updown_aq/Example_2833xEPwmUpDownAQ.gel
vendored
Normal file
40
Source/External/v120/DSP2833x_examples/epwm_updown_aq/Example_2833xEPwmUpDownAQ.gel
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:14:28 $
|
||||
//###########################################################################
|
||||
//
|
||||
// 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 UpDown AQ"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xEPwmUpDownAQ.pjt");
|
||||
GEL_ProjectBuild("Example_2833xEPwmUpDownAQ.pjt");
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xEPwmUpDownAQ.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_updown_aq/Example_2833xEPwmUpDownAQ.pjt
vendored
Normal file
46
Source/External/v120/DSP2833x_examples/epwm_updown_aq/Example_2833xEPwmUpDownAQ.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_updown_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_2833xEPwmUpDownAQ.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_updown_aq\Debug" -fs"C:\tidcs\c28\DSP2833x\006\DSP2833x_examples\epwm_Symmetric_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_updown_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_2833xEPwmUpDownAQ.map" -o".\Debug\Example_2833xEPwmUpDownAQ.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xEPwmUpDownAQ.out" -x
|
||||
|
||||
178
Source/External/v120/DSP2833x_examples/eqep_freqcal/Example_2833xEqep_freqcal.c
vendored
Normal file
178
Source/External/v120/DSP2833x_examples/eqep_freqcal/Example_2833xEqep_freqcal.c
vendored
Normal file
@@ -0,0 +1,178 @@
|
||||
// TI File $Revision: /main/12 $
|
||||
// Checkin $Date: July 10, 2008 11:07:26 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xEqep_freqcal.c
|
||||
//
|
||||
// TITLE: Frequency measurement using EQEP peripheral
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
// As supplied, this project is configured for "boot to SARAM" operation.
|
||||
//
|
||||
// Test requires the following hardware connections
|
||||
//
|
||||
// GPIO20/EQEP1A <- External input - connect to GPIO0/EPWM1A
|
||||
//
|
||||
// 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 will provide frequency measurement using capture unit (freqhz_pr)
|
||||
// and unit time out (freqhz_fr). The EPWM1A frequency will be measured by the EQEP.
|
||||
//
|
||||
// By default, EPWM1A is configured to generate a frequency of 5 kHz - measured
|
||||
// frequency found in freqhz_pr and freqhz_fr should be 5000.
|
||||
//
|
||||
// See DESCRIPTION in Example_freqcal.c for more details on the frequency calculation
|
||||
// performed in this example.
|
||||
//
|
||||
// In addition to this file, the following files must be included in this project:
|
||||
// Example_freqcal.c - includes all eQEP functions
|
||||
// Example_EPwmSetup.c - sets up EPWM1A for use with this example
|
||||
// Example_freqcalh - includes initialization values for frequency structure.
|
||||
//
|
||||
// * Maximum frequency is configured to 10Khz (BaseFreq)
|
||||
// * Minimum frequency is assumed at 50Hz for capture pre-scalar selection
|
||||
//
|
||||
// SPEED_FR: High Frequency Measurement is obtained by counting the external input pulses
|
||||
// for 10ms (unit timer set to 100Hz).
|
||||
//
|
||||
// SPEED_FR = { (Count Delta)/10ms }
|
||||
//
|
||||
//
|
||||
// SPEED_PR: Low Frequency Measurement is obtained by measuring time period of input edges.
|
||||
// Time measurement is averaged over 64edges for better results and
|
||||
// capture unit performs the time measurement using pre-scaled SYSCLK
|
||||
//
|
||||
// Note that pre-scaler for capture unit clock is selected such that
|
||||
// capture timer does not overflow at the required minimum frequency
|
||||
//
|
||||
// This example runs forever until the user stops it.
|
||||
//
|
||||
//
|
||||
// Watch Variables: freq.freqhz_fr - Frequency measurement using position counter/unit time out
|
||||
// freq.freqhz_pr - Frequency measurement using capture unit
|
||||
//
|
||||
//###########################################################################
|
||||
// Original Author: SD
|
||||
//
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
#include "Example_freqcal.h" // Example specific include file
|
||||
|
||||
void EPwmSetup(void);
|
||||
interrupt void prdTick(void);
|
||||
|
||||
FREQCAL freq=FREQCAL_DEFAULTS;
|
||||
|
||||
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
|
||||
|
||||
// Only init the GPIO for EQep1 and EPwm1 in this case
|
||||
// This function is found in DSP2833x_EQep.c
|
||||
InitEQep1Gpio();
|
||||
InitEPwm1Gpio();
|
||||
|
||||
// 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= &prdTick;
|
||||
EDIS; // This is needed to disable write to EALLOW protected registers
|
||||
|
||||
// Step 4. Initialize all the Device Peripherals:
|
||||
// Example specific ePWM setup. This function is found
|
||||
// in Example_EPwmSetup.c
|
||||
EPwmSetup();
|
||||
|
||||
// Step 5. User specific code, enable interrupts:
|
||||
// Enable CPU INT1 which is connected to CPU-Timer 0:
|
||||
IER |= M_INT3;
|
||||
|
||||
// Enable TINT0 in the PIE: Group 3 interrupt 1
|
||||
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
|
||||
|
||||
// Enable global Interrupts and higher priority real-time debug events:
|
||||
EINT; // Enable Global interrupt INTM
|
||||
ERTM; // Enable Global realtime interrupt DBGM
|
||||
|
||||
freq.init(&freq); // Initializes eQEP for frequency calculation in
|
||||
// FREQCAL_Init(void)function in Example_EPwmSetup.c
|
||||
for(;;)
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
interrupt void prdTick(void) // Interrupts once per ePWM period
|
||||
{
|
||||
freq.calc(&freq); // Checks for event and calculates frequency in FREQCAL_Calc(FREQCAL *p)
|
||||
// function in Example_EPwmSetup.c
|
||||
// Acknowledge this interrupt to receive more interrupts from group 1
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
|
||||
EPwm1Regs.ETCLR.bit.INT=1;
|
||||
}
|
||||
|
||||
37
Source/External/v120/DSP2833x_examples/eqep_freqcal/Example_2833xEqep_freqcal.gel
vendored
Normal file
37
Source/External/v120/DSP2833x_examples/eqep_freqcal/Example_2833xEqep_freqcal.gel
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
// TI File $Revision: /main/6 $
|
||||
// Checkin $Date: August 9, 2007 17:14:43 $
|
||||
//###########################################################################
|
||||
//
|
||||
// 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
|
||||
// projectn.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
menuitem "DSP2833x eQEP Frequency Calc"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xEqep_freqcal.pjt");
|
||||
GEL_ProjectBuild("Example_2833xEqep_freqcal.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xEqep_freqcal.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("freq.freqhz_fr",,"");
|
||||
GEL_WatchAdd("freq.freqhz_pr",,"");
|
||||
GEL_WatchAdd("EQep1Regs,x");
|
||||
}
|
||||
49
Source/External/v120/DSP2833x_examples/eqep_freqcal/Example_2833xEqep_freqcal.pjt
vendored
Normal file
49
Source/External/v120/DSP2833x_examples/eqep_freqcal/Example_2833xEqep_freqcal.pjt
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
; 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\eqep_freqcal\"
|
||||
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_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_EPwm.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_EQep.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="..\..\DSP2833x_common\lib\IQmath_fpu32.lib"
|
||||
Source="Example_2833xEqep_freqcal.c"
|
||||
Source="Example_EPwmSetup.c"
|
||||
Source="Example_freqcal.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\eqep_freqcal\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\eqep_freqcal\Debug" -i".." -i"..\..\DSP2833x_headers\include" -i"..\..\DSP2833x_common\include" -i"..\..\DSP2833x_common\lib" -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\eqep_freqcal\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_2833xEqep_freqcal.map" -o".\Debug\Example_2833xEqep_freqcal.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xEqep_freqcal.out" -x
|
||||
76
Source/External/v120/DSP2833x_examples/eqep_freqcal/Example_EPwmSetup.c
vendored
Normal file
76
Source/External/v120/DSP2833x_examples/eqep_freqcal/Example_EPwmSetup.c
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
// TI File $Revision: /main/10 $
|
||||
// Checkin $Date: April 21, 2008 15:42:03 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_EpwmSetup.c
|
||||
//
|
||||
// TITLE: Frequency measurement using EQEP peripheral
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// This file contains source for the ePWM initialization for the
|
||||
// freq calculation module
|
||||
//
|
||||
//###########################################################################
|
||||
// Original Author: SD
|
||||
//
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
#include "Example_freqcal.h" // Example specific include file
|
||||
|
||||
#if (CPU_FRQ_150MHZ)
|
||||
#define CPU_CLK 150e6
|
||||
#endif
|
||||
#if (CPU_FRQ_100MHZ)
|
||||
#define CPU_CLK 100e6
|
||||
#endif
|
||||
#define PWM_CLK 5e3 // If diff freq. desired, change freq here.
|
||||
#define SP CPU_CLK/(2*PWM_CLK)
|
||||
#define TBCTLVAL 0x200E // Up-down cnt, timebase = SYSCLKOUT
|
||||
|
||||
|
||||
void EPwmSetup()
|
||||
{
|
||||
InitEPwm1Gpio();
|
||||
EPwm1Regs.TBSTS.all=0;
|
||||
EPwm1Regs.TBPHS.half.TBPHS=0;
|
||||
EPwm1Regs.TBCTR=0;
|
||||
|
||||
EPwm1Regs.CMPCTL.all=0x50; // Immediate mode for CMPA and CMPB
|
||||
EPwm1Regs.CMPA.half.CMPA =SP/2;
|
||||
EPwm1Regs.CMPB=0;
|
||||
|
||||
EPwm1Regs.AQCTLA.all=0x60; // EPWMxA = 1 when CTR=CMPA and counter inc
|
||||
// EPWMxA = 0 when CTR=CMPA and counter dec
|
||||
EPwm1Regs.AQCTLB.all=0;
|
||||
EPwm1Regs.AQSFRC.all=0;
|
||||
EPwm1Regs.AQCSFRC.all=0;
|
||||
|
||||
EPwm1Regs.DBCTL.all=0xb; // EPWMxB is inverted
|
||||
EPwm1Regs.DBRED=0;
|
||||
EPwm1Regs.DBFED=0;
|
||||
|
||||
EPwm1Regs.TZSEL.all=0;
|
||||
EPwm1Regs.TZCTL.all=0;
|
||||
EPwm1Regs.TZEINT.all=0;
|
||||
EPwm1Regs.TZFLG.all=0;
|
||||
EPwm1Regs.TZCLR.all=0;
|
||||
EPwm1Regs.TZFRC.all=0;
|
||||
|
||||
EPwm1Regs.ETSEL.all=9; // Interrupt when TBCTR = 0x0000
|
||||
EPwm1Regs.ETPS.all=1; // Interrupt on first event
|
||||
EPwm1Regs.ETFLG.all=0;
|
||||
EPwm1Regs.ETCLR.all=0;
|
||||
EPwm1Regs.ETFRC.all=0;
|
||||
|
||||
EPwm1Regs.PCCTL.all=0;
|
||||
|
||||
EPwm1Regs.TBCTL.all=0x0010+TBCTLVAL; // Enable Timer
|
||||
EPwm1Regs.TBPRD=SP;
|
||||
|
||||
}
|
||||
|
||||
|
||||
186
Source/External/v120/DSP2833x_examples/eqep_freqcal/Example_freqcal.c
vendored
Normal file
186
Source/External/v120/DSP2833x_examples/eqep_freqcal/Example_freqcal.c
vendored
Normal file
@@ -0,0 +1,186 @@
|
||||
// TI File $Revision: /main/10 $
|
||||
// Checkin $Date: April 21, 2008 15:42:07 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_freqcal.c
|
||||
//
|
||||
// TITLE: Frequency measurement using EQEP peripheral
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// This file includes the EQEP initialization and frequency calcuation
|
||||
// functions called by Example_2833xEqep_freqcal.c. The frequency calculation
|
||||
// steps performed by FREQCAL_Calc()at SYSCLKOUT = 150 MHz and 100 MHz are
|
||||
// described below:
|
||||
//
|
||||
// For 150 MHz Operation:
|
||||
// ----------------------
|
||||
//
|
||||
// 1. This program calculates: **freqhz_fr**
|
||||
// freqhz_fr or v = (x2-x1)/T - Equation 1
|
||||
//
|
||||
// If max/base freq = 10kHz: 10kHz = (x2-x1)/(2/100Hz) - Equation 2
|
||||
// max (x2-x1) = 200 counts = freqScaler_fr
|
||||
// Note: T = 2/100Hz. 2 is from (x2-x1)/2 - because QPOSCNT counts 2 edges per cycle
|
||||
// (rising and falling)
|
||||
//
|
||||
// If both sides of Equation 2 are divided by 10 kHz, then:
|
||||
// 1 = (x2-x1)/[10kHz*(2/100Hz)] where [10kHz* (2/100Hz)] = 200
|
||||
// Because (x2-x1) must be <200 (max),
|
||||
// (x2-x1)/200 < 1 for all frequencies less than max
|
||||
// freq_fr = (x2-x1)/200 or (x2-x1)/[10kHz*(2/100Hz)] - Equation 3
|
||||
//
|
||||
// To get back to original velocity equation, Equation 1, multiply Equation 3 by 10 kHz
|
||||
// freqhz_fr (or velocity) = 10kHz*(x2-x1)/[10kHz*(2/100Hz)]
|
||||
// = (x2-x1)/(2/100Hz) - Final equation
|
||||
//
|
||||
// 2. min freq = 1 count/(2/100Hz) = 50 Hz
|
||||
//
|
||||
// 3. **freqhz_pr**
|
||||
// freqhz_pr or v = X/(t2-t1) - Equation 4
|
||||
//
|
||||
// If max/base freq = 10kHz: 10kHz = (4/2)/T = 4/2T
|
||||
// where 4 = QCAPCTL [UPPS] (Unit timeout - once every 4 edges)
|
||||
// 2 = divide by 2 because QPOSCNT counts 2 edges per cycle (rising and falling)
|
||||
// T = time in seconds
|
||||
// = t2-t1/(150MHz/128), t2-t1= # of QCAPCLK cycles, and
|
||||
// 1 QCAPCLK cycle = 1/(150MHz/128)
|
||||
// = QCPRDLAT
|
||||
//
|
||||
// So: 10 kHz = 4(150MHz/128)/2(t2-t1)
|
||||
// t2-t1 = 4(150MHz/128)/(10kHz*2) = (150MHz/128)/(2*10kHz/4) - Equation 5
|
||||
// = 234 QCAPCLK cycles = maximum (t2-t1) = freqScaler_pr
|
||||
//
|
||||
// Divide both sides by (t2-t1), and:
|
||||
// 1 = 234/(t2-t1) = [150MHz/128)/(2*10kHz/4)]/(t2-t1)
|
||||
// Because (t2-t1) must be <234 (max).
|
||||
// 234/(t2-t1) < 1 for all frequencies less than max
|
||||
// freq_pr = 234/(t2-t1) or [150MHz/128)/(2*10kHz/4)]/(t2-t1) - Equation 6
|
||||
// Now within velocity limits, to get back to original velocity equation, Equation 1,
|
||||
// multiply Equation 6 by 10 kHz:
|
||||
// freqhz_fr (or velocity) = 10kHz*[150MHz/128)/(2*10kHz/4)]/(t2-t1)
|
||||
// = (105MHz/128)*4/[2(t2-t1)]
|
||||
// or 4/[2*(t2-t1)(QCPRDLAT)] - Final Equation
|
||||
//
|
||||
//
|
||||
// For 100 MHz Operation:
|
||||
// ----------------------
|
||||
//
|
||||
// The same calculations as above are performed, but with 100 MHz
|
||||
// instead of 150MHz when calculating freqhz_pr, and at UPPS of 8 instead of 4.
|
||||
// The value for freqScaler_pr becomes: (100MHz/128)/(2*10kHz/8) = 313
|
||||
// More detailed calculation results can be found in the Example_freqcal.xls
|
||||
// spreadsheet included in the example folder.
|
||||
//
|
||||
//
|
||||
// This file contains source for the freq calculation module
|
||||
//
|
||||
//###########################################################################
|
||||
// Original Author: SD
|
||||
//
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
#include "Example_freqcal.h" // Example specific include file
|
||||
|
||||
void FREQCAL_Init(void)
|
||||
{
|
||||
#if (CPU_FRQ_150MHZ)
|
||||
EQep1Regs.QUPRD=1500000; // Unit Timer for 100Hz at 150MHz SYSCLKOUT
|
||||
#endif
|
||||
#if (CPU_FRQ_100MHZ)
|
||||
EQep1Regs.QUPRD=1000000; // Unit Timer for 100Hz at 100MHz SYSCLKOUT
|
||||
#endif
|
||||
|
||||
EQep1Regs.QDECCTL.bit.QSRC=2; // Up count mode (freq. measurement)
|
||||
EQep1Regs.QDECCTL.bit.XCR=0; // 2x resolution (cnt falling and rising edges)
|
||||
|
||||
EQep1Regs.QEPCTL.bit.FREE_SOFT=2;
|
||||
EQep1Regs.QEPCTL.bit.PCRM=00; // QPOSCNT reset on index evnt
|
||||
EQep1Regs.QEPCTL.bit.UTE=1; // Unit Timer Enable
|
||||
EQep1Regs.QEPCTL.bit.QCLM=1; // Latch on unit time out
|
||||
EQep1Regs.QPOSMAX=0xffffffff;
|
||||
EQep1Regs.QEPCTL.bit.QPEN=1; // QEP enable
|
||||
|
||||
#if (CPU_FRQ_150MHZ)
|
||||
EQep1Regs.QCAPCTL.bit.UPPS=2; // 1/4 for unit position at 150MHz SYSCLKOUT
|
||||
#endif
|
||||
#if (CPU_FRQ_100MHZ)
|
||||
EQep1Regs.QCAPCTL.bit.UPPS=3; // 1/8 for unit position at 100MHz SYSCLKOUT
|
||||
#endif
|
||||
|
||||
EQep1Regs.QCAPCTL.bit.CCPS=7; // 1/128 for CAP clock
|
||||
EQep1Regs.QCAPCTL.bit.CEN=1; // QEP Capture Enable
|
||||
|
||||
}
|
||||
|
||||
void FREQCAL_Calc(FREQCAL *p)
|
||||
{
|
||||
unsigned long tmp;
|
||||
_iq newp,oldp;
|
||||
|
||||
|
||||
//**** Freq Calcultation using QEP position counter ****//
|
||||
// Check unit Time out-event for speed calculation:
|
||||
// Unit Timer is configured for 100Hz in INIT function
|
||||
|
||||
// For a more detailed explanation of the calculation, read
|
||||
// the description at the top of this file
|
||||
|
||||
if(EQep1Regs.QFLG.bit.UTO==1) // Unit Timeout event
|
||||
{
|
||||
/** Differentiator **/
|
||||
newp=EQep1Regs.QPOSLAT; // Latched POSCNT value
|
||||
oldp=p->oldpos;
|
||||
|
||||
if (newp>oldp)
|
||||
tmp = newp - oldp; // x2-x1 in v=(x2-x1)/T equation
|
||||
else
|
||||
tmp = (0xFFFFFFFF-oldp)+newp;
|
||||
|
||||
p->freq_fr = _IQdiv(tmp,p->freqScaler_fr); // p->freq_fr = (x2-x1)/(T*10KHz)
|
||||
tmp=p->freq_fr;
|
||||
|
||||
if (tmp>=_IQ(1)) // is freq greater than max freq (10KHz for this example)?
|
||||
p->freq_fr = _IQ(1);
|
||||
else
|
||||
p->freq_fr = tmp;
|
||||
|
||||
p->freqhz_fr = _IQmpy(p->BaseFreq,p->freq_fr); // Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q
|
||||
// p->freqhz_fr = (p->freq_fr)*10kHz = (x2-x1)/T
|
||||
|
||||
// Update position counter
|
||||
p->oldpos = newp;
|
||||
//=======================================
|
||||
|
||||
EQep1Regs.QCLR.bit.UTO=1; // Clear interrupt flag
|
||||
}
|
||||
|
||||
//**** Freq Calcultation using QEP capture counter ****//
|
||||
if(EQep1Regs.QEPSTS.bit.UPEVNT==1) // Unit Position Event
|
||||
{
|
||||
if(EQep1Regs.QEPSTS.bit.COEF==0) // No Capture overflow
|
||||
tmp=(unsigned long)EQep1Regs.QCPRDLAT;
|
||||
else // Capture overflow, saturate the result
|
||||
tmp=0xFFFF;
|
||||
|
||||
p->freq_pr = _IQdiv(p->freqScaler_pr,tmp); // p->freq_pr = X/[(t2-t1)*10KHz]
|
||||
tmp=p->freq_pr;
|
||||
|
||||
if (tmp>_IQ(1))
|
||||
p->freq_pr = _IQ(1);
|
||||
else
|
||||
p->freq_pr = tmp;
|
||||
|
||||
p->freqhz_pr = _IQmpy(p->BaseFreq,p->freq_pr); // Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q
|
||||
// p->freqhz_pr =( p->freq_pr)*10kHz = X/(t2-t1)
|
||||
EQep1Regs.QEPSTS.all=0x88; // Clear Unit position event flag
|
||||
// Clear overflow error flag
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
112
Source/External/v120/DSP2833x_examples/eqep_freqcal/Example_freqcal.h
vendored
Normal file
112
Source/External/v120/DSP2833x_examples/eqep_freqcal/Example_freqcal.h
vendored
Normal file
@@ -0,0 +1,112 @@
|
||||
// TI File $Revision: /main/6 $
|
||||
// Checkin $Date: August 9, 2007 17:14:59 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_freqcal.h
|
||||
//
|
||||
// TITLE: Frequency measurement using EQEP peripheral
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// Header file containing data type and object definitions and
|
||||
// initializers.
|
||||
//
|
||||
//###########################################################################
|
||||
// Original Author: SD
|
||||
//
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#ifndef __FREQCAL__
|
||||
#define __FREQCAL__
|
||||
|
||||
#include "IQmathLib.h" // Include header for IQmath library
|
||||
/*-----------------------------------------------------------------------------
|
||||
Define the structure of the FREQCAL Object
|
||||
-----------------------------------------------------------------------------*/
|
||||
typedef struct {
|
||||
Uint32 freqScaler_pr; // Parameter : Scaler converting 1/N cycles to a GLOBAL_Q freq (Q0) - independently with global Q
|
||||
Uint32 freqScaler_fr; // Parameter : Scaler converting 1/N cycles to a GLOBAL_Q freq (Q0) - independently with global Q
|
||||
Uint32 BaseFreq; // Parameter : Maximum Freq
|
||||
_iq freq_pr; // Output : Freq in per-unit using capture unit
|
||||
int32 freqhz_pr; // Output: Freq in Hz, measured using Capture unit
|
||||
Uint32 oldpos;
|
||||
_iq freq_fr; // Output : Freq in per-unit using position counter
|
||||
int32 freqhz_fr; // Output: Freq in Hz, measured using Capture unit
|
||||
void (*init)(); // Pointer to the init funcion
|
||||
void (*calc)(); // Pointer to the calc funtion
|
||||
} FREQCAL;
|
||||
|
||||
/*-----------------------------------------------------------------------------
|
||||
Define a QEP_handle
|
||||
-----------------------------------------------------------------------------*/
|
||||
typedef FREQCAL *FREQCAL_handle;
|
||||
|
||||
/*-----------------------------------------------------------------------------
|
||||
Default initializer for the FREQCAL Object.
|
||||
-----------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
#if (CPU_FRQ_150MHZ)
|
||||
#define FREQCAL_DEFAULTS {\
|
||||
234,200,10000,0,0,\
|
||||
0,0,0,\
|
||||
(void (*)(long))FREQCAL_Init,\
|
||||
(void (*)(long))FREQCAL_Calc }
|
||||
#endif
|
||||
#if (CPU_FRQ_100MHZ)
|
||||
#define FREQCAL_DEFAULTS {\
|
||||
313,200,10000,0,0,\
|
||||
0,0,0,\
|
||||
(void (*)(long))FREQCAL_Init,\
|
||||
(void (*)(long))FREQCAL_Calc }
|
||||
#endif
|
||||
|
||||
/*-----------------------------------------------------------------------------
|
||||
Prototypes for the functions in Example_freqcal.c
|
||||
-----------------------------------------------------------------------------*/
|
||||
void FREQCAL_Init(void);
|
||||
void FREQCAL_Calc(FREQCAL_handle);
|
||||
|
||||
#endif /* __FREQCAL__ */
|
||||
|
||||
/* Notes:
|
||||
|
||||
For 150 MHz Operation:
|
||||
----------------------
|
||||
1. freqScaler_fr
|
||||
v = (x2-x1)/T - Equation 1
|
||||
|
||||
If max/base freq = 10kHz: 10kHz = (x2-x1)/(2/100Hz) - Equation 2
|
||||
max (x2-x1) = 200 counts = freqScaler_fr
|
||||
Note: T = 2/100Hz. 2 is from (x2-x1)/2 - because QPOSCNT counts 2 edges per cycle
|
||||
(rising and falling)
|
||||
freqhz_fr = 200 default
|
||||
|
||||
2. min freq = 1 count/(2/100Hz) = 50 Hz
|
||||
|
||||
3. freqScaler_pr
|
||||
v = X/(t2-t1) - Equation 4
|
||||
|
||||
If max/base freq = 10kHz: 10kHz = 8/(2T)
|
||||
where 4 = QCAPCTL [UPPS] (Unit timeout - once every 4 edges)
|
||||
T = time in seconds = t2-t1/(150MHz/128), t2-t1= # of QCAPCLK cycles, and
|
||||
1 QCAPCLK cycle = 1/(150MHz/128)
|
||||
= QCPRDLAT
|
||||
So: 10 kHz = 4(150MHz/128)/2(t2-t1)
|
||||
t2-t1 = 4(150MHz/128)/(10kHz*2) = (150MHz/128)/(2*10kHz/4) - Equation 5
|
||||
= 234 seconds = maximum (t2-t1) = freqScaler_pr
|
||||
freqhz_pr = 234 default
|
||||
|
||||
|
||||
For 100 MHz Operation:
|
||||
----------------------
|
||||
|
||||
The same calculations as above are performed, but with 100 MHz
|
||||
instead of 150MHz when calculation freqhr_pr, and at UPPS of 8 instead of 4.
|
||||
The value for freqScaler_pr becomes: (100MHz/128)/(2*10kHz/8) = 313
|
||||
More detailed calculation results can be found in the Example_freqcal.xls
|
||||
spreadsheet included in the example folder.
|
||||
|
||||
*/
|
||||
BIN
Source/External/v120/DSP2833x_examples/eqep_freqcal/Example_freqcal.xls
vendored
Normal file
BIN
Source/External/v120/DSP2833x_examples/eqep_freqcal/Example_freqcal.xls
vendored
Normal file
Binary file not shown.
201
Source/External/v120/DSP2833x_examples/eqep_pos_speed/Example_2833xEqep_pos_speed.c
vendored
Normal file
201
Source/External/v120/DSP2833x_examples/eqep_pos_speed/Example_2833xEqep_pos_speed.c
vendored
Normal file
@@ -0,0 +1,201 @@
|
||||
// TI File $Revision: /main/11 $
|
||||
// Checkin $Date: July 10, 2008 11:06:28 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xEqep_pos_speed_.c
|
||||
//
|
||||
// TITLE: EQEP Speed and Position measurement
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// Test requires the following hardware connections from EPWM1 and
|
||||
// GPIO pins (simulating QEP sensor) to QEP peripheral
|
||||
//
|
||||
// GPIO20/EQEP1A <- GPIO0/EPWM1A (simulates EQEP Phase A signal)
|
||||
// GPIO21/EQEP1B <- GPIO1/EPWM1B (simulates EQEP Phase B signal)
|
||||
// GPIO23/EQEP1I <- GPIO4 (simulates EQEP Index Signal)
|
||||
//
|
||||
//
|
||||
// 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 will provide position measurement, speed measurement using the capture unit, and
|
||||
// speed measurement using unit time out. This example uses the IQMath library. It is used
|
||||
// merely to simplify high-precision calculations.
|
||||
//
|
||||
// See DESCRIPTION in Example_posspeed.c for more details on the calculations
|
||||
// performed in this example.
|
||||
//
|
||||
// In addition to this file, the following files must be included in this project:
|
||||
// Example_posspeed.c - includes all eQEP functions
|
||||
// Example_EPwmSetup.c - sets up EPWM1A and EPWM1B as simulated QA and QB encoder signals
|
||||
// Example_posspeed.h - includes initialization values for pos and speed structure
|
||||
//
|
||||
// Notes:
|
||||
// * Maximum speed is configured to 6000rpm(BaseRpm)
|
||||
// * Minimum speed is assumed at 10rpm for capture pre-scalar selection
|
||||
// * Pole pair is configured to 2 (pole_pairs)
|
||||
// * QEP Encoder resolution is configured to 4000counts/revolution (mech_scaler)
|
||||
// which means: 4000/4 = 1000 line/revolution quadrature encoder (simulated by EPWM1)
|
||||
// * EPWM1 (simulating QEP encoder signals) is configured for 5kHz frequency or 300 rpm
|
||||
// (=4*5000 cnts/sec * 60 sec/min)/4000 cnts/rev)
|
||||
// * 300 rpm EPWM1 speed will be measured by EQEP.
|
||||
//
|
||||
// SPEEDRPM_FR: High Speed Measurement is obtained by counting the QEP input pulses
|
||||
// for 10ms (unit timer set to 100Hz).
|
||||
//
|
||||
// SPEEDRPM_FR = { (Position Delta)/10ms } * 60 rpm
|
||||
//
|
||||
//
|
||||
// SPEEDRPM_PR: Low Speed Measurement is obtained by measuring time period of QEP edges.
|
||||
// Time measurement is averaged over 64edges for better results and
|
||||
// capture unit performs the time measurement using pre-scaled SYSCLK
|
||||
//
|
||||
// Note that pre-scaler for capture unit clock is selected such that
|
||||
// capture timer does not overflow at the required minimum RPM speed
|
||||
//
|
||||
// Watch Variables: qep_posspeed.SpeedRpm_fr - Speed meas. in rpm using QEP position counter
|
||||
// qep_posspeed.SpeedRpm_pr - Speed meas. in rpm using capture unit
|
||||
// qep_posspeed.theta_mech - Motor mechanical angle (Q15)
|
||||
// qep_posspeed.theta_elec - Motor electrical angle (Q15)
|
||||
//
|
||||
//###########################################################################
|
||||
// Original Author S.D.
|
||||
//
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
#include "Example_posspeed.h" // Example specific Include file
|
||||
|
||||
void initEpwm();
|
||||
interrupt void prdTick(void);
|
||||
|
||||
POSSPEED qep_posspeed=POSSPEED_DEFAULTS;
|
||||
Uint16 Interrupt_Count = 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 only init GPIO for eQEP1 and ePWM1
|
||||
// This function is found in DSP2833x_EQep.c
|
||||
InitEQep1Gpio();
|
||||
InitEPwm1Gpio();
|
||||
EALLOW;
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO4 = 1; // GPIO4 as output simulates Index signal
|
||||
GpioDataRegs.GPACLEAR.bit.GPIO4 = 1; // Normally low
|
||||
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();
|
||||
|
||||
// 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= &prdTick;
|
||||
EDIS; // This is needed to disable write to EALLOW protected registers
|
||||
|
||||
// Step 4. Initialize all the Device Peripherals:
|
||||
initEpwm(); // This function exists in Example_EPwmSetup.c
|
||||
|
||||
// Step 5. User specific code, enable interrupts:
|
||||
// Enable CPU INT1 which is connected to CPU-Timer 0:
|
||||
IER |= M_INT3;
|
||||
|
||||
// Enable TINT0 in the PIE: Group 3 interrupt 1
|
||||
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
|
||||
|
||||
// Enable global Interrupts and higher priority real-time debug events:
|
||||
EINT; // Enable Global interrupt INTM
|
||||
ERTM; // Enable Global realtime interrupt DBGM
|
||||
|
||||
qep_posspeed.init(&qep_posspeed);
|
||||
|
||||
for(;;)
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
interrupt void prdTick(void) // EPWM1 Interrupts once every 4 QCLK counts (one period)
|
||||
{ Uint16 i;
|
||||
// Position and Speed measurement
|
||||
qep_posspeed.calc(&qep_posspeed);
|
||||
|
||||
// Control loop code for position control & Speed contol
|
||||
Interrupt_Count++;
|
||||
if (Interrupt_Count==1000) // Every 1000 interrupts(4000 QCLK counts or 1 rev.)
|
||||
{
|
||||
EALLOW;
|
||||
GpioDataRegs.GPASET.bit.GPIO4 = 1; // Pulse Index signal (1 pulse/rev.)
|
||||
for (i=0; i<700; i++){
|
||||
}
|
||||
GpioDataRegs.GPACLEAR.bit.GPIO4 = 1;
|
||||
Interrupt_Count = 0; // Reset count
|
||||
EDIS;
|
||||
}
|
||||
|
||||
// Acknowledge this interrupt to receive more interrupts from group 1
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
|
||||
EPwm1Regs.ETCLR.bit.INT=1;
|
||||
}
|
||||
|
||||
39
Source/External/v120/DSP2833x_examples/eqep_pos_speed/Example_2833xEqep_pos_speed.gel
vendored
Normal file
39
Source/External/v120/DSP2833x_examples/eqep_pos_speed/Example_2833xEqep_pos_speed.gel
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
// TI File $Revision: /main/6 $
|
||||
// Checkin $Date: August 9, 2007 17:15:15 $
|
||||
//###########################################################################
|
||||
//
|
||||
// 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 eQEP Posspeed"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xEqep_pos_speed.pjt");
|
||||
GEL_ProjectBuild("Example_2833xEqep_pos_speed.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xEqep_pos_speed.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("qep_posspeed.SpeedRpm_fr",,"");
|
||||
GEL_WatchAdd("qep_posspeed.SpeedRpm_pr",,"");
|
||||
GEL_WatchAdd("qep_posspeed.theta_mech",,"");
|
||||
GEL_WatchAdd("qep_posspeed.theta_elec",,"");
|
||||
GEL_WatchAdd("EQep1Regs,x");
|
||||
}
|
||||
56
Source/External/v120/DSP2833x_examples/eqep_pos_speed/Example_2833xEqep_pos_speed.pjt
vendored
Normal file
56
Source/External/v120/DSP2833x_examples/eqep_pos_speed/Example_2833xEqep_pos_speed.pjt
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
; 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\eqep_pos_speed\"
|
||||
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_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_EPwm.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_EQep.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="..\..\DSP2833x_common\lib\IQmath_fpu32.lib"
|
||||
Source="Example_2833xEqep_pos_speed.c"
|
||||
Source="Example_EPwmSetup.c"
|
||||
Source="Example_posspeed.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\eqep_pos_speed\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\eqep_pos_speed\Debug" -i".." -i"..\..\DSP2833x_headers\include" -i"..\..\DSP2833x_common\include" -i"..\..\DSP2833x_common\lib" -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\eqep_pos_speed\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_2833xEqep_pos_speed.map" -o".\Debug\Example_2833xEqep_pos_speed.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xEqep_pos_speed.out" -x
|
||||
|
||||
["..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd" Settings: "Debug"]
|
||||
LinkOrder=1
|
||||
|
||||
["..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd" Settings: "Release"]
|
||||
|
||||
|
||||
69
Source/External/v120/DSP2833x_examples/eqep_pos_speed/Example_EPwmSetup.c
vendored
Normal file
69
Source/External/v120/DSP2833x_examples/eqep_pos_speed/Example_EPwmSetup.c
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
// TI File $Revision: /main/9 $
|
||||
// Checkin $Date: April 21, 2008 15:42:18 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_EpwmSetup.c
|
||||
//
|
||||
// TITLE: Pos speed measurement using EQEP peripheral
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// This file contains source for the ePWM initialization for the
|
||||
// pos/speed module
|
||||
//
|
||||
//###########################################################################
|
||||
// Original Author: SD
|
||||
//
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
#include "Example_posspeed.h" // Example specific Include file
|
||||
|
||||
#if (CPU_FRQ_150MHZ)
|
||||
#define CPU_CLK 150e6
|
||||
#endif
|
||||
#if (CPU_FRQ_100MHZ)
|
||||
#define CPU_CLK 100e6
|
||||
#endif
|
||||
|
||||
#define PWM_CLK 5e3 // 5kHz (300rpm) EPWM1 frequency. Freq. can be changed here
|
||||
#define SP CPU_CLK/(2*PWM_CLK)
|
||||
#define TBCTLVAL 0x200E // up-down count, timebase=SYSCLKOUT
|
||||
|
||||
|
||||
void initEpwm()
|
||||
{
|
||||
EPwm1Regs.TBSTS.all=0;
|
||||
EPwm1Regs.TBPHS.half.TBPHS =0;
|
||||
EPwm1Regs.TBCTR=0;
|
||||
|
||||
EPwm1Regs.CMPCTL.all=0x50; // immediate mode for CMPA and CMPB
|
||||
EPwm1Regs.CMPA.half.CMPA=SP/2;
|
||||
EPwm1Regs.CMPB=0;
|
||||
|
||||
EPwm1Regs.AQCTLA.all=0x60; // CTR=CMPA when inc->EPWM1A=1, when dec->EPWM1A=0
|
||||
EPwm1Regs.AQCTLB.all=0x09; // CTR=PRD ->EPWM1B=1, CTR=0 ->EPWM1B=0
|
||||
EPwm1Regs.AQSFRC.all=0;
|
||||
EPwm1Regs.AQCSFRC.all=0;
|
||||
|
||||
EPwm1Regs.TZSEL.all=0;
|
||||
EPwm1Regs.TZCTL.all=0;
|
||||
EPwm1Regs.TZEINT.all=0;
|
||||
EPwm1Regs.TZFLG.all=0;
|
||||
EPwm1Regs.TZCLR.all=0;
|
||||
EPwm1Regs.TZFRC.all=0;
|
||||
|
||||
EPwm1Regs.ETSEL.all=0x0A; // Interrupt on PRD
|
||||
EPwm1Regs.ETPS.all=1;
|
||||
EPwm1Regs.ETFLG.all=0;
|
||||
EPwm1Regs.ETCLR.all=0;
|
||||
EPwm1Regs.ETFRC.all=0;
|
||||
|
||||
EPwm1Regs.PCCTL.all=0;
|
||||
|
||||
EPwm1Regs.TBCTL.all=0x0010+TBCTLVAL; // Enable Timer
|
||||
EPwm1Regs.TBPRD=SP;
|
||||
}
|
||||
|
||||
245
Source/External/v120/DSP2833x_examples/eqep_pos_speed/Example_posspeed.c
vendored
Normal file
245
Source/External/v120/DSP2833x_examples/eqep_pos_speed/Example_posspeed.c
vendored
Normal file
@@ -0,0 +1,245 @@
|
||||
// TI File $Revision: /main/9 $
|
||||
// Checkin $Date: April 21, 2008 15:42:23 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_posspeed.c
|
||||
//
|
||||
// TITLE: Pos/speed measurement using EQEP peripheral
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// This file includes the EQEP initialization and position and speed calcuation
|
||||
// functions called by Example_2833xEqep_posspeed.c. The position and
|
||||
// speed calculation steps performed by POSSPEED_Calc() at SYSCLKOUT = 150 MHz
|
||||
// and 100 MHz are described in detail below:
|
||||
//
|
||||
// For 150 MHz Operation:
|
||||
// ----------------------
|
||||
//
|
||||
// 1. This program calculates: **theta_mech**
|
||||
//
|
||||
// theta_mech = QPOSCNT/mech_Scaler = QPOSCNT/4000, where 4000 is the number of
|
||||
// counts in 1 revolution.(4000/4 = 1000 line/rev. quadrature encoder)
|
||||
//
|
||||
// 2. This program calculates: **theta_elec**
|
||||
//
|
||||
// theta_elec = (# pole pairs) * theta_mech = 2*QPOSCNT/4000 for this example
|
||||
//
|
||||
// 3. This program calculates: **SpeedRpm_fr**
|
||||
//
|
||||
// SpeedRpm_fr = [(x2-x1)/4000]/T - Equation 1
|
||||
// Note (x2-x1) = difference in number of QPOSCNT counts. Dividing (x2-x1) by
|
||||
// 4000 gives position relative to Index in one revolution.
|
||||
// If base RPM = 6000 rpm: 6000 rpm = [(x2-x1)/4000]/10ms - Equation 2
|
||||
// = [(x2-x1)/4000]/(.01s*1 min/60 sec)
|
||||
// = [(x2-x1)/4000]/(1/6000) min
|
||||
// max (x2-x1) = 4000 counts, or 1 revolution in 10 ms
|
||||
//
|
||||
//
|
||||
// If both sides of Equation 2 are divided by 6000 rpm, then:
|
||||
// 1 = [(x2-x1)/4000] rev./[(1/6000) min * 6000rpm]
|
||||
// Because (x2-x1) must be <4000 (max) for QPOSCNT increment,
|
||||
// (x2-x1)/4000 < 1 for CW rotation
|
||||
// And because (x2-x1) must be >-4000 for QPOSCNT decrement,
|
||||
// (x2-x1)/4000>-1 for CCW rotation
|
||||
// speed_fr = [(x2-x1)/4000]/[(1/6000) min * 6000rpm]
|
||||
// = (x2-x1)/4000 - Equation 3
|
||||
//
|
||||
// To convert speed_fr to RPM, multiply Equation 3 by 6000 rpm
|
||||
// SpeedRpm_fr = 6000rpm *(x2-x1)/4000 - Final Equation
|
||||
//
|
||||
//
|
||||
// 2. **min rpm ** = selected at 10 rpm based on CCPS prescaler options available (128 is greatest)
|
||||
//
|
||||
// 3. **SpeedRpm_pr**
|
||||
// SpeedRpm_pr = X/(t2-t1) - Equation 4
|
||||
// where X = QCAPCTL [UPPS]/4000 rev. (position relative to Index in 1 revolution)
|
||||
// If max/base speed = 6000 rpm: 6000 = (32/4000)/[(t2-t1)/(150MHz/128)]
|
||||
// where 32 = QCAPCTL [UPPS] (Unit timeout - once every 32 edges)
|
||||
// 32/4000 = position in 1 revolution (position as a fraction of 1 revolution)
|
||||
// t2-t1/(150MHz/128), t2-t1= # of QCAPCLK cycles, and
|
||||
// 1 QCAPCLK cycle = 1/(150MHz/128)
|
||||
// = QCPRDLAT
|
||||
//
|
||||
// So: 6000 rpm = [32(150MHz/128)*60s/min]/[4000(t2-t1)]
|
||||
// t2-t1 = [32(150MHz/128)*60 s/min]/(4000*6000rpm) - Equation 5
|
||||
// = 94 CAPCLK cycles = maximum (t2-t1) = SpeedScaler
|
||||
//
|
||||
// Divide both sides by (t2-t1), and:
|
||||
// 1 = 94/(t2-t1) = [32(150MHz/128)*60 s/min]/(4000*6000rpm)]/(t2-t1)
|
||||
// Because (t2-t1) must be < 94 for QPOSCNT increment:
|
||||
// 94/(t2-t1) < 1 for CW rotation
|
||||
// And because (t2-t1) must be >-94 for QPOSCNT decrement:
|
||||
// 94/(t2-t1)> -1 for CCW rotation
|
||||
//
|
||||
// speed_pr = 94/(t2-t1)
|
||||
// or [32(150MHz/128)*60 s/min]/(4000*6000rpm)]/(t2-t1) - Equation 6
|
||||
//
|
||||
// To convert speed_pr to RPM:
|
||||
// Multiply Equation 6 by 6000rpm:
|
||||
// SpeedRpm_fr = 6000rpm * [32(150MHz/128)*60 s/min]/[4000*6000rpm*(t2-t1)]
|
||||
// = [32(150MHz/128)*60 s/min]/[4000*(t2-t1)]
|
||||
// or [(32/4000)rev * 60 s/min]/[(t2-t1)(QCPRDLAT)]- Final Equation
|
||||
//
|
||||
//
|
||||
// For 100 MHz Operation:
|
||||
// ----------------------
|
||||
//
|
||||
// The same calculations as above are performed, but with 100 MHz
|
||||
// instead of 150MHz when calculating SpeedRpm_pr.
|
||||
// The value for freqScaler_pr becomes: [32*(100MHz/128)*60s/min]/(4000*6000rpm) = 63
|
||||
// More detailed calculation results can be found in the Example_freqcal.xls
|
||||
// spreadsheet included in the example folder.
|
||||
//
|
||||
//
|
||||
//
|
||||
// This file contains source for the posspeed module
|
||||
//
|
||||
//###########################################################################
|
||||
// Original Author: SD
|
||||
//
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
#include "Example_posspeed.h" // Example specific Include file
|
||||
|
||||
void POSSPEED_Init(void)
|
||||
{
|
||||
|
||||
#if (CPU_FRQ_150MHZ)
|
||||
EQep1Regs.QUPRD=1500000; // Unit Timer for 100Hz at 150 MHz SYSCLKOUT
|
||||
#endif
|
||||
#if (CPU_FRQ_100MHZ)
|
||||
EQep1Regs.QUPRD=1000000; // Unit Timer for 100Hz at 100 MHz SYSCLKOUT
|
||||
#endif
|
||||
|
||||
EQep1Regs.QDECCTL.bit.QSRC=00; // QEP quadrature count mode
|
||||
|
||||
EQep1Regs.QEPCTL.bit.FREE_SOFT=2;
|
||||
EQep1Regs.QEPCTL.bit.PCRM=00; // PCRM=00 mode - QPOSCNT reset on index event
|
||||
EQep1Regs.QEPCTL.bit.UTE=1; // Unit Timeout Enable
|
||||
EQep1Regs.QEPCTL.bit.QCLM=1; // Latch on unit time out
|
||||
EQep1Regs.QPOSMAX=0xffffffff;
|
||||
EQep1Regs.QEPCTL.bit.QPEN=1; // QEP enable
|
||||
|
||||
EQep1Regs.QCAPCTL.bit.UPPS=5; // 1/32 for unit position
|
||||
EQep1Regs.QCAPCTL.bit.CCPS=7; // 1/128 for CAP clock
|
||||
EQep1Regs.QCAPCTL.bit.CEN=1; // QEP Capture Enable
|
||||
|
||||
|
||||
}
|
||||
|
||||
void POSSPEED_Calc(POSSPEED *p)
|
||||
{
|
||||
long tmp;
|
||||
unsigned int pos16bval,temp1;
|
||||
_iq Tmp1,newp,oldp;
|
||||
|
||||
//**** Position calculation - mechanical and electrical motor angle ****//
|
||||
p->DirectionQep = EQep1Regs.QEPSTS.bit.QDF; // Motor direction: 0=CCW/reverse, 1=CW/forward
|
||||
|
||||
pos16bval=(unsigned int)EQep1Regs.QPOSCNT; // capture position once per QA/QB period
|
||||
p->theta_raw = pos16bval+ p->cal_angle; // raw theta = current pos. + ang. offset from QA
|
||||
|
||||
// The following lines calculate p->theta_mech ~= QPOSCNT/mech_scaler [current cnt/(total cnt in 1 rev.)]
|
||||
// where mech_scaler = 4000 cnts/revolution
|
||||
tmp = (long)((long)p->theta_raw*(long)p->mech_scaler); // Q0*Q26 = Q26
|
||||
tmp &= 0x03FFF000;
|
||||
p->theta_mech = (int)(tmp>>11); // Q26 -> Q15
|
||||
p->theta_mech &= 0x7FFF;
|
||||
|
||||
// The following lines calculate p->elec_mech
|
||||
p->theta_elec = p->pole_pairs*p->theta_mech; // Q0*Q15 = Q15
|
||||
p->theta_elec &= 0x7FFF;
|
||||
|
||||
// Check an index occurrence
|
||||
if (EQep1Regs.QFLG.bit.IEL == 1)
|
||||
{
|
||||
p->index_sync_flag = 0x00F0;
|
||||
EQep1Regs.QCLR.bit.IEL=1; // Clear interrupt flag
|
||||
}
|
||||
|
||||
|
||||
|
||||
//**** High Speed Calcultation using QEP Position counter ****//
|
||||
// Check unit Time out-event for speed calculation:
|
||||
// Unit Timer is configured for 100Hz in INIT function
|
||||
|
||||
if(EQep1Regs.QFLG.bit.UTO==1) // If unit timeout (one 100Hz period)
|
||||
{
|
||||
/** Differentiator **/
|
||||
// The following lines calculate position = (x2-x1)/4000 (position in 1 revolution)
|
||||
pos16bval=(unsigned int)EQep1Regs.QPOSLAT; // Latched POSCNT value
|
||||
tmp = (long)((long)pos16bval*(long)p->mech_scaler); // Q0*Q26 = Q26
|
||||
tmp &= 0x03FFF000;
|
||||
tmp = (int)(tmp>>11); // Q26 -> Q15
|
||||
tmp &= 0x7FFF;
|
||||
newp=_IQ15toIQ(tmp);
|
||||
oldp=p->oldpos;
|
||||
|
||||
if (p->DirectionQep==0) // POSCNT is counting down
|
||||
{
|
||||
if (newp>oldp)
|
||||
Tmp1 = - (_IQ(1) - newp + oldp); // x2-x1 should be negative
|
||||
else
|
||||
Tmp1 = newp -oldp;
|
||||
}
|
||||
else if (p->DirectionQep==1) // POSCNT is counting up
|
||||
{
|
||||
if (newp<oldp)
|
||||
Tmp1 = _IQ(1) + newp - oldp;
|
||||
else
|
||||
Tmp1 = newp - oldp; // x2-x1 should be positive
|
||||
}
|
||||
|
||||
if (Tmp1>_IQ(1))
|
||||
p->Speed_fr = _IQ(1);
|
||||
else if (Tmp1<_IQ(-1))
|
||||
p->Speed_fr = _IQ(-1);
|
||||
else
|
||||
p->Speed_fr = Tmp1;
|
||||
|
||||
// Update the electrical angle
|
||||
p->oldpos = newp;
|
||||
|
||||
// Change motor speed from pu value to rpm value (Q15 -> Q0)
|
||||
// Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q
|
||||
p->SpeedRpm_fr = _IQmpy(p->BaseRpm,p->Speed_fr);
|
||||
//=======================================
|
||||
|
||||
EQep1Regs.QCLR.bit.UTO=1; // Clear interrupt flag
|
||||
}
|
||||
|
||||
//**** Low-speed computation using QEP capture counter ****//
|
||||
if(EQep1Regs.QEPSTS.bit.UPEVNT==1) // Unit position event
|
||||
{
|
||||
if(EQep1Regs.QEPSTS.bit.COEF==0) // No Capture overflow
|
||||
temp1=(unsigned long)EQep1Regs.QCPRDLAT; // temp1 = t2-t1
|
||||
else // Capture overflow, saturate the result
|
||||
temp1=0xFFFF;
|
||||
|
||||
p->Speed_pr = _IQdiv(p->SpeedScaler,temp1); // p->Speed_pr = p->SpeedScaler/temp1
|
||||
Tmp1=p->Speed_pr;
|
||||
|
||||
if (Tmp1>_IQ(1))
|
||||
p->Speed_pr = _IQ(1);
|
||||
else
|
||||
p->Speed_pr = Tmp1;
|
||||
|
||||
// Convert p->Speed_pr to RPM
|
||||
if (p->DirectionQep==0) // Reverse direction = negative
|
||||
p->SpeedRpm_pr = -_IQmpy(p->BaseRpm,p->Speed_pr); // Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q
|
||||
else // Forward direction = positive
|
||||
p->SpeedRpm_pr = _IQmpy(p->BaseRpm,p->Speed_pr); // Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q
|
||||
|
||||
|
||||
EQep1Regs.QEPSTS.all=0x88; // Clear Unit position event flag
|
||||
// Clear overflow error flag
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
85
Source/External/v120/DSP2833x_examples/eqep_pos_speed/Example_posspeed.h
vendored
Normal file
85
Source/External/v120/DSP2833x_examples/eqep_pos_speed/Example_posspeed.h
vendored
Normal file
@@ -0,0 +1,85 @@
|
||||
// TI File $Revision: /main/6 $
|
||||
// Checkin $Date: August 9, 2007 17:15:33 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_posspeed.h
|
||||
//
|
||||
// TITLE: Pos/speed measurement using EQEP peripheral
|
||||
//
|
||||
// DESCRIPTION:
|
||||
//
|
||||
// Header file containing data type and object definitions and
|
||||
// initializers.
|
||||
//
|
||||
//###########################################################################
|
||||
// Original Author: SD
|
||||
//
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#ifndef __POSSPEED__
|
||||
#define __POSSPEED__
|
||||
|
||||
#include "IQmathLib.h" // Include header for IQmath library
|
||||
/*-----------------------------------------------------------------------------
|
||||
Define the structure of the POSSPEED Object
|
||||
-----------------------------------------------------------------------------*/
|
||||
typedef struct {int theta_elec; // Output: Motor Electrical angle (Q15)
|
||||
int theta_mech; // Output: Motor Mechanical Angle (Q15)
|
||||
int DirectionQep; // Output: Motor rotation direction (Q0)
|
||||
int QEP_cnt_idx; // Variable: Encoder counter index (Q0)
|
||||
int theta_raw; // Variable: Raw angle from Timer 2 (Q0)
|
||||
int mech_scaler; // Parameter: 0.9999/total count, total count = 4000 (Q26)
|
||||
int pole_pairs; // Parameter: Number of pole pairs (Q0)
|
||||
int cal_angle; // Parameter: Raw angular offset between encoder and phase a (Q0)
|
||||
int index_sync_flag; // Output: Index sync status (Q0)
|
||||
|
||||
Uint32 SpeedScaler; // Parameter : Scaler converting 1/N cycles to a GLOBAL_Q speed (Q0) - independently with global Q
|
||||
_iq Speed_pr; // Output : speed in per-unit
|
||||
Uint32 BaseRpm; // Parameter : Scaler converting GLOBAL_Q speed to rpm (Q0) speed - independently with global Q
|
||||
int32 SpeedRpm_pr; // Output : speed in r.p.m. (Q0) - independently with global Q
|
||||
|
||||
_iq oldpos; // Input: Electrical angle (pu)
|
||||
_iq Speed_fr; // Output : speed in per-unit
|
||||
int32 SpeedRpm_fr; // Output : Speed in rpm (Q0) - independently with global Q
|
||||
void (*init)(); // Pointer to the init funcion
|
||||
void (*calc)(); // Pointer to the calc funtion
|
||||
} POSSPEED;
|
||||
|
||||
/*-----------------------------------------------------------------------------
|
||||
Define a POSSPEED_handle
|
||||
-----------------------------------------------------------------------------*/
|
||||
typedef POSSPEED *POSSPEED_handle;
|
||||
|
||||
/*-----------------------------------------------------------------------------
|
||||
Default initializer for the POSSPEED Object.
|
||||
-----------------------------------------------------------------------------*/
|
||||
|
||||
#if (CPU_FRQ_150MHZ)
|
||||
#define POSSPEED_DEFAULTS {0x0, 0x0,0x0,0x0,0x0,16776,2,0,0x0,\
|
||||
94,0,6000,0,\
|
||||
0,0,0,\
|
||||
(void (*)(long))POSSPEED_Init,\
|
||||
(void (*)(long))POSSPEED_Calc }
|
||||
#endif
|
||||
#if (CPU_FRQ_100MHZ)
|
||||
#define POSSPEED_DEFAULTS {0x0, 0x0,0x0,0x0,0x0,16776,2,0,0x0,\
|
||||
63,0,6000,0,\
|
||||
0,0,0,\
|
||||
(void (*)(long))POSSPEED_Init,\
|
||||
(void (*)(long))POSSPEED_Calc }
|
||||
#endif
|
||||
|
||||
|
||||
/*-----------------------------------------------------------------------------
|
||||
Prototypes for the functions in posspeed.c
|
||||
-----------------------------------------------------------------------------*/
|
||||
void POSSPEED_Init(void);
|
||||
void POSSPEED_Calc(POSSPEED_handle);
|
||||
|
||||
#endif /* __POSSPEED__ */
|
||||
|
||||
|
||||
|
||||
|
||||
BIN
Source/External/v120/DSP2833x_examples/eqep_pos_speed/Example_posspeed.xls
vendored
Normal file
BIN
Source/External/v120/DSP2833x_examples/eqep_pos_speed/Example_posspeed.xls
vendored
Normal file
Binary file not shown.
260
Source/External/v120/DSP2833x_examples/external_interrupt/Example_2833xExternalInterrupt.c
vendored
Normal file
260
Source/External/v120/DSP2833x_examples/external_interrupt/Example_2833xExternalInterrupt.c
vendored
Normal file
@@ -0,0 +1,260 @@
|
||||
// TI File $Revision: /main/10 $
|
||||
// Checkin $Date: May 5, 2008 15:25:49 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xExternalInterrupt.c
|
||||
//
|
||||
// TITLE: DSP2833x External Interrupt test program.
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
// As supplied, this project is configured for "boot to SARAM" operation.
|
||||
//
|
||||
// Connect GPIO30 to GPIO0. GPIO0 will be assigned to Xint1
|
||||
// Connect GPIO31 to GPIO1. GPIO1 will be assigned to XINT2
|
||||
//
|
||||
// Monitor GPIO34 with an oscilloscope. GPIO34 will be high outside of the
|
||||
// ISRs and low within each ISR.
|
||||
//
|
||||
// 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 GPIO0 as Xint1 and GPIO1 as XINT2. Two other
|
||||
// GPIO signals are used to trigger the interrupt (GPIO30 triggers
|
||||
// Xint1 and GPIO31 triggers XINT2). The user is required to
|
||||
// externally connect these signals for the program to work
|
||||
// properly.
|
||||
//
|
||||
// Xint1 input is synched to SYSCLKOUT
|
||||
// XINT2 has a long qualification - 6 samples at 510*SYSCLKOUT each.
|
||||
//
|
||||
// GPIO34 will go high outside of the interrupts and low within the
|
||||
// interrupts. This signal can be monitored on a scope.
|
||||
//
|
||||
// Each interrupt is fired in sequence - Xint1 first and then XINT2
|
||||
//
|
||||
//
|
||||
// Watch Variables:
|
||||
// Xint1Count for the number of times through Xint1 interrupt
|
||||
// Xint2Count for the number of times through XINT2 interrupt
|
||||
// LoopCount for the number of times through the idle loop
|
||||
//
|
||||
//###########################################################################
|
||||
// $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 xint1_isr(void);
|
||||
interrupt void xint2_isr(void);
|
||||
|
||||
// Global variables for this example
|
||||
volatile Uint32 Xint1Count;
|
||||
volatile Uint32 Xint2Count;
|
||||
Uint32 LoopCount;
|
||||
|
||||
#define DELAY 35.700L
|
||||
|
||||
void main(void)
|
||||
{
|
||||
Uint32 TempX1Count;
|
||||
Uint32 TempX2Count;
|
||||
|
||||
// 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 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.XINT1 = &xint1_isr;
|
||||
PieVectTable.XINT2 = &xint2_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
|
||||
|
||||
// Step 5. User specific code, enable interrupts:
|
||||
|
||||
// Clear the counters
|
||||
Xint1Count = 0; // Count Xint1 interrupts
|
||||
Xint2Count = 0; // Count XINT2 interrupts
|
||||
LoopCount = 0; // Count times through idle loop
|
||||
|
||||
// Enable Xint1 and XINT2 in the PIE: Group 1 interrupt 4 & 5
|
||||
// Enable int1 which is connected to WAKEINT:
|
||||
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
|
||||
PieCtrlRegs.PIEIER1.bit.INTx4 = 1; // Enable PIE Gropu 1 INT4
|
||||
PieCtrlRegs.PIEIER1.bit.INTx5 = 1; // Enable PIE Gropu 1 INT5
|
||||
IER |= M_INT1; // Enable CPU int1
|
||||
EINT; // Enable Global Interrupts
|
||||
|
||||
// GPIO30 & GPIO31 are outputs, start GPIO30 high and GPIO31 low
|
||||
EALLOW;
|
||||
GpioDataRegs.GPASET.bit.GPIO30 = 1; // Load the output latch
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 0; // GPIO
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO30 = 1; // output
|
||||
|
||||
GpioDataRegs.GPACLEAR.bit.GPIO31 = 1; // Load the output latch
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 0; // GPIO
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO31 = 1; // output
|
||||
EDIS;
|
||||
|
||||
// GPIO0 and GPIO1 are inputs
|
||||
EALLOW;
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO0 = 0; // input
|
||||
GpioCtrlRegs.GPAQSEL1.bit.GPIO0 = 0; // Xint1 Synch to SYSCLKOUT only
|
||||
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO1 = 0; // input
|
||||
GpioCtrlRegs.GPAQSEL1.bit.GPIO1 = 2; // XINT2 Qual using 6 samples
|
||||
GpioCtrlRegs.GPACTRL.bit.QUALPRD0 = 0xFF; // Each sampling window is 510*SYSCLKOUT
|
||||
EDIS;
|
||||
|
||||
// GPIO0 is XINT1, GPIO1 is XINT2
|
||||
EALLOW;
|
||||
GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 0; // Xint1 is GPIO0
|
||||
GpioIntRegs.GPIOXINT2SEL.bit.GPIOSEL = 1; // XINT2 is GPIO1
|
||||
EDIS;
|
||||
|
||||
// Configure XINT1
|
||||
XIntruptRegs.XINT1CR.bit.POLARITY = 0; // Falling edge interrupt
|
||||
XIntruptRegs.XINT2CR.bit.POLARITY = 1; // Rising edge interrupt
|
||||
|
||||
// Enable XINT1 and XINT2
|
||||
XIntruptRegs.XINT1CR.bit.ENABLE = 1; // Enable Xint1
|
||||
XIntruptRegs.XINT2CR.bit.ENABLE = 1; // Enable XINT2
|
||||
|
||||
|
||||
// GPIO34 will go low inside each interrupt. Monitor this on a scope
|
||||
EALLOW;
|
||||
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; // GPIO
|
||||
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; // output
|
||||
EDIS;
|
||||
|
||||
// Step 6. IDLE loop:
|
||||
for(;;)
|
||||
{
|
||||
|
||||
TempX1Count = Xint1Count;
|
||||
TempX2Count = Xint2Count;
|
||||
|
||||
// Trigger both XINT1
|
||||
GpioDataRegs.GPBSET.bit.GPIO34 = 1; // GPIO34 is high
|
||||
GpioDataRegs.GPACLEAR.bit.GPIO30 = 1; // Lower GPIO30, trigger Xint1
|
||||
while(Xint1Count == TempX1Count) {}
|
||||
|
||||
// Trigger both XINT2
|
||||
|
||||
GpioDataRegs.GPBSET.bit.GPIO34 = 1; // GPIO34 is high
|
||||
DELAY_US(DELAY); // Wait for Qual period
|
||||
GpioDataRegs.GPASET.bit.GPIO31 = 1; // Raise GPIO31, trigger XINT2
|
||||
while(Xint2Count == TempX2Count) {}
|
||||
|
||||
// Check that the counts were incremented properly and get ready
|
||||
// to start over.
|
||||
if(Xint1Count == TempX1Count+1 && Xint2Count == TempX2Count+1)
|
||||
{
|
||||
LoopCount++;
|
||||
GpioDataRegs.GPASET.bit.GPIO30 = 1; // raise GPIO30
|
||||
GpioDataRegs.GPACLEAR.bit.GPIO31 = 1; // lower GPIO31
|
||||
}
|
||||
else
|
||||
{
|
||||
asm(" ESTOP0"); // stop here
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Step 7. Insert all local Interrupt Service Routines (ISRs) and functions here:
|
||||
// If local ISRs are used, reassign vector addresses in vector table as
|
||||
// shown in Step 5
|
||||
|
||||
interrupt void xint1_isr(void)
|
||||
{
|
||||
GpioDataRegs.GPBCLEAR.all = 0x4; // GPIO34 is low
|
||||
Xint1Count++;
|
||||
|
||||
// Acknowledge this interrupt to get more from group 1
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
|
||||
}
|
||||
|
||||
interrupt void xint2_isr(void)
|
||||
{
|
||||
GpioDataRegs.GPBCLEAR.all = 0x4; // GPIO34 is low
|
||||
Xint2Count++;
|
||||
|
||||
// Acknowledge this interrupt to get more from group 1
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
|
||||
}
|
||||
|
||||
|
||||
//===========================================================================
|
||||
// No more.
|
||||
//===========================================================================
|
||||
41
Source/External/v120/DSP2833x_examples/external_interrupt/Example_2833xExternalInterrupt.gel
vendored
Normal file
41
Source/External/v120/DSP2833x_examples/external_interrupt/Example_2833xExternalInterrupt.gel
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:15:49 $
|
||||
//###########################################################################
|
||||
//
|
||||
// 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 ExternalInterrupt"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xExternalInterrupt.pjt");
|
||||
GEL_ProjectBuild("Example_2833xExternalInterrupt.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xExternalInterrupt.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("Xint1Count,x");
|
||||
GEL_WatchAdd("Xint2Count,x");
|
||||
GEL_WatchAdd("LoopCount,x");
|
||||
GEL_WatchAdd("XIntruptRegs,x");
|
||||
GEL_WatchAdd("GpioCtrlRegs,x");
|
||||
}
|
||||
|
||||
|
||||
44
Source/External/v120/DSP2833x_examples/external_interrupt/Example_2833xExternalInterrupt.pjt
vendored
Normal file
44
Source/External/v120/DSP2833x_examples/external_interrupt/Example_2833xExternalInterrupt.pjt
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
; 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\external_interrupt\"
|
||||
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_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_2833xExternalInterrupt.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -as -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\external_interrupt\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\external_interrupt\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\DSP2833x_examples\external_interrupt\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_2833xExternalInterrupt.map" -o".\Debug\Example_2833xExternalInterrupt.out" -stack0x200 -w -x -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xExternalInterrupt.out" -x
|
||||
|
||||
45
Source/External/v120/DSP2833x_examples/flash/Example_28332_Flash.gel
vendored
Normal file
45
Source/External/v120/DSP2833x_examples/flash/Example_28332_Flash.gel
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:15: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 "DSP28332 Flash Example"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_28332_Flash.pjt");
|
||||
GEL_ProjectBuild("Example_28332_Flash.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Symbols()
|
||||
{
|
||||
GEL_SymbolLoad(".\\debug\\Example_28332_Flash.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("EPwm1TimerIntCount,x");
|
||||
GEL_WatchAdd("EPwm2TimerIntCount,x");
|
||||
GEL_WatchAdd("EPwm3TimerIntCount,x");
|
||||
GEL_WatchAdd("LoopCount,x");
|
||||
GEL_WatchAdd("EPwm1Regs,x");
|
||||
GEL_WatchAdd("EPwm2Regs,x");
|
||||
GEL_WatchAdd("EPwm3Regs,x");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
46
Source/External/v120/DSP2833x_examples/flash/Example_28332_Flash.pjt
vendored
Normal file
46
Source/External/v120/DSP2833x_examples/flash/Example_28332_Flash.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\flash\"
|
||||
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_CSMPasswords.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_MemCopy.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_2833xFlash.c"
|
||||
Source="..\..\DSP2833x_common\cmd\F28332.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\flash\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\flash\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\flash\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_28332_Flash.map" -o".\Debug\Example_28332_Flash.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xFlash.out" -x
|
||||
|
||||
45
Source/External/v120/DSP2833x_examples/flash/Example_28334_Flash.gel
vendored
Normal file
45
Source/External/v120/DSP2833x_examples/flash/Example_28334_Flash.gel
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:16:06 $
|
||||
//###########################################################################
|
||||
//
|
||||
// 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 "DSP28334 Flash Example"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_28334_Flash.pjt");
|
||||
GEL_ProjectBuild("Example_28334_Flash.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Symbols()
|
||||
{
|
||||
GEL_SymbolLoad(".\\debug\\Example_28334_Flash.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("EPwm1TimerIntCount,x");
|
||||
GEL_WatchAdd("EPwm2TimerIntCount,x");
|
||||
GEL_WatchAdd("EPwm3TimerIntCount,x");
|
||||
GEL_WatchAdd("LoopCount,x");
|
||||
GEL_WatchAdd("EPwm1Regs,x");
|
||||
GEL_WatchAdd("EPwm2Regs,x");
|
||||
GEL_WatchAdd("EPwm3Regs,x");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
46
Source/External/v120/DSP2833x_examples/flash/Example_28334_Flash.pjt
vendored
Normal file
46
Source/External/v120/DSP2833x_examples/flash/Example_28334_Flash.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\flash\"
|
||||
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_CSMPasswords.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_MemCopy.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_2833xFlash.c"
|
||||
Source="..\..\DSP2833x_common\cmd\F28334.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\flash\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\flash\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\flash\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_28334_Flash.map" -o".\Debug\Example_28334_Flash.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xFlash.out" -x
|
||||
|
||||
45
Source/External/v120/DSP2833x_examples/flash/Example_28335_Flash.gel
vendored
Normal file
45
Source/External/v120/DSP2833x_examples/flash/Example_28335_Flash.gel
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:16:14 $
|
||||
//###########################################################################
|
||||
//
|
||||
// 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 "DSP28335 Flash Example"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_28335_Flash.pjt");
|
||||
GEL_ProjectBuild("Example_28335_Flash.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Symbols()
|
||||
{
|
||||
GEL_SymbolLoad(".\\debug\\Example_28335_Flash.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("EPwm1TimerIntCount,x");
|
||||
GEL_WatchAdd("EPwm2TimerIntCount,x");
|
||||
GEL_WatchAdd("EPwm3TimerIntCount,x");
|
||||
GEL_WatchAdd("LoopCount,x");
|
||||
GEL_WatchAdd("EPwm1Regs,x");
|
||||
GEL_WatchAdd("EPwm2Regs,x");
|
||||
GEL_WatchAdd("EPwm3Regs,x");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
46
Source/External/v120/DSP2833x_examples/flash/Example_28335_Flash.pjt
vendored
Normal file
46
Source/External/v120/DSP2833x_examples/flash/Example_28335_Flash.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\flash\"
|
||||
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_CSMPasswords.asm"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_DefaultIsr.c"
|
||||
Source="..\..\DSP2833x_common\source\DSP2833x_MemCopy.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_2833xFlash.c"
|
||||
Source="..\..\DSP2833x_common\cmd\F28335.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\flash\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\flash\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\flash\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_28335_Flash.map" -o".\Debug\Example_28335_Flash.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xFlash.out" -x
|
||||
|
||||
342
Source/External/v120/DSP2833x_examples/flash/Example_2833xFlash.c
vendored
Normal file
342
Source/External/v120/DSP2833x_examples/flash/Example_2833xFlash.c
vendored
Normal file
@@ -0,0 +1,342 @@
|
||||
// TI File $Revision: /main/10 $
|
||||
// Checkin $Date: April 21, 2008 15:42:33 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xFlash.c
|
||||
//
|
||||
// TITLE: DSP2833x ePWM Timer Interrupt From Flash Example.
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// As supplied, this project is configured for "boot to FLASH"
|
||||
// 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 <- "boot 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
|
||||
// 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 runs the ePWM interrupt example from flash.
|
||||
//
|
||||
// 1) Build the project
|
||||
// 2) Flash the .out file into the device.
|
||||
// 3) Set the hardware jumpers to boot to Flash
|
||||
// 4) Use the included GEL file to load the project, symbols
|
||||
// defined within the project and the variables into the watch
|
||||
// window.
|
||||
//
|
||||
// Steps that were taken to convert the ePWM example from RAM
|
||||
// to Flash execution:
|
||||
//
|
||||
// - Change the linker cmd file to reflect the flash memory map.
|
||||
// - Make sure any initialized sections are mapped to Flash.
|
||||
// In SDFlash utility this can be checked by the View->Coff/Hex
|
||||
// status utility. Any section marked as "load" should be
|
||||
// allocated to Flash.
|
||||
// - Make sure there is a branch instruction from the entry to Flash
|
||||
// at 0x33FFF6 to the beginning of code execution. This example
|
||||
// uses the DSP2833x_CodeStartBranch.asm file to accomplish this.
|
||||
// - Set boot mode Jumpers to "boot to Flash"
|
||||
// - For best performance from the flash, modify the waitstates
|
||||
// and enable the flash pipeline as shown in this example.
|
||||
// Note: any code that manipulates the flash waitstate and pipeline
|
||||
// control must be run from RAM. Thus these functions are located
|
||||
// in their own memory section called ramfuncs.
|
||||
//
|
||||
//
|
||||
// ePwm1 Interrupt will run from RAM and puts the flash into sleep mode
|
||||
// ePwm2 Interrupt will run from RAM and puts the flash into standby mode
|
||||
// ePWM3 Interrupt will run from FLASH
|
||||
//
|
||||
// As supplied:
|
||||
//
|
||||
// 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
|
||||
//
|
||||
// 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
|
||||
//
|
||||
// Toggle GPIO32 while in the background loop.
|
||||
//
|
||||
//###########################################################################
|
||||
// $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
|
||||
|
||||
// Configure the period for each timer
|
||||
#define PWM1_TIMER_TBPRD 0x1FFF
|
||||
#define PWM2_TIMER_TBPRD 0x1FFF
|
||||
#define PWM3_TIMER_TBPRD 0x1FFF
|
||||
|
||||
// Make this long enough so that we can see an LED toggle
|
||||
#define DELAY 1000000L
|
||||
|
||||
// Functions that will be run from RAM need to be assigned to
|
||||
// a different section. This section will then be mapped using
|
||||
// the linker cmd file.
|
||||
#pragma CODE_SECTION(epwm1_timer_isr, "ramfuncs");
|
||||
#pragma CODE_SECTION(epwm2_timer_isr, "ramfuncs");
|
||||
|
||||
// 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);
|
||||
void InitEPwmTimer(void);
|
||||
|
||||
// Global variables used in this example
|
||||
Uint32 EPwm1TimerIntCount;
|
||||
Uint32 EPwm2TimerIntCount;
|
||||
Uint32 EPwm3TimerIntCount;
|
||||
Uint32 LoopCount;
|
||||
|
||||
// These are defined by the linker (see F28335.cmd)
|
||||
extern Uint16 RamfuncsLoadStart;
|
||||
extern Uint16 RamfuncsLoadEnd;
|
||||
extern Uint16 RamfuncsRunStart;
|
||||
|
||||
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.EPWM1_INT = &epwm1_timer_isr;
|
||||
PieVectTable.EPWM2_INT = &epwm2_timer_isr;
|
||||
PieVectTable.EPWM3_INT = &epwm3_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:
|
||||
|
||||
// Copy time critical code and Flash setup code to RAM
|
||||
// This includes the following ISR functions: epwm1_timer_isr(), epwm2_timer_isr()
|
||||
// epwm3_timer_isr and and InitFlash();
|
||||
// The RamfuncsLoadStart, RamfuncsLoadEnd, and RamfuncsRunStart
|
||||
// symbols are created by the linker. Refer to the F28335.cmd file.
|
||||
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
|
||||
|
||||
// Call Flash Initialization to setup flash waitstates
|
||||
// This function must reside in RAM
|
||||
InitFlash();
|
||||
|
||||
// Initalize counters:
|
||||
EPwm1TimerIntCount = 0;
|
||||
EPwm2TimerIntCount = 0;
|
||||
EPwm3TimerIntCount = 0;
|
||||
LoopCount = 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 = PWM1_INT_ENABLE;
|
||||
PieCtrlRegs.PIEIER3.bit.INTx2 = PWM2_INT_ENABLE;
|
||||
PieCtrlRegs.PIEIER3.bit.INTx3 = PWM3_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):
|
||||
EALLOW;
|
||||
GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0;
|
||||
GpioCtrlRegs.GPBDIR.bit.GPIO32 = 1;
|
||||
EDIS;
|
||||
|
||||
for(;;)
|
||||
{
|
||||
// This loop will be interrupted, so the overall
|
||||
// delay between pin toggles will be longer.
|
||||
DELAY_US(DELAY);
|
||||
LoopCount++;
|
||||
GpioDataRegs.GPBTOGGLE.bit.GPIO32 = 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
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
|
||||
|
||||
// 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;
|
||||
|
||||
EPwm1Regs.TBPHS.half.TBPHS = 100;
|
||||
EPwm2Regs.TBPHS.half.TBPHS = 200;
|
||||
EPwm3Regs.TBPHS.half.TBPHS = 300;
|
||||
|
||||
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
|
||||
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Start all the timers synced
|
||||
EDIS;
|
||||
|
||||
|
||||
}
|
||||
|
||||
// This ISR MUST be executed from RAM as it will put the Flash into Sleep
|
||||
// Interrupt routines uses in this example:
|
||||
interrupt void epwm1_timer_isr(void)
|
||||
{
|
||||
|
||||
// Put the Flash to sleep
|
||||
FlashRegs.FPWR.bit.PWR = FLASH_SLEEP;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
// This ISR MUST be executed from RAM as it will put the Flash into Standby
|
||||
interrupt void epwm2_timer_isr(void)
|
||||
{
|
||||
EPwm2TimerIntCount++;
|
||||
|
||||
// Put the Flash into standby
|
||||
FlashRegs.FPWR.bit.PWR = FLASH_STANDBY;
|
||||
|
||||
// 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)
|
||||
{
|
||||
Uint16 i;
|
||||
|
||||
EPwm3TimerIntCount++;
|
||||
|
||||
// Short Delay to simulate some ISR Code
|
||||
for(i = 1; i < 0x01FF; i++) {}
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//===========================================================================
|
||||
// No more.
|
||||
//===========================================================================
|
||||
167
Source/External/v120/DSP2833x_examples/fpu/Example_2833xFPU.c
vendored
Normal file
167
Source/External/v120/DSP2833x_examples/fpu/Example_2833xFPU.c
vendored
Normal file
@@ -0,0 +1,167 @@
|
||||
// TI File $Revision: /main/2 $
|
||||
// Checkin $Date: April 21, 2008 15:44:31 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xFPU.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:
|
||||
//
|
||||
// The code calculates two y=mx+b equations. The variables are all
|
||||
// 32-bit floating-point.
|
||||
//
|
||||
// Two projects are supplied:
|
||||
//
|
||||
// Example_fpu_hardware.pjt (floating-point):
|
||||
//
|
||||
// If the Example_2833xFPU_hardware.pjt file is used then the compiler
|
||||
// will generate floating point instructions to do these calculations.
|
||||
// To compile the project for floating point, the following Build Options were used:
|
||||
// 1. Project->Build Options-> Compiler Tab-> Advanced category:
|
||||
// a. in textbox: compiler options -v28 --float_support=fpu32 are set
|
||||
// b. OR the following is equivalent to "a.": pull-down menu next to
|
||||
// "Floating Point Support"-> "fpu32" selected.
|
||||
// 2. Project->Build Options-> Linker Tab-> Libraries category:
|
||||
// a. runtime support library used is rts2800_fpu32.lib.
|
||||
// 3. Not included in this example: If the project includes any other libraries,
|
||||
// they must also be compiled with floating point instructions.
|
||||
//
|
||||
// Example_fpu_software.pjt (fixed-point emulates floating-point with software):
|
||||
//
|
||||
// If the Example_2833xFPU_software.pjt file is used, then the compiler
|
||||
// will only used fixed point instructions. This means the runtime
|
||||
// support library will be used to emulate floating point.
|
||||
// This will also run on C28x devices without the floating point unit.
|
||||
// To compile the project for fixed point, the following Build Options were used:
|
||||
// 1. Project->Build Options-> Compiler Tab-> Advanced category:
|
||||
// a. in textbox: compiler option --float_support=fpu32 is REMOVED
|
||||
// -v28 should not be removed
|
||||
// b. OR the following is equivalent to "a.": pull-down menu next to
|
||||
// "Floating Point Support"-> "None" selected.
|
||||
// 2. Project->Build Options-> Linker Tab-> Libraries category:
|
||||
// a. runtime support library used is rts2800.lib or rts2800_ml.lib.
|
||||
// 3. Not included in this example: If the project includes any other libraries,
|
||||
// they must also be compiled with fixed point instructions.
|
||||
//
|
||||
// Watch Variables:
|
||||
// y1
|
||||
// y2
|
||||
// FPU registers (optional)
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
|
||||
float y1, y2;
|
||||
float m1, m2;
|
||||
float x1, x2;
|
||||
float b1, b2;
|
||||
|
||||
|
||||
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.
|
||||
|
||||
|
||||
// Step 5. User specific code, enable interrupts:
|
||||
|
||||
//
|
||||
// Calculate two y=mx+b equations.
|
||||
|
||||
y1 = 0;
|
||||
y2 = 0;
|
||||
m1 = .5;
|
||||
m2 = .6;
|
||||
x1 = 3.4;
|
||||
x2 = 7.3;
|
||||
b1 = 4.2;
|
||||
b2 = 8.9;
|
||||
|
||||
y1 = m1*x1 + b1;
|
||||
y2 = m2*x2 + b2;
|
||||
|
||||
|
||||
ESTOP0; // This is a software breakpoint
|
||||
}
|
||||
|
||||
|
||||
//===========================================================================
|
||||
// No more.
|
||||
//===========================================================================
|
||||
50
Source/External/v120/DSP2833x_examples/fpu/Example_2833xFPU.gel
vendored
Normal file
50
Source/External/v120/DSP2833x_examples/fpu/Example_2833xFPU.gel
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
// TI File $Revision: /main/1 $
|
||||
// Checkin $Date: August 29, 2007 14:07:24 $
|
||||
//###########################################################################
|
||||
//
|
||||
// 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 FPU Example"
|
||||
|
||||
hotmenu Load_and_Build_Fixed_Point_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xFPU_software.pjt");
|
||||
GEL_ProjectBuild("Example_2833xFPU_software.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_and_Build_Floating_Point_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xFPU_hardware.pjt");
|
||||
GEL_ProjectBuild("Example_2833xFPU_hardware.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Fixed_Point_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xFPU_software.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Floating_Point_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xFPU_hardware.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("y1,f");
|
||||
GEL_WatchAdd("y2,f");
|
||||
All_FPU_Single_Precision_Regs();
|
||||
}
|
||||
46
Source/External/v120/DSP2833x_examples/fpu/Example_2833xFPU_hardware.pjt
vendored
Normal file
46
Source/External/v120/DSP2833x_examples/fpu/Example_2833xFPU_hardware.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\fpu\"
|
||||
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_2833xFPU.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -al -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\fpu\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\fpu\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\fpu\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_2833xFPU_hardware.map" -o".\Debug\Example_2833xFPU_hardware.out" -stack0x200 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xFPU_hardware.out" -x
|
||||
|
||||
46
Source/External/v120/DSP2833x_examples/fpu/Example_2833xFPU_software.pjt
vendored
Normal file
46
Source/External/v120/DSP2833x_examples/fpu/Example_2833xFPU_software.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\fpu\"
|
||||
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_2833xFPU.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\fpu\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\fpu\Debug" -i"..\..\DSP2833x_headers\include" -i"..\..\DSP2833x_common\include" -d"_DEBUG" -d"LARGE_MODEL" -ml -mt -v28
|
||||
|
||||
["Compiler" Settings: "Release"]
|
||||
Options=-q -o3 -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\fpu\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_2833xFPU_software.map" -o".\Debug\Example_2833xFPU_software.out" -stack0x200 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_ml.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xFPU_software.out" -x
|
||||
|
||||
458
Source/External/v120/DSP2833x_examples/gpio_setup/Example_2833xGpioSetup.c
vendored
Normal file
458
Source/External/v120/DSP2833x_examples/gpio_setup/Example_2833xGpioSetup.c
vendored
Normal file
@@ -0,0 +1,458 @@
|
||||
// TI File $Revision: /main/9 $
|
||||
// Checkin $Date: April 21, 2008 15:42:38 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xGpioSetup.c
|
||||
//
|
||||
// TITLE: DSP2833x Device GPIO Setup
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// Two different examples are included. Select the example
|
||||
// to execute before compiling using the #define statements
|
||||
// found at the top of the code.
|
||||
//
|
||||
// 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:
|
||||
//
|
||||
//
|
||||
// Configures the 2833x GPIO into two different configurations
|
||||
// This code is verbose to illustrate how the GPIO could be setup.
|
||||
// In a real application, lines of code can be combined for improved
|
||||
// code size and efficency.
|
||||
//
|
||||
// This example only sets-up the GPIO.. nothing is actually done with
|
||||
// the pins after setup.
|
||||
//
|
||||
// In general:
|
||||
//
|
||||
// All pullup resistors are enabled. For ePWMs this may not be desired.
|
||||
// Input qual for communication ports (eCAN, SPI, SCI, I2C) is asynchronous
|
||||
// Input qual for Trip pins (TZ) is asynchronous
|
||||
// Input qual for eCAP and eQEP signals is synch to SYSCLKOUT
|
||||
// Input qual for some I/O's and interrupts may have a sampling window
|
||||
//
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
|
||||
// Select the example to compile in. Only one example should be set as 1
|
||||
// the rest should be set as 0.
|
||||
|
||||
#define EXAMPLE1 1 // Basic pinout configuration example
|
||||
#define EXAMPLE2 0 // Communication pinout example
|
||||
|
||||
// Prototype statements for functions found within this file.
|
||||
void Gpio_setup1(void);
|
||||
void Gpio_setup2(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 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:
|
||||
|
||||
#if EXAMPLE1
|
||||
|
||||
// This example is a basic pinout
|
||||
Gpio_setup1();
|
||||
|
||||
#endif // - EXAMPLE1
|
||||
|
||||
#if EXAMPLE2
|
||||
|
||||
// This example is a communications pinout
|
||||
Gpio_setup2();
|
||||
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
||||
void Gpio_setup1(void)
|
||||
{
|
||||
// Example 1:
|
||||
// Basic Pinout.
|
||||
// This basic pinout includes:
|
||||
// PWM1-3, ECAP1, ECAP2, TZ1-TZ4, SPI-A, EQEP1, SCI-A, I2C
|
||||
// and a number of I/O pins
|
||||
|
||||
// These can be combined into single statements for improved
|
||||
// code efficiency.
|
||||
|
||||
// Enable PWM1-3 on GPIO0-GPIO5
|
||||
EALLOW;
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0; // Enable pullup on GPIO0
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0; // Enable pullup on GPIO1
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO2 = 0; // Enable pullup on GPIO2
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0; // Enable pullup on GPIO3
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO4 = 0; // Enable pullup on GPIO4
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0; // Enable pullup on GPIO5
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; // GPIO0 = PWM1A
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1; // GPIO1 = PWM1B
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1; // GPIO2 = PWM2A
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 1; // GPIO3 = PWM2B
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 1; // GPIO4 = PWM3A
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 1; // GPIO5 = PWM3B
|
||||
|
||||
// Enable an GPIO output on GPIO6, set it high
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO6 = 0; // Enable pullup on GPIO6
|
||||
GpioDataRegs.GPASET.bit.GPIO6 = 1; // Load output latch
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; // GPIO6 = GPIO6
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO6 = 1; // GPIO6 = output
|
||||
|
||||
// Enable eCAP1 on GPIO7
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0; // Enable pullup on GPIO7
|
||||
GpioCtrlRegs.GPAQSEL1.bit.GPIO7 = 0; // Synch to SYSCLOUT
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 3; // GPIO7 = ECAP2
|
||||
|
||||
// Enable GPIO outputs on GPIO8 - GPIO11, set it high
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO8 = 0; // Enable pullup on GPIO8
|
||||
GpioDataRegs.GPASET.bit.GPIO8 = 1; // Load output latch
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 0; // GPIO8 = GPIO8
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO8 = 1; // GPIO8 = output
|
||||
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO9 = 0; // Enable pullup on GPIO9
|
||||
GpioDataRegs.GPASET.bit.GPIO9 = 1; // Load output latch
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 0; // GPIO9 = GPIO9
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO9 = 1; // GPIO9 = output
|
||||
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO10 = 0; // Enable pullup on GPIO10
|
||||
GpioDataRegs.GPASET.bit.GPIO10 = 1; // Load output latch
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 0; // GPIO10 = GPIO10
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO6 = 1; // GPIO10 = output
|
||||
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO11 = 0; // Enable pullup on GPIO11
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 0; // GPIO11 = GPIO11
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO11 = 1; // GPIO11 = output
|
||||
|
||||
// Enable Trip Zone inputs on GPIO12 - GPIO15
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0; // Enable pullup on GPIO12
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0; // Enable pullup on GPIO13
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO14 = 0; // Enable pullup on GPIO14
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO15 = 0; // Enable pullup on GPIO15
|
||||
GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 3; // asynch input
|
||||
GpioCtrlRegs.GPAQSEL1.bit.GPIO13 = 3; // asynch input
|
||||
GpioCtrlRegs.GPAQSEL1.bit.GPIO14 = 3; // asynch input
|
||||
GpioCtrlRegs.GPAQSEL1.bit.GPIO15 = 3; // asynch input
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 1; // GPIO12 = TZ1
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 1; // GPIO13 = TZ2
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 1; // GPIO14 = TZ3
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 1; // GPIO15 = TZ4
|
||||
|
||||
// Enable SPI-A on GPIO16 - GPIO19
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0; // Enable pullup on GPIO16
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0; // Enable pullup on GPIO17
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0; // Enable pullup on GPIO18
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0; // Enable pullup on GPIO19
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3; // asynch input
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; // asynch input
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3; // asynch input
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3; // asynch input
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1; // GPIO16 = SPICLKA
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; // GPIO17 = SPIS0MIA
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; // GPIO18 = SPICLKA
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 1; // GPIO19 = SPISTEA
|
||||
|
||||
// Enable EQEP1 on GPIO20 - GPIO23
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO20 = 0; // Enable pullup on GPIO20
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO21 = 0; // Enable pullup on GPIO21
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO22 = 0; // Enable pullup on GPIO22
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO23 = 0; // Enable pullup on GPIO23
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO20 = 0; // Synch to SYSCLKOUT
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO21 = 0; // Synch to SYSCLKOUT
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO22 = 0; // Synch to SYSCLKOUT
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 0; // Synch to SYSCLKOUT
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 1; // GPIO20 = EQEP1A
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 1; // GPIO21 = EQEP1B
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 1; // GPIO22 = EQEP1S
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 1; // GPIO23 = EQEP1I
|
||||
|
||||
// Enable eCAP1 on GPIO24
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0; // Enable pullup on GPIO24
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 0; // Synch to SYSCLKOUT
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 1; // GPIO24 = ECAP1
|
||||
|
||||
// Set input qualifcation period for GPIO25 & GPIO26
|
||||
GpioCtrlRegs.GPACTRL.bit.QUALPRD3=1; // Qual period = SYSCLKOUT/2
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO25=2; // 6 samples
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO26=2; // 6 samples
|
||||
|
||||
// Make GPIO25 the input source for Xint1
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 0; // GPIO25 = GPIO25
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO25 = 0; // GPIO25 = input
|
||||
GpioIntRegs.GPIOXINT1SEL.all = 25; // Xint1 connected to GPIO25
|
||||
|
||||
// Make GPIO26 the input source for XINT2
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 0; // GPIO26 = GPIO26
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO26 = 0; // GPIO26 = input
|
||||
GpioIntRegs.GPIOXINT2SEL.all = 26; // XINT2 connected to GPIO26
|
||||
|
||||
// Make GPIO27 wakeup from HALT/STANDBY Low Power Modes
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 0; // GPIO27 = GPIO27
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO27 = 0; // GPIO27 = input
|
||||
GpioIntRegs.GPIOLPMSEL.bit.GPIO27=1; // GPIO27 will wake the device
|
||||
SysCtrlRegs.LPMCR0.bit.QUALSTDBY=2; // Qualify GPIO27 by 2 OSCCLK
|
||||
// cycles before waking the device
|
||||
// from STANDBY
|
||||
|
||||
// Enable SCI-A on GPIO28 - GPIO29
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0; // Enable pullup on GPIO28
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3; // Asynch input
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1; // GPIO28 = SCIRXDA
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0; // Enable pullup on GPIO29
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1; // GPIO29 = SCITXDA
|
||||
|
||||
// Enable CAN-A on GPIO30 - GPIO31
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO30 = 0; // Enable pullup on GPIO30
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 1; // GPIO30 = CANTXA
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO31 = 0; // Enable pullup on GPIO31
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO31 = 3; // Asynch input
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 1; // GPIO31 = CANRXA
|
||||
|
||||
|
||||
// Enable I2C-A on GPIO32 - GPIO33
|
||||
GpioCtrlRegs.GPBPUD.bit.GPIO32 = 0; // Enable pullup on GPIO32
|
||||
GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 1; // GPIO32 = SDAA
|
||||
GpioCtrlRegs.GPBQSEL1.bit.GPIO33 = 3; // Asynch input
|
||||
GpioCtrlRegs.GPBPUD.bit.GPIO33 = 0; // Enable pullup on GPIO33
|
||||
GpioCtrlRegs.GPBQSEL1.bit.GPIO33 = 3; // Asynch input
|
||||
GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 1; // GPIO33 = SCLA
|
||||
|
||||
// Make GPIO34 an input
|
||||
GpioCtrlRegs.GPBPUD.bit.GPIO34 = 0; // Enable pullup on GPIO34
|
||||
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; // GPIO34 = GPIO34
|
||||
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 0; // GPIO34 = input
|
||||
EDIS;
|
||||
}
|
||||
|
||||
void Gpio_setup2(void)
|
||||
{
|
||||
// Example 1:
|
||||
// Communications Pinout.
|
||||
// This basic communications pinout includes:
|
||||
// PWM1-3, CAP1, CAP2, SPI-A, SPI-B, CAN-A, SCI-A and I2C
|
||||
// and a number of I/O pins
|
||||
|
||||
// Enable PWM1-3 on GPIO0-GPIO5
|
||||
EALLOW;
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0; // Enable pullup on GPIO0
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0; // Enable pullup on GPIO1
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO2 = 0; // Enable pullup on GPIO2
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0; // Enable pullup on GPIO3
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO4 = 0; // Enable pullup on GPIO4
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0; // Enable pullup on GPIO5
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; // GPIO0 = PWM1A
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1; // GPIO1 = PWM1B
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1; // GPIO2 = PWM2A
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 1; // GPIO3 = PWM2B
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 1; // GPIO4 = PWM3A
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 1; // GPIO5 = PWM3B
|
||||
|
||||
// Enable an GPIO output on GPIO6
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO6 = 0; // Enable pullup on GPIO6
|
||||
GpioDataRegs.GPASET.bit.GPIO6 = 1; // Load output latch
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; // GPIO6 = GPIO6
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO6 = 1; // GPIO6 = output
|
||||
|
||||
// Enable eCAP1 on GPIO7
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0; // Enable pullup on GPIO7
|
||||
GpioCtrlRegs.GPAQSEL1.bit.GPIO7 = 0; // Synch to SYSCLKOUT
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 3; // GPIO7 = ECAP2
|
||||
|
||||
// Enable GPIO outputs on GPIO8 - GPIO11
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO8 = 0; // Enable pullup on GPIO8
|
||||
GpioDataRegs.GPASET.bit.GPIO8 = 1; // Load output latch
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 0; // GPIO8 = GPIO8
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO8 = 1; // GPIO8 = output
|
||||
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO9 = 0; // Enable pullup on GPIO9
|
||||
GpioDataRegs.GPASET.bit.GPIO9 = 1; // Load output latch
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 0; // GPIO9 = GPIO9
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO9 = 1; // GPIO9 = output
|
||||
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO10 = 0; // Enable pullup on GPIO10
|
||||
GpioDataRegs.GPASET.bit.GPIO10 = 1; // Load output latch
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 0; // GPIO10 = GPIO10
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO10 = 1; // GPIO10 = output
|
||||
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO11 = 0; // Enable pullup on GPIO11
|
||||
GpioDataRegs.GPASET.bit.GPIO11 = 1; // Load output latch
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 0; // GPIO11 = GPIO11
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO11 = 1; // GPIO11 = output
|
||||
|
||||
// Enable SPI-B on GPIO12 - GPIO15
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0; // Enable pullup on GPIO12 (SPISIMOB)
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0; // Enable pullup on GPIO13 (SPISOMIB)
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO14 = 0; // Enable pullup on GPIO14 (SPICLKB)
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO15 = 0; // Enable pullup on GPIO15 (SPISTEB)
|
||||
GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 3; // asynch input
|
||||
GpioCtrlRegs.GPAQSEL1.bit.GPIO13 = 3; // asynch input
|
||||
GpioCtrlRegs.GPAQSEL1.bit.GPIO14 = 3; // asynch input
|
||||
GpioCtrlRegs.GPAQSEL1.bit.GPIO15 = 3; // asynch input
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 3; // GPIO12 = SPISIMOB
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 3; // GPIO13 = SPISOMIB
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 3; // GPIO14 = SPICLKB
|
||||
GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 3; // GPIO15 = SPISTEB
|
||||
|
||||
// Enable SPI-A on GPIO16 - GPIO19
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0; // Enable pullup on GPIO16 (SPICLKA)
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0; // Enable pullup on GPIO17 (SPIS0MIA)
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0; // Enable pullup on GPIO18 (SPICLKA)
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0; // Enable pullup on GPIO19 (SPISTEA)
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3; // asynch input
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; // asynch input
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3; // asynch input
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3; // asynch input
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1; // GPIO16 = SPICLKA
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; // GPIO17 = SPIS0MIA
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; // GPIO18 = SPICLKA
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 1; // GPIO19 = SPISTEA
|
||||
|
||||
// Enable EQEP1 on GPIO20 - GPIO23
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO20 = 0; // Enable pullup on GPIO20 (EQEP1A)
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO21 = 0; // Enable pullup on GPIO21 (EQEP1B)
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO22 = 0; // Enable pullup on GPIO22 (EQEP1S)
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO23 = 0; // Enable pullup on GPIO23 (EQEP1I)
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO20 = 0; // Synch to SYSCLKOUT
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO21 = 0; // Synch to SYSCLKOUT
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO22 = 0; // Synch to SYSCLKOUT
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 0; // Synch to SYSCLKOUT
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 1; // GPIO20 = EQEP1A
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 1; // GPIO21 = EQEP1B
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 1; // GPIO22 = EQEP1S
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 1; // GPIO23 = EQEP1I
|
||||
|
||||
// Enable eCAP1 on GPIO24
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0; // Enable pullup on GPIO24 (ECAP1)
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 0; // Synch to SYSCLKOUT
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 1; // GPIO24 = ECAP1
|
||||
|
||||
// Set input qualifcation period for GPIO25 & GPIO26 inputs
|
||||
GpioCtrlRegs.GPACTRL.bit.QUALPRD3=1; // Qual period = SYSCLKOUT/2
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO25=2; // 6 samples
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO26=1; // 3 samples
|
||||
|
||||
// Make GPIO25 the input source for Xint1
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 0; // GPIO25 = GPIO25
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO25 = 0; // GPIO25 = input
|
||||
GpioIntRegs.GPIOXINT1SEL.all = 25; // Xint1 connected to GPIO25
|
||||
|
||||
// Make GPIO26 the input source for XINT2
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 0; // GPIO26 = GPIO26
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO26 = 0; // GPIO26 = input
|
||||
GpioIntRegs.GPIOXINT2SEL.all = 26; // XINT2 connected to GPIO26
|
||||
|
||||
// Make GPIO27 wakeup from HALT/STANDBY Low Power Modes
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 0; // GPIO27 = GPIO27
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO27 = 0; // GPIO27 = input
|
||||
GpioIntRegs.GPIOLPMSEL.bit.GPIO27=1; // GPIO27 will wake the device
|
||||
SysCtrlRegs.LPMCR0.bit.QUALSTDBY=2; // Qualify GPIO27 by 2 OSCCLK
|
||||
// cycles before waking the device
|
||||
// from STANDBY
|
||||
|
||||
// Enable SCI-A on GPIO28 - GPIO29
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0; // Enable pullup on GPIO28
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3; // asynch input
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1; // GPIO28 = SCIRXDA
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0; // Enable pullup on GPIO29
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1; // GPIO29 = SCITXDA
|
||||
|
||||
// Enable CAN-A on GPIO30 - GPIO31
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO30 = 0; // Enable pullup on GPIO30
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 1; // GPIO30 = CANTXA
|
||||
GpioCtrlRegs.GPAPUD.bit.GPIO31 = 0; // Enable pullup on GPIO31
|
||||
GpioCtrlRegs.GPAQSEL2.bit.GPIO31 = 3; // asynch input
|
||||
GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 1; // GPIO31 = CANRXA
|
||||
|
||||
// Enable I2C-A on GPIO32 - GPIO33
|
||||
GpioCtrlRegs.GPBPUD.bit.GPIO32 = 0; // Enable pullup on GPIO32
|
||||
GpioCtrlRegs.GPBPUD.bit.GPIO33 = 0; // Enable pullup on GPIO33
|
||||
GpioCtrlRegs.GPBQSEL1.bit.GPIO32 = 3; // asynch input
|
||||
GpioCtrlRegs.GPBQSEL1.bit.GPIO32 = 3; // asynch input
|
||||
GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 1; // GPIO32 = SDAA
|
||||
GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 1; // GPIO33 = SCLA
|
||||
|
||||
// Make GPIO34 an input
|
||||
GpioCtrlRegs.GPBPUD.bit.GPIO32 = 0; // Enable pullup on GPIO34
|
||||
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; // GPIO34 = GPIO34
|
||||
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 0; // GPIO34 = input
|
||||
|
||||
EDIS;
|
||||
}
|
||||
|
||||
|
||||
//===========================================================================
|
||||
// No more.
|
||||
//===========================================================================
|
||||
|
||||
35
Source/External/v120/DSP2833x_examples/gpio_setup/Example_2833xGpioSetup.gel
vendored
Normal file
35
Source/External/v120/DSP2833x_examples/gpio_setup/Example_2833xGpioSetup.gel
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:16: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 GPIO Setup Example"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xGpioSetup.pjt");
|
||||
GEL_ProjectBuild("Example_2833xGpioSetup.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xGpioSetup.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd(" GpioCtrlRegs,x");
|
||||
}
|
||||
44
Source/External/v120/DSP2833x_examples/gpio_setup/Example_2833xGpioSetup.pjt
vendored
Normal file
44
Source/External/v120/DSP2833x_examples/gpio_setup/Example_2833xGpioSetup.pjt
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
; 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\gpio_setup\"
|
||||
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_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_2833xGpioSetup.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\gpio_setup\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\gpio_setup\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\gpio_setup\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_2833xGpioSetup.map" -o".\Debug\Example_2833xGpioSetup.out" -stack0x200 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xGpioToggle.out" -x
|
||||
|
||||
245
Source/External/v120/DSP2833x_examples/gpio_toggle/Example_2833xGpioToggle.c
vendored
Normal file
245
Source/External/v120/DSP2833x_examples/gpio_toggle/Example_2833xGpioToggle.c
vendored
Normal file
@@ -0,0 +1,245 @@
|
||||
// TI File $Revision: /main/8 $
|
||||
// Checkin $Date: April 21, 2008 15:42:43 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xGpioToggle.c
|
||||
//
|
||||
// TITLE: DSP2833x Device GPIO toggle test program.
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// ALL OF THE I/O'S TOGGLE IN THIS PROGRAM. MAKE SURE
|
||||
// THIS WILL NOT DAMAGE YOUR HARDWARE BEFORE RUNNING THIS
|
||||
// EXAMPLE.
|
||||
//
|
||||
// Monitor desired pins on an oscilloscope.
|
||||
//
|
||||
// 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:
|
||||
//
|
||||
// Three different examples are included. Select the example
|
||||
// (data, set/clear or toggle) to execute before compiling using
|
||||
// the #define statements found at the top of the code.
|
||||
//
|
||||
//
|
||||
// Toggle all of the GPIO PORT pins
|
||||
//
|
||||
// The pins can be observed using Oscilloscope.
|
||||
//
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
|
||||
// Select the example to compile in. Only one example should be set as 1
|
||||
// the rest should be set as 0.
|
||||
#define EXAMPLE1 1 // Use DATA registers to toggle I/O's
|
||||
#define EXAMPLE2 0 // Use SET/CLEAR registers to toggle I/O's
|
||||
#define EXAMPLE3 0 // Use TOGGLE registers to toggle I/O's
|
||||
|
||||
|
||||
// Prototype statements for functions found within this file.
|
||||
void delay_loop(void);
|
||||
void Gpio_select(void);
|
||||
void Gpio_example1(void);
|
||||
void Gpio_example2(void);
|
||||
void Gpio_example3(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
|
||||
|
||||
// For this example use the following configuration:
|
||||
Gpio_select();
|
||||
|
||||
// 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:
|
||||
|
||||
#if EXAMPLE1
|
||||
|
||||
// This example uses DATA registers to toggle I/O's
|
||||
Gpio_example1();
|
||||
|
||||
#endif // - EXAMPLE1
|
||||
|
||||
#if EXAMPLE2
|
||||
|
||||
// This example uses SET/CLEAR registers to toggle I/O's
|
||||
Gpio_example2();
|
||||
|
||||
#endif
|
||||
|
||||
#if EXAMPLE3
|
||||
|
||||
// This example uses TOGGLE registers to toggle I/O's
|
||||
Gpio_example3();
|
||||
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
void delay_loop()
|
||||
{
|
||||
short i;
|
||||
for (i = 0; i < 1000; i++) {}
|
||||
}
|
||||
|
||||
|
||||
void Gpio_example1(void)
|
||||
{
|
||||
// Example 1:
|
||||
// Toggle I/Os using DATA registers
|
||||
|
||||
for(;;)
|
||||
{
|
||||
GpioDataRegs.GPADAT.all =0xAAAAAAAA;
|
||||
GpioDataRegs.GPBDAT.all =0x0000000A;
|
||||
|
||||
delay_loop();
|
||||
|
||||
GpioDataRegs.GPADAT.all =0x55555555;
|
||||
GpioDataRegs.GPBDAT.all =0x00000005;
|
||||
|
||||
delay_loop();
|
||||
}
|
||||
}
|
||||
|
||||
void Gpio_example2(void)
|
||||
{
|
||||
// Example 2:
|
||||
// Toggle I/Os using SET/CLEAR registers
|
||||
for(;;)
|
||||
{
|
||||
|
||||
GpioDataRegs.GPASET.all =0xAAAAAAAA;
|
||||
GpioDataRegs.GPACLEAR.all =0x55555555;
|
||||
|
||||
GpioDataRegs.GPBSET.all =0x0000000A;
|
||||
GpioDataRegs.GPBCLEAR.all =0x00000005;
|
||||
|
||||
delay_loop();
|
||||
|
||||
GpioDataRegs.GPACLEAR.all =0xAAAAAAAA;
|
||||
GpioDataRegs.GPASET.all =0x55555555;
|
||||
|
||||
GpioDataRegs.GPBCLEAR.all =0x0000000A;
|
||||
GpioDataRegs.GPBSET.all =0x00000005;
|
||||
|
||||
delay_loop();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void Gpio_example3(void)
|
||||
{
|
||||
// Example 2:
|
||||
// Toggle I/Os using TOGGLE registers
|
||||
|
||||
// Set pins to a known state
|
||||
|
||||
GpioDataRegs.GPASET.all =0xAAAAAAAA;
|
||||
GpioDataRegs.GPACLEAR.all =0x55555555;
|
||||
|
||||
GpioDataRegs.GPBSET.all =0x0000000A;
|
||||
GpioDataRegs.GPBCLEAR.all =0x00000005;
|
||||
|
||||
// Use TOGGLE registers to flip the state of
|
||||
// the pins.
|
||||
// Any bit set to a 1 will flip state (toggle)
|
||||
// Any bit set to a 0 will not toggle.
|
||||
|
||||
for(;;)
|
||||
{
|
||||
GpioDataRegs.GPATOGGLE.all =0xFFFFFFFF;
|
||||
GpioDataRegs.GPBTOGGLE.all =0x0000000F;
|
||||
delay_loop();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Gpio_select(void)
|
||||
{
|
||||
|
||||
|
||||
EALLOW;
|
||||
GpioCtrlRegs.GPAMUX1.all = 0x00000000; // All GPIO
|
||||
GpioCtrlRegs.GPAMUX2.all = 0x00000000; // All GPIO
|
||||
GpioCtrlRegs.GPAMUX1.all = 0x00000000; // All GPIO
|
||||
GpioCtrlRegs.GPADIR.all = 0xFFFFFFFF; // All outputs
|
||||
GpioCtrlRegs.GPBDIR.all = 0x0000000F; // All outputs
|
||||
EDIS;
|
||||
|
||||
}
|
||||
//===========================================================================
|
||||
// No more.
|
||||
//===========================================================================
|
||||
|
||||
36
Source/External/v120/DSP2833x_examples/gpio_toggle/Example_2833xGpioToggle.gel
vendored
Normal file
36
Source/External/v120/DSP2833x_examples/gpio_toggle/Example_2833xGpioToggle.gel
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:16:50 $
|
||||
//###########################################################################
|
||||
//
|
||||
// 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 GPIO Toggle Test"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xGpioToggle.pjt");
|
||||
GEL_ProjectBuild("Example_2833xGpioToggle.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xGpioToggle.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("GpioDataRegs,x");
|
||||
GEL_WatchAdd("GpioCtrlRegs,x");
|
||||
}
|
||||
44
Source/External/v120/DSP2833x_examples/gpio_toggle/Example_2833xGpioToggle.pjt
vendored
Normal file
44
Source/External/v120/DSP2833x_examples/gpio_toggle/Example_2833xGpioToggle.pjt
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
; 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\gpio_toggle\"
|
||||
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_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_2833xGpioToggle.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\gpio_toggle\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\gpio_toggle\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\gpio_toggle\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_2833xGpioToggle.map" -o".\Debug\Example_2833xGpioToggle.out" -stack0x200 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xGpioToggle.out" -x
|
||||
|
||||
376
Source/External/v120/DSP2833x_examples/hrpwm/Example_2833xHRPWM.c
vendored
Normal file
376
Source/External/v120/DSP2833x_examples/hrpwm/Example_2833xHRPWM.c
vendored
Normal file
@@ -0,0 +1,376 @@
|
||||
// TI File $Revision: /main/14 $
|
||||
// Checkin $Date: May 5, 2008 15:25:53 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xHRPWM.c
|
||||
//
|
||||
// TITLE: DSP2833x Device HRPWM example
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// Monitor ePWM1-ePWM4 pins 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 modifies the MEP control registers to show edge displacement
|
||||
// due to the HRPWM control extension of the respective ePWM module
|
||||
// All ePWM1A,2A,3A,4A channels (GPIO0, GPIO2, GPIO4, GPIO6) will have fine edge movement
|
||||
// due to HRPWM logic
|
||||
//
|
||||
// 1. 15MHz PWM (for 150 MHz SYSCLKOUT) or 10MHz PWM (for 100MHz SYSCLKOUT),
|
||||
// ePWM1A toggle low/high with MEP control on rising edge
|
||||
// 15MHz PWM (for 150 MHz SYSCLKOUT) or 10MHz PWM (for 100MHz SYSCLKOUT),
|
||||
// ePWM1B toggle low/high with NO HRPWM control
|
||||
//
|
||||
// 2. 7.5MHz PWM (for 150 MHz SYSCLKOUT) or 5MHz PWM (for 100MHz SYSCLKOUT),
|
||||
// ePWM2A toggle low/high with MEP control on rising edge
|
||||
// 7.5MHz PWM (for 150 MHz SYSCLKOUT) or 5MHz PWM (for 100MHz SYSCLKOUT),
|
||||
// ePWM2B toggle low/high with NO HRPWM control
|
||||
//
|
||||
// 3. 15MHz PWM (for 150 MHz SYSCLKOUT) or 10MHz PWM (for 100MHz SYSCLKOUT),
|
||||
// ePWM3A toggle as high/low with MEP control on falling edge
|
||||
// 15MHz PWM (for 150 MHz SYSCLKOUT) or 10MHz PWM (for 100MHz SYSCLKOUT),
|
||||
// ePWM3B toggle low/high with NO HRPWM control
|
||||
//
|
||||
// 4. 7.5MHz PWM (for 150 MHz SYSCLKOUT) or 5MHz PWM (for 100MHz SYSCLKOUT),
|
||||
// ePWM4A toggle as high/low with MEP control on falling edge
|
||||
// 7.5MHz PWM (for 150 MHz SYSCLKOUT) or 5MHz PWM (for 100MHz SYSCLKOUT),
|
||||
// ePWM4B toggle low/high with NO HRPWM control
|
||||
//
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
#include "DSP2833x_EPwm_defines.h" // useful defines for initialization
|
||||
|
||||
|
||||
// Declare your function prototypes here
|
||||
//---------------------------------------------------------------
|
||||
|
||||
void HRPWM1_Config(int);
|
||||
void HRPWM2_Config(int);
|
||||
void HRPWM3_Config(int);
|
||||
void HRPWM4_Config(int);
|
||||
|
||||
// General System nets - Useful for debug
|
||||
Uint16 i,j, DutyFine, n,update;
|
||||
|
||||
Uint32 temp;
|
||||
|
||||
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 for ePWM1-ePWM4
|
||||
|
||||
// For this case just init GPIO pins for ePWM1, ePWM2, ePWM3, ePWM4
|
||||
// These functions are in the DSP2833x_EPwm.c file
|
||||
InitEPwm1Gpio();
|
||||
InitEPwm2Gpio();
|
||||
InitEPwm3Gpio();
|
||||
InitEPwm4Gpio();
|
||||
|
||||
// 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
|
||||
|
||||
// For this example, only initialize the ePWM
|
||||
// Step 5. User specific code, enable interrupts:
|
||||
|
||||
update =1;
|
||||
DutyFine =0;
|
||||
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
|
||||
EDIS;
|
||||
|
||||
// Some useful Period vs Frequency values
|
||||
// SYSCLKOUT = 150MHz 100 MHz
|
||||
// -----------------------------------------
|
||||
// Period Frequency Frequency
|
||||
// 1000 150 kHz 100 KHz
|
||||
// 800 187 kHz 125 KHz
|
||||
// 600 250 kHz 167 KHz
|
||||
// 500 300 kHz 200 KHz
|
||||
// 250 600 kHz 400 KHz
|
||||
// 200 750 kHz 500 KHz
|
||||
// 100 1.5 MHz 1.0 MHz
|
||||
// 50 3.0 MHz 2.0 MHz
|
||||
// 25 6.0 MHz 4.0 MHz
|
||||
// 20 7.5 MHz 5.0 MHz
|
||||
// 12 12.5 MHz 8.33 MHz
|
||||
// 10 15.0 MHz 10.0 MHz
|
||||
// 9 16.7 MHz 11.1 MHz
|
||||
// 8 18.8 MHz 12.5 MHz
|
||||
// 7 21.4 MHz 14.3 MHz
|
||||
// 6 25.0 MHz 16.7 MHz
|
||||
// 5 30.0 MHz 20.0 MHz
|
||||
|
||||
//====================================================================
|
||||
// ePWM and HRPWM register initializaition
|
||||
//====================================================================
|
||||
HRPWM1_Config(10); // ePWM1 target, 15 MHz PWM (SYSCLK=150MHz) or 10 MHz PWM (SYSCLK=100MHz)
|
||||
HRPWM2_Config(20); // ePWM2 target, 7.5 MHz PWM (SYSCLK=150MHz) or 5 MHz PWM (SYSCLK=100MHz)
|
||||
HRPWM3_Config(10); // ePWM3 target, 15 MHz PWM (SYSCLK=150MHz) or 10 MHz PWM (SYSCLK=100MHz)
|
||||
HRPWM4_Config(20); // ePWM4 target, 7.5 MHz PWM (SYSCLK=150MHz) or 5 MHz PWM (SYSCLK=100MHz)
|
||||
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
|
||||
EDIS;
|
||||
|
||||
while (update ==1)
|
||||
|
||||
{
|
||||
|
||||
for(DutyFine =1; DutyFine <256 ;DutyFine ++)
|
||||
{
|
||||
|
||||
// Example, write to the HRPWM extension of CMPA
|
||||
EPwm1Regs.CMPA.half.CMPAHR = DutyFine << 8; // Left shift by 8 to write into MSB bits
|
||||
EPwm2Regs.CMPA.half.CMPAHR = DutyFine << 8; // Left shift by 8 to write into MSB bits
|
||||
|
||||
// Example, 32-bit write to CMPA:CMPAHR
|
||||
EPwm3Regs.CMPA.all = ((Uint32)EPwm3Regs.CMPA.half.CMPA << 16) + (DutyFine << 8);
|
||||
EPwm4Regs.CMPA.all = ((Uint32)EPwm4Regs.CMPA.half.CMPA << 16) + (DutyFine << 8);
|
||||
|
||||
for (i=0;i<10000;i++){} // Dummy delay between MEP changes
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void HRPWM1_Config(period)
|
||||
{
|
||||
// ePWM1 register configuration with HRPWM
|
||||
// ePWM1A toggle low/high with MEP control on Rising edge
|
||||
|
||||
EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // set Immediate load
|
||||
EPwm1Regs.TBPRD = period-1; // PWM frequency = 1 / period
|
||||
EPwm1Regs.CMPA.half.CMPA = period / 2; // set duty 50% initially
|
||||
EPwm1Regs.CMPA.half.CMPAHR = (1 << 8); // initialize HRPWM extension
|
||||
EPwm1Regs.CMPB = period / 2; // set duty 50% initially
|
||||
EPwm1Regs.TBPHS.all = 0;
|
||||
EPwm1Regs.TBCTR = 0;
|
||||
|
||||
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
|
||||
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // EPWM1 is the Master
|
||||
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
|
||||
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
|
||||
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
|
||||
|
||||
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
|
||||
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
|
||||
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
|
||||
EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR; // PWM toggle low/high
|
||||
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;
|
||||
EPwm1Regs.AQCTLB.bit.ZRO = AQ_CLEAR;
|
||||
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;
|
||||
|
||||
EALLOW;
|
||||
EPwm1Regs.HRCNFG.all = 0x0;
|
||||
EPwm1Regs.HRCNFG.bit.EDGMODE = HR_REP; //MEP control on Rising edge
|
||||
EPwm1Regs.HRCNFG.bit.CTLMODE = HR_CMP;
|
||||
EPwm1Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO;
|
||||
EDIS;
|
||||
}
|
||||
|
||||
void HRPWM2_Config(period)
|
||||
{
|
||||
// ePWM2 register configuration with HRPWM
|
||||
// ePWM2A toggle low/high with MEP control on Rising edge
|
||||
|
||||
EPwm2Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // set Immediate load
|
||||
EPwm2Regs.TBPRD = period-1; // PWM frequency = 1 / period
|
||||
EPwm2Regs.CMPA.half.CMPA = period / 2; // set duty 50% initially
|
||||
EPwm2Regs.CMPA.half.CMPAHR = (1 << 8); // initialize HRPWM extension
|
||||
EPwm2Regs.CMPB = period / 2; // set duty 50% initially
|
||||
EPwm2Regs.TBPHS.all = 0;
|
||||
EPwm2Regs.TBCTR = 0;
|
||||
|
||||
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
|
||||
EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE; // ePWM2 is the Master
|
||||
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
|
||||
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
|
||||
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;
|
||||
|
||||
EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
|
||||
EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
|
||||
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
|
||||
EPwm2Regs.AQCTLA.bit.ZRO = AQ_CLEAR; // PWM toggle low/high
|
||||
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;
|
||||
EPwm2Regs.AQCTLB.bit.ZRO = AQ_CLEAR;
|
||||
EPwm2Regs.AQCTLB.bit.CBU = AQ_SET;
|
||||
|
||||
EALLOW;
|
||||
EPwm2Regs.HRCNFG.all = 0x0;
|
||||
EPwm2Regs.HRCNFG.bit.EDGMODE = HR_REP; //MEP control on Rising edge
|
||||
EPwm2Regs.HRCNFG.bit.CTLMODE = HR_CMP;
|
||||
EPwm2Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO;
|
||||
|
||||
EDIS;
|
||||
|
||||
}
|
||||
void HRPWM3_Config(period)
|
||||
{
|
||||
// ePWM3 register configuration with HRPWM
|
||||
// ePWM3A toggle high/low with MEP control on falling edge
|
||||
|
||||
EPwm3Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // set Immediate load
|
||||
EPwm3Regs.TBPRD = period-1; // PWM frequency = 1 / period
|
||||
EPwm3Regs.CMPA.half.CMPA = period / 2; // set duty 50% initially
|
||||
EPwm3Regs.CMPA.half.CMPAHR = (1 << 8); // initialize HRPWM extension
|
||||
EPwm3Regs.CMPB = period / 2; // set duty 50% initially
|
||||
EPwm3Regs.TBPHS.all = 0;
|
||||
EPwm3Regs.TBCTR = 0;
|
||||
|
||||
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
|
||||
EPwm3Regs.TBCTL.bit.PHSEN = TB_DISABLE; // ePWM3 is the Master
|
||||
EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
|
||||
EPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
|
||||
EPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV1;
|
||||
|
||||
EPwm3Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
|
||||
EPwm3Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
EPwm3Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
|
||||
EPwm3Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
|
||||
EPwm3Regs.AQCTLA.bit.ZRO = AQ_SET; // PWM toggle high/low
|
||||
EPwm3Regs.AQCTLA.bit.CAU = AQ_CLEAR;
|
||||
EPwm3Regs.AQCTLB.bit.ZRO = AQ_SET;
|
||||
EPwm3Regs.AQCTLB.bit.CBU = AQ_CLEAR;
|
||||
|
||||
EALLOW;
|
||||
EPwm3Regs.HRCNFG.all = 0x0;
|
||||
EPwm3Regs.HRCNFG.bit.EDGMODE = HR_FEP; //MEP control on falling edge
|
||||
EPwm3Regs.HRCNFG.bit.CTLMODE = HR_CMP;
|
||||
EPwm3Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO;
|
||||
EDIS;
|
||||
}
|
||||
|
||||
void HRPWM4_Config(period)
|
||||
{
|
||||
// ePWM4 register configuration with HRPWM
|
||||
// ePWM4A toggle high/low with MEP control on falling edge
|
||||
|
||||
EPwm4Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // set Immediate load
|
||||
EPwm4Regs.TBPRD = period-1; // PWM frequency = 1 / period
|
||||
EPwm4Regs.CMPA.half.CMPA = period / 2; // set duty 50% initially
|
||||
EPwm4Regs.CMPA.half.CMPAHR = (1 << 8); // initialize HRPWM extension
|
||||
EPwm4Regs.CMPB = period / 2; // set duty 50% initially
|
||||
EPwm4Regs.TBPHS.all = 0;
|
||||
EPwm4Regs.TBCTR = 0;
|
||||
|
||||
EPwm4Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
|
||||
EPwm4Regs.TBCTL.bit.PHSEN = TB_DISABLE; // ePWM4 is the Master
|
||||
EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
|
||||
EPwm4Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
|
||||
EPwm4Regs.TBCTL.bit.CLKDIV = TB_DIV1;
|
||||
|
||||
EPwm4Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
|
||||
EPwm4Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
EPwm4Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
|
||||
EPwm4Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
|
||||
EPwm4Regs.AQCTLA.bit.ZRO = AQ_SET; // PWM toggle high/low
|
||||
EPwm4Regs.AQCTLA.bit.CAU = AQ_CLEAR;
|
||||
EPwm4Regs.AQCTLB.bit.ZRO = AQ_SET;
|
||||
EPwm4Regs.AQCTLB.bit.CBU = AQ_CLEAR;
|
||||
|
||||
EALLOW;
|
||||
EPwm4Regs.HRCNFG.all = 0x0;
|
||||
EPwm4Regs.HRCNFG.bit.EDGMODE = HR_FEP; // MEP control on falling edge
|
||||
EPwm4Regs.HRCNFG.bit.CTLMODE = HR_CMP;
|
||||
EPwm4Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO;
|
||||
EDIS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
42
Source/External/v120/DSP2833x_examples/hrpwm/Example_2833xHRPWM.gel
vendored
Normal file
42
Source/External/v120/DSP2833x_examples/hrpwm/Example_2833xHRPWM.gel
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:17:09 $
|
||||
//###########################################################################
|
||||
//
|
||||
// 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 HRPWM"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xHRPWM.pjt");
|
||||
GEL_ProjectBuild("Example_2833xHRPWM.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xHRPWM.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("DutyFine,x");
|
||||
GEL_WatchAdd("update,x");
|
||||
GEL_WatchAdd("EPwm1Regs,x");
|
||||
GEL_WatchAdd("EPwm2Regs,x");
|
||||
GEL_WatchAdd("EPwm3Regs,x");
|
||||
GEL_WatchAdd("EPwm4Regs,x");
|
||||
|
||||
}
|
||||
51
Source/External/v120/DSP2833x_examples/hrpwm/Example_2833xHRPWM.pjt
vendored
Normal file
51
Source/External/v120/DSP2833x_examples/hrpwm/Example_2833xHRPWM.pjt
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
; 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\hrpwm\"
|
||||
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_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_2833xHRPWM.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -k -q -al -as -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\hrpwm\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\hrpwm\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\hrpwm\Release" -d"LARGE_MODEL" -ml -v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Debug"]
|
||||
Options=-v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Release"]
|
||||
Options=-v28
|
||||
|
||||
["Linker" Settings: "Debug"]
|
||||
Options=-q -cr -ecode_start -m".\Debug\Example_2833xHRPWM.map" -o".\Debug\Example_2833xHRPWM.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xHRPWM.out" -x
|
||||
|
||||
["..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c" Settings: "Debug"]
|
||||
LinkOrder=1
|
||||
|
||||
["..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd" Settings: "Debug"]
|
||||
LinkOrder=2
|
||||
|
||||
546
Source/External/v120/DSP2833x_examples/hrpwm_sfo/Example_2833xHRPWM_SFO.c
vendored
Normal file
546
Source/External/v120/DSP2833x_examples/hrpwm_sfo/Example_2833xHRPWM_SFO.c
vendored
Normal file
@@ -0,0 +1,546 @@
|
||||
// TI File $Revision: /main/15 $
|
||||
// Checkin $Date: May 5, 2008 15:25:56 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xHRPWM_SFO.c
|
||||
//
|
||||
// TITLE: DSP2833x Device HRPWM example
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
//
|
||||
// This program requires the DSP2833x header files, which include the
|
||||
// SFO_TI_Build_fpu.lib (or SFO_TI_Build.lib for fixed-point) and SFO.h
|
||||
// files required by this example.
|
||||
//
|
||||
// !!NOTE!!
|
||||
// By default, this example project is configured for floating-point math. All
|
||||
// included libraries must be pre-compiled for floating-point math.
|
||||
//
|
||||
// Therefore, SFO_TI_Build_fpu.lib (compiled for floating-point) is included in the
|
||||
// project instead of the SFO_TI_Build.lib (compiled for fixed-point).
|
||||
//
|
||||
// To convert the example for fixed-point math, follow the instructions in sfo_readme.txt
|
||||
// in the /doc directory of the header files and peripheral examples package.
|
||||
//
|
||||
//
|
||||
// Monitor ePWM1-ePWM4 pins on an oscilloscope as described
|
||||
// below.
|
||||
//
|
||||
// EPWM1A is on GPIO0
|
||||
// EPWM2A is on GPIO2
|
||||
// EPWM3A is on GPIO4
|
||||
// EPWM4A is on GPIO6
|
||||
//
|
||||
// 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 modifies the MEP control registers to show edge displacement
|
||||
// due to the HRPWM control extension of the respective ePWM module.
|
||||
//
|
||||
// This example calls the following TI's MEP Scale Factor Optimizer (SFO)
|
||||
// software library functions:
|
||||
//
|
||||
// void SFO_MepEn(int i);
|
||||
// initialize MEP_Scalefactor[i] dynamically when HRPWM is in use.
|
||||
//
|
||||
// void SFO_MepDis(int i);
|
||||
// initialize MEP_Scalefactor[i] when HRPWM is not used
|
||||
//
|
||||
// Where MEP_ScaleFactor[5] is a global array variable used by the SFO library
|
||||
//
|
||||
// This example is intended to explain the HRPWM capabilities. The code can be
|
||||
// optimized for code efficiency. Refer to TI's Digital power application
|
||||
// examples and TI Digital Power Supply software libraries for details.
|
||||
//
|
||||
// All ePWM1A,2A,3A,4A channels (GPIO0, GPIO2, GPIO4, GPIO6) will have fine
|
||||
// edge movement due to the HRPWM logic
|
||||
//
|
||||
// 1. 5MHz PWM (SYSCLK=150MHz) or 3.33MHz PWM (SYSCLK=100MHz), ePWM1A toggle low/high with MEP control on falling edge
|
||||
//
|
||||
// 2. 5MHz PWM (SYSCLK=150MHz) or 3.33MHz PWM (SYSCLK=100MHz) ePWM2A toggle low/high with MEP control on falling edge
|
||||
//
|
||||
// 3. 5MHz PWM (SYSCLK=150MHz) or 3.33MHz PWM (SYSCLK=100MHz) ePWM3A toggle high/low with MEP control on falling edge
|
||||
//
|
||||
// 4. 5MHz PWM (SYSCLK=150MHz) or 3.33MHz PWM (SYSCLK=100MHz) ePWM4A toggle high/low with MEP control on falling edge
|
||||
//
|
||||
// To load and run this example:
|
||||
// 1. Run this example at 150MHz SYSCLKOUT (or 100 MHz SYSCLKOUT for 100 MHz devices)
|
||||
// 2. Load the Example_2833xHRPWM_SFO.gel and observe variables in the watch window
|
||||
// 3. Activate Real time mode
|
||||
// 4. Run the code
|
||||
// 5. Watch ePWM1A-4A waveforms on a Oscillosope
|
||||
// 6. In the watch window:
|
||||
// Set the variable UpdateFine = 1 to observe the ePWMxA output
|
||||
// with HRPWM capabilites (default)
|
||||
// Observe the duty cycle of the waveform changes in fine MEP steps
|
||||
// 7. In the watch window:
|
||||
// Change the variable UpdateFine to 0, to observe the
|
||||
// ePWMxA output without HRPWM capabilites
|
||||
// Observe the duty cycle of the waveform changes in coarse steps of 10nsec.
|
||||
//
|
||||
//
|
||||
// Watch Variables:
|
||||
// UpdateFine
|
||||
// MEP_ScaleFactor
|
||||
// EPwm1Regs.CMPA.all
|
||||
// EPwm2Regs.CMPA.all
|
||||
// EPwm3Regs.CMPA.all
|
||||
// EPwm4Regs.CMPA.all
|
||||
//
|
||||
//
|
||||
// IMPORTANT NOTE!!!!!
|
||||
//
|
||||
// THE SFO.H FUNCTIONS INCLUDED WITH THIS EXAMPLE ONLY SUPPORTS EPWM1-EPWM4. FOR
|
||||
// SUPPORT FOR MORE THAN 4 EPWMS, USE SFO_V5.H WITH THE SFO_TI_BUILD_V5.LIB LIBRARY.
|
||||
// SEE THE HRPWM REFERENCE GUIDE (SPRU924) FOR USAGE INFORMATION AND DIFFERENCES
|
||||
// BETWEEN VERSIONS.
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
#include "DSP2833x_EPwm_defines.h" // useful defines for initialization
|
||||
#include "SFO.h" // SFO library headerfile
|
||||
|
||||
// Declare your function prototypes here
|
||||
//---------------------------------------------------------------
|
||||
void HRPWM1_Config(int);
|
||||
void HRPWM2_Config(int);
|
||||
void HRPWM3_Config(int);
|
||||
void HRPWM4_Config(int);
|
||||
|
||||
|
||||
// General System nets - Useful for debug
|
||||
Uint16 j,duty, DutyFine, n, UpdateFine;
|
||||
volatile int i;
|
||||
Uint32 temp;
|
||||
|
||||
// Global array used by the SFO library
|
||||
int16 MEP_ScaleFactor[5];
|
||||
|
||||
|
||||
volatile struct EPWM_REGS *ePWM[] =
|
||||
{ &EPwm1Regs, &EPwm1Regs, &EPwm2Regs, &EPwm3Regs, &EPwm4Regs, &EPwm5Regs, &EPwm6Regs};
|
||||
|
||||
|
||||
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 for ePWM1-ePWM4
|
||||
|
||||
// For this case just init GPIO pins for ePWM1, ePWM2, ePWM3, ePWM4
|
||||
// These functions are in the DSP2833x_EPwm.c file
|
||||
InitEPwm1Gpio();
|
||||
InitEPwm2Gpio();
|
||||
InitEPwm3Gpio();
|
||||
InitEPwm4Gpio();
|
||||
|
||||
// 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
|
||||
|
||||
// For this example, only initialize the ePWM
|
||||
// Step 5. User specific code, enable interrupts:
|
||||
|
||||
UpdateFine = 1;
|
||||
DutyFine = 0;
|
||||
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
|
||||
EDIS;
|
||||
|
||||
// MEP_ScaleFactor variables iitialization for SFO library functions
|
||||
MEP_ScaleFactor[0] = 0; //Common Variables for SFO functions
|
||||
MEP_ScaleFactor[1] = 0; //SFO for HRPWM1
|
||||
MEP_ScaleFactor[2] = 0; //SFO for HRPWM2
|
||||
MEP_ScaleFactor[3] = 0; //SFO for HRPWM3
|
||||
MEP_ScaleFactor[4] = 0; //SFO for HRPWM4
|
||||
|
||||
// MEP_ScaleFactor variables initialized using function SFO_MepDis
|
||||
while ( MEP_ScaleFactor[1] == 0 ) SFO_MepDis(1); //SFO for HRPWM1
|
||||
while ( MEP_ScaleFactor[2] == 0 ) SFO_MepDis(2); //SFO for HRPWM2
|
||||
while ( MEP_ScaleFactor[3] == 0 ) SFO_MepDis(3); //SFO for HRPWM3
|
||||
while ( MEP_ScaleFactor[4] == 0 ) SFO_MepDis(4); //SFO for HRPWM4
|
||||
|
||||
// Initialize a common seed variable MEP_ScaleFactor[0] required for all SFO functions
|
||||
MEP_ScaleFactor[0] = MEP_ScaleFactor[1]; //Common Variable for SFO library functions
|
||||
|
||||
/// Some useful Period vs Frequency values
|
||||
// SYSCLKOUT = 150MHz 100 MHz
|
||||
// -----------------------------------------
|
||||
// Period Frequency Frequency
|
||||
// 1000 150 kHz 100 KHz
|
||||
// 800 187 kHz 125 KHz
|
||||
// 600 250 kHz 167 KHz
|
||||
// 500 300 kHz 200 KHz
|
||||
// 250 600 kHz 400 KHz
|
||||
// 200 750 kHz 500 KHz
|
||||
// 100 1.5 MHz 1.0 MHz
|
||||
// 50 3.0 MHz 2.0 MHz
|
||||
// 30 5.0 MHz 3.33 MHz
|
||||
// 25 6.0 MHz 4.0 MHz
|
||||
// 20 7.5 MHz 5.0 MHz
|
||||
// 12 12.5 MHz 8.33 MHz
|
||||
// 10 15.0 MHz 10.0 MHz
|
||||
// 9 16.7 MHz 11.1 MHz
|
||||
// 8 18.8 MHz 12.5 MHz
|
||||
// 7 21.4 MHz 14.3 MHz
|
||||
// 6 25.0 MHz 16.7 MHz
|
||||
// 5 30.0 MHz 20.0 MHz
|
||||
|
||||
//====================================================================
|
||||
// ePWM and HRPWM register initializaition
|
||||
//====================================================================
|
||||
HRPWM1_Config(30); // ePWM1 target, 5 MHz PWM (SYSCLK=150MHz) or 3.33 MHz PWM (SYSCLK=100MHz)
|
||||
HRPWM2_Config(30); // ePWM2 target, 5 MHz PWM (SYSCLK=150MHz) or 3.33 MHz PWM (SYSCLK=100MHz)
|
||||
HRPWM3_Config(30); // ePWM3 target, 5 MHz PWM (SYSCLK=150MHz) or 3.33 MHz PWM (SYSCLK=100MHz)
|
||||
HRPWM4_Config(30); // ePWM4 target, 5 MHz PWM (SYSCLK=150MHz) or 3.33 MHz PWM (SYSCLK=100MHz)
|
||||
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
|
||||
|
||||
EDIS;
|
||||
|
||||
for(;;)
|
||||
{
|
||||
// Sweep DutyFine as a Q15 number from 0.2 - 0.999
|
||||
for(DutyFine = 0x2300; DutyFine < 0x7000; DutyFine++)
|
||||
{
|
||||
// Variables
|
||||
int16 CMPA_reg_val, CMPAHR_reg_val;
|
||||
int32 temp;
|
||||
|
||||
if(UpdateFine)
|
||||
{
|
||||
/*
|
||||
// CMPA_reg_val is calculated as a Q0.
|
||||
// Since DutyFine is a Q15 number, and the period is Q0
|
||||
// the product is Q15. So to store as a Q0, we shift right
|
||||
// 15 bits.
|
||||
|
||||
CMPA_reg_val = ((long)DutyFine * EPwm1Regs.TBPRD)>>15;
|
||||
|
||||
// This next step is to obtain the remainder which was
|
||||
// truncated during our 15 bit shift above.
|
||||
// compute the whole value, and then subtract CMPA_reg_val
|
||||
// shifted LEFT 15 bits:
|
||||
temp = ((long)DutyFine * EPwm1Regs.TBPRD) ;
|
||||
temp = temp - ((long)CMPA_reg_val<<15);
|
||||
|
||||
// This obtains the MEP count in digits, from
|
||||
// 0,1, .... MEP_Scalefactor. Once again since this is Q15
|
||||
// convert to Q0 by shifting:
|
||||
CMPAHR_reg_val = (temp*MEP_ScaleFactor[1])>>15;
|
||||
|
||||
// Now the lower 8 bits contain the MEP count.
|
||||
// Since the MEP count needs to be in the upper 8 bits of
|
||||
// the 16 bit CMPAHR register, shift left by 8.
|
||||
CMPAHR_reg_val = CMPAHR_reg_val << 8;
|
||||
|
||||
// Add the offset and rounding
|
||||
CMPAHR_reg_val += 0x0180;
|
||||
|
||||
// Write the values to the registers as one 32-bit or two 16-bits
|
||||
EPwm1Regs.CMPA.half.CMPA = CMPA_reg_val;
|
||||
EPwm1Regs.CMPA.half.CMPAHR = CMPAHR_reg_val;
|
||||
*/
|
||||
|
||||
// All the above operations may be condensed into
|
||||
// the following form:
|
||||
// EPWM1 calculations
|
||||
|
||||
CMPA_reg_val = ((long)DutyFine * EPwm1Regs.TBPRD)>>15;
|
||||
temp = ((long)DutyFine * EPwm1Regs.TBPRD) ;
|
||||
temp = temp - ((long)CMPA_reg_val<<15);
|
||||
CMPAHR_reg_val = (temp*MEP_ScaleFactor[1])>>15;
|
||||
CMPAHR_reg_val = CMPAHR_reg_val << 8;
|
||||
CMPAHR_reg_val += 0x0180;
|
||||
|
||||
// Example for a 32 bit write to CMPA:CMPAHR
|
||||
EPwm1Regs.CMPA.all = ((long)CMPA_reg_val)<<16 | CMPAHR_reg_val;
|
||||
|
||||
|
||||
// EPWM2 calculations
|
||||
CMPA_reg_val = ((long)DutyFine * EPwm2Regs.TBPRD)>>15;
|
||||
temp = ((long)DutyFine * EPwm2Regs.TBPRD) ;
|
||||
temp = temp - ((long)CMPA_reg_val<<15);
|
||||
CMPAHR_reg_val = (temp*MEP_ScaleFactor[2])>>15;
|
||||
CMPAHR_reg_val = CMPAHR_reg_val << 8;
|
||||
CMPAHR_reg_val += 0x0180;
|
||||
// Example as a 16 bit write to CMPA and then a 16-bit write to CMPAHR
|
||||
EPwm2Regs.CMPA.half.CMPA = CMPA_reg_val;
|
||||
EPwm2Regs.CMPA.half.CMPAHR = CMPAHR_reg_val;
|
||||
|
||||
// EPWM3 calculations
|
||||
CMPA_reg_val = ((long)DutyFine * EPwm3Regs.TBPRD)>>15;
|
||||
temp = ((long)DutyFine * EPwm3Regs.TBPRD) ;
|
||||
temp = temp - ((long)CMPA_reg_val<<15);
|
||||
CMPAHR_reg_val = (temp*MEP_ScaleFactor[3])>>15;
|
||||
CMPAHR_reg_val = CMPAHR_reg_val << 8;
|
||||
CMPAHR_reg_val += 0x0180;
|
||||
EPwm3Regs.CMPA.half.CMPA = CMPA_reg_val;
|
||||
EPwm3Regs.CMPA.half.CMPAHR = CMPAHR_reg_val;
|
||||
|
||||
// EPWM4 calculations
|
||||
CMPA_reg_val = ((long)DutyFine * EPwm4Regs.TBPRD)>>15;
|
||||
temp = ((long)DutyFine * EPwm4Regs.TBPRD) ;
|
||||
temp = temp - ((long)CMPA_reg_val<<15);
|
||||
CMPAHR_reg_val = (temp*MEP_ScaleFactor[4])>>15;
|
||||
CMPAHR_reg_val = CMPAHR_reg_val << 8;
|
||||
CMPAHR_reg_val += 0x0180;
|
||||
EPwm4Regs.CMPA.half.CMPA = CMPA_reg_val;
|
||||
EPwm4Regs.CMPA.half.CMPAHR = CMPAHR_reg_val;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// CMPA_reg_val is calculated as a Q0.
|
||||
// Since DutyFine is a Q15 number, and the period is Q0
|
||||
// the product is Q15. So to store as a Q0, we shift right
|
||||
// 15 bits.
|
||||
|
||||
EPwm1Regs.CMPA.half.CMPA = ((long)DutyFine * EPwm1Regs.TBPRD>>15);
|
||||
EPwm2Regs.CMPA.half.CMPA = ((long)DutyFine * EPwm2Regs.TBPRD)>>15;
|
||||
EPwm3Regs.CMPA.half.CMPA = ((long)DutyFine * EPwm3Regs.TBPRD)>>15;
|
||||
EPwm4Regs.CMPA.half.CMPA = ((long)DutyFine * EPwm4Regs.TBPRD)>>15;
|
||||
|
||||
}
|
||||
|
||||
|
||||
for (i=0;i<300;i++)
|
||||
{
|
||||
// Call the scale factor optimizer lib
|
||||
SFO_MepEn(1);
|
||||
SFO_MepEn(2);
|
||||
SFO_MepEn(3);
|
||||
SFO_MepEn(4);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void HRPWM1_Config(period)
|
||||
{
|
||||
// ePWM1 register configuration with HRPWM
|
||||
// ePWM1A toggle low/high with MEP control on Rising edge
|
||||
|
||||
EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // set Immediate load
|
||||
EPwm1Regs.TBPRD = period-1; // PWM frequency = 1 / period
|
||||
EPwm1Regs.CMPA.half.CMPA = period / 2; // set duty 50% initially
|
||||
EPwm1Regs.CMPA.half.CMPAHR = (1 << 8); // initialize HRPWM extension
|
||||
EPwm1Regs.CMPB = period / 2; // set duty 50% initially
|
||||
EPwm1Regs.TBPHS.all = 0;
|
||||
EPwm1Regs.TBCTR = 0;
|
||||
|
||||
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
|
||||
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // EPWM1 is the Master
|
||||
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
|
||||
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
|
||||
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
|
||||
EPwm1Regs.TBCTL.bit.FREE_SOFT = 11;
|
||||
|
||||
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
|
||||
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
|
||||
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
|
||||
|
||||
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // PWM toggle high/low
|
||||
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
|
||||
EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;
|
||||
EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;
|
||||
|
||||
|
||||
|
||||
EALLOW;
|
||||
EPwm1Regs.HRCNFG.all = 0x0;
|
||||
EPwm1Regs.HRCNFG.bit.EDGMODE = HR_FEP; //MEP control on falling edge
|
||||
EPwm1Regs.HRCNFG.bit.CTLMODE = HR_CMP;
|
||||
EPwm1Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO;
|
||||
EDIS;
|
||||
}
|
||||
|
||||
void HRPWM2_Config(period)
|
||||
{
|
||||
// ePWM2 register configuration with HRPWM
|
||||
// ePWM2A toggle low/high with MEP control on Rising edge
|
||||
|
||||
EPwm2Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // set Immediate load
|
||||
EPwm2Regs.TBPRD = period-1; // PWM frequency = 1 / period
|
||||
EPwm2Regs.CMPA.half.CMPA = period / 2; // set duty 50% initially
|
||||
EPwm1Regs.CMPA.half.CMPAHR = (1 << 8); // initialize HRPWM extension
|
||||
EPwm2Regs.CMPB = period / 2; // set duty 50% initially
|
||||
EPwm2Regs.TBPHS.all = 0;
|
||||
EPwm2Regs.TBCTR = 0;
|
||||
|
||||
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
|
||||
EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE; // ePWM2 is the Master
|
||||
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
|
||||
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
|
||||
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;
|
||||
EPwm2Regs.TBCTL.bit.FREE_SOFT = 11;
|
||||
|
||||
EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
|
||||
EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
|
||||
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
|
||||
EPwm2Regs.AQCTLA.bit.ZRO = AQ_SET; // PWM toggle high/low
|
||||
EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR;
|
||||
EPwm2Regs.AQCTLB.bit.ZRO = AQ_SET;
|
||||
EPwm2Regs.AQCTLB.bit.CBU = AQ_CLEAR;
|
||||
|
||||
EALLOW;
|
||||
EPwm2Regs.HRCNFG.all = 0x0;
|
||||
EPwm2Regs.HRCNFG.bit.EDGMODE = HR_FEP; //MEP control on falling edge
|
||||
EPwm2Regs.HRCNFG.bit.CTLMODE = HR_CMP;
|
||||
EPwm2Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO;
|
||||
|
||||
EDIS;
|
||||
|
||||
}
|
||||
void HRPWM3_Config(period)
|
||||
{
|
||||
// ePWM3 register configuration with HRPWM
|
||||
// ePWM3A toggle high/low with MEP control on falling edge
|
||||
|
||||
EPwm3Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // set Immediate load
|
||||
EPwm3Regs.TBPRD = period-1; // PWM frequency = 1 / period
|
||||
EPwm3Regs.CMPA.half.CMPA = period / 2; // set duty 50% initially
|
||||
EPwm3Regs.CMPA.half.CMPAHR = (1 << 8); // initialize HRPWM extension
|
||||
EPwm3Regs.TBPHS.all = 0;
|
||||
EPwm3Regs.TBCTR = 0;
|
||||
|
||||
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
|
||||
EPwm3Regs.TBCTL.bit.PHSEN = TB_DISABLE; // ePWM3 is the Master
|
||||
EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
|
||||
EPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
|
||||
EPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV1;
|
||||
EPwm3Regs.TBCTL.bit.FREE_SOFT = 11;
|
||||
|
||||
EPwm3Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
|
||||
EPwm3Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
EPwm3Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
|
||||
EPwm3Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
|
||||
EPwm3Regs.AQCTLA.bit.ZRO = AQ_SET; // PWM toggle high/low
|
||||
EPwm3Regs.AQCTLA.bit.CAU = AQ_CLEAR;
|
||||
EPwm3Regs.AQCTLB.bit.ZRO = AQ_SET;
|
||||
EPwm3Regs.AQCTLB.bit.CBU = AQ_CLEAR;
|
||||
|
||||
EALLOW;
|
||||
EPwm3Regs.HRCNFG.all = 0x0;
|
||||
EPwm3Regs.HRCNFG.bit.EDGMODE = HR_FEP; //MEP control on falling edge
|
||||
EPwm3Regs.HRCNFG.bit.CTLMODE = HR_CMP;
|
||||
EPwm3Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO;
|
||||
EDIS;
|
||||
}
|
||||
|
||||
void HRPWM4_Config(period)
|
||||
{
|
||||
// ePWM4 register configuration with HRPWM
|
||||
// ePWM4A toggle high/low with MEP control on falling edge
|
||||
|
||||
EPwm4Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // set Immediate load
|
||||
EPwm4Regs.TBPRD = period-1; // PWM frequency = 1 / period
|
||||
EPwm4Regs.CMPA.half.CMPA = period / 2; // set duty 50% initially
|
||||
EPwm4Regs.CMPA.half.CMPAHR = (1 << 8); // initialize HRPWM extension
|
||||
EPwm4Regs.CMPB = period / 2; // set duty 50% initially
|
||||
EPwm4Regs.TBPHS.all = 0;
|
||||
EPwm4Regs.TBCTR = 0;
|
||||
|
||||
EPwm4Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
|
||||
EPwm4Regs.TBCTL.bit.PHSEN = TB_DISABLE; // ePWM4 is the Master
|
||||
EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
|
||||
EPwm4Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
|
||||
EPwm4Regs.TBCTL.bit.CLKDIV = TB_DIV1;
|
||||
EPwm4Regs.TBCTL.bit.FREE_SOFT = 11;
|
||||
|
||||
EPwm4Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
|
||||
EPwm4Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
EPwm4Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
|
||||
EPwm4Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
|
||||
EPwm4Regs.AQCTLA.bit.ZRO = AQ_SET; // PWM toggle high/low
|
||||
EPwm4Regs.AQCTLA.bit.CAU = AQ_CLEAR;
|
||||
EPwm4Regs.AQCTLB.bit.ZRO = AQ_SET;
|
||||
EPwm4Regs.AQCTLB.bit.CBU = AQ_CLEAR;
|
||||
|
||||
EALLOW;
|
||||
EPwm4Regs.HRCNFG.all = 0x0;
|
||||
EPwm4Regs.HRCNFG.bit.EDGMODE = HR_FEP; //MEP control on falling edge
|
||||
EPwm4Regs.HRCNFG.bit.CTLMODE = HR_CMP;
|
||||
EPwm4Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO;
|
||||
EDIS;
|
||||
}
|
||||
|
||||
// No more
|
||||
54
Source/External/v120/DSP2833x_examples/hrpwm_sfo/Example_2833xHRPWM_SFO.gel
vendored
Normal file
54
Source/External/v120/DSP2833x_examples/hrpwm_sfo/Example_2833xHRPWM_SFO.gel
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:17:23 $
|
||||
//###########################################################################
|
||||
//
|
||||
// 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 $
|
||||
//###########################################################################
|
||||
|
||||
//###########################################################################
|
||||
// Test Description: Run this GEL on F28335 or F2801.
|
||||
// The Watch window should give a Scale factor value of 67-70 for the HRPWM
|
||||
// modules in the device. F28335/6 will have four entries. F2801 will have three
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
menuitem "DSP2833x HRPWM SFO"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xHRPWM_SFO.pjt");
|
||||
GEL_ProjectBuild("Example_2833xHRPWM_SFO.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xHRPWM_SFO.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("UpdateFine");
|
||||
GEL_WatchAdd("EPwm1Regs.CMPA.all");
|
||||
GEL_WatchAdd("EPwm2Regs.CMPA.all");
|
||||
GEL_WatchAdd("EPwm3Regs.CMPA.all");
|
||||
GEL_WatchAdd("EPwm4Regs.CMPA.all");
|
||||
GEL_WatchAdd("MEP_ScaleFactor[1]");
|
||||
GEL_WatchAdd("MEP_ScaleFactor[2]");
|
||||
GEL_WatchAdd("MEP_ScaleFactor[3]");
|
||||
GEL_WatchAdd("MEP_ScaleFactor[4]");
|
||||
GEL_WatchAdd("EPwm1Regs,x");
|
||||
GEL_WatchAdd("EPwm2Regs,x");
|
||||
GEL_WatchAdd("EPwm3Regs,x");
|
||||
GEL_WatchAdd("EPwm4Regs,x");
|
||||
}
|
||||
59
Source/External/v120/DSP2833x_examples/hrpwm_sfo/Example_2833xHRPWM_SFO.pjt
vendored
Normal file
59
Source/External/v120/DSP2833x_examples/hrpwm_sfo/Example_2833xHRPWM_SFO.pjt
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
; 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\hrpwm_sfo\"
|
||||
ProjectType=Executable
|
||||
CPUFamily=TMS320C28XX
|
||||
Tool="Compiler"
|
||||
Tool="CustomBuilder"
|
||||
Tool="DspBiosBuilder"
|
||||
Tool="Linker"
|
||||
Config="Debug"
|
||||
Config="Release"
|
||||
|
||||
[Source Files]
|
||||
Source="..\..\DSP2833x_common\lib\SFO_TI_Build_fpu.lib"
|
||||
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_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_2833xHRPWM_SFO.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -k -q -pdr -pdv -al -as -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\hrpwm_sfo\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\hrpwm_sfo\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\hrpwm_sfo\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_2833xHRPWM_SFO.map" -o".\Debug\Example_2833xHRPWM_SFO.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xHRPWM_SFO.out" -x
|
||||
|
||||
["..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c" Settings: "Debug"]
|
||||
LinkOrder=1
|
||||
|
||||
["..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd" Settings: "Debug"]
|
||||
LinkOrder=1
|
||||
|
||||
["..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd" Settings: "Release"]
|
||||
LinkOrder=1
|
||||
|
||||
["..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd" Settings: "Debug"]
|
||||
LinkOrder=2
|
||||
|
||||
477
Source/External/v120/DSP2833x_examples/hrpwm_sfo_v5/Example_2833xHRPWM_SFO_V5.c
vendored
Normal file
477
Source/External/v120/DSP2833x_examples/hrpwm_sfo_v5/Example_2833xHRPWM_SFO_V5.c
vendored
Normal file
@@ -0,0 +1,477 @@
|
||||
// TI File $Revision: /main/14 $
|
||||
// Checkin $Date: June 23, 2008 08:58:36 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xHRPWM_SFO_V5.c
|
||||
//
|
||||
// TITLE: DSP2833x Device HRPWM SFO V5 example
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
//
|
||||
// This program requires the DSP2833x header files, which include
|
||||
// the following files required for this example:
|
||||
// SFO_V5.h and SFO_TI_Build_V5B_fpu.lib (or SFO_TI_Build_V5B.lib for fixed point)
|
||||
//
|
||||
//
|
||||
// !!NOTE!!
|
||||
// By default, this example project is configured for floating-point math. All included libraries
|
||||
// must be pre-compiled for floating-point math.
|
||||
//
|
||||
// Therefore, SFO_TI_Build_V5B_fpu.lib (compiled for floating-point) is included in the
|
||||
// project instead of the SFO_TI_Build_V5B.lib (compiled for fixed-point).
|
||||
//
|
||||
// To convert the example for fixed-point math, follow the instructions in sfo_readme.txt
|
||||
// in the /doc directory of the header files and peripheral examples package.
|
||||
//
|
||||
//
|
||||
// Monitor the following pins on an oscilloscope:
|
||||
// ePWM1A (GPIO0)
|
||||
// ePWM2A (GPIO2)
|
||||
// ePWM3A (GPIO4)
|
||||
// ePWM4A (GPIO6)
|
||||
// ePWM5A (GPIO8)
|
||||
// ePWM6A (GPIO10)
|
||||
//
|
||||
//
|
||||
// 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 modifies the MEP control registers to show edge displacement
|
||||
// due to the HRPWM control extension of the respective ePWM module.
|
||||
//
|
||||
// This example calls the following TI's MEP Scale Factor Optimizer (SFO)
|
||||
// software library V5 functions:
|
||||
//
|
||||
//
|
||||
// int SFO_MepEn_V5(int i);
|
||||
// updates MEP_ScaleFactor[i] dynamically when HRPWM is in use.
|
||||
// - returns 1 when complete for the specified channel
|
||||
// - returns 0 if not complete for the specified channel
|
||||
// - returns 2 if there is a scale factor out-of-range error
|
||||
// (MEP_ScaleFactor[n] differs from seed MEP_ScaleFactor[0]
|
||||
// by more than +/-15). To remedy this:
|
||||
// 1. Check your software to make sure MepEn completes for
|
||||
// 1 channel before calling MepEn for another channel.
|
||||
// 2. Re-run MepDis and re-seed MEP_ScaleFactor[0]. Then
|
||||
// try again.
|
||||
// 3. If reason is known and acceptable, treat return of "2"
|
||||
// like a return of "1", indicating calibration complete.
|
||||
//
|
||||
// int SFO_MepDis_V5(int i);
|
||||
// updates MEP_ScaleFactor[i] when HRPWM is not used
|
||||
// - returns 1 when complete for the specified channel
|
||||
// - returns 0 if not complete for the specified channel
|
||||
//
|
||||
// MEP_ScaleFactor[PWM_CH] is a global array variable used by the SFO library
|
||||
//
|
||||
// =======================================================================
|
||||
// NOTE: For more information on using the SFO software library, see the
|
||||
// High-Resolution Pulse Width Modulator (HRPWM) Reference Guide (spru924)
|
||||
// =======================================================================
|
||||
//
|
||||
// This example is intended to explain the HRPWM capabilities. The code can be
|
||||
// optimized for code efficiency. Refer to TI's Digital power application
|
||||
// examples and TI Digital Power Supply software libraries for details.
|
||||
//
|
||||
// All ePWM1A-6A channels will have fine
|
||||
// edge movement due to the HRPWM logic
|
||||
//
|
||||
// 5MHz PWM (for 150 MHz SYSCLKOUT), ePWMxA toggle high/low with MEP control on rising edge
|
||||
// 3.33MHz PWM (for 100 MHz SYSCLKOUT), ePWMxA toggle high/low with MEP control on rising edge
|
||||
//
|
||||
// To load and run this example:
|
||||
// 1. **!!IMPORTANT!!** - in SFO_V5.h, set PWM_CH to the max number of
|
||||
// HRPWM channels plus one. For example, for the F28335, the
|
||||
// maximum number of HRPWM channels is 6. 6+1=7, so set
|
||||
// #define PWM_CH 7 in SFO_V5.h. (Default is 7)
|
||||
// 2. Run this example at 150/100MHz SYSCLKOUT
|
||||
// 3. Load the Example_2833xHRPWM_SFO.gel and observe variables in the watch window
|
||||
// 4. Activate Real time mode
|
||||
// 5. Run the code
|
||||
// 6. Watch ePWM1-6 waveforms on a Oscillosope
|
||||
// 7. In the watch window:
|
||||
// Set the variable UpdateFine = 1 to observe the ePWMxA output
|
||||
// with HRPWM capabilites (default)
|
||||
// Observe the duty cycle of the waveform changes in fine MEP steps
|
||||
// 8. In the watch window:
|
||||
// Change the variable UpdateFine to 0, to observe the
|
||||
// ePWMxA output without HRPWM capabilites
|
||||
// Observe the duty cycle of the waveform changes in coarse steps of 10nsec.
|
||||
//
|
||||
// Watch Variables:
|
||||
// UpdateFine
|
||||
// MEP_ScaleFactor
|
||||
// EPwm1Regs.CMPA.all
|
||||
// EPwm2Regs.CMPA.all
|
||||
// EPwm3Regs.CMPA.all
|
||||
// EPwm4Regs.CMPA.all
|
||||
// EPwm5Regs.CMPA.all
|
||||
// EPwm6Regs.CMPA.all
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
#include "DSP2833x_EPwm_defines.h" // useful defines for initialization
|
||||
#include "SFO_V5.h" // SFO V5 library headerfile - required to use SFO library functions
|
||||
|
||||
// **!!IMPORTANT!!**
|
||||
// UPDATE NUMBER OF HRPWM CHANNELS + 1 USED IN SFO_V5.H
|
||||
// i.e. #define PWM_CH // F28335 has a maximum of 6 HRPWM channels (7=6+1)
|
||||
|
||||
// Declare your function prototypes here
|
||||
//---------------------------------------------------------------
|
||||
void HRPWM_Config(int);
|
||||
void error (void);
|
||||
|
||||
// General System nets - Useful for debug
|
||||
Uint16 UpdateFine, DutyFine, status, nMepChannel;
|
||||
|
||||
//====================================================================
|
||||
// The following declarations are required in order to use the SFO
|
||||
// library functions:
|
||||
//
|
||||
int MEP_ScaleFactor[PWM_CH]; // Global array used by the SFO library
|
||||
// For n HRPWM channels + 1 for MEP_ScaleFactor[0]
|
||||
|
||||
// Array of pointers to EPwm register structures:
|
||||
// *ePWM[0] is defined as dummy value not used in the example
|
||||
volatile struct EPWM_REGS *ePWM[PWM_CH] =
|
||||
{ &EPwm1Regs, &EPwm1Regs, &EPwm2Regs, &EPwm3Regs,
|
||||
&EPwm4Regs, &EPwm5Regs, &EPwm6Regs};
|
||||
//====================================================================
|
||||
|
||||
void main(void)
|
||||
{
|
||||
// Local variables
|
||||
int i;
|
||||
Uint32 temp;
|
||||
int16 CMPA_reg_val, CMPAHR_reg_val;
|
||||
|
||||
|
||||
// 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-ePWM6
|
||||
// This function is in the DSP2833x_EPwm.c file
|
||||
InitEPwmGpio();
|
||||
|
||||
// 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
|
||||
|
||||
// For this example, only initialize the ePWM
|
||||
// Step 5. User specific code, enable interrupts:
|
||||
|
||||
UpdateFine = 1;
|
||||
DutyFine = 0;
|
||||
nMepChannel=1; // HRPWM diagnostics start on ePWM channel 1
|
||||
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
|
||||
EDIS;
|
||||
|
||||
// MEP_ScaleFactor variables intialization for SFO library functions
|
||||
for(i=0;i<PWM_CH;i++)
|
||||
{
|
||||
MEP_ScaleFactor[i] =0;
|
||||
}
|
||||
|
||||
|
||||
// MEP_ScaleFactor variables intialization using SFO_MepDis_V5 library function.
|
||||
EALLOW;
|
||||
for(i=1;i<PWM_CH;i++)
|
||||
{
|
||||
|
||||
(*ePWM[i]).HRCNFG.bit.EDGMODE = 1; // Enable HRPWM logic for channel prior to calibration
|
||||
while ( SFO_MepDis_V5(i) == SFO_INCOMPLETE ); //returns "0" when cal. incomplete for channel
|
||||
}
|
||||
EDIS;
|
||||
|
||||
// Initialize a common seed variable MEP_ScaleFactor[0] required for all SFO functions
|
||||
MEP_ScaleFactor[0] = MEP_ScaleFactor[1];
|
||||
|
||||
// Some useful Period vs Frequency values
|
||||
// SYSCLKOUT = 150MHz 100 MHz
|
||||
// -----------------------------------------
|
||||
// Period Frequency Frequency
|
||||
// 1000 150 kHz 100 KHz
|
||||
// 800 187 kHz 125 KHz
|
||||
// 600 250 kHz 167 KHz
|
||||
// 500 300 kHz 200 KHz
|
||||
// 250 600 kHz 400 KHz
|
||||
// 200 750 kHz 500 KHz
|
||||
// 100 1.5 MHz 1.0 MHz
|
||||
// 50 3.0 MHz 2.0 MHz
|
||||
// 25 6.0 MHz 4.0 MHz
|
||||
// 20 7.5 MHz 5.0 MHz
|
||||
// 12 12.5 MHz 8.33 MHz
|
||||
// 10 15.0 MHz 10.0 MHz
|
||||
// 9 16.7 MHz 11.1 MHz
|
||||
// 8 18.8 MHz 12.5 MHz
|
||||
// 7 21.4 MHz 14.3 MHz
|
||||
// 6 25.0 MHz 16.7 MHz
|
||||
// 5 30.0 MHz 20.0 MHz
|
||||
|
||||
|
||||
|
||||
//====================================================================
|
||||
// ePWM and HRPWM register initialization
|
||||
//====================================================================
|
||||
|
||||
HRPWM_Config(30); // ePWMx target, 5 MHz PWM (150MHz SYSCLKOUT)/3.33 MHz PWM (100MHz SYSCLKOUT)
|
||||
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
|
||||
EDIS;
|
||||
|
||||
for(;;)
|
||||
{
|
||||
// Sweep DutyFine as a Q15 number from 0.2 - 0.999
|
||||
for(DutyFine = 0x2300; DutyFine < 0x7000; DutyFine++)
|
||||
{
|
||||
|
||||
if(UpdateFine)
|
||||
{
|
||||
/*
|
||||
// CMPA_reg_val is calculated as a Q0.
|
||||
// Since DutyFine is a Q15 number, and the period is Q0
|
||||
// the product is Q15. So to store as a Q0, we shift right
|
||||
// 15 bits.
|
||||
|
||||
CMPA_reg_val = ((long)DutyFine * EPwm1Regs.TBPRD)>>15;
|
||||
|
||||
// This next step is to obtain the remainder which was
|
||||
// truncated during our 15 bit shift above.
|
||||
// compute the whole value, and then subtract CMPA_reg_val
|
||||
// shifted LEFT 15 bits:
|
||||
temp = ((long)DutyFine * EPwm1Regs.TBPRD) ;
|
||||
temp = temp - ((long)CMPA_reg_val<<15);
|
||||
|
||||
// This obtains the MEP count in digits, from
|
||||
// 0,1, .... MEP_Scalefactor. Once again since this is Q15
|
||||
// convert to Q0 by shifting:
|
||||
CMPAHR_reg_val = (temp*MEP_ScaleFactor[1])>>15;
|
||||
|
||||
// Now the lower 8 bits contain the MEP count.
|
||||
// Since the MEP count needs to be in the upper 8 bits of
|
||||
// the 16 bit CMPAHR register, shift left by 8.
|
||||
CMPAHR_reg_val = CMPAHR_reg_val << 8;
|
||||
|
||||
// Add the offset and rounding
|
||||
CMPAHR_reg_val += 0x0180;
|
||||
|
||||
// Write the values to the registers as one 32-bit or two 16-bits
|
||||
EPwm1Regs.CMPA.half.CMPA = CMPA_reg_val;
|
||||
EPwm1Regs.CMPA.half.CMPAHR = CMPAHR_reg_val;
|
||||
*/
|
||||
|
||||
// All the above operations may be condensed into
|
||||
// the following form for each channel:
|
||||
|
||||
// EPWM calculations where EPwm1Regs are accessed
|
||||
// by (*ePWM[1]), EPwm2Regs are accessed by (*ePWM[2]),
|
||||
// etc.:
|
||||
|
||||
for(i=1;i<PWM_CH;i++)
|
||||
{
|
||||
CMPA_reg_val = ((long)DutyFine * (*ePWM[i]).TBPRD)>>15;
|
||||
temp = ((long)DutyFine * (*ePWM[i]).TBPRD) ;
|
||||
temp = temp - ((long)CMPA_reg_val<<15);
|
||||
CMPAHR_reg_val = (temp*MEP_ScaleFactor[i])>>15;
|
||||
CMPAHR_reg_val = CMPAHR_reg_val << 8;
|
||||
CMPAHR_reg_val += 0x0180;
|
||||
|
||||
// Example for a 32 bit write to CMPA:CMPAHR
|
||||
(*ePWM[i]).CMPA.all = ((long)CMPA_reg_val)<<16 | CMPAHR_reg_val;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// CMPA_reg_val is calculated as a Q0.
|
||||
// Since DutyFine is a Q15 number, and the period is Q0
|
||||
// the product is Q15. So to store as a Q0, we shift right
|
||||
// 15 bits.
|
||||
|
||||
for(i=1;i<PWM_CH;i++)
|
||||
{
|
||||
(*ePWM[i]).CMPA.half.CMPA = ((long)DutyFine * (*ePWM[i]).TBPRD>>15);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Call the scale factor optimizer lib function SFO_MepEn_V5()
|
||||
// periodically to track for any changes due to temp/voltage.
|
||||
// SFO_MepEn_V5 Calibration must be finished on one channel (return 1) before
|
||||
// moving on to the next channel.
|
||||
//
|
||||
// *NOTE*: In this example, SFO_MepEn_V5 is called 700 times in a loop. For example
|
||||
// purposes, this allows the CMPAHR and CMPA registers to change in such
|
||||
// a way that when watching in "Continuous Refresh" mode, the user
|
||||
// can see the CMPAHR register increment in fine steps to a certain point
|
||||
// before the CMPA register increments in a coarse step. Normally,
|
||||
// SFO_MepEn_V5 can be called once every so often in the background for
|
||||
// a slow update with no for-loop.
|
||||
|
||||
for (i=0; i<700; i++) // Call SFO_MepEn_V5 700 times.
|
||||
{
|
||||
status = SFO_MepEn_V5(nMepChannel);
|
||||
if (status == SFO_COMPLETE) // Once SFO_MepEn_V5 complete (returns 1)-
|
||||
nMepChannel++; // move on to next channel
|
||||
else if (status == SFO_OUTRANGE_ERROR) // If MEP_ScaleFactor[nMepChannel] differs
|
||||
{ // from seed Mep_ScaleFactor[0] by more than
|
||||
error(); // +/-15, status = 2 (out of range error)
|
||||
}
|
||||
if(nMepChannel==PWM_CH)
|
||||
nMepChannel =1; // Once max channels reached, loop back to channel 1
|
||||
}
|
||||
|
||||
} // end DutyFine for loop
|
||||
|
||||
} // end infinite for loop
|
||||
|
||||
} // end SFO_MepEn_V5
|
||||
|
||||
//=============================================================
|
||||
// FUNCTION: HRPWM_Config
|
||||
// DESCRIPTION: Configures all ePWM channels and sets up HRPWM
|
||||
// on ePWMxA channels
|
||||
//
|
||||
// PARAMETERS: period - desired PWM period in TBCLK counts
|
||||
// RETURN: N/A
|
||||
//=============================================================
|
||||
|
||||
void HRPWM_Config(period)
|
||||
{
|
||||
Uint16 j;
|
||||
// ePWM channel register configuration with HRPWM
|
||||
// ePWMxA toggle low/high with MEP control on Rising edge
|
||||
for (j=1;j<PWM_CH;j++)
|
||||
{
|
||||
(*ePWM[j]).TBCTL.bit.PRDLD = TB_IMMEDIATE; // set Immediate load
|
||||
(*ePWM[j]).TBPRD = period-1; // PWM frequency = 1 / period
|
||||
(*ePWM[j]).CMPA.half.CMPA = period / 2; // set duty 50% initially
|
||||
(*ePWM[j]).CMPA.half.CMPAHR = (1 << 8); // initialize HRPWM extension
|
||||
(*ePWM[j]).CMPB = period / 2; // set duty 50% initially
|
||||
(*ePWM[j]).TBPHS.all = 0;
|
||||
(*ePWM[j]).TBCTR = 0;
|
||||
|
||||
(*ePWM[j]).TBCTL.bit.CTRMODE = TB_COUNT_UP;
|
||||
(*ePWM[j]).TBCTL.bit.PHSEN = TB_DISABLE;
|
||||
(*ePWM[j]).TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
|
||||
(*ePWM[j]).TBCTL.bit.HSPCLKDIV = TB_DIV1;
|
||||
(*ePWM[j]).TBCTL.bit.CLKDIV = TB_DIV1;
|
||||
(*ePWM[j]).TBCTL.bit.FREE_SOFT = 11;
|
||||
|
||||
(*ePWM[j]).CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
|
||||
(*ePWM[j]).CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
(*ePWM[j]).CMPCTL.bit.SHDWAMODE = CC_SHADOW;
|
||||
(*ePWM[j]).CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
|
||||
|
||||
(*ePWM[j]).AQCTLA.bit.ZRO = AQ_SET; // PWM toggle high/low
|
||||
(*ePWM[j]).AQCTLA.bit.CAU = AQ_CLEAR;
|
||||
(*ePWM[j]).AQCTLB.bit.ZRO = AQ_SET;
|
||||
(*ePWM[j]).AQCTLB.bit.CBU = AQ_CLEAR;
|
||||
|
||||
EALLOW;
|
||||
(*ePWM[j]).HRCNFG.all = 0x0;
|
||||
(*ePWM[j]).HRCNFG.bit.EDGMODE = HR_FEP; // MEP control on falling edge
|
||||
(*ePWM[j]).HRCNFG.bit.CTLMODE = HR_CMP;
|
||||
(*ePWM[j]).HRCNFG.bit.HRLOAD = HR_CTR_ZERO;
|
||||
EDIS;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//=============================================================
|
||||
// FUNCTION: error
|
||||
// DESCRIPTION: An error occurs when the MEP_ScaleFactor [n]
|
||||
// calculated from SFO_MEPEn_V5 differs by > +/- 15
|
||||
// from the Seed Value in MEP_ScaleFactor[0].
|
||||
// SFO_MepEn_V5 returned a "2" (SFO_OUTRANGE_ERROR).
|
||||
// The user should:
|
||||
// (1) Re-run SFO_MepDis_V5 to re-calibrate
|
||||
// an appropriate seed value.
|
||||
// (2) Ensure the code is not calling Mep_En_V5
|
||||
// on a different channel when it is currently
|
||||
// still running on a channel. (Repetitively
|
||||
// call Mep_En_V5 on current channel until an
|
||||
// SFO_COMPLETE ( i.e. 1) is returned.
|
||||
// (3) If the out-of-range condition is acceptable
|
||||
// for the application, ignore the "2" and
|
||||
// treat it as a "1" or SFO_COMPLETE.
|
||||
//
|
||||
// PARAMETERS: N/A
|
||||
// RETURN: N/A
|
||||
//=============================================================
|
||||
|
||||
void error (void)
|
||||
{
|
||||
ESTOP0; // Error - MEP_ScaleFactor out of range of Seed - rerun MepDis calibration.
|
||||
}
|
||||
|
||||
|
||||
// No more
|
||||
|
||||
58
Source/External/v120/DSP2833x_examples/hrpwm_sfo_v5/Example_2833xHRPWM_SFO_V5.gel
vendored
Normal file
58
Source/External/v120/DSP2833x_examples/hrpwm_sfo_v5/Example_2833xHRPWM_SFO_V5.gel
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:25:04 $
|
||||
//###########################################################################
|
||||
//
|
||||
// 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 $
|
||||
//###########################################################################
|
||||
|
||||
//###########################################################################
|
||||
// Test Description: Run this GEL on F28334
|
||||
// The Watch window should give a Scale factor value of 67-70 for the HRPWM
|
||||
// modules in the device. F28335 will have a maximum of 6 entries + 1 for
|
||||
// MEP_ScaleFactor[0].
|
||||
//###########################################################################
|
||||
*/
|
||||
|
||||
menuitem "DSP2833x HRPWM SFO V5"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xHRPWM_SFO_V5.pjt");
|
||||
GEL_ProjectBuild("Example_2833xHRPWM_SFO_V5.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xHRPWM_SFO_V5.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("UpdateFine");
|
||||
GEL_WatchAdd("EPwm1Regs.CMPA.all");
|
||||
GEL_WatchAdd("EPwm2Regs.CMPA.all");
|
||||
GEL_WatchAdd("EPwm3Regs.CMPA.all");
|
||||
GEL_WatchAdd("EPwm4Regs.CMPA.all");
|
||||
GEL_WatchAdd("EPwm5Regs.CMPA.all");
|
||||
GEL_WatchAdd("EPwm6Regs.CMPA.all");
|
||||
GEL_WatchAdd("MEP_ScaleFactor");
|
||||
GEL_WatchAdd("EPwm1Regs,x");
|
||||
GEL_WatchAdd("EPwm2Regs,x");
|
||||
GEL_WatchAdd("EPwm3Regs,x");
|
||||
GEL_WatchAdd("EPwm4Regs,x");
|
||||
GEL_WatchAdd("EPwm5Regs,x");
|
||||
GEL_WatchAdd("EPwm6Regs,x");
|
||||
|
||||
|
||||
}
|
||||
53
Source/External/v120/DSP2833x_examples/hrpwm_sfo_v5/Example_2833xHRPWM_SFO_V5.pjt
vendored
Normal file
53
Source/External/v120/DSP2833x_examples/hrpwm_sfo_v5/Example_2833xHRPWM_SFO_V5.pjt
vendored
Normal file
@@ -0,0 +1,53 @@
|
||||
; 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\hrpwm_sfo_v5\"
|
||||
ProjectType=Executable
|
||||
CPUFamily=TMS320C28XX
|
||||
Tool="Compiler"
|
||||
Tool="CustomBuilder"
|
||||
Tool="DspBiosBuilder"
|
||||
Tool="Linker"
|
||||
Config="Debug"
|
||||
Config="Release"
|
||||
|
||||
[Source Files]
|
||||
Source="..\..\DSP2833x_common\lib\SFO_TI_Build_V5B_fpu.lib"
|
||||
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_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_2833xHRPWM_SFO_V5.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -q -pdr -pdv -as -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\hrpwm_sfo_v5\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\hrpwm_sfo_v5\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_2833xHRPWM_SFO_V5.map" -o".\Debug\Example_2833xHRPWM_SFO_V5.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xHRPWM_SFO_V5.out" -x
|
||||
|
||||
["..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c" Settings: "Debug"]
|
||||
LinkOrder=1
|
||||
|
||||
["..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd" Settings: "Debug"]
|
||||
LinkOrder=2
|
||||
|
||||
381
Source/External/v120/DSP2833x_examples/hrpwm_slider/Example_2833xHRPWM_slider.c
vendored
Normal file
381
Source/External/v120/DSP2833x_examples/hrpwm_slider/Example_2833xHRPWM_slider.c
vendored
Normal file
@@ -0,0 +1,381 @@
|
||||
// TI File $Revision: /main/13 $
|
||||
// Checkin $Date: May 5, 2008 15:26:01 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xHRPWM_slider.c
|
||||
//
|
||||
// TITLE: DSP2833x Device HRPWM with Slider example
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// Monitor ePWM1-ePWM4 pins 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 modifies the MEP control registers to show edge displacement
|
||||
// due to HRPWM control blocks of the respective ePWM module, ePWM1A, 2A, 3A,
|
||||
// and 4A channels (GPIO0, GPIO2, GPIO4, and GPIO6) will have fine edge movement
|
||||
// due to HRPWM logic. Load the Example_2833xHRPWM_slider.gel file.
|
||||
// Select the HRPWM FineDutySlider from the GEL menu. A FineDuty slider
|
||||
// graphics will show up in CCS.
|
||||
// Load the program and run. Use the Slider to and observe the epwm edge displacement
|
||||
// for each slider step change. This explains the MEP control on the ePWMxA channels
|
||||
//
|
||||
// 1. 15MHz PWM (for 150 MHz SYSCLKOUT) or 10MHz PWM (for 100MHz SYSCLKOUT),
|
||||
// ePWM1A toggle low/high with MEP control on rising edge
|
||||
// 15MHz PWM (for 150 MHz SYSCLKOUT) or 10MHz PWM (for 100MHz SYSCLKOUT),
|
||||
// ePWM1B toggle low/high with NO HRPWM control
|
||||
//
|
||||
// 2. 7.5MHz PWM (for 150 MHz SYSCLKOUT) or 5MHz PWM (for 100MHz SYSCLKOUT),
|
||||
// ePWM2A toggle low/high with MEP control on rising edge
|
||||
// 7.5MHz PWM (for 150 MHz SYSCLKOUT) or 5MHz PWM (for 100MHz SYSCLKOUT),
|
||||
// ePWM2B toggle low/high with NO HRPWM control
|
||||
//
|
||||
// 3. 15MHz PWM (for 150 MHz SYSCLKOUT) or 10MHz PWM (for 100MHz SYSCLKOUT),
|
||||
// ePWM3A toggle as high/low with MEP control on falling edge
|
||||
// 15MHz PWM (for 150 MHz SYSCLKOUT) or 10MHz PWM (for 100MHz SYSCLKOUT),
|
||||
// ePWM3B toggle low/high with NO HRPWM control
|
||||
//
|
||||
// 4. 7.5MHz PWM (for 150 MHz SYSCLKOUT) or 5MHz PWM (for 100MHz SYSCLKOUT),
|
||||
// ePWM4A toggle as high/low with MEP control on falling edge
|
||||
// 7.5MHz PWM (for 150 MHz SYSCLKOUT) or 5MHz PWM (for 100MHz SYSCLKOUT),
|
||||
// ePWM4B toggle low/high with NO HRPWM control
|
||||
//
|
||||
//###########################################################################
|
||||
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
||||
#include "DSP2833x_EPwm_defines.h" // useful defines for initialization
|
||||
|
||||
|
||||
// Declare your function prototypes here
|
||||
//---------------------------------------------------------------
|
||||
|
||||
void HRPWM1_Config(int);
|
||||
void HRPWM2_Config(int);
|
||||
void HRPWM3_Config(int);
|
||||
void HRPWM4_Config(int);
|
||||
|
||||
// General System nets - Useful for debug
|
||||
Uint16 i,j, duty, DutyFine, n,update;
|
||||
|
||||
Uint32 temp;
|
||||
|
||||
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 for ePWM1-ePWM4
|
||||
|
||||
// For this case just init GPIO pins for ePWM1, ePWM2, ePWM3, ePWM4
|
||||
// These functions are in the DSP2833x_EPwm.c file
|
||||
InitEPwm1Gpio();
|
||||
InitEPwm2Gpio();
|
||||
InitEPwm3Gpio();
|
||||
InitEPwm4Gpio();
|
||||
|
||||
// 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
|
||||
|
||||
// For this example, only initialize the ePWM
|
||||
// Step 5. User specific code, enable interrupts:
|
||||
|
||||
update =1;
|
||||
DutyFine =0;
|
||||
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
|
||||
EDIS;
|
||||
|
||||
// Some useful Period vs Frequency values
|
||||
// SYSCLKOUT = 150MHz 100 MHz
|
||||
// -----------------------------------------
|
||||
// Period Frequency Frequency
|
||||
// 1000 150 kHz 100 KHz
|
||||
// 800 187 kHz 125 KHz
|
||||
// 600 250 kHz 167 KHz
|
||||
// 500 300 kHz 200 KHz
|
||||
// 250 600 kHz 400 KHz
|
||||
// 200 750 kHz 500 KHz
|
||||
// 100 1.5 MHz 1.0 MHz
|
||||
// 50 3.0 MHz 2.0 MHz
|
||||
// 25 6.0 MHz 4.0 MHz
|
||||
// 20 7.5 MHz 5.0 MHz
|
||||
// 12 12.5 MHz 8.33 MHz
|
||||
// 10 15.0 MHz 10.0 MHz
|
||||
// 9 16.7 MHz 11.1 MHz
|
||||
// 8 18.8 MHz 12.5 MHz
|
||||
// 7 21.4 MHz 14.3 MHz
|
||||
// 6 25.0 MHz 16.7 MHz
|
||||
// 5 30.0 MHz 20.0 MHz
|
||||
|
||||
//====================================================================
|
||||
// ePWM and HRPWM register initializaition
|
||||
//====================================================================
|
||||
HRPWM1_Config(10); // ePWM1 target, 15 MHz PWM (SYSCLK=150MHz) or 10 MHz PWM (SYSCLK=100MHz)
|
||||
HRPWM2_Config(20); // ePWM2 target, 7.5 MHz PWM (SYSCLK=150MHz) or 5 MHz PWM (SYSCLK=100MHz)
|
||||
HRPWM3_Config(10); // ePWM3 target, 15 MHz PWM (SYSCLK=150MHz) or 10 MHz PWM (SYSCLK=100MHz)
|
||||
HRPWM4_Config(20); // ePWM4 target, 7.5 MHz PWM (SYSCLK=150MHz) or 5 MHz PWM (SYSCLK=100MHz)
|
||||
|
||||
|
||||
EALLOW;
|
||||
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
|
||||
EDIS;
|
||||
|
||||
while (update ==1)
|
||||
|
||||
{
|
||||
|
||||
// for(DutyFine =1; DutyFine <256 ;DutyFine ++)
|
||||
{
|
||||
|
||||
// Example, write to the HRPWM extension of CMPA
|
||||
EPwm1Regs.CMPA.half.CMPAHR = DutyFine << 8; // Left shift by 8 to write into MSB bits
|
||||
EPwm2Regs.CMPA.half.CMPAHR = DutyFine << 8; // Left shift by 8 to write into MSB bits
|
||||
|
||||
// Example, 32-bit write to CMPA:CMPAHR
|
||||
EPwm3Regs.CMPA.all = ((Uint32)EPwm3Regs.CMPA.half.CMPA << 16) + (DutyFine << 8);
|
||||
EPwm4Regs.CMPA.all = ((Uint32)EPwm4Regs.CMPA.half.CMPA << 16) + (DutyFine << 8);
|
||||
|
||||
// for (i=0;i<10000;i++){} // Dummy delay between MEP changes
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void HRPWM1_Config(period)
|
||||
{
|
||||
// ePWM1 register configuration with HRPWM
|
||||
// ePWM1A toggle low/high with MEP control on Rising edge
|
||||
|
||||
EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // set Immediate load
|
||||
EPwm1Regs.TBPRD = period - 1; // PWM frequency = 1 / period
|
||||
EPwm1Regs.CMPA.half.CMPA = period / 2; // set duty 50% initially
|
||||
EPwm1Regs.CMPA.half.CMPAHR = (1 << 8); // initialize HRPWM extension
|
||||
EPwm1Regs.CMPB = period / 2; // set duty 50% initially
|
||||
EPwm1Regs.TBPHS.all = 0;
|
||||
EPwm1Regs.TBCTR = 0;
|
||||
|
||||
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
|
||||
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // EPWM1 is the Master
|
||||
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
|
||||
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
|
||||
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
|
||||
|
||||
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
|
||||
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
|
||||
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
|
||||
EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR; // PWM toggle low/high
|
||||
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;
|
||||
EPwm1Regs.AQCTLB.bit.ZRO = AQ_CLEAR;
|
||||
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;
|
||||
|
||||
EALLOW;
|
||||
EPwm1Regs.HRCNFG.all = 0x0;
|
||||
EPwm1Regs.HRCNFG.bit.EDGMODE = HR_REP; //MEP control on Rising edge
|
||||
EPwm1Regs.HRCNFG.bit.CTLMODE = HR_CMP;
|
||||
EPwm1Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO;
|
||||
EDIS;
|
||||
}
|
||||
|
||||
void HRPWM2_Config(period)
|
||||
{
|
||||
// ePWM2 register configuration with HRPWM
|
||||
// ePWM2A toggle low/high with MEP control on Rising edge
|
||||
|
||||
EPwm2Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // set Immediate load
|
||||
EPwm2Regs.TBPRD = period - 1; // PWM frequency = 1 / period
|
||||
EPwm2Regs.CMPA.half.CMPA = period / 2; // set duty 50% initially
|
||||
EPwm1Regs.CMPA.half.CMPAHR = (1 << 8); // initialize HRPWM extension
|
||||
EPwm2Regs.CMPB = period / 2; // set duty 50% initially
|
||||
EPwm2Regs.TBPHS.all = 0;
|
||||
EPwm2Regs.TBCTR = 0;
|
||||
|
||||
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
|
||||
EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE; // ePWM2 is the Master
|
||||
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
|
||||
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
|
||||
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;
|
||||
|
||||
EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
|
||||
EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
|
||||
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
|
||||
EPwm2Regs.AQCTLA.bit.ZRO = AQ_CLEAR; // PWM toggle low/high
|
||||
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;
|
||||
EPwm2Regs.AQCTLB.bit.ZRO = AQ_CLEAR;
|
||||
EPwm2Regs.AQCTLB.bit.CBU = AQ_SET;
|
||||
|
||||
EALLOW;
|
||||
EPwm2Regs.HRCNFG.all = 0x0;
|
||||
EPwm2Regs.HRCNFG.bit.EDGMODE = HR_REP; //MEP control on Rising edge
|
||||
EPwm2Regs.HRCNFG.bit.CTLMODE = HR_CMP;
|
||||
EPwm2Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO;
|
||||
|
||||
EDIS;
|
||||
|
||||
}
|
||||
void HRPWM3_Config(period)
|
||||
{
|
||||
// ePWM3 register configuration with HRPWM
|
||||
// ePWM3A toggle high/low with MEP control on falling edge
|
||||
|
||||
EPwm3Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // set Immediate load
|
||||
EPwm3Regs.TBPRD = period - 1; // PWM frequency = 1 / period
|
||||
EPwm3Regs.CMPA.half.CMPA = period / 2; // set duty 50% initially
|
||||
EPwm3Regs.CMPA.half.CMPAHR = (1 << 8); // initialize HRPWM extension
|
||||
EPwm3Regs.CMPB = period / 2; // set duty 50% initially
|
||||
EPwm3Regs.TBPHS.all = 0;
|
||||
EPwm3Regs.TBCTR = 0;
|
||||
|
||||
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
|
||||
EPwm3Regs.TBCTL.bit.PHSEN = TB_DISABLE; // ePWM3 is the Master
|
||||
EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
|
||||
EPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
|
||||
EPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV1;
|
||||
|
||||
EPwm3Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
|
||||
EPwm3Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
EPwm3Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
|
||||
EPwm3Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
|
||||
EPwm3Regs.AQCTLA.bit.ZRO = AQ_SET; // PWM toggle high/low
|
||||
EPwm3Regs.AQCTLA.bit.CAU = AQ_CLEAR;
|
||||
EPwm3Regs.AQCTLB.bit.ZRO = AQ_SET;
|
||||
EPwm3Regs.AQCTLB.bit.CBU = AQ_CLEAR;
|
||||
|
||||
EALLOW;
|
||||
EPwm3Regs.HRCNFG.all = 0x0;
|
||||
EPwm3Regs.HRCNFG.bit.EDGMODE = HR_FEP; //MEP control on falling edge
|
||||
EPwm3Regs.HRCNFG.bit.CTLMODE = HR_CMP;
|
||||
EPwm3Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO;
|
||||
EDIS;
|
||||
}
|
||||
|
||||
void HRPWM4_Config(period)
|
||||
{
|
||||
// ePWM4 register configuration with HRPWM
|
||||
// ePWM4A toggle high/low with MEP control on falling edge
|
||||
|
||||
EPwm4Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // set Immediate load
|
||||
EPwm4Regs.TBPRD = period - 1; // PWM frequency = 1 / period
|
||||
EPwm4Regs.CMPA.half.CMPA = period / 2; // set duty 50% initially
|
||||
EPwm4Regs.CMPA.half.CMPAHR = (1 << 8); // initialize HRPWM extension
|
||||
EPwm4Regs.CMPB = period / 2; // set duty 50% initially
|
||||
EPwm4Regs.TBPHS.all = 0;
|
||||
EPwm4Regs.TBCTR = 0;
|
||||
|
||||
EPwm4Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
|
||||
EPwm4Regs.TBCTL.bit.PHSEN = TB_DISABLE; // ePWM4 is the Master
|
||||
EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
|
||||
EPwm4Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
|
||||
EPwm4Regs.TBCTL.bit.CLKDIV = TB_DIV1;
|
||||
|
||||
EPwm4Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
|
||||
EPwm4Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
|
||||
EPwm4Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
|
||||
EPwm4Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
|
||||
|
||||
EPwm4Regs.AQCTLA.bit.ZRO = AQ_SET; // PWM toggle high/low
|
||||
EPwm4Regs.AQCTLA.bit.CAU = AQ_CLEAR;
|
||||
EPwm4Regs.AQCTLB.bit.ZRO = AQ_SET;
|
||||
EPwm4Regs.AQCTLB.bit.CBU = AQ_CLEAR;
|
||||
|
||||
EALLOW;
|
||||
EPwm4Regs.HRCNFG.all = 0x0;
|
||||
EPwm4Regs.HRCNFG.bit.EDGMODE = HR_FEP; //MEP control on falling edge
|
||||
EPwm4Regs.HRCNFG.bit.CTLMODE = HR_CMP;
|
||||
EPwm4Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO;
|
||||
EDIS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
51
Source/External/v120/DSP2833x_examples/hrpwm_slider/Example_2833xHRPWM_slider.gel
vendored
Normal file
51
Source/External/v120/DSP2833x_examples/hrpwm_slider/Example_2833xHRPWM_slider.gel
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: August 9, 2007 17:17:42 $
|
||||
//###########################################################################
|
||||
//
|
||||
// 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 HRPWM Slider"
|
||||
|
||||
hotmenu Load_and_Build_Project()
|
||||
{
|
||||
GEL_ProjectLoad("Example_2833xHRPWM_slider.pjt");
|
||||
GEL_ProjectBuild("Example_2833xHRPWM_slider.pjt");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Load_Code()
|
||||
{
|
||||
GEL_Load(".\\debug\\Example_2833xHRPWM_slider.out");
|
||||
Setup_WatchWindow();
|
||||
}
|
||||
|
||||
hotmenu Setup_WatchWindow()
|
||||
{
|
||||
|
||||
GEL_WatchReset();
|
||||
GEL_WatchAdd("DutyFine");
|
||||
GEL_WatchAdd("EPwm1Regs.CMPA.all");
|
||||
GEL_WatchAdd("EPwm2Regs.CMPA.all");
|
||||
GEL_WatchAdd("EPwm3Regs.CMPA.all");
|
||||
GEL_WatchAdd("EPwm4Regs.CMPA.all");
|
||||
GEL_WatchAdd("EPwm1Regs,x");
|
||||
GEL_WatchAdd("EPwm2Regs,x");
|
||||
GEL_WatchAdd("EPwm3Regs,x");
|
||||
GEL_WatchAdd("EPwm4Regs,x");
|
||||
}
|
||||
|
||||
menuitem "DSP2833x HRPWM FineDutySlider"
|
||||
slider FineDutySlider(1, 255, 1, 1, finedutyvalue)
|
||||
{
|
||||
|
||||
DutyFine = finedutyvalue;
|
||||
}
|
||||
51
Source/External/v120/DSP2833x_examples/hrpwm_slider/Example_2833xHRPWM_slider.pjt
vendored
Normal file
51
Source/External/v120/DSP2833x_examples/hrpwm_slider/Example_2833xHRPWM_slider.pjt
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
; 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\hrpwm_slider\"
|
||||
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_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_2833xHRPWM_slider.c"
|
||||
Source="..\..\DSP2833x_common\cmd\28335_RAM_lnk.cmd"
|
||||
Source="..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
|
||||
|
||||
["Compiler" Settings: "Debug"]
|
||||
Options=-g -k -q -al -as -fr"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\hrpwm_slider\Debug" -fs"C:\tidcs\c28\DSP2833x\v120\DSP2833x_examples\hrpwm_slider\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\hrpwm_slider\Release" -d"LARGE_MODEL" -ml -v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Debug"]
|
||||
Options=-v28
|
||||
|
||||
["DspBiosBuilder" Settings: "Release"]
|
||||
Options=-v28
|
||||
|
||||
["Linker" Settings: "Debug"]
|
||||
Options=-q -cr -ecode_start -m".\Debug\Example_2833xHRPWM_slider.map" -o".\Debug\Example_2833xHRPWM_slider.out" -stack0x380 -w -x -i"..\..\DSP2833x_headers\include" -l"rts2800_fpu32.lib"
|
||||
|
||||
["Linker" Settings: "Release"]
|
||||
Options=-q -c -o".\Release\Example_2833xHRPWM_slider" -x
|
||||
|
||||
["..\..\DSP2833x_headers\source\DSP2833x_GlobalVariableDefs.c" Settings: "Debug"]
|
||||
LinkOrder=1
|
||||
|
||||
["..\..\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd" Settings: "Debug"]
|
||||
LinkOrder=2
|
||||
|
||||
473
Source/External/v120/DSP2833x_examples/i2c_eeprom/Example_2833xI2C_eeprom.c
vendored
Normal file
473
Source/External/v120/DSP2833x_examples/i2c_eeprom/Example_2833xI2C_eeprom.c
vendored
Normal file
@@ -0,0 +1,473 @@
|
||||
// TI File $Revision: /main/10 $
|
||||
// Checkin $Date: April 21, 2008 15:43:02 $
|
||||
//###########################################################################
|
||||
//
|
||||
// FILE: Example_2833xI2c_eeprom.c
|
||||
//
|
||||
// TITLE: DSP2833x I2C EEPROM Example
|
||||
//
|
||||
// ASSUMPTIONS:
|
||||
//
|
||||
// This program requires the DSP2833x header files.
|
||||
//
|
||||
// This program requires an external I2C EEPROM connected to
|
||||
// the I2C bus at address 0x50.
|
||||
//
|
||||
// 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 will write 1-14 words to EEPROM and read them back.
|
||||
// The data written and the EEPROM address written to are contained
|
||||
// in the message structure, I2cMsgOut1. The data read back will be
|
||||
// contained in the message structure I2cMsgIn1.
|
||||
//
|
||||
// This program will work with the on-board I2C EEPROM supplied on
|
||||
// the F2833x eZdsp.
|
||||
//
|
||||
//
|
||||
//###########################################################################
|
||||
// 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
|
||||
|
||||
// Note: I2C Macros used in this example can be found in the
|
||||
// DSP2833x_I2C_defines.h file
|
||||
|
||||
// Prototype statements for functions found within this file.
|
||||
void I2CA_Init(void);
|
||||
Uint16 I2CA_WriteData(struct I2CMSG *msg);
|
||||
Uint16 I2CA_ReadData(struct I2CMSG *msg);
|
||||
interrupt void i2c_int1a_isr(void);
|
||||
void pass(void);
|
||||
void fail(void);
|
||||
|
||||
#define I2C_SLAVE_ADDR 0x50
|
||||
#define I2C_NUMBYTES 4
|
||||
#define I2C_EEPROM_HIGH_ADDR 0x00
|
||||
#define I2C_EEPROM_LOW_ADDR 0x30
|
||||
|
||||
// Global variables
|
||||
// Two bytes will be used for the outgoing address,
|
||||
// thus only setup 14 bytes maximum
|
||||
struct I2CMSG I2cMsgOut1={I2C_MSGSTAT_SEND_WITHSTOP,
|
||||
I2C_SLAVE_ADDR,
|
||||
I2C_NUMBYTES,
|
||||
I2C_EEPROM_HIGH_ADDR,
|
||||
I2C_EEPROM_LOW_ADDR,
|
||||
0x12, // Msg Byte 1
|
||||
0x34, // Msg Byte 2
|
||||
0x56, // Msg Byte 3
|
||||
0x78, // Msg Byte 4
|
||||
0x9A, // Msg Byte 5
|
||||
0xBC, // Msg Byte 6
|
||||
0xDE, // Msg Byte 7
|
||||
0xF0, // Msg Byte 8
|
||||
0x11, // Msg Byte 9
|
||||
0x10, // Msg Byte 10
|
||||
0x11, // Msg Byte 11
|
||||
0x12, // Msg Byte 12
|
||||
0x13, // Msg Byte 13
|
||||
0x12}; // Msg Byte 14
|
||||
|
||||
|
||||
struct I2CMSG I2cMsgIn1={ I2C_MSGSTAT_SEND_NOSTOP,
|
||||
I2C_SLAVE_ADDR,
|
||||
I2C_NUMBYTES,
|
||||
I2C_EEPROM_HIGH_ADDR,
|
||||
I2C_EEPROM_LOW_ADDR};
|
||||
|
||||
struct I2CMSG *CurrentMsgPtr; // Used in interrupts
|
||||
Uint16 PassCount;
|
||||
Uint16 FailCount;
|
||||
|
||||
void main(void)
|
||||
{
|
||||
Uint16 Error;
|
||||
Uint16 i;
|
||||
|
||||
CurrentMsgPtr = &I2cMsgOut1;
|
||||
|
||||
// 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();
|
||||
// Setup only the GP I/O only for I2C functionality
|
||||
InitI2CGpio();
|
||||
|
||||
// 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();
|
||||
|
||||
// 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.I2CINT1A = &i2c_int1a_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
|
||||
I2CA_Init();
|
||||
|
||||
// Step 5. User specific code
|
||||
|
||||
// Clear Counters
|
||||
PassCount = 0;
|
||||
FailCount = 0;
|
||||
|
||||
// Clear incoming message buffer
|
||||
for (i = 0; i < I2C_MAX_BUFFER_SIZE; i++)
|
||||
{
|
||||
I2cMsgIn1.MsgBuffer[i] = 0x0000;
|
||||
}
|
||||
|
||||
// Enable interrupts required for this example
|
||||
|
||||
// Enable I2C interrupt 1 in the PIE: Group 8 interrupt 1
|
||||
PieCtrlRegs.PIEIER8.bit.INTx1 = 1;
|
||||
|
||||
// Enable CPU INT8 which is connected to PIE group 8
|
||||
IER |= M_INT8;
|
||||
EINT;
|
||||
|
||||
// Application loop
|
||||
for(;;)
|
||||
{
|
||||
//////////////////////////////////
|
||||
// Write data to EEPROM section //
|
||||
//////////////////////////////////
|
||||
|
||||
// Check the outgoing message to see if it should be sent.
|
||||
// In this example it is initialized to send with a stop bit.
|
||||
if(I2cMsgOut1.MsgStatus == I2C_MSGSTAT_SEND_WITHSTOP)
|
||||
{
|
||||
Error = I2CA_WriteData(&I2cMsgOut1);
|
||||
// If communication is correctly initiated, set msg status to busy
|
||||
// and update CurrentMsgPtr for the interrupt service routine.
|
||||
// Otherwise, do nothing and try again next loop. Once message is
|
||||
// initiated, the I2C interrupts will handle the rest. Search for
|
||||
// ICINTR1A_ISR in the i2c_eeprom_isr.c file.
|
||||
if (Error == I2C_SUCCESS)
|
||||
{
|
||||
CurrentMsgPtr = &I2cMsgOut1;
|
||||
I2cMsgOut1.MsgStatus = I2C_MSGSTAT_WRITE_BUSY;
|
||||
}
|
||||
} // end of write section
|
||||
|
||||
///////////////////////////////////
|
||||
// Read data from EEPROM section //
|
||||
///////////////////////////////////
|
||||
|
||||
// Check outgoing message status. Bypass read section if status is
|
||||
// not inactive.
|
||||
if (I2cMsgOut1.MsgStatus == I2C_MSGSTAT_INACTIVE)
|
||||
{
|
||||
// Check incoming message status.
|
||||
if(I2cMsgIn1.MsgStatus == I2C_MSGSTAT_SEND_NOSTOP)
|
||||
{
|
||||
// EEPROM address setup portion
|
||||
while(I2CA_ReadData(&I2cMsgIn1) != I2C_SUCCESS)
|
||||
{
|
||||
// Maybe setup an attempt counter to break an infinite while
|
||||
// loop. The EEPROM will send back a NACK while it is performing
|
||||
// a write operation. Even though the write communique is
|
||||
// complete at this point, the EEPROM could still be busy
|
||||
// programming the data. Therefore, multiple attempts are
|
||||
// necessary.
|
||||
}
|
||||
// Update current message pointer and message status
|
||||
CurrentMsgPtr = &I2cMsgIn1;
|
||||
I2cMsgIn1.MsgStatus = I2C_MSGSTAT_SEND_NOSTOP_BUSY;
|
||||
}
|
||||
|
||||
// Once message has progressed past setting up the internal address
|
||||
// of the EEPROM, send a restart to read the data bytes from the
|
||||
// EEPROM. Complete the communique with a stop bit. MsgStatus is
|
||||
// updated in the interrupt service routine.
|
||||
else if(I2cMsgIn1.MsgStatus == I2C_MSGSTAT_RESTART)
|
||||
{
|
||||
// Read data portion
|
||||
while(I2CA_ReadData(&I2cMsgIn1) != I2C_SUCCESS)
|
||||
{
|
||||
// Maybe setup an attempt counter to break an infinite while
|
||||
// loop.
|
||||
}
|
||||
// Update current message pointer and message status
|
||||
CurrentMsgPtr = &I2cMsgIn1;
|
||||
I2cMsgIn1.MsgStatus = I2C_MSGSTAT_READ_BUSY;
|
||||
}
|
||||
} // end of read section
|
||||
|
||||
} // end of for(;;)
|
||||
} // end of main
|
||||
|
||||
|
||||
void I2CA_Init(void)
|
||||
{
|
||||
// Initialize I2C
|
||||
I2caRegs.I2CSAR = 0x0050; // Slave address - EEPROM control code
|
||||
|
||||
#if (CPU_FRQ_150MHZ) // Default - For 150MHz SYSCLKOUT
|
||||
I2caRegs.I2CPSC.all = 14; // Prescaler - need 7-12 Mhz on module clk (150/15 = 10MHz)
|
||||
#endif
|
||||
#if (CPU_FRQ_100MHZ) // For 100 MHz SYSCLKOUT
|
||||
I2caRegs.I2CPSC.all = 9; // Prescaler - need 7-12 Mhz on module clk (100/10 = 10MHz)
|
||||
#endif
|
||||
|
||||
I2caRegs.I2CCLKL = 10; // NOTE: must be non zero
|
||||
I2caRegs.I2CCLKH = 5; // NOTE: must be non zero
|
||||
I2caRegs.I2CIER.all = 0x24; // Enable SCD & ARDY interrupts
|
||||
|
||||
I2caRegs.I2CMDR.all = 0x0020; // Take I2C out of reset
|
||||
// Stop I2C when suspended
|
||||
|
||||
I2caRegs.I2CFFTX.all = 0x6000; // Enable FIFO mode and TXFIFO
|
||||
I2caRegs.I2CFFRX.all = 0x2040; // Enable RXFIFO, clear RXFFINT,
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Uint16 I2CA_WriteData(struct I2CMSG *msg)
|
||||
{
|
||||
Uint16 i;
|
||||
|
||||
// Wait until the STP bit is cleared from any previous master communication.
|
||||
// Clearing of this bit by the module is delayed until after the SCD bit is
|
||||
// set. If this bit is not checked prior to initiating a new message, the
|
||||
// I2C could get confused.
|
||||
if (I2caRegs.I2CMDR.bit.STP == 1)
|
||||
{
|
||||
return I2C_STP_NOT_READY_ERROR;
|
||||
}
|
||||
|
||||
// Setup slave address
|
||||
I2caRegs.I2CSAR = msg->SlaveAddress;
|
||||
|
||||
// Check if bus busy
|
||||
if (I2caRegs.I2CSTR.bit.BB == 1)
|
||||
{
|
||||
return I2C_BUS_BUSY_ERROR;
|
||||
}
|
||||
|
||||
// Setup number of bytes to send
|
||||
// MsgBuffer + Address
|
||||
I2caRegs.I2CCNT = msg->NumOfBytes+2;
|
||||
|
||||
// Setup data to send
|
||||
I2caRegs.I2CDXR = msg->MemoryHighAddr;
|
||||
I2caRegs.I2CDXR = msg->MemoryLowAddr;
|
||||
// for (i=0; i<msg->NumOfBytes-2; i++)
|
||||
for (i=0; i<msg->NumOfBytes; i++)
|
||||
|
||||
{
|
||||
I2caRegs.I2CDXR = *(msg->MsgBuffer+i);
|
||||
}
|
||||
|
||||
// Send start as master transmitter
|
||||
I2caRegs.I2CMDR.all = 0x6E20;
|
||||
|
||||
return I2C_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
Uint16 I2CA_ReadData(struct I2CMSG *msg)
|
||||
{
|
||||
// Wait until the STP bit is cleared from any previous master communication.
|
||||
// Clearing of this bit by the module is delayed until after the SCD bit is
|
||||
// set. If this bit is not checked prior to initiating a new message, the
|
||||
// I2C could get confused.
|
||||
if (I2caRegs.I2CMDR.bit.STP == 1)
|
||||
{
|
||||
return I2C_STP_NOT_READY_ERROR;
|
||||
}
|
||||
|
||||
I2caRegs.I2CSAR = msg->SlaveAddress;
|
||||
|
||||
if(msg->MsgStatus == I2C_MSGSTAT_SEND_NOSTOP)
|
||||
{
|
||||
// Check if bus busy
|
||||
if (I2caRegs.I2CSTR.bit.BB == 1)
|
||||
{
|
||||
return I2C_BUS_BUSY_ERROR;
|
||||
}
|
||||
I2caRegs.I2CCNT = 2;
|
||||
I2caRegs.I2CDXR = msg->MemoryHighAddr;
|
||||
I2caRegs.I2CDXR = msg->MemoryLowAddr;
|
||||
I2caRegs.I2CMDR.all = 0x2620; // Send data to setup EEPROM address
|
||||
}
|
||||
else if(msg->MsgStatus == I2C_MSGSTAT_RESTART)
|
||||
{
|
||||
I2caRegs.I2CCNT = msg->NumOfBytes; // Setup how many bytes to expect
|
||||
I2caRegs.I2CMDR.all = 0x2C20; // Send restart as master receiver
|
||||
}
|
||||
|
||||
return I2C_SUCCESS;
|
||||
}
|
||||
|
||||
interrupt void i2c_int1a_isr(void) // I2C-A
|
||||
{
|
||||
Uint16 IntSource, i;
|
||||
|
||||
// Read interrupt source
|
||||
IntSource = I2caRegs.I2CISRC.all;
|
||||
|
||||
// Interrupt source = stop condition detected
|
||||
if(IntSource == I2C_SCD_ISRC)
|
||||
{
|
||||
// If completed message was writing data, reset msg to inactive state
|
||||
if (CurrentMsgPtr->MsgStatus == I2C_MSGSTAT_WRITE_BUSY)
|
||||
{
|
||||
CurrentMsgPtr->MsgStatus = I2C_MSGSTAT_INACTIVE;
|
||||
}
|
||||
else
|
||||
{
|
||||
// If a message receives a NACK during the address setup portion of the
|
||||
// EEPROM read, the code further below included in the register access ready
|
||||
// interrupt source code will generate a stop condition. After the stop
|
||||
// condition is received (here), set the message status to try again.
|
||||
// User may want to limit the number of retries before generating an error.
|
||||
if(CurrentMsgPtr->MsgStatus == I2C_MSGSTAT_SEND_NOSTOP_BUSY)
|
||||
{
|
||||
CurrentMsgPtr->MsgStatus = I2C_MSGSTAT_SEND_NOSTOP;
|
||||
}
|
||||
// If completed message was reading EEPROM data, reset msg to inactive state
|
||||
// and read data from FIFO.
|
||||
else if (CurrentMsgPtr->MsgStatus == I2C_MSGSTAT_READ_BUSY)
|
||||
{
|
||||
CurrentMsgPtr->MsgStatus = I2C_MSGSTAT_INACTIVE;
|
||||
for(i=0; i < I2C_NUMBYTES; i++)
|
||||
{
|
||||
CurrentMsgPtr->MsgBuffer[i] = I2caRegs.I2CDRR;
|
||||
}
|
||||
{
|
||||
// Check recieved data
|
||||
for(i=0; i < I2C_NUMBYTES; i++)
|
||||
{
|
||||
if(I2cMsgIn1.MsgBuffer[i] == I2cMsgOut1.MsgBuffer[i])
|
||||
{
|
||||
PassCount++;
|
||||
}
|
||||
else
|
||||
{
|
||||
FailCount++;
|
||||
}
|
||||
}
|
||||
if(PassCount == I2C_NUMBYTES)
|
||||
{
|
||||
pass();
|
||||
}
|
||||
else
|
||||
{
|
||||
fail();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
} // end of stop condition detected
|
||||
|
||||
// Interrupt source = Register Access Ready
|
||||
// This interrupt is used to determine when the EEPROM address setup portion of the
|
||||
// read data communication is complete. Since no stop bit is commanded, this flag
|
||||
// tells us when the message has been sent instead of the SCD flag. If a NACK is
|
||||
// received, clear the NACK bit and command a stop. Otherwise, move on to the read
|
||||
// data portion of the communication.
|
||||
else if(IntSource == I2C_ARDY_ISRC)
|
||||
{
|
||||
if(I2caRegs.I2CSTR.bit.NACK == 1)
|
||||
{
|
||||
I2caRegs.I2CMDR.bit.STP = 1;
|
||||
I2caRegs.I2CSTR.all = I2C_CLR_NACK_BIT;
|
||||
}
|
||||
else if(CurrentMsgPtr->MsgStatus == I2C_MSGSTAT_SEND_NOSTOP_BUSY)
|
||||
{
|
||||
CurrentMsgPtr->MsgStatus = I2C_MSGSTAT_RESTART;
|
||||
}
|
||||
} // end of register access ready
|
||||
|
||||
else
|
||||
{
|
||||
// Generate some error due to invalid interrupt source
|
||||
asm(" ESTOP0");
|
||||
}
|
||||
|
||||
// Enable future I2C (PIE Group 8) interrupts
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP8;
|
||||
}
|
||||
|
||||
void pass()
|
||||
{
|
||||
asm(" ESTOP0");
|
||||
for(;;);
|
||||
}
|
||||
|
||||
void fail()
|
||||
{
|
||||
asm(" ESTOP0");
|
||||
for(;;);
|
||||
}
|
||||
|
||||
|
||||
//===========================================================================
|
||||
// No more.
|
||||
//===========================================================================
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user