2533|0

2056

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

[TI首届低功耗设计大赛]+寄存器版本的ADC试验+内部1.2v参考电压+P1.1A1通道采样 [复制链接]

这篇是FR5969的ADC的寄存器的版本使用芯片内部1.2V参考电压的简单试验。
本试验使用是FR5969片内的P1.1管脚对应的ADC通道1也就是A1,和前面的ADC试验最大的不同是使用的参考电压为芯片内部的1.2v的基准电压。

配置ADC:
  // By default, REFMSTR=1 => REFCTL 是配置内部参考电压的寄存器
  while(REFCTL0 & REFGENBUSY);                              // 如果参考电压发生器busy, 等待
  REFCTL0 |= REFVSEL_0 | REFON;                           // 选择内部参考源 ref = 1.2V,使能内部参考源

  // Configure ADC12
  ADC12CTL0 = ADC12SHT0_2 | ADC12ON;              // Sampling time, S&H=16, ADC12 on
  ADC12CTL1 = ADC12SHP;                                      // ADCCLK = MODOSC; sampling timer
  ADC12CTL2 |= ADC12RES_2;                                // 12-bit conversion results
  ADC12IER0 |= ADC12IE0;                                      // 使能ADC转换完成中断,对应着ADC中断函数中case
                                                                                 // 语句的ADC12IFG0
  ADC12MCTL0 |= ADC12INCH_1 | ADC12VRSEL_1; // 选择通道1也就是A1,参考电压1.2v

  while(!(REFCTL0 & REFGENRDY));                           // 等待参考源生效

