在线时间1 小时
UID3065047
注册时间2014-10-4
NXP金币0
该用户从未签到
新手上路

- 积分
- 11
- 最后登录
- 2015-4-14
|
我用的是MK60DN512VLQ10
void lptmr_pulse_init(LPT0_ALTn altn, uint16 count, LPT_CFG cfg)
{
#if defined(MK60F15)
OSC0_CR |= OSC_CR_ERCLKEN_MASK; //使能 OSCERCLK
#endif
// 开启模块时钟
SIM_SCGC5 |= SIM_SCGC5_LPTIMER_MASK; //使能LPT模块时钟
//设置输入管脚
if(altn == LPT0_ALT1)
{
port_init(PTA19, ALT6 ); //在PTA19上使用 ALT6
}
else if(altn == LPT0_ALT2)
{
port_init(PTC5, ALT4 ); //在PTC5上使用 ALT4
}
else //不可能发生事件
{
ASSERT((altn == LPT0_ALT1 ) || (altn == LPT0_ALT2 )); //设置管脚有误?
}
// 清状态寄存器
LPTMR0_CSR = 0x00; //先关了LPT,这样才能设置时钟分频,清空计数值等
#if defined(MK60DZ10)
//选择时钟源
LPTMR0_PSR = ( 0
| LPTMR_PSR_PCS(1) //选择时钟源: 0 为 MCGIRCLK ,1为 LPO(1KHz) ,2为 ERCLK32K ,3为 OSCERCLK
| LPTMR_PSR_PBYP_MASK //旁路 预分频/干扰滤波器 ,即不用 预分频/干扰滤波器(注释了表示使用预分频/干扰滤波器)
//| LPTMR_PSR_PRESCALE(1) //预分频值 = 2^(n+1) ,n = 0~ 0xF
);
#elif defined(MK60F15)
//选择时钟源
LPTMR0_PSR = ( 0
| LPTMR_PSR_PCS(3) //选择时钟源: 0 为 MCGIRCLK ,1为 LPO(1KHz) ,2为 ERCLK32K ,3为 OSCERCLK
//| LPTMR_PSR_PBYP_MASK //旁路 预分频/干扰滤波器 ,即不用 预分频/干扰滤波器(注释了表示使用预分频/干扰滤波器)
| LPTMR_PSR_PRESCALE(4) //预分频值 = 2^(n+1) ,n = 0~ 0xF
);
#endif
// 设置累加计数值
LPTMR0_CMR = LPTMR_CMR_COMPARE(count); //设置比较值
// 管脚设置、使能中断
LPTMR0_CSR = (0
| LPTMR_CSR_TPS(altn) // 选择输入管脚 选择
| LPTMR_CSR_TMS_MASK // 选择脉冲计数 (注释了表示时间计数模式)
| ( cfg == LPT_Falling ? LPTMR_CSR_TPP_MASK : 0 ) //脉冲计数器触发方式选择:0为高电平有效,上升沿加1
| LPTMR_CSR_TEN_MASK //使能LPT(注释了表示禁用)
| LPTMR_CSR_TIE_MASK //中断使能
//| LPTMR_CSR_TFC_MASK //0:计数值等于比较值就复位;1:溢出复位(注释表示0)
);
//LPTMR0_CNR = 0;
}
上面的这个是模块的初始化函数。
uint16 lptmr_pulse_get(void)
{
uint16 data;
LPTMR0_CNR = 0x00;
if(LPTMR0_CSR & LPTMR_CSR_TCF_MASK) //已经溢出了
{
data = ~0; //返回 0xffffffff 表示错误
}
else
{
data = LPTMR0_CNR;
}
return data;
}
这一个是读取LPTMR0_CNR的数值。我在读取之前,看技术手册上说读取前要先赋值,所以我给LPTMR0_CNR赋值为0x00。再读取。但是依旧没有用呢。
请问如何解决呢??
|
|