⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 example_280xeqep_freqcal.c

📁 DSP学习板上的例子程序包括 AD转换 CAN总线 SPI SCI
💻 C
字号:
// TI File $Revision: /main/4 $
// Checkin $Date: April 18, 2005   10:09:38 $
// Modified by LSD_Hanbing to suit the LSD_EVM320F2801X, April 24,2007
//###########################################################################
//
// FILE:	Example_280xEqep_freqcal.c
//
// TITLE:	Frequency measurement using EQEP peripheral
//
// ASSUMPTIONS:
//
//    This program requires the DSP280x header files.  
//    As supplied, this project is configured for "boot to SARAM" operation. 
//
//    Test requires the following hardware connections
//          
//    GPIO20/EQEP1A <- External input
//
//    As supplied, this project is configured for "boot to SARAM" 
//    operation.  The 280x Boot Mode table is shown below.  
//    For information on configuring the boot mode of an LSD_EVM320F2801X, 
//    please refer to the documentation included with the LSD_EVM320F2801X,  
//
//       Boot      GPIO18     GPIO29    GPIO34
//       Mode      SPICLKA    SCITXDA
//                  SCITXB
//       -------------------------------------
//       Flash       1          1        1
//       SCI-A       1          1        0
//       SPI-A       1          0        1
//       I2C-A       1          0        0
//       ECAN-A      0          1        1        
//       SARAM       0          1        0  <- "boot to SARAM"
//       OTP         0          0        1
//       I/0         0          0        0 
//
// DESCRIPTION:
//
//    This test will provide frequency measurement using capture unit (freqhz_pr)
//    and unit time out (freqhz_fr).  
// 
//    * 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
//
//          Watch Variables: freqhz_fr - Frequency measurement using position counter/unit time out
//                           freqhz_pr - Frequency measurement using capture unit
//
//###########################################################################
// Original Author: SD
//
// $TI Release: DSP280x, DSP2801x Header Files V1.41 $
// $Release Date: August 7th, 2006 $
//###########################################################################

#include "DSP280x_Device.h"     // DSP280x Headerfile Include File
#include "DSP280x_Examples.h"   // DSP280x 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 DSP280x_SysCtrl.c file.
   InitSysCtrl();

// Step 2. Initalize GPIO: 
// This example function is found in the DSP280x_Gpio.c file and
// illustrates how to set the GPIO to it's default state.
// InitGpio();  // Skipped for this example  
   EALLOW;
   GpioCtrlRegs.GPAMUX1.all = 0x0;    // GPIO pin
   GpioCtrlRegs.GPADIR.all = 0xFF;     // Output pin
   GpioDataRegs.GPADAT.all =0xFF;     // Close LEDs
   EDIS;

// Only init the GPIO for EQep1 in this case
// This function is found in DSP280x_EQep.c
   InitEQep1Gpio(); 

// 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 DSP280x_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 DSP280x_DefaultIsr.c.
// This function is found in DSP280x_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);
  	
	for(;;)
	{

   		

	}

} 


interrupt void prdTick(void)
{
   freq.calc(&freq);

   // Acknowledge this interrupt to receive more interrupts from group 1
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
   EPwm1Regs.ETCLR.bit.INT=1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -