打印
[技术问答]

Nano102使用HIRC作为时钟源PWM输出9Mhz的频点,麻烦各位大神看

[复制链接]
3469|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lc_mazha|  楼主 | 2015-1-4 11:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

/******************************************************************************
* @file     main.c
* @version  V1.00
* $Revision: 7 $
* $Date: 14/03/27 1:43p $
* @brief    PWM sample for NANO1X2 series MCU
*
* @note
* Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
*****************************************************************************/
#include <stdio.h>
#include "Nano1X2Series.h"

#define SAMPLE_CNT 32

static uint8_t volatile cap_index;
static uint32_t cap_val[SAMPLE_CNT >> 1][2];

void PWM0_IRQHandler(void);

void PWM0_IRQHandler(void)
{
    static uint8_t token = 0;
    uint32_t u32CapIntFlag;
    uint8_t u8Count = cap_index;

    if(u8Count >= SAMPLE_CNT)
        return;

    // Get channel 2 capture interrupt flag
    u32CapIntFlag = PWM_GetCaptureIntFlag(PWM0, 2);

    // Rising latch condition happened
    if ((u32CapIntFlag & PWM_RISING_LATCH_INT_FLAG) && token == 0) {
        cap_val[u8Count >> 1][0] = PWM_GET_CAPTURE_RISING_DATA(PWM0, 2);
        cap_index++;
        token = 1;
    }
    // Falling latch condition happened
    if ((u32CapIntFlag & PWM_FALLING_LATCH_INT_FLAG) && token == 1) {
        cap_val[u8Count >> 1][1] = PWM_GET_CAPTURE_FALLING_DATA(PWM0, 2);
        cap_index++;
        token = 0;
    }

    // Clear channel 2 capture interrupt flag
    PWM_ClearCaptureIntFlag(PWM0, 2, PWM_RISING_FALLING_LATCH_INT_FLAG);
}

/*---------------------------------------------------------------------------------------------------------*/
/* Init System Clock                                                                                       */
/*---------------------------------------------------------------------------------------------------------*/
void SYS_Init(void)
{
    /* Unlock protected registers */
    SYS_UnlockReg();

    /* Enable  HIRC */
    CLK_EnableXtalRC(CLK_PWRCTL_LXT_EN_Msk | CLK_PWRCTL_HIRC_EN_Msk);
    /* Waiting for clock ready */

      CLK_WaitClockReady(CLK_CLKSTATUS_LXT_STB_Msk | CLK_CLKSTATUS_HIRC_STB_Msk);


    /* Enable PWM clock */
    CLK_EnableModuleClock(PWM0_CH01_MODULE);
    CLK_EnableModuleClock(PWM0_CH23_MODULE);


    /* Set HIRC as PWM clock source */
    CLK_SetModuleClock(PWM0_CH01_MODULE, CLK_CLKSEL1_PWM0_CH01_S_HIRC, 0);
    CLK_SetModuleClock(PWM0_CH23_MODULE, CLK_CLKSEL1_PWM0_CH23_S_HIRC, 0);


    /*---------------------------------------------------------------------------------------------------------*/
    /* Init I/O Multi-function                                                                                 */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Set PC.0 and PC.2 multi-function pins for PWM channel 0 and 2 */
    SYS->PC_L_MFP = (SYS->PC_L_MFP & ~SYS_PC_L_MFP_PC0_MFP_Msk) | SYS_PC_L_MFP_PC0_MFP_PWM0_CH0;
    SYS->PC_L_MFP = (SYS->PC_L_MFP & ~SYS_PC_L_MFP_PC2_MFP_Msk) | SYS_PC_L_MFP_PC2_MFP_PWM0_CH2;

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




int32_t main (void)
{
//    uint8_t 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();

    // PWM0 frequency is 9000000Hz, duty 50%,
    PWM_ConfigOutputChannel(PWM0, 0, 9000000, 50);


    // Enable output of channel 0
    PWM_EnableOutput(PWM0, PWM_CH_0_MASK);

    // Start
    PWM_Start(PWM0, PWM_CH_0_MASK);

    while(1);


}





沙发
mintspring| | 2015-1-4 13:44 | 只看该作者
你到底想问什么啊?说清楚点。

使用特权

评论回复
板凳
gaoyang9992006| | 2015-1-5 15:48 | 只看该作者
不知道楼主该程序运行后是不是不满足要求,还是有什么故障无法运行啊,请楼主给出问题的关键所在。

使用特权

评论回复
地板
niuyaliang| | 2015-1-6 17:43 | 只看该作者
迷糊的问题,,,

使用特权

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

本版积分规则

3

主题

22

帖子

0

粉丝