解决HRPWM的SFO.V8移植的问题

#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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值