[技术问答] Mini58

[复制链接]
183|8
 楼主 | 2018-10-30 21:38 | 显示全部楼层 |阅读模式
Mini58的定时器捕获功能,捕获EXT管脚的脉宽!
GPIO_SetMode(P3, BIT2, GPIO_MODE_INPUT);
TIMER0->EXTCTL = 0;
TIMER0->CTL = 0;
/// 设置捕获功能
TIMER0->EXTCTL &= ~((0x01 << 8) | (0x01 << 4));
        /// 上下沿检测
        TIMER0->EXTCTL |= (0x01 << 2);
        /// 使能外部捕捉管脚
        //TIMER0->EXTCTL |= (0x01 << 3);
        /// 使能外部捕获中断
        TIMER0->EXTCTL |= (0x01 << 5);
        NVIC_EnableIRQ(TMR0_IRQn);
        TIMER_Start(TIMER0);
        /// 禁用事件计数模式
        TIMER0->CTL &= ~(0x01 << 24);
 楼主 | 2018-10-30 21:39 | 显示全部楼层
这样设置步进中断?有人有用过嘛?那里设置错了
| 2018-10-31 12:16 | 显示全部楼层

看着这个图配置。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
| 2018-10-31 12:20 | 显示全部楼层
另外最好用库操作吧,看看那个timer的头文件,里面有相关操作的函数说明。
 楼主 | 2018-10-31 17:43 | 显示全部楼层
xinpian101 发表于 2018-10-31 12:20
另外最好用库操作吧,看看那个timer的头文件,里面有相关操作的函数说明。 ...

新塘的库函数是不是就timer.c里面的函数很少的,没几个,初始化配置好像没有这个函数的吧库里
| 2018-10-31 17:54 | 显示全部楼层
chwf491701687 发表于 2018-10-31 17:43
新塘的库函数是不是就timer.c里面的函数很少的,没几个,初始化配置好像没有这个函数的吧库里 ...

还有.h的吧?.c里面是需要实现的那些,简单的都在.h里面。
| 2018-11-8 17:04 | 显示全部楼层
一般.c和.h配套使用,不知道是怎么做到的。
| 2018-11-11 20:18 | 显示全部楼层
不对吧,这个官方提供的有库函数和参考例子,虽然不是满足你这个需求,但是类似

  1. /******************************************************************************
  2. * [url=home.php?mod=space&uid=288409]@file[/url]     main.c
  3. * [url=home.php?mod=space&uid=895143]@version[/url]  V1.00
  4. * $Revision: 3 $
  5. * $Date: 15/05/28 10:37a $
  6. * [url=home.php?mod=space&uid=247401]@brief[/url]    Use the timer pin P3.2 to demonstrate timer trigger counting mode
  7. *           function. And displays the measured input frequency to UART console.
  8. *
  9. * @note
  10. * Copyright (C) 2015 Nuvoton Technology Corp. All rights reserved.
  11. *****************************************************************************/
  12. #include <stdio.h>
  13. #include "Mini58Series.h"


  14. void TMR0_IRQHandler(void)
  15. {
  16.     uint32_t t = TIMER_GetCaptureData(TIMER0);

  17.     // Timer clock source us 22.1184M
  18.     printf("Input frequency is %dHz\n", 22118400 / t);
  19.     TIMER_ClearCaptureIntFlag(TIMER0);

  20. }


  21. void SYS_Init(void)
  22. {
  23.     /*---------------------------------------------------------------------------------------------------------*/
  24.     /* Init System Clock                                                                                       */
  25.     /*---------------------------------------------------------------------------------------------------------*/

  26.     /* Unlock protected registers */
  27.     SYS_UnlockReg();

  28.     /* Set P5 multi-function pins for XTAL1 and XTAL2 */
  29.     SYS->P5_MFP &= ~(SYS_MFP_P50_Msk | SYS_MFP_P51_Msk);
  30.     SYS->P5_MFP |= (SYS_MFP_P50_XT1_IN | SYS_MFP_P51_XT1_OUT);

  31.     /* Enable external 12MHz XTAL (UART), and HIRC */
  32.     CLK->PWRCTL = CLK_PWRCTL_XTL12M | CLK_PWRCTL_HIRCEN_Msk;

  33.     /* Waiting for clock ready */
  34.     CLK_WaitClockReady(CLK_STATUS_XTLSTB_Msk | CLK_STATUS_HIRCSTB_Msk);

  35.     /* Enable UART and Timer 0 clock */
  36.     CLK->APBCLK = CLK_APBCLK_UART0CKEN_Msk | CLK_APBCLK_TMR0CKEN_Msk;

  37.     /* Select UART clock source from external crystal*/
  38.     CLK->CLKSEL1 = (CLK->CLKSEL1 & ~CLK_CLKSEL1_UARTSEL_Msk) | CLK_CLKSEL1_UARTSEL_XTAL;

  39.     /* Update System Core Clock */
  40.     /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock and CycylesPerUs automatically. */
  41.     SystemCoreClockUpdate();


  42.     /*---------------------------------------------------------------------------------------------------------*/
  43.     /* Init I/O Multi-function                                                                                 */
  44.     /*---------------------------------------------------------------------------------------------------------*/
  45.     /* Set P1 multi-function pins for UART RXD, TXD */
  46.     SYS->P1_MFP = SYS_MFP_P12_UART0_RXD | SYS_MFP_P13_UART0_TXD;

  47.     /* Set P3 multi function pin for Timer 0 capture pin */
  48.     SYS->P3_MFP = SYS_MFP_P32_TM0_EXT;

  49.     /* Lock protected registers */
  50.     SYS_LockReg();
  51. }

  52. int main(void)
  53. {
  54.     int volatile i;

  55.     /* Init System, IP clock and multi-function I/O
  56.        In the end of SYS_Init() will issue SYS_LockReg()
  57.        to lock protected register. If user want to write
  58.        protected register, please issue SYS_UnlockReg()
  59.        to unlock protected register if necessary */
  60.     SYS_Init();

  61.     /* Init UART to 115200-8n1 for print message */
  62.     UART_Open(UART0, 115200);

  63.     printf("\nThis sample code demonstrate timer trigger counting mode.\n");
  64.     printf("Please connect input source with Timer 0 capture pin T0EX (P3.2), press any key to continue\n");
  65.     getchar();

  66.     // Give a dummy target frequency here. Will over write capture resolution with macro
  67.     TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 1000000);

  68.     // Update prescale to set proper resolution.
  69.     TIMER_SET_PRESCALE_VALUE(TIMER0, 0);

  70.     // Set compare value as large as possible, so don't need to worry about counter overrun too frequently.
  71.     TIMER_SET_CMP_VALUE(TIMER0, 0xFFFFFF);

  72.     // Configure Timer 0 free counting mode, capture TDR value on rising edge
  73.     TIMER_EnableCapture(TIMER0, TIMER_CAPTURE_TRIGGER_COUNTING_MODE, TIMER_CAPTURE_RISING_EDGE);

  74.     // Start Timer 0
  75.     TIMER_Start(TIMER0);

  76.     // Enable timer interrupt
  77.     TIMER_EnableCaptureInt(TIMER0);
  78.     NVIC_EnableIRQ(TMR0_IRQn);

  79.     while(1);

  80. }

  81. /*** (C) COPYRIGHT 2015 Nuvoton Technology Corp. ***/


复制代码
| 2018-11-18 22:02 | 显示全部楼层
用库写啊。
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

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