[技术问答] 新唐MIni54FHC GPIO挂载在哪个时钟源上

[复制链接]
2562|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 | 显示全部楼层
看手册里面的结构图。以那个为准。
Thethree 发表于 2016-1-28 08:57 | 显示全部楼层
GPIO都应该有自己对应的时钟吧
 楼主| 960944837 发表于 2016-1-29 11:16 | 显示全部楼层
734774645 发表于 2016-1-27 15:56
看手册里面的结构图。以那个为准。

手册都是外设时钟挂载,没有GPIO独立的挂载说明
734774645 发表于 2016-1-30 08:52 | 显示全部楼层
960944837 发表于 2016-1-29 11:16
手册都是外设时钟挂载,没有GPIO独立的挂载说明

那就是没有专门的GPIO时钟。可以不用管了。
 楼主| 960944837 发表于 2016-1-30 10:55 | 显示全部楼层
734774645 发表于 2016-1-30 08:52
那就是没有专门的GPIO时钟。可以不用管了。

好的,谢了。再问一个问题怎么进入 低功耗模式。
 楼主| 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();       
}
对不对啊
huangcunxiake 发表于 2016-1-30 16:55 | 显示全部楼层

不设置就是默认的时钟,设置的话,就以设置的为准。
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

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


mintspring 发表于 2016-4-20 21:30 | 显示全部楼层
给你个深度睡眠的例子。
  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: 8 $
  5. * $Date: 15/10/06 11:22a $
  6. * [url=home.php?mod=space&uid=247401]@brief[/url]    This sample code demonstrates how to let system enter and exit
  7. *           deep sleep mode with external interrupt.
  8. *
  9. * @note
  10. * Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
  11. *****************************************************************************/
  12. #include <stdio.h>
  13. #include "Mini51Series.h"
  14. #include "LCD_Driver.h"


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

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

  21.     if(P32) {
  22.         /* P3.2 is from low to high */
  23.         gi8Key = 1;
  24.     } else {
  25.         /* P3.2 is from high to low */
  26.         gi8Key = 0;
  27.     }
  28. }

  29. void SYS_Init(void)
  30. {

  31.     /*---------------------------------------------------------------------------------------------------------*/
  32.     /* Init System Clock                                                                                       */
  33.     /*---------------------------------------------------------------------------------------------------------*/
  34.     /* Unlock protected registers */
  35.     SYS_UnlockReg();

  36.     /* Set P5 multi-function pins for XTAL1 and XTAL2 */
  37.     SYS->P5_MFP &= ~(SYS_MFP_P50_Msk | SYS_MFP_P51_Msk);
  38.     SYS->P5_MFP |= (SYS_MFP_P50_XTAL1 | SYS_MFP_P51_XTAL2);

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

  42.     /* Waiting for clock ready */
  43.     CLK_WaitClockReady(CLK_CLKSTATUS_XTL_STB_Msk);

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

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

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

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

  60.     /* Lock protected registers */
  61.     SYS_LockReg();
  62. }

  63. void UART_Init(void)
  64. {

  65.     /*---------------------------------------------------------------------------------------------------------*/
  66.     /* Init UART                                                                                               */
  67.     /*---------------------------------------------------------------------------------------------------------*/
  68.     UART_Open(UART, 115200);

  69. }


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

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

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


  80. /*---------------------------------------------------------------------------------------------------------*/
  81. /* MAIN function                                                                                           */
  82. /*---------------------------------------------------------------------------------------------------------*/

  83. int main(void)
  84. {
  85.     uint32_t u32Cnt;

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

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

  91.     /* Init UART for printf */
  92.     UART_Init();

  93.     /* Init SPI and LCD */
  94.     LCD_Init();
  95.     LCD_EnableBackLight();
  96.     LCD_ClearScreen();

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

  98.     LCD_Print(0, "DeepSleep");

  99.     /*Initialize external interrupt*/
  100.     GPIO_Init();

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

  106.     while (1) {
  107.         char strClearVal[15] = "Count:         ";
  108.         /* Enter power when key change from low to high */
  109.         u32Cnt = 0;
  110.         while (gi8Key == 1) {
  111.             sprintf(g_strBuf, "Count:%d", u32Cnt++);
  112.             LCD_Print(3, strClearVal);
  113.             LCD_Print(3, g_strBuf);
  114.         }
  115.         while(gi8Key == 0) {
  116.             sprintf(g_strBuf, "Count:%d", u32Cnt++);
  117.             LCD_Print(3, strClearVal);
  118.             LCD_Print(3, g_strBuf);
  119.         }

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

  121.         /* Unlock protected registers */
  122.         SYS_UnlockReg();

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

  126.         /* enter power down */;
  127.         CLK_PowerDown();

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

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

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

  134.         gi8Key = 0;
  135.     }
  136. }


capturesthe 发表于 2016-4-21 22:33 | 显示全部楼层
一般是挂在apb上面吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

18

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部