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

- 积分
- 35
- 最后登录
- 2015-7-14
|

楼主 |
发表于 2015-7-9 19:08:16
|
显示全部楼层
初始化TPM
void tpm_Init(void)
{
(void)TPM1SC;
TPM1SC = 0x00;
(void)TPM1C1SC;
TPM1C1SC = 0x7C;
TPM1C1VL =40;
TPM1C1VH = 0x00;
TPM1MODL = 100;
TPM1MODH = 0x00;
TPM1SC = 0x0A;/* 1MHZ, 1cnt = 1us, CPWMS=0 */
TPM1CNTH = 0x00;
}
中断服务函数
void ISR_TPM1CH1(void)
{
(void)TPM1C1SC;
TPM1C1SC = TPM1C1SC & 0x7F;
txCnt++;
if (txCnt >= 8)
{
(void)TPM1C1SC;
TPM1C1SC = 0x00;
(void)TPM1SC;
TPM1SC = 0x00;
txCnt = 0;
}
}
以上程序是使用DZ60或DZ96芯片,PWM方式发送8个数据,占空比为40%。如果仅这些功能,代码完全没有问题。但是我想再继续实现以下功能:
间隔2s发送以上8个数据,且每次在发送完8个数据后都要关闭TPM1,并做普通IO使用。
为实现这个功能,我定时2s调用TPM1初始化函数(如上初始化代码),结果却出现以下两种:
一种:TPM1初始化函数(和上初始化代码一样),结果每次发送数据时,第一个数据的40us不是低电平,而是高电平,但是在40us处产生了通道对比中断。
二种:TPM1初始化函数(上初始化代码,但TPM1CNTH = 0x00计数器清零屏蔽),结果每次发送数据个数都是8个,但是第一个数据的低电平延时一定时间发出。
以上,想知道为什么TPM1CNTH = 0x00计数器清零会造成第一个数据发送错误?求指教!!! |
|