查看: 3721|回复: 10

[其他] DZ60边缘对齐PWM第一个周期信号不同步

[复制链接]

该用户从未签到

1

主题

7

帖子

0

新手上路

Rank: 1

积分
35
最后登录
2015-7-14
发表于 2015-6-8 23:20:45 | 显示全部楼层 |阅读模式
求助!急急急!
采用边缘对齐方式(Low-true p 脉冲 (设置比较输出),输出一定占空比的信号。但是,在第一次计数器TPMxCNT=TPMxCnV时,没有输出低电平信号,但产生了中断。程序和采集的信号如下:

初始化函数

        (void)TPM1SC;
         TPM1SC = 0;
         TPM1CNT=0;
         TPM1MOD=220;
         TPM1C1V=40;
          TPM1C1SC=0x7c;
          PTAD_PTAD0 = 0;//
          delay(50);
          PTAD_PTAD0 = 1;
          TPM1SC = 0x0a;


中断服务函数

         TPM1SC_TOF=0;
          PTAD_PTAD0=~PTAD_PTAD0;//取反


信号图
1.png
我知道答案 目前已有10人回答
回复

使用道具 举报

该用户从未签到

19

主题

317

帖子

0

高级会员

Rank: 4

积分
862
最后登录
1970-1-1
发表于 2015-6-9 10:51:38 | 显示全部楼层
没遇到过,,帮顶。。
回复 支持 反对

使用道具 举报

该用户从未签到

24

主题

502

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1363
最后登录
1970-1-1
发表于 2015-6-10 15:36:45 | 显示全部楼层
你什么时候开启中断的 ?
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16701
    最后登录
    1970-1-1
    发表于 2015-6-16 12:19:54 | 显示全部楼层
    帮顶!!!
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-11-29 19:14
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    20

    主题

    405

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1529
    最后登录
    1970-1-1
    发表于 2015-6-16 20:02:15 | 显示全部楼层
    没遇到过!!
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    7

    帖子

    0

    新手上路

    Rank: 1

    积分
    35
    最后登录
    2015-7-14
     楼主| 发表于 2015-6-25 11:08:37 来自手机 | 显示全部楼层
    lvyunhua 发表于 2015-6-10 15:36
    你什么时候开启中断的 ?

    初始化完成时
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    7

    帖子

    0

    新手上路

    Rank: 1

    积分
    35
    最后登录
    2015-7-14
     楼主| 发表于 2015-6-25 11:14:37 来自手机 | 显示全部楼层
    通道中断的处理函数中,将Tpm发送关闭,TPM1CNT不清零,TPM1SC=0。TPM1CNT寄存器中的值将一直驱动吗?是在下一次初始化打开时继续计数吗?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    7

    帖子

    0

    新手上路

    Rank: 1

    积分
    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计数器清零会造成第一个数据发送错误?求指教!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-10-30 22:37
  • 签到天数: 28 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    9

    主题

    435

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1107
    最后登录
    2020-8-28
    发表于 2015-7-10 14:55:58 | 显示全部楼层
    8bit 的U呀,爱莫能助
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    7

    帖子

    0

    新手上路

    Rank: 1

    积分
    35
    最后登录
    2015-7-14
     楼主| 发表于 2015-7-14 16:16:57 来自手机 | 显示全部楼层
    没有人知道吗?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 04:04 , Processed in 0.115978 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表