工具/软件:
您好:
我对 TMS320F2800157的计时器和 PWM 有三个问题。
1.
以下代码用于配置1ms 计时器:
void myCPUTIMER0_init (){
CPUTimer_setEmulationMode (myCPUTIMER0_BASE、CPUTIMER_EMULATIONMODE_STOPAFTERNEXTDECREENT);
CPUTimer_setPreScaler (myCPUTIMER0_BASE、119U);
CPUTimer_setPeriod (myCPUTIMER0_BASE、1000U);
CPUTimer_enableInterrupt (myCPUTIMER0_BASE);
CPUTimer_STOPTimer (myCPUTIMER0_BASE);
CPUTimer_reloadTimerCounter (myCPUTIMER0_BASE);
CPUTimer_startTimer (myCPUTIMER0_BASE);
}
controlCARD 使用20 MHz 晶体振荡器作为 PLL 源。
#define DEVICE_OSCSRC_FREQ 20000000U
//时钟配置:
// PLLSYSCLK = 20 MHz (XTAL_OSC)* 48 (IMULT)/(2 (REFDIV)* 4 (ODIV)* 1 (SYSDIV)
#define DEVICE_setCLOCK_CFG (SYSCTL_OSCSRC_XTAL | SYSCTL_IMULT (48)|\
SysCtl_REFDIV (2)| SysCtl_ODIV (4)|\
SysCtl_SYSDIV (1)| SysCtl_PLL_ENABLE |\
SysCtl_DCC_BASE_0)
//产生的 SYSCLK =基于 DEVICE_setCLOCK_CFG 的120 MHz
#define DEVICE_SYSCLK_FREQ ((DEVICE_OSCSRC_FREQ * 48)/(2 * 4 * 1))
在该配置中、预分频器设置为119、它将120 MHz 时钟分频到1 MHz。 但是、文档没有明确说明 CPUTimer_setPeriod ()函数如何处理周期值。 若要实现1ms 计时器间隔、我们是否应该使用:
CPUTimer_setPeriod (myCPUTIMER0_BASE、1000U);
或者应该是:
CPUTimer_setPeriod (myCPUTIMER0_BASE、999U);
(换句话说、周期值应该是1000还是1000 - 1)?
我们希望对此作出澄清。
2.
另外、对于 PWM、我们需要驱动 LED 以调节亮度。
我以 epwm_ex11_configure_signal.c 示例为参考。
EPWM_setCounterCompareValue (myEPWM0_BASE、EPWM_COUNTER_COMPARE_A、(val));
//
//启用此示例所需的中断
//
INTERRUPT_ENABLE (INT_EPWM1);
中断已启用、但没有处理功能。 该函数正常工作是否需要中断? 它在示例中已启用。
3.
当我们为 PWM 生成代码时,也会生成 sync_init()函数:
void sync_init (){
SysCtl_setSyncOutputConfig (SysCtl_SYNC_OUT_SRC_EPWM1SYNCOUT);
//
// SOCA
//
SysCtl_enableExtADCSOCSsource (0);
//
// SOCB
//
SysCtl_enableExtADCSOCSsource (0);
}
但是、我们的应用不需要 SYNC。
要禁用 SYNC、我是否应该按照下图中所示的步骤操作?


此致、
Egemen