[技术问答] N76E616的P0.0作为T0计数器口脉冲输入计数失败

[复制链接]
2124|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;

模式1

模式1
jliu_nuvoton 发表于 2018-1-4 14:49 | 显示全部楼层
616外部计数是没有问题
可能是你的配置不对,P00要配置成输入模式。请参考下图 捕获1.PNG
 楼主| 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计数器在变化
 楼主| 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通道
 楼主| hn_sun 发表于 2018-1-4 16:31 | 显示全部楼层
新唐616 P0端的设计BUG,有个同事也是用P0.1 的 INT0 出问题了
jliu_nuvoton 发表于 2018-1-4 16:39 | 显示全部楼层
hn_sun 发表于 2018-1-4 16:31
新唐616 P0端的设计BUG,有个同事也是用P0.1 的 INT0 出问题了

能说说具体什么情况吗?
jliu_nuvoton 发表于 2018-1-4 16:43 | 显示全部楼层
hn_sun 发表于 2018-1-4 15:42
我发现原因了,照着你的写的,是可以,但是我的项目还要使用ADC,在定时器初始化前或者之后配置ADC,P0.0 ...

参考例程中ADC通道开启会有关闭数字通道的代码
 楼主| hn_sun 发表于 2018-1-4 20:12 | 显示全部楼层
mintspring 发表于 2018-1-4 17:35
贴出你的代码啊,只说表面现象难易理解。

要有板子实操,直接说你不会明白的,理论大家都懂
 楼主| 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);
   }

  
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。能告知我解决方法么?谢谢。
yankexie 发表于 2018-10-15 15:12 | 显示全部楼层
yankexie 发表于 2018-10-15 11:58
您好,关于N76E616的T0和ADC共用的问题请教您。我看到你已经解决了这个问题。我刚刚有个项目也遇上跟您相 ...

已查清,原因是自己写程序出现的一个bug,TR0写成了TR1。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

12

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部