打印
[技术问答]

新唐MIni54FHC GPIO挂载在哪个时钟源上

[复制链接]
2020|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
960944837|  楼主 | 2016-1-26 13:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
新唐MIni54FHC GPIO挂载在哪个时钟源上,AHB,APB,我直接使用 内部22.1174的晶振,GPIO会自己有对应时钟,还是要CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC,CLK_CLKDIV_HCLK(1)); 加类似这一句的。
沙发
960944837|  楼主 | 2016-1-27 08:56 | 只看该作者
还是根本就设置不了,新塘其它型号怎么设置的?

使用特权

评论回复
板凳
zhuotuzi| | 2016-1-27 14:15 | 只看该作者
不设置就是默认的时钟,设置的话,就以设置的为准。

使用特权

评论回复
地板
734774645| | 2016-1-27 15:56 | 只看该作者
看手册里面的结构图。以那个为准。

使用特权

评论回复
5
Thethree| | 2016-1-28 08:57 | 只看该作者
GPIO都应该有自己对应的时钟吧

使用特权

评论回复
6
960944837|  楼主 | 2016-1-29 11:16 | 只看该作者
734774645 发表于 2016-1-27 15:56
看手册里面的结构图。以那个为准。

手册都是外设时钟挂载,没有GPIO独立的挂载说明

使用特权

评论回复
7
734774645| | 2016-1-30 08:52 | 只看该作者
960944837 发表于 2016-1-29 11:16
手册都是外设时钟挂载,没有GPIO独立的挂载说明

那就是没有专门的GPIO时钟。可以不用管了。

使用特权

评论回复
8
960944837|  楼主 | 2016-1-30 10:55 | 只看该作者
734774645 发表于 2016-1-30 08:52
那就是没有专门的GPIO时钟。可以不用管了。

好的,谢了。再问一个问题怎么进入 低功耗模式。

使用特权

评论回复
9
960944837|  楼主 | 2016-1-30 13:22 | 只看该作者
void SYS_powerdowm(void)
{
                                        /*MCU进入低功耗模式*/
                SYS_UnlockReg();
                                 // Enable UART clock
                CLK->APBCLK = CLK_APBCLK_UART_EN_Pos;       
                                /* internal 10kHz */
                CLK->PWRCON |= CLK_PWRCON_IRC10K_EN_Msk;
                                /* Waiting for clock ready */
                CLK_WaitClockReady(CLK_CLKSTATUS_XTL_STB_Msk | CLK_CLKSTATUS_IRC10K_STB_Msk);                                                         
                                /* Timer 0 clock */
                CLK->APBCLK = CLK_APBCLK_TMR0_EN_Pos;
                                /* APB         clock */                                                 
                CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC,CLK_CLKDIV_HCLK(10));
                                /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock and cyclesPerUs automatically. */                                                 
                 SystemCoreClockUpdate();
                                /* Lock protected registers */                                         
                 SYS_LockReg();       
}
对不对啊

使用特权

评论回复
10
huangcunxiake| | 2016-1-30 16:55 | 只看该作者

不设置就是默认的时钟,设置的话,就以设置的为准。

使用特权

评论回复
11
mintspring| | 2016-4-20 21:26 | 只看该作者
MINI54FDE - Microcontrollers / ARM Cortex™-M0 MCUs / Mini51 Base Series

MINI54LDE - Microcontrollers / ARM Cortex™-M0 MCUs / Mini51 Base Series

MINI54TDE - Microcontrollers / ARM Cortex™-M0 MCUs / Mini51 Base Series

MINI54ZDE - Microcontrollers / ARM Cortex™-M0 MCUs / Mini51 Base Series

只找到了这四种,没有你说的那种。


使用特权

评论回复
12
mintspring| | 2016-4-20 21:30 | 只看该作者
给你个深度睡眠的例子。
/******************************************************************************
* [url=home.php?mod=space&uid=288409]@file[/url]     main.c
* [url=home.php?mod=space&uid=895143]@version[/url]  V1.00
* $Revision: 8 $
* $Date: 15/10/06 11:22a $
* [url=home.php?mod=space&uid=247401]@brief[/url]    This sample code demonstrates how to let system enter and exit
*           deep sleep mode with external interrupt.
*
* @note
* Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
*****************************************************************************/
#include <stdio.h>
#include "Mini51Series.h"
#include "LCD_Driver.h"


volatile int8_t gi8Key = 1;
char g_strBuf[32] = {0};

