#include "driverlib.h"
#include "device.h"
#include "SFO_V8.h"
自己建立的工程,配置HRPWM,工程包含以上头文件和SFO_v8_fpu_lib_build_c28.lib
编译时报错
unresolved symbol _EPwm1Regs, first referenced in ../SFO_v8_fpu_lib_build_c28.lib<SFO_v7_fpu_lib_build_c28.obj>
1.要定义!!!
volatile struct EPWM_REGS *ePWM[PWM_CH] ={ &EPwm1Regs, &EPwm1Regs, &EPwm2Regs, &EPwm3Regs, &EPwm4Regs,
&EPwm5Regs, &EPwm6Regs, &EPwm7Regs, &EPwm8Regs};
2.要在下面的两个位置分别添加lib文件和lib文件所在的路径
3.记得添加#include "SFO_V8.h"头文件,没有的话在c2000ware中添加(用于移植出一个单独的文件,TI的文件是一大坨)
贴一份代码吧(取自己需要的部分)
#include"F28x_Project.h"
#include "driverlib.h"
#include "device.h"
#include "LED.h"
#include "Timer0.h"
#include "SFO_V8.h"
#define EPWM_TIMER_TBPRD 100UL
void initEPWM1();
void error(void);
volatile uint32_t ePWM[] =
{0, EPWM1_BASE, EPWM2_BASE, EPWM3_BASE, EPWM4_BASE};
//
// Globals
//
float32_t dutyFine = 0.12345;
uint16_t status;
int MEP_ScaleFactor; // Global variable used by the SFO library
// Result can be used for all HRPWM channels
// This variable is also copied to HRMSTEP
// register by SFO() function.
void main(void)
{
Device_init();//初始化时钟和外设
Device_initGPIO();
Interrupt_initModule();
Interrupt_initVectorTable();
SysCtl_disablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);
initEPWM1();
SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);
EINT;
ERTM;
while(status == SFO_INCOMPLETE)
{
status = SFO();
if(status == SFO_ERROR)
{
error(); // SFO function returns 2 if an error occurs & # of MEP
} // steps/coarse step exceeds maximum of 255.
}
//EPWM_setCounterCompareValue(EPWM1_BASE, EPWM_COUNTER_COMPARE_A, 30U);//设置比较值,CompareA和CompareB各位1000
float32_t count = (65.7 * (float32_t)(EPWM_TIMER_TBPRD << 8))/100;
uint32_t compCount = (count);
HRPWM_setCounterCompareValue(ePWM[1], HRPWM_COUNTER_COMPARE_A, compCount);
//HRPWM_setHiResCounterCompareValueOnly(ePWM[1], HRPWM_COUNTER_COMPARE_A, 0x1B);
while(1)
{
status = SFO(); // in background, MEP calibration module
// continuously updates MEP_ScaleFactor
if (status == SFO_ERROR)
{
error(); // SFO function returns 2 if an error occurs & #
// of MEP steps/coarse step
} // exceeds maximum of 255.
// for(dutyFine = MIN_HRPWM_DUTY_PERCENT; dutyFine < 99.9; dutyFine += 0.01)
// {
//
//
// float32_t count = (dutyFine * (float32_t)(EPWM_TIMER_TBPRD << 8))/100;
// uint32_t compCount = (count);
// HRPWM_setCounterCompareValue(ePWM[1], HRPWM_COUNTER_COMPARE_A, compCount);
// HRPWM_setCounterCompareValue(ePWM[1], HRPWM_COUNTER_COMPARE_B, compCount);
}
}
void initEPWM1()
{
GPIO_setPadConfig(0, GPIO_PIN_TYPE_STD);//设置GPIO0和GPIO1为PWM输出
GPIO_setPinConfig(GPIO_0_EPWM1A);
GPIO_setQualificationMode(GPIO_0_EPWM1A, GPIO_QUAL_SYNC);
GPIO_setPadConfig(1, GPIO_PIN_TYPE_STD);