在线时间6 小时
UID3138005
注册时间2015-12-16
NXP金币0
该用户从未签到
新手上路

- 积分
- 30
- 最后登录
- 2016-5-5
|

楼主 |
发表于 2016-1-3 11:40:10
|
显示全部楼层
按照我的理解和根据一些实例,我总结为
Counter 0/1/2/3 input pin为DSP硬件连接I/O脚,如TA0/TA1/TA2/TA3,通过硬件脚输入脉冲信号到定时器,
Counter 0/1/2/3 output 为定时器产生的PWM,然后定时器产生的PWM作为另一个定时器的计数时钟源。
例
// (See Processor Expert PulseAccumulator bean.)
// This example uses TMRA1 to count pulse (actually counts rising edges of the pulse)
// from an external source (TA3).
//
void Pulse_Init(void)
{
/* TMRA1_CTRL: CM=0,PCS=3,SCS=0,ONCE=0,LENGTH=0,DIR=0,Co_INIT=0,OM=0 */
setReg(TMRA1_CTRL,0x0600); /* Set up mode */
/* TMRA1_SCTRL: TCF=0,TCFIE=0,TOF=0,TOFIE=0,IEF=0,IEFIE=0,IPS=0,INPUT=0,
Capture_Mode=0,MSTR=0,EEOF=0,VAL=0,FORCE=0,OPS=0,OEN=0 */
setReg(TMRA1_SCTRL,0x00);
setReg(TMRA1_CNTR,0x00); /* Reset counter register */
setReg(TMRA1_LOAD,0x00); /* Reset load register */
setRegBitGroup(TMRA1_CTRL,CM,0x01); /* Run counter */
}
TMRA1计数在I/O脚TA3输入的脉冲。所以把Counter 3 input pin(外部I/O脚TA3输入的信号)作为TMRA1的PRIMARY COUNT SOURCE.
另外一个例子:
// (See Processor Expert PulseStream bean.)
// This example generates six 10ms pulses, from TA1 output.
// Assuming the chip is operating at 60 MHz.
//
// To do this, timer 3 is used to generate a clock with a period of 10ms.
//
// Timer 1 is used to gate these clocks and count the number of pulses that have
// been generated.
//
void PulseStream_Init(void)
{
// Select IP_bus_clk/16 as the clock source for Timer A3
/* TMRA3_CTRL: CM=0,PCS=0x0C,SCS=0,ONCE=0,LENGTH=1,DIR=0,Co_INIT=0,OM=3 */
setReg(TMRA3_CTRL,0x1823); /* Set up mode */
/* TMRA3_SCTRL: TCF=0,TCFIE=0,TOF=0,TOFIE=0,IEF=0,IEFIE=0,IPS=0,INPUT=0,
Capture_Mode=0,MSTR=0,EEOF=0,VAL=0,FORCE=0,OPS=0,OEN=0 */
setReg(TMRA3_SCTRL,0x00);
setReg(TMRA3_LOAD,0x00); /* Reset load register */
setReg(TMRA3_COMP1,37500); /* (16 * 37500 ) / 60e6 = 0.01 sec */
/* TMRA3_CSCTRL: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,
TCF2EN=0,TCF1EN=0,TCF2=0,TCF1=0,CL2=0,CL1=0 */
setReg(TMRA3_CSCTRL,0x00); /* Set up comparator control register */
// Timer 3 output is the clock source for this timer.
/* TMRA1_CTRL: CM=0,PCS=7,SCS=0,ONCE=1,LENGTH=1,DIR=0,Co_INIT=0,OM=7 */
setReg(TMRA1_CTRL,0x0E67); /* Set up mode */
/* TMRA1_SCTRL: TCF=0,TCFIE=0,TOF=0,TOFIE=0,IEF=0,IEFIE=0,IPS=0,INPUT=0,
Capture_Mode=0,MSTR=0,EEOF=0,VAL=0,FORCE=0,OPS=0,OEN=1 */
setReg(TMRA1_SCTRL,0x01);
setReg(TMRA1_CNTR,0x00); /* Reset counter register */
setReg(TMRA1_LOAD,0x00); /* Reset load register */
setReg(TMRA1_COMP1,0x04); /* Set up compare 1 register */
// set to interrupt after the last pulse
/* TMRA1_CSCTRL: ??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,
TCF2EN=0,TCF1EN=1,TCF2=0,TCF1=0,CL2=0,CL1=0 */
setReg(TMRA1_CSCTRL,0x40); /* Set up comparator control register */
// Finally, start the counters running
setReg(TMRA3_CNTR,0); /* Reset counter */
setRegBitGroup(TMRA3_CTRL,CM,0x01); /* Run source clock counter */
setRegBitGroup(TMRA1_CTRL,CM,0x01); /* Run counter */
}
这个例子中,TMRA3产生一个10ms周期的脉冲,然后TMRA3的输出(Counter 0 output(不是来自外部I/O脚的脉冲))作为TMRA1的primary source
不知道我的理解是否正确。谢谢!
|
|