注意:单通道采样,ADC的参考电源为内部1.2v基准电压。软件设置ADC12SC采样和转换寄存器,在转换完成后自动清除。在主循环中,进入LPM0低功耗模式。等待ADC的转换完成进入ADC的中断函数中,在ADC中断服务函数中将强制CPU退出低功耗模式LPM0。如果A1的转换值大于0.5v,那么P1.0输出高电平,否者输出低电平。
调试的时候在中断服务函数中设置断点,在寄存器观察窗口中查看采样转换的值。如下图:


  1. //******************************************************************************
  2. //  MSP430FR59xx Demo - ADC12, Sample A1, 1.2V Shared Ref, Set P1.0 if A1 > 0.5V
  3. //
  4. //  描述 :单通道采样,ADC的参考电源为内部1.2v基准电压。软件设置ADC12SC
  5. //         采样和转换寄存器,在转换完成后自动清除。在主循环中,进入LPM0低功耗模式。
  6. //         等待ADC的转换完成进入ADC的中断函数中,在ADC中断服务函数中将强制CPU退出
  7. //         低功耗模式LPM0。如果A1的转换值大于0.5v,那么P1.0输出高电平,否者输出
  8. //         低电平。
  9. //
  10. //                MSP430FR5969
  11. //             -----------------
  12. //         /|\|              XIN|-
  13. //          | |                 |
  14. //          --|RST          XOUT|-
  15. //            |                 |
  16. //        >---|P1.1/A1      P1.0|-->LED
  17. //
  18. //   IC爬虫
  19. //   
  20. //   Sep 2014
  21. //   Built with IAR Embedded Workbench V6.1
  22. //******************************************************************************
  23. #include <msp430.h>

  24. int main(void)
  25. {
  26.   WDTCTL = WDTPW | WDTHOLD; // 停止看门狗

  27.   // GPIO Setup
  28.   P1OUT &= ~BIT0;                // 设置P1.0的上点起始状态:输出低电平
  29.   P1DIR |= BIT0;                 // 设置P1.0为输出方向
  30.   P1SEL1 |= BIT1;                // 配置P1.1为ADC通道A1
  31.   P1SEL0 |= BIT1;

  32.   PM5CTL0 &= ~LOCKLPM5;          // 关闭上电端口默认输出高阻抗的功能,使能上电保持起始设置

  33.   // By default, REFMSTR=1 => REFCTL 是配置内部参考电压的寄存器
  34.   while(REFCTL0 & REFGENBUSY);   // 如果参考电压发生器busy, 等待
  35.   REFCTL0 |= REFVSEL_0 | REFON;  // 选择内部参考源 ref = 1.2V,使能内部参考源

  36.   // Configure ADC12
  37.   ADC12CTL0 = ADC12SHT0_2 | ADC12ON;        // Sampling time, S&H=16, ADC12 on
  38.   ADC12CTL1 = ADC12SHP;                     // ADCCLK = MODOSC; sampling timer
  39.   ADC12CTL2 |= ADC12RES_2;                  // 12-bit conversion results
  40.   ADC12IER0 |= ADC12IE0;                    // 使能ADC转换完成中断,对应着ADC中断函数中case
  41.                                             // 语句的ADC12IFG0
  42.   ADC12MCTL0 |= ADC12INCH_1 | ADC12VRSEL_1; // 选择通道1也就是A1,参考电压1.2v

  43.   while(!(REFCTL0 & REFGENRDY));            // 等待参考源生效
  44.                                             // to settle

  45.   while(1)
  46.   {
  47.     __delay_cycles(5000);                    // Delay between conversions
  48.     ADC12CTL0 |= ADC12ENC | ADC12SC;         // 开始采样和转换

  49.     __bis_SR_register(LPM0_bits + GIE);      // 进入LPM0模式, ADC12_ISR 将使其强制退出
  50.     __no_operation();                        // For debug only
  51.   }
  52. }

  53. #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
  54. #pragma vector = ADC12_VECTOR
  55. __interrupt void ADC12_ISR(void)
  56. #elif defined(__GNUC__)
  57. void __attribute__ ((interrupt(ADC12_VECTOR))) ADC12_ISR (void)
  58. #else
  59. #error Compiler not supported!
  60. #endif
  61. {
  62.   switch (__even_in_range(ADC12IV, ADC12IV_ADC12RDYIFG))
  63.   {
  64.     case ADC12IV_NONE:        break;        // Vector  0:  No interrupt
  65.     case ADC12IV_ADC12OVIFG:  break;        // Vector  2:  ADC12MEMx Overflow
  66.     case ADC12IV_ADC12TOVIFG: break;        // Vector  4:  Conversion time overflow
  67.     case ADC12IV_ADC12HIIFG:  break;        // Vector  6:  ADC12BHI
  68.     case ADC12IV_ADC12LOIFG:  break;        // Vector  8:  ADC12BLO
  69.     case ADC12IV_ADC12INIFG:  break;        // Vector 10:  ADC12BIN
  70.     case ADC12IV_ADC12IFG0:                 // Vector 12:  ADC12MEM0 Interrupt
  71.       if (ADC12MEM0 >= 0x6B4)               // ADC12MEM = A1 > 0.5V?
  72.         P1OUT |= BIT0;                      // P1.0 = 1
  73.       else
  74.         P1OUT &= ~BIT0;                     // P1.0 = 0
  75.       __bic_SR_register_on_exit(LPM0_bits); // Exit active CPU
  76.       break;                                // Clear CPUOFF bit from 0(SR)

  77.     case ADC12IV_ADC12IFG1:   break;        // Vector 14:  ADC12MEM1
  78.     case ADC12IV_ADC12IFG2:   break;        // Vector 16:  ADC12MEM2
  79.     case ADC12IV_ADC12IFG3:   break;        // Vector 18:  ADC12MEM3
  80.     case ADC12IV_ADC12IFG4:   break;        // Vector 20:  ADC12MEM4
  81.     case ADC12IV_ADC12IFG5:   break;        // Vector 22:  ADC12MEM5
  82.     case ADC12IV_ADC12IFG6:   break;        // Vector 24:  ADC12MEM6
  83.     case ADC12IV_ADC12IFG7:   break;        // Vector 26:  ADC12MEM7
  84.     case ADC12IV_ADC12IFG8:   break;        // Vector 28:  ADC12MEM8
  85.     case ADC12IV_ADC12IFG9:   break;        // Vector 30:  ADC12MEM9
  86.     case ADC12IV_ADC12IFG10:  break;        // Vector 32:  ADC12MEM10
  87.     case ADC12IV_ADC12IFG11:  break;        // Vector 34:  ADC12MEM11
  88.     case ADC12IV_ADC12IFG12:  break;        // Vector 36:  ADC12MEM12
  89.     case ADC12IV_ADC12IFG13:  break;        // Vector 38:  ADC12MEM13
  90.     case ADC12IV_ADC12IFG14:  break;        // Vector 40:  ADC12MEM14
  91.     case ADC12IV_ADC12IFG15:  break;        // Vector 42:  ADC12MEM15
  92.     case ADC12IV_ADC12IFG16:  break;        // Vector 44:  ADC12MEM16
  93.     case ADC12IV_ADC12IFG17:  break;        // Vector 46:  ADC12MEM17
  94.     case ADC12IV_ADC12IFG18:  break;        // Vector 48:  ADC12MEM18
  95.     case ADC12IV_ADC12IFG19:  break;        // Vector 50:  ADC12MEM19
  96.     case ADC12IV_ADC12IFG20:  break;        // Vector 52:  ADC12MEM20
  97.     case ADC12IV_ADC12IFG21:  break;        // Vector 54:  ADC12MEM21
  98.     case ADC12IV_ADC12IFG22:  break;        // Vector 56:  ADC12MEM22
  99.     case ADC12IV_ADC12IFG23:  break;        // Vector 58:  ADC12MEM23
  100.     case ADC12IV_ADC12IFG24:  break;        // Vector 60:  ADC12MEM24
  101.     case ADC12IV_ADC12IFG25:  break;        // Vector 62:  ADC12MEM25
  102.     case ADC12IV_ADC12IFG26:  break;        // Vector 64:  ADC12MEM26
  103.     case ADC12IV_ADC12IFG27:  break;        // Vector 66:  ADC12MEM27
  104.     case ADC12IV_ADC12IFG28:  break;        // Vector 68:  ADC12MEM28
  105.     case ADC12IV_ADC12IFG29:  break;        // Vector 70:  ADC12MEM29
  106.     case ADC12IV_ADC12IFG30:  break;        // Vector 72:  ADC12MEM30
  107.     case ADC12IV_ADC12IFG31:  break;        // Vector 74:  ADC12MEM31
  108.     case ADC12IV_ADC12RDYIFG: break;        // Vector 76:  ADC12RDY
  109.     default: break;
  110.   }
  111. }
复制代码
3-ADC-P1.1A1-Verf1.2v.rar (27.04 KB, 下载次数: 4, 售价: 1 分芯积分)

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表