打印
[技术问答]

N76E616的P0.0作为T0计数器口脉冲输入计数失败

[复制链接]
1529|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hn_sun|  楼主 | 2018-1-4 11:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
新唐616手册上明明写着 “In the "Counter" mode, the countering register increased on the falling edge of the external input pin T0. If the sampled value is high in one clock cycle and low in the next, a valid 1-to-0 transition is recognized on T0 or T1 pin”我现在用定时器0当做计数器使用,信号发生器产生3kHz,定时器1 20ms中断去读 TH0,和 TL0的值,每次两者都是0,现在很怀疑新唐的616是不是没有这个功能,毕竟搭配的BSP也没有提到。
我的定时器0 初始化代码
  TMOD |= 0x55;
  set_TR0;

QQ图片20180104111916.png (209.7 KB )

模式1

模式1
沙发
jliu_nuvoton| | 2018-1-4 14:49 | 只看该作者
616外部计数是没有问题
可能是你的配置不对,P00要配置成输入模式。请参考下图

使用特权

评论回复
板凳
hn_sun|  楼主 | 2018-1-4 15:07 | 只看该作者
jliu_nuvoton 发表于 2018-1-4 14:49
616外部计数是没有问题
可能是你的配置不对,P00要配置成输入模式。请参考下图
...

你真的用硬件模拟成功了吗?我同样的代码用P1.4的T1输入就行,P0.0的T0输入就不行

使用特权

评论回复
地板
jliu_nuvoton| | 2018-1-4 15:13 | 只看该作者
hn_sun 发表于 2018-1-4 15:07
你真的用硬件模拟成功了吗?我同样的代码用P1.4的T1输入就行,P0.0的T0输入就不行 ...

就用6行代码,从P00输入,进入debug,就可以看到T0计数器在变化

使用特权

评论回复
5
hn_sun|  楼主 | 2018-1-4 15:42 | 只看该作者
本帖最后由 hn_sun 于 2018-1-4 15:45 编辑
jliu_nuvoton 发表于 2018-1-4 15:13
就用6行代码,从P00输入,进入debug,就可以看到T0计数器在变化

我发现原因了,照着你的写的,是可以,但是我的项目还要使用ADC,在定时器初始化前或者之后配置ADC,P0.0就失效了,当时ADC没使用到P0.0通道

使用特权

评论回复
6
hn_sun|  楼主 | 2018-1-4 16:31 | 只看该作者
新唐616 P0端的设计BUG,有个同事也是用P0.1 的 INT0 出问题了

使用特权

评论回复
7
jliu_nuvoton| | 2018-1-4 16:39 | 只看该作者
hn_sun 发表于 2018-1-4 16:31
新唐616 P0端的设计BUG,有个同事也是用P0.1 的 INT0 出问题了

能说说具体什么情况吗?

使用特权

评论回复
8
jliu_nuvoton| | 2018-1-4 16:43 | 只看该作者
hn_sun 发表于 2018-1-4 15:42
我发现原因了,照着你的写的,是可以,但是我的项目还要使用ADC,在定时器初始化前或者之后配置ADC,P0.0 ...

参考例程中ADC通道开启会有关闭数字通道的代码

使用特权

评论回复
9
hn_sun|  楼主 | 2018-1-4 20:12 | 只看该作者
mintspring 发表于 2018-1-4 17:35
贴出你的代码啊,只说表面现象难易理解。

要有板子实操,直接说你不会明白的,理论大家都懂

使用特权

评论回复
10
hn_sun|  楼主 | 2018-1-5 09:41 | 只看该作者
找到BUG的原因了,我自己的ADC初始化函数的问题,(我改写了ADC_Pin_Select)我先初始化AIN的配置,在ADCCON之前,把多个AIN引脚配置了
   我的BUG版本:
   void ADC_Pin_Select(uint8_t ADC_channel)
   {
        switch(ADC_channel)
        {
            case 2:
                  ADCCON0 = 0x02;
                  break;
            case 3:
                  ADCCON0 = 0x03;
                  break;
            ...
        }
   }
   
   void  ADC_Initial(void)
   {
        set_P0M1_2;
        clr_P0M2_2;
        set_P04DIDS;

        set_P0M1_3;
        clr_P0M2_3;
        set_P00DIDS;
  
        ADC_Pin_Select(2);
   }

  

使用特权

评论回复
11
yankexie| | 2018-10-15 11:58 | 只看该作者
hn_sun 发表于 2018-1-5 09:41
找到BUG的原因了,我自己的ADC初始化函数的问题,(我改写了ADC_Pin_Select)我先初始化AIN的配置,在ADCCO ...

您好,关于N76E616的T0和ADC共用的问题请教您。我看到你已经解决了这个问题。我刚刚有个项目也遇上跟您相同的问题。P0.0作为计数器T0的输入端,P0.2和P0.3作为ADC输入端,现在ADC没问题,但计数器T0总是计数为0。能告知我解决方法么?谢谢。

使用特权

评论回复
12
yankexie| | 2018-10-15 15:12 | 只看该作者
yankexie 发表于 2018-10-15 11:58
您好,关于N76E616的T0和ADC共用的问题请教您。我看到你已经解决了这个问题。我刚刚有个项目也遇上跟您相 ...

已查清,原因是自己写程序出现的一个bug,TR0写成了TR1。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

12

帖子

1

粉丝