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

📄 example_280xecap_apwm.c

📁 DSP学习板上的例子程序包括 AD转换 CAN总线 SPI SCI
💻 C
字号:
// TI File $Revision: /main/5 $
// Checkin $Date: December 3, 2004   14:00:04 $
// Modified by LSD_Hanbing to suit the LSD_EVM320F2801X, April 23,2007
//###########################################################################
//
// FILE:    Example_280xECap_apwm.c
//
// TITLE:   DSP280x ECAP APWM Example
//
// ASSUMPTIONS:
//
//    This program requires the DSP280x header files.
//
//    Monitor eCAP1 - eCAP2 pins on a oscilloscope as
//    described below. 
// 
//       eCAP1 on GPIO24
//       eCAP2 on GPIO7
//
//    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 program sets up the eCAP pins in the APWM mode.
//
//    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
//    
//    All frequencies assume a 12 Mhz input clock. The XCLKOUT pin
//    should show 60Mhz.
//    
//    Watch Variables:
//
//       ERR_LOG (bit 15 is set to remind user to visually
//       check the PWM action on the CAP pins. The default
//       configuration in this example should output a 5 Hz
//       PWM signal on the ECAP1 and the ECAP2 pins with a
//       60Mhz SYSCLKOUT, assuming a 12Mhz input clock is used.
//
//###########################################################################
// Original Author: D.F.
//
// $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

// 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 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;
      
// Initialize the GPIO pins for eCAP.
// This function is found in the DSP280x_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 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.  
// No interrupts used for this example.

// Step 4. Initialize all the Device Peripherals:
// This function is found in DSP280x_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 = 0x00B71B00;			// Set Period value
   ECap1Regs.CAP2 = 0x005B8D80;			// 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 = 0x00B71B00;			// Set Period value
   ECap2Regs.CAP2 = 0x005B8D80;			// Set Compare value
   ECap2Regs.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;

   for(;;)
   {
      // set next duty cycle to 50%
      ECap1Regs.CAP1 >> 1;
      
      // vary freq between 5 Hz and 10 Hz
      if(ECap1Regs.CAP1 >= 0x00B71B00)
      {
         direction = 0;
      } else if (ECap1Regs.CAP1 <= 0x005B8D80)
      {
         direction = 1;
      }
      
      if(direction == 0)
      {
         ECap1Regs.CAP1 - 300000;
      } else
      {
         ECap1Regs.CAP1 + 300000;
      }
   }

} 



//===========================================================================
// No more.
//===========================================================================

⌨️ 快捷键说明

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