打印
[技术问答]

恭喜恭喜,提个关于M0516BN的问题,希望有大大能够解答

[复制链接]
3068|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
今晚打老虎|  楼主 | 2013-8-4 13:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
是关于M0516BN的定时器1的外部捕获/复位功能不正常的问题。以下程序段是我从版本为M051SeriesBSP_CMSIS_v2.01.002的开发包中的SampleCode\Driver\TIMER工程里摘抄的。    /* Enable TIMER1 counter and capture function */
    TIMER1->TCMPR = 0xFFFFFF;
    TIMER1->TCSR = TIMER_TCSR_CEN_Msk | TIMER_TCSR_IE_Msk | TIMER_TCSR_MODE_CONTINUOUS |TIMER_TCSR_CTB_ENABLE |  TIMER_TCSR_TDR_EN_Msk | TIMER_TCSR_PRESCALE(1);
    TIMER1->TEXCON = TIMER_TEXCON_MODE_CAP | TIMER_TEXCON_TEXIEN_ENABLE | TIMER_TEXCON_TEXEN_ENABLE;

这是对Timer1进行捕捉功能配置。
对TIMER1->TCSR寄存器配置时,TDR_EN位置1使能。
对TIMER1->TEXCON寄存器配置时,RSTCAPSEL位置0,选择捕捉功能。
硬件方面,我已将新唐提供的M052_TINY_EVB_V002上的芯片换位M0516LBN。将MCU的9脚和10脚短接起来。
运行程序,通过超级终端选择TIMER1的外部捕捉功能测试,按任意键启动测试后,超级终端打印出来的数据如下:

# TIMER Settings:
  TIMER0: Clock source is 12 MHz; Toggle-Out mode and frequency is 500 Hz; Disable interrupt.
  TIMER3: Clock source is 12 MHz; Toggle-Out mode and frequency is 1 Hz; Disable interrupt.
  TIMER1: Clock source is HCLK(48 MHz); Periodic mode; Disable interrupt; Pre-scale 1; TCMP is 0xFFFFFF;
          Counter pin enable; Capture pin enable;
# Generate 500 Hz frequency of T0 and connect T0 to T1 counter pin.
# Generate 1 Hz frequency of T3 and connect T3 to T1EX capture pin.
# Get 500 ccounts from T1 pin when each T1EX pin interrupt occurred.
Press any key to start test ...

   [1]- 0
   [2]- 0
   [3]- 0
   [4]- 0
   [5]- 0
   [6]- 0
   [7]- 0
   [8]- 0
   [9]- 0
   [10]- 0
   [11]- 0

我用示波器测试过T0端口和T3端口,确认这两个端口输出的波形一个为1Hz,一个为500Hz。
之后我进行设断点仿真,观测到程序是可以进入TIMER1的中断服务程序中,而且寄存器TEXISR中的TEXIF位被置1。
void TMR1_IRQHandler(void)
{
    if (_TIMER_GET_CMP_INT_FLAG(TIMER1) == 1)
    {
        /* Clear TIMER1 Timeout Interrupt Flag */
        _TIMER_CLEAR_CMP_INT_FLAG(TIMER1);      
    }else
    if (_TIMER_GET_CAP_INT_FLAG(TIMER1) == 1)
    {
        /* Clear TIMER1 Capture Interrupt Flag */
        _TIMER_CLEAR_CAP_INT_FLAG(TIMER1);      
    }

    g_au32TMRINTCount[1]++;
}


如果我将
TIMER1->TCSR = TIMER_TCSR_CEN_Msk | TIMER_TCSR_IE_Msk | TIMER_TCSR_MODE_CONTINUOUS |
TIMER_TCSR_CTB_ENABLE
|  TIMER_TCSR_TDR_EN_Msk | TIMER_TCSR_PRESCALE(1);
中橙色部份删除,即改为以下的语句
TIMER1->TCSR = TIMER_TCSR_CEN_Msk | TIMER_TCSR_IE_Msk | TIMER_TCSR_MODE_CONTINUOUS
|  TIMER_TCSR_TDR_EN_Msk | TIMER_TCSR_PRESCALE(1);
对程序进行编译仿真。运行程序,通过超级终端选择TIMER1的外部捕捉功能测试,按任意键启动测试后,超级终端打印出来的数据如下:
# TIMER Settings:
  TIMER0: Clock source is 12 MHz; Toggle-Out mode and frequency is 500 Hz; Disab