void EINT0_IRQHandler(void)
{
    /* Clear P3.2 interrupt flag */
    P3->ISRC = 1 << 2;

    if(P32) {
        /* P3.2 is from low to high */
        gi8Key = 1;
    } else {
        /* P3.2 is from high to low */
        gi8Key = 0;
    }
}

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_XTAL1 | SYS_MFP_P51_XTAL2);

    /* Enable external 12MHz XTAL, 10kHz */
    CLK->PWRCON &= ~CLK_PWRCON_XTLCLK_EN_Msk;
    CLK->PWRCON |= (0x1 <<     CLK_PWRCON_XTLCLK_EN_Pos); // XTAL12M (HXT) Enabled

    /* Waiting for clock ready */
    CLK_WaitClockReady(CLK_CLKSTATUS_XTL_STB_Msk);

    /* Switch HCLK clock source to XTAL */
    CLK->CLKSEL0 &= ~CLK_CLKSEL0_HCLK_S_Msk;
    CLK->CLKSEL0 |= CLK_CLKSEL0_HCLK_S_XTAL;

    /* Enable IP clock */
    CLK->APBCLK |= CLK_APBCLK_UART_EN_Msk | CLK_APBCLK_SPI_EN_Msk;
    CLK->CLKSEL1 &= ~CLK_CLKSEL1_UART_S_Msk;
    CLK->CLKSEL1 |= (0x0 << CLK_CLKSEL1_UART_S_Pos);// Clock source from external 12 MHz or 32 KHz crystal clock

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

    /*---------------------------------------------------------------------------------------------------------*/
    /* Init I/O Multi-function                                                                                 */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Set P0 multi-function pins for UART RXD and TXD  */
    SYS->P0_MFP &= ~(SYS_MFP_P00_Msk | SYS_MFP_P01_Msk);
    SYS->P0_MFP |= (SYS_MFP_P00_TXD | SYS_MFP_P01_RXD);

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

void UART_Init(void)
{

    /*---------------------------------------------------------------------------------------------------------*/
    /* Init UART                                                                                               */
    /*---------------------------------------------------------------------------------------------------------*/
    UART_Open(UART, 115200);

}


void GPIO_Init(void)
{
    /* Enable debounce function of P3.2 (EINT0) */
    P3->DBEN = (1 << 2);

    /* Set debounce time. it is about 6.4 ms */
    GPIO->DBNCECON = GPIO_DBNCECON_DBCLKSRC_IRC10K | GPIO_DBNCECON_DBCLKSEL_64;

    /* Enable P3.2 to be EINT0 */
    GPIO_EnableInt(P3, 2, GPIO_INT_BOTH_EDGE);
    NVIC_EnableIRQ(EINT0_IRQn);
}


/*---------------------------------------------------------------------------------------------------------*/
/* MAIN function                                                                                           */
/*---------------------------------------------------------------------------------------------------------*/

int main(void)
{
    uint32_t u32Cnt;

    SYS_UnlockReg();
    SYS->P5_MFP = (SYS->P5_MFP & 0x00FFFCFC) | 0x03;  /* P5.1 -> XTAL2, P5.0 -> XTAL1 */
    CLK->PWRCON = CLK_PWRCON_XTL12M | 4 | 8 ;

    /* Init system, IP clock and multi-function I/O */
    SYS_Init();

    /* Init UART for printf */
    UART_Init();

    /* Init SPI and LCD */
    LCD_Init();
    LCD_EnableBackLight();
    LCD_ClearScreen();

    printf("CPU [url=home.php?mod=space&uid=72445]@[/url] %d Hz\n", SystemCoreClock);

    LCD_Print(0, "DeepSleep");

    /*Initialize external interrupt*/
    GPIO_Init();

    /*
        P3.2 is used as EINT0 for deep sleep (power down) control.
        Press P3.2 will toggle power down/wakeup state to show how to enter power down.
    */
    LCD_Print(1, "Press INT ");

    while (1) {
        char strClearVal[15] = "Count:         ";
        /* Enter power when key change from low to high */
        u32Cnt = 0;
        while (gi8Key == 1) {
            sprintf(g_strBuf, "Count:%d", u32Cnt++);
            LCD_Print(3, strClearVal);
            LCD_Print(3, g_strBuf);
        }
        while(gi8Key == 0) {
            sprintf(g_strBuf, "Count:%d", u32Cnt++);
            LCD_Print(3, strClearVal);
            LCD_Print(3, g_strBuf);
        }

        LCD_Print(2, "Deep Sleeping...");

        /* Unlock protected registers */
        SYS_UnlockReg();

        /* We need to disable debounce function before power down, otherwise, there would be twice interrupt when
           wakeup */
        P3->DBEN = 0;

        /* enter power down */;
        CLK_PowerDown();

        /* Re-enable debounce function if necessary */
        P3->DBEN = (1 << 2);

        LCD_Print(2, "Working...      ");
        printf("\nWorking... \n");

        /* Make sure the key is return to high before next key action */
        while (gi8Key == 0);

        gi8Key = 0;
    }
}


使用特权

评论回复
13
capturesthe| | 2016-4-21 22:33 | 只看该作者
一般是挂在apb上面吧

使用特权

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

本版积分规则

2

主题

18

帖子

0

粉丝