打印
[复制链接]
1582|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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);
沙发
chwf491701687|  楼主 | 2018-10-30 21:39 | 只看该作者
这样设置步进中断?有人有用过嘛?那里设置错了

使用特权

评论回复
板凳
xinpian101| | 2018-10-31 12:16 | 只看该作者

看着这个图配置。

使用特权

评论回复
地板
xinpian101| | 2018-10-31 12:20 | 只看该作者
另外最好用库操作吧,看看那个timer的头文件,里面有相关操作的函数说明。

使用特权

评论回复
5
chwf491701687|  楼主 | 2018-10-31 17:43 | 只看该作者
xinpian101 发表于 2018-10-31 12:20
另外最好用库操作吧,看看那个timer的头文件,里面有相关操作的函数说明。 ...

新塘的库函数是不是就timer.c里面的函数很少的,没几个,初始化配置好像没有这个函数的吧库里

使用特权

评论回复
6
huangcunxiake| | 2018-10-31 17:54 | 只看该作者
chwf491701687 发表于 2018-10-31 17:43
新塘的库函数是不是就timer.c里面的函数很少的,没几个,初始化配置好像没有这个函数的吧库里 ...

还有.h的吧?.c里面是需要实现的那些,简单的都在.h里面。

使用特权

评论回复
7
yiy| | 2018-11-8 17:04 | 只看该作者
一般.c和.h配套使用,不知道是怎么做到的。

使用特权

评论回复
8
heisexingqisi| | 2018-11-11 20:18 | 只看该作者
不对吧,这个官方提供的有库函数和参考例子,虽然不是满足你这个需求,但是类似

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


void TMR0_IRQHandler(void)
{
    uint32_t t = TIMER_GetCaptureData(TIMER0);

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

}


void SYS_Init(void)
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init System Clock                                                                                       */
    /*---------------------------------------------------------------------------------------------------------*/

    /* Unlock protected registers */
    SYS_UnlockReg();

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

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

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

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

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

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


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

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

    /* Lock protected registers */
    SYS_LockReg();
}

int main(void)
{
    int volatile i;

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

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

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

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

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

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

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

    // Start Timer 0
    TIMER_Start(TIMER0);

    // Enable timer interrupt
    TIMER_EnableCaptureInt(TIMER0);
    NVIC_EnableIRQ(TMR0_IRQn);

    while(1);

}

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


使用特权

评论回复
9
21mengnan| | 2018-11-18 22:02 | 只看该作者
用库写啊。

使用特权

评论回复
10
Ghhhhhhx| | 2020-9-15 01:10 | 只看该作者
您好,请问mini58TDE的程序是通用的吗?

使用特权

评论回复
11
jasontu| | 2020-9-16 08:17 | 只看该作者
Ghhhhhhx 发表于 2020-9-15 01:10
您好,请问mini58TDE的程序是通用的吗?

同一个系列,BSP是同一个系列可通用。

使用特权

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

本版积分规则

17

主题

43

帖子

0

粉丝