搜索

[牛人杂谈] NUC029SGE的VBG

[复制链接]
73|3
 楼主 | 2020-7-28 21:15 | 显示全部楼层 |阅读模式
800055f2024cd76890.png
704625f2024de1494d.png

使用特权

评论回复
 楼主 | 2020-7-28 21:16 | 显示全部楼层
DS_NUC029xGE_Series_EN_Rev1.00.pdf (2.17 MB, 下载次数: 0)

使用特权

评论回复
 楼主 | 2020-7-28 21:18 | 显示全部楼层
  1. /****************************************************************************
  2. * [url=home.php?mod=space&uid=288409]@file[/url]     main.c
  3. * [url=home.php?mod=space&uid=895143]@version[/url]  V3.0
  4. * $Revision: 3 $
  5. * $Date: 17/05/04 1:15p $
  6. * [url=home.php?mod=space&uid=247401]@brief[/url]    Perform A/D Conversion with ADC single cycle scan mode.
  7. * @note
  8. * Copyright (C) 2016 Nuvoton Technology Corp. All rights reserved.
  9. *
  10. ******************************************************************************/
  11. #include <stdio.h>
  12. #include "NUC029xGE.h"


  13. #define PLL_CLOCK       72000000


  14. /*---------------------------------------------------------------------------------------------------------*/
  15. /* Define Function Prototypes                                                                              */
  16. /*---------------------------------------------------------------------------------------------------------*/
  17. void SYS_Init(void);
  18. void UART0_Init(void);
  19. void AdcVBG(void);




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

  25.     /* Enable HIRC clock (Internal RC 22.1184MHz) */
  26.     CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);

  27.     /* Waiting for HIRC clock ready */
  28.     CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk);

  29.     /* Select HCLK clock source as HIRC and and HCLK clock divider as 1 */
  30.     CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1));

  31.     /* Enable HXT clock (external XTAL 12MHz) */
  32.     CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);

  33.     /* Waiting for HXT clock ready */
  34.     CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);

  35.     /* Set core clock as PLL_CLOCK from PLL */
  36.     CLK_SetCoreClock(PLL_CLOCK);

  37.     /* Waiting for PLL clock ready */
  38.     CLK_WaitClockReady(CLK_STATUS_PLLSTB_Msk);

  39.     /* Enable UART module clock */
  40.     CLK_EnableModuleClock(UART0_MODULE);

  41.     /* Enable ADC module clock */
  42.     CLK_EnableModuleClock(ADC_MODULE);

  43.     /* Select UART module clock source as HXT and UART module clock divider as 1 */
  44.     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UARTSEL_HXT, CLK_CLKDIV0_UART(1));

  45.     /* ADC clock source is 22.1184MHz, set divider to 7, ADC clock is 22.1184/7 MHz */
  46.     CLK_SetModuleClock(ADC_MODULE, CLK_CLKSEL1_ADCSEL_HIRC, CLK_CLKDIV0_ADC(7));

  47.     /*---------------------------------------------------------------------------------------------------------*/
  48.     /* Init I/O Multi-function                                                                                 */
  49.     /*---------------------------------------------------------------------------------------------------------*/

  50.     /* Set multi-function pins for UART0 RXD and TXD */
  51.     SYS->GPA_MFPL &= ~(SYS_GPA_MFPL_PA2MFP_Msk | SYS_GPA_MFPL_PA3MFP_Msk);
  52.     SYS->GPA_MFPL |= (SYS_GPA_MFPL_PA3MFP_UART0_RXD | SYS_GPA_MFPL_PA2MFP_UART0_TXD);

  53. }

  54. /*---------------------------------------------------------------------------------------------------------*/
  55. /* Init UART                                                                                               */
  56. /*---------------------------------------------------------------------------------------------------------*/
  57. void UART0_Init()
  58. {
  59.     /* Reset IP */
  60.     SYS_ResetModule(UART0_RST);

  61.     /* Configure UART0 and set UART0 Baudrate */
  62.     UART_Open(UART0, 115200);
  63. }

  64. /*---------------------------------------------------------------------------------------------------------*/
  65. /* Function: AdcSingleCycleScanModeTest                                                                    */
  66. /*                                                                                                         */
  67. /* Parameters:                                                                                             */
  68. /*   None.                                                                                                 */
  69. /*                                                                                                         */
  70. /* Returns:                                                                                                */
  71. /*   None.                                                                                                 */
  72. /*                                                                                                         */
  73. /* Description:                                                                                            */
  74. /*   ADC single cycle scan mode test.                                                                      */
  75. /*---------------------------------------------------------------------------------------------------------*/
  76. void AdcVBG()
  77. {

  78.     int32_t  i32ConversionData;

  79.     printf("\n");
  80.     printf("+----------------------------------------------------------------------+\n");
  81.     printf("|                              ADC VBG                                 |\n");
  82.     printf("+----------------------------------------------------------------------+\n");

  83.     while(1)
  84.     {
  85.         printf("\n\nSelect input mode:\n");
  86.         printf("  [1] Single end input (channel 29   VBG)\n");


  87.         {

  88.             /* Set the ADC operation mode as single-cycle, input mode as single-end and
  89.                  enable the analog input channel 29 */

  90.                                                 ADC_Open(ADC, ADC_ADCR_DIFFEN_SINGLE_END, ADC_ADCR_ADMD_SINGLE_CYCLE, BIT29);
  91.             /* Power on ADC module */
  92.             ADC_POWER_ON(ADC);

  93.             /* Clear the A/D interrupt flag for safe */
  94.             ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);
  95.                                        

  96.             /* Start A/D conversion */
  97.             ADC_START_CONV(ADC);

  98.             /* Wait conversion done */
  99.            while(!ADC_GET_INT_FLAG(ADC, ADC_ADF_INT)){}

  100.             {

  101.                i32ConversionData = ADC_GET_CONVERSION_DATA(ADC, 29);
  102.                printf("VBG Conversion result of channel %d: 0x%X (%d)\n", 29, i32ConversionData, i32ConversionData);
  103.                                                
  104.             }
  105.                                                 printf("\n--按任意键进入下一次测试--\n");
  106.                                                 getchar();
  107.         }


  108.     }
  109. }

  110. /*---------------------------------------------------------------------------------------------------------*/
  111. /* MAIN function                                                                                           */
  112. /*---------------------------------------------------------------------------------------------------------*/

  113. int main(void)
  114. {

  115.     /* Unlock protected registers */
  116.     SYS_UnlockReg();

  117.     /* Init System, IP clock and multi-function I/O */
  118.     SYS_Init();

  119.     /* Lock protected registers */
  120.     SYS_LockReg();

  121.     /* Init UART0 for printf */
  122.     UART0_Init();

  123.     /*---------------------------------------------------------------------------------------------------------*/
  124.     /* SAMPLE CODE                                                                                             */
  125.     /*---------------------------------------------------------------------------------------------------------*/

  126.     printf("\nSystem clock rate: %d Hz", SystemCoreClock);

  127.     /* Single cycle scan mode test */
  128.     AdcVBG();

  129.     /* Disable ADC module */
  130.     ADC_Close(ADC);

  131.     /* Disable ADC IP clock */
  132.     CLK_DisableModuleClock(ADC_MODULE);

  133.     /* Disable External Interrupt */
  134.     NVIC_DisableIRQ(ADC_IRQn);

  135.     printf("\nExit ADC sample code\n");

  136.     while(1);

  137. }

  138. /*** (C) COPYRIGHT 2016 Nuvoton Technology Corp. ***/

复制代码
根据这个结果测量VBG=1642,而12位的ADC满量程为4095
根据比例可以求出VCC=4095*1.21/1642=3.0176V
完全符合实际。

使用特权

评论回复
| 2020-7-28 21:19 | 显示全部楼层
好像这个系列没有中文手册的,所以用起来有点小难。。。。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

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