Other Parts Discussed in Thread: POWERSUITE, TIDM-1000
Thread 中讨论的其他器件:powerSUITE、 TIDM-1000
工具/软件:Code Composer Studio
大家好、 我正在通过修改现有 powerSUITE 库来编写代码。
但是、尽管设置 CTRMODE 的设置 CTRMODE 的设置 IH_PWM 在如下所示的主语句中执行、但 HIGH_FREQ_PWM4_BASE_IH (EPWM5)的 CTRMODE 初始化为 EPWM_COUNTER_MODE_UP (0)、而不是 EPWM_COUNTER_MODE_UP_DOWN。
为了解决这个问题、我在中断语句中插入了 ePWM_setTimeBaseCounterMode (HIGH_FREQ_PWM4_BASE_IH、ePWM_COUNTER_MODE_UP_DOWN)。
但是、我想知道为什么 HIGH_FREQ_PWM4_BASE_IH (EPWM5)的 CTRMODE 未在 main 语句中初始化。
已确认只有 HIGH_FREQ_PWM4_BASE_IH (EPWM5)初始化为向上计数模式、而其余 PWM 在初始化为向上向下计数模式时进行初始化。
此外、EPWM5在另一个正常操作代码中运行良好。 因此、我们认为这不是硬件问题。
void setupIH_PWM (uint32_t base1、uint32_t BASE2、uint32_t base3、uint16_t PWM_PERIOD_TICK、uint16_t PWM_PERIOD_ticks 1) { ePWM_setPeriodLoadMode (base1、ePWM_PERIOD_LOAD); ePWM_setTimeBasePeriod (base1、PWM_PERIOD_ticks1>>1); ePWM_setTimeBaseCounter (base1、0); ePWM_setPhaseShift (base1、0); ePWM_setTimeBaseCounterMode (base1、ePWM_COUNTER_MODE_UP_DOWN); ePWM_setClockPrescaler (base1、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1); ePWM_setPeriodLoadMode (base3、ePWM_PERIOD_LOAD); ePWM_setTimeBasePeriod (base3、PWM_PERIOD_TICKs>>1); ePWM_setTimeBaseCounter (base3、0); ePWM_setPhaseShift (base3、0); ePWM_setTimeBaseCounterMode (base3、ePWM_COUNTER_MODE_UP_DOWN); ePWM_setClockPrescaler (base3、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1); ePWM_setCounterCompareShadowImage LoadMode (base1、ePWM_COUNTER_COMPARE_A、ePWM_COMP_LOAD_ON_CNTR_ZERO); ePWM_setCounterCompareShadowImage LoadMode (base1、ePWM_COUNTER_COMPARE_B、ePWM_COMP_LOAD_ON_CNTR_ZERO); // CTR = CMPA@UP,设置为1 ePWM_setActionQualifierAction (base1、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA); ePWM_setActionQualifierAction (base1、ePWM_AQ_output_A、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_up_CMPB); ePWM_setActionQualifierAction (base1、ePWM_AQ_output_B、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_down_CMPB); ePWM_setActionQualifierAction (base1、ePWM_AQ_output_B、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_down_CMPA); }
中断语句
IF (GPIO_READPin (62)=0) { DISABLE_AQ_SW_FRC (HIGH_FREQ_PWM4_BASE_IH); DISABLE_AQ_FRC (HIGH_FREQ_PWM4_BASE_IH); AQ_SW_FORCE_PWMxA_HIGH_PWMxB_LOW (HIGH_FREQ_PWM5_BASE_IH_FORCE); SINGLE_OUT_MODE (HIGH_FREQ_PWM4_BASE_IH);//DBCTL[OUT_MODE]=0 PWM_Duty_前端= 0.06; PWM_Duty_Backend = 0.94; ePWM_setTimeBaseCounterMode (HIGH_FREQ_PWM4_BASE_IH、ePWM_COUNTER_MODE_UP_DOWN); ePWM_setTimeBasePeriod (HIGH_FREQ_PWM4_BASE_IH、IH_Switching_Period>>1); ePWM_setCounterCompareValue (HIGH_FREQ_PWM4_BASE_IH、 ePWM_COUNTER_COMPARE_A、 (uint32_t)((float32_t) IH_Switching_Period*PWM_Duty_前端)>1); ePWM_setCounterCompareValue (HIGH_FREQ_PWM4_BASE_IH、 ePWM_COUNTER_COMPARE_B、 (uint32_t)((float32_t) IH_Switching_Period*PWM_Duty_Backend)>>1); }
正常工作代码与有问题代码之间的区别在于存储器映射。 由于代码存在内存问题、因此修改了内存映射。
MEMORY
{
PAGE 0:
//* Program Memory */*
Memory (RAM/FLASH ) blocks can be moved to Page1 for data allocation */
/* begin 用于"boot to Flash"引导加载程序模式*/
begin:origin = 0x080000、length = 0x000002 //闪存开始原点:0x080000 RAM 开始原点:0x000000
RAMM0:origin = 0x000122,length = 0x0002DE
RAMLS2LS3LS4LS5:origin = 0x009000,length = 0x002000//100kHz,length 0x001000=4K*16,length 0x000800=2K*16,0X002000=8K 16
RAMD0 :origin = 0x00B000、length = 0x000800
RAMGS0GS1GS2 :origin = 0x00C000,length = 0x003000//ramfunc (10kHz 中断) 12K*16
复位:origin = 0x3FFFC0,length = 0x000002
/*闪存扇区*/
FLASHA :origin = 0x080002、length = 0x001FFE//片上闪存*/
FLASHB :origin = 0x082000、length = 0x002000//片上闪存*/
FLASHC :origin = 0x084000、length = 0x002000//片上闪存*/
FLASHD :origin = 0x086000、length = 0x002000//片上闪存*/
FLASHE :origin = 0x088000、length = 0x008000//片上闪存*/
FLASHF :origin = 0x090000、length = 0x008000//片上闪存*/
FLASHG :origin = 0x098000、length = 0x008000//片上闪存*/
FLASHH :origin = 0x0A0000、length = 0x008000//片上闪存*/
FLASHI :origin = 0x0A8000、length = 0x008000//片上闪存*/
FLASHJ :origin = 0x0B0000、length = 0x008000//片上闪存*/
FLASHK :origin = 0x0B8000、length = 0x002000//片上闪存*/
FLASHL :origin = 0x0BA000、length = 0x002000//片上闪存*/
FLASHM :origin = 0x0BC000、length = 0x002000//片上闪存*/
FLASHN :origin = 0x0BE000、length = 0x002000//片上闪存*/
page 1:
//*数据存储器*/
//*内存(RAM/FLASH)块可移动到 PAGE0进行程序分配*/
BOOT_RSVD :origin = 0x000002、length = 0x000120
RAMM1 :origin = 0x000400、length = 0x000400
RAMLS0LS1 :origin = 0x008000、length = 0x001000
RAMD1 :origin = 0x00B800,length = 0x000800
// RAMGS2 :origin = 0x00E000、length = 0x001000
RAMGS3 :origin = 0x00F000、length = 0x001000
RAMGS4 :origin = 0x010000,length = 0x001000
RAMGS5GS6GS7GS8GS9 :origin = 0x011000,length = 0x005000
// RAMGS6 :origin = 0x012000,length = 0x001000
// RAMGS7 :origin = 0x013000、length = 0x001000
// RAMGS8 :origin = 0x014000、length = 0x001000
// RAMGS9 :origin = 0x015000,length = 0x001000
RAMGS10 :origin = 0x016000,length = 0x001000
RAMGS11 :origin = 0x017000、length = 0x001000
RAMGS12 :origin = 0x018000、length = 0x001000
RAMGS13 :origin = 0x019000、length = 0x001000
RAMGS14 :origin = 0x01A000、length = 0x001000
RAMGS15 :origin = 0x01B000、length = 0x001000
CPU2TOCPU1RAM:origin = 0x03F800,length = 0x000400
CPU1TOCPU2RAM:origin = 0x03FC00,length = 0x000400
}
SECTIONS
{//.cinit :> FLASHB、.init_array :> FLASHB、.text :>> FLASHB|FLASH|FLASH|FLASH|FLASHE/*
分配程序区域:*/
.cinit :> FLASHB PAGE = 0、align (4)
.init_array :> FLASHB、 PAGE = 0、ALIGN (4)
.text :>> FLASHG PAGE = 0,ALIGN (4)
codestart :>开始 PAGE = 0、ALIGN (4)
/*分配未初始化的数据段:*/
.stack :> RAMM1 PAGE = 1.data
:> RAMM1 PAGE = 1.bss
:>> RAMGS5GS6GS7GS8GS9 PAGE = 1
.sysmem :> RAMGS3 PAGE = 1
/*初始化段进入闪存*/
.const :>> FLASHF | FLASHG | FLASHH PAGE = 0、ALIGN (4)
.switch :> FLASHB PAGE = 0、ALIGN (4)
复位 :>重置, PAGE = 0、TYPE = DSECT /*未使用、*/
GROUP
{
.TI.ramfunc
{
}
ramfuncs //10kHz 인터럽트
}load = FLASHD、
run = RAMGS0GS1GS2、//8K*16
load_start (RamfuncsLoadStart)、
load_size (RamfuncsLoadSize)、
load_end (RamfuncsLoadEnd)、
run_start (RamfuncsRunStart)、
run_size (RamfuncsLoadSize)、RunfuncsSize
run_end (RamfuncsRunEnd)、
page = 0、align (4)
/*使用 IPC API 驱动程序时需要以下部分定义*/
组:> CPU1TOCPU2RAM,页= 1//双核组
{
PUTBUFFER
PUTWRITEIDX
GETREADIDX
}
组:> CPU2TOCPU1RAM,页= 1//双核组
{
GETBUFFER:TYPE = DSECT
GETWRITEIDX:TYPE = DSECT
PUTREADIDX:TYPE = DSECT
}
SFRA_F32_Data:> RAMGS3,ALIGN = 64,PAGE = 1
SFRA_Data:> RAMGS3,ALIGN = 64,PAGE=1
FPUmathTables:> RAMGS4,PAGE =1.scratchpad
:> RAMLS0LS1, PAGE = 1.bss_cla
:> RAMLS0LS1, PAGE =1
controlVariables:>RAMGS5GS6GS7GS8GS9, PAGE = 1.CONST_CLA
:load = FLASHH、
运行= RAMLS2LS3LS4LS5、
RUN_START (Cla1ConstRunStart)、
Load_start (Cla1ConstLoadStart)、
load_size (Cla1ConstLoadSize)、
PAGE = 0
组
{
isrcodefuncs
dclfuncs
} 负载= FLASHH、
运行= RAMLS2LS3LS4LS5、
load_start (isrcodefuncsLoadStart)、
load_size (isrcodestfuncsLoadSize)、
load_end (isrcodefuncsLoadEnd)、
run_start (isrcodefuncsRunStart)、
run_size (isrcodefuncsRunSize)、
run_end (isrcodefuncsRunEnd)、
PAGE = 0、ALIGN (4)
/* CLA 特定部分*/
Cla1Prog :load = FLASHH、
运行= RAMLS2LS3LS4LS5、
Load_start (Cla1ProgLoadStart)、
RUN_START (Cla1ProgRunStart)、
Load_size (Cla1ProgLoadSize)、
PAGE = 0、ALIGN (4)
}
/*
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//文件结束。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
*
谢谢你。