le interrupt.
  TIMER3: Clock source is 12 MHz; Toggle-Out mode and frequency is 1 Hz; Disable
interrupt.
  TIMER1: Clock source is HCLK(48 MHz); Periodic mode; Disable interrupt; Pre-sc
ale 1; TCMP is 0xFFFFFF;
          Counter pin enable; Capture pin enable;
# Generate 500 Hz frequency of T0 and connect T0 to T1 counter pin.
# Generate 1 Hz frequency of T3 and connect T3 to T1EX capture pin.
# Get 500 ccounts from T1 pin when each T1EX pin interrupt occurred.
Press any key to start test ...

   [1]- 99984
   [2]- 199984
   [3]- 299984
   [4]- 399984
   [5]- 499984
   [6]- 599984
   [7]- 699984
   [8]- 799984
   [9]- 899984
   [10]- 999984


敲了这么多的字,实在不容易。请求各位大大,看看问题出在哪里。谢谢!

另外还有一个问题就是文件名为"DA00-M052_54_58_516SCA1.pdf"中,第242页和250页对TCAP0,TCAP1,TCAP2,TCAP3的R/W属性描述不一致,请问这四个定时器捕捉数据寄存器,用户是否可写在程序中清零?谢谢!
沙发
今晚打老虎|  楼主 | 2013-8-6 09:22 | 只看该作者
请问,本版块是不是只发资料,并不解答问题?

使用特权

评论回复
板凳
zhaojf863| | 2013-8-6 10:58 | 只看该作者
解答的,可能是能解答的大虾还没看到

使用特权

评论回复
地板
今晚打老虎|  楼主 | 2013-8-6 11:43 | 只看该作者
设立这个版块是不是和万利电子的那个版块冲突了?都是推荐使用新塘的芯片。

使用特权

评论回复
5
elec921| | 2013-8-7 12:31 | 只看该作者
用新塘 问及时雨九哥

使用特权

评论回复
6
缥缈九哥| | 2013-8-10 06:41 | 只看该作者
这个问题我没有用过,不方便回答。另外,你确实解决不了。需要我支持吗?

使用特权

评论回复
7
clyu| | 2013-8-13 12:00 | 只看该作者
1)M051BN系列的timer capture只支持Free counting mode。就是说一旦TEXEN使能,timer1就开始计数了。
2)TIMER_TCSR_CTB_ENABLE决定Timer1是否使能了event counting mode。如果event counting mode使能, TDR的计数就是event counting的值。
3)使能event counting mode之后,timer1 capture 时存到TDR中的值就是event counting的值,否则是Timer1 内部计数器的值
4)你如果把T0和T1连起来,TIMER_TCSR_CTB_ENABLE时程序运行的结果应该是1。如果TIMER_TCSR_CTB_ENABLE被删除,Timer1 capture是存到TCAP中的值就是timer1 计数器的值。Timer1 时钟源48M,T0 频率50hZ,周期2ms;2ms的时间48M计数器大概数96000个
从你的运行结果来看每次计数了100000,跟96000比好像有点误差。你可以量一下T0的输出频率到底是多少?
[1]- 99984
   [2]- 199984
   [3]- 299984
   [4]- 399984
   [5]- 499984
   [6]- 599984
   [7]- 699984
   [8]- 799984
   [9]- 899984
   [10]- 999984

使用特权

评论回复
8
clyu| | 2013-8-13 16:05 | 只看该作者
打印出来的这句话可能有点误导
TIMER1: Clock source is HCLK(48 MHz)
实际上HCLK是50M的
所以上面打印出来的,每次CAP 的值多100000是正确的

使用特权

评论回复
9
zxf0168| | 2014-1-26 21:32 | 只看该作者
楼主问题解决了吗

使用特权

评论回复
10
今晚打老虎|  楼主 | 2014-4-10 19:23 | 只看该作者
zxf0168 发表于 2014-1-26 21:32
楼主问题解决了吗

没有解决问题,更换了设计思路,采用I/O扫描的方法。

使用特权

评论回复
11
zxf0168| | 2014-4-14 22:33 | 只看该作者
今晚打老虎 发表于 2014-4-10 19:23
没有解决问题,更换了设计思路,采用I/O扫描的方法。

那还是解决了,至少你绕过去了

使用特权

评论回复
12
tgi8i| | 2014-4-16 08:12 | 只看该作者
看看

使用特权

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

本版积分规则

12

主题

94

帖子

1

粉丝