[DemoCode下载] NUC029读取片内VBG电压

[复制链接]
1003|6
 楼主| 玛尼玛尼哄 发表于 2020-7-28 20:59 | 显示全部楼层 |阅读模式
本帖最后由 玛尼玛尼哄 于 2020-7-28 21:11 编辑

这个芯片比较特殊,我用的是SGE的开发板,所以必须找到这个芯片手册,发现每个子系的ADC都不同,所以没法参考其他型号的,在DVD大礼包找到了手册。
174515f201fbda1179.png 442395f201fdba4ac3.png
在ADC通道选择上可以从0到19,29到31 TRM_NUC029xGE_Series_EN_Rev1.01.pdf (10.22 MB, 下载次数: 0)

其中0到19是外部测量,29到31是内部
ADC Data Registers (ADC_ADDRx x = 0~19, 29~31)
96925f20204ee40d7.png
于是我知道怎么做了
  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("Conversion result of channel %d: 0x%X (%d)\n", 29, i32ConversionData, i32ConversionData);
  103.             }
  104.                                                 printf("\n--按任意键进入下一次测试--\n");
  105.                                                 getchar();
  106.         }


  107.     }
  108. }

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

  112. int main(void)
  113. {

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

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

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

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

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

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

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

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

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

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

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

  135.     while(1);

  136. }

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



 楼主| 玛尼玛尼哄 发表于 2020-7-28 20:59 | 显示全部楼层
测试结果


  1. System clock rate: 72000000 Hz

  2. +----------------------------------------------------------------------+

  3. |                              ADC VBG                                 |

  4. +----------------------------------------------------------------------+




  5. Select input mode:

  6.   [1] Single end input (channel 29   VBG)

  7. Conversion result of channel 29: 0x6A5 (1701)


  8. --按任意键进入下一次测试--




  9. Select input mode:

  10.   [1] Single end input (channel 29   VBG)

  11. Conversion result of channel 29: 0x669 (1641)


  12. --按任意键进入下一次测试--




  13. Select input mode:

  14.   [1] Single end input (channel 29   VBG)

  15. Conversion result of channel 29: 0x66A (1642)


  16. --按任意键进入下一次测试--




  17. Select input mode:

  18.   [1] Single end input (channel 29   VBG)

  19. Conversion result of channel 29: 0x66A (1642)


  20. --按任意键进入下一次测试--




  21. Select input mode:

  22.   [1] Single end input (channel 29   VBG)

  23. Conversion result of channel 29: 0x66A (1642)


  24. --按任意键进入下一次测试--
 楼主| 玛尼玛尼哄 发表于 2020-7-28 21:00 | 显示全部楼层
观察,第一次测试不准,而第二次接近稳定,第三次开始稳定不变了,说明前两次可能不准需要丢弃。
 楼主| 玛尼玛尼哄 发表于 2020-7-28 21:01 | 显示全部楼层
又进行了测试,发现也就第一次不准,后面都是准的,只需要丢弃第一次启动时候的值即可,大家可以注意下。
 楼主| 玛尼玛尼哄 发表于 2020-7-28 21:07 | 显示全部楼层
不过改成30发现有问题,在查。
 楼主| 玛尼玛尼哄 发表于 2020-7-28 21:10 | 显示全部楼层
根据计算VBG应该是1.2V左右,因为手册没有给出所以不是很清楚,不知道数据手册有没有,一会儿去找找。
 楼主| 玛尼玛尼哄 发表于 2020-7-28 21:14 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

196

主题

3261

帖子

2

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