2990|0

2057

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

[TI首届低功耗设计大赛]+寄存器版本的ADC+P1.1A1通道采样控制P1.0LED2 [复制链接]

这篇是FR5969的ADC的寄存器的版本的简单试验。
本试验使用是FR5969片内的P1.1管脚对应的ADC通道1也就是A1。
配置ADC:
// Configure ADC12
  ADC12CTL0 = ADC12SHT0_2 | ADC12ON;        // Sampling time, S&H=16, ADC12 on
  ADC12CTL1 = ADC12SHP;                                 // Use sampling timer
  ADC12CTL2 |= ADC12RES_2;                            // 12-bit conversion results
  ADC12MCTL0 |= ADC12INCH_1;                        // 选择通道1也就是A1,参考电压AVCC
  ADC12IER0 |= ADC12IE0;                                  // 使能ADC转换完成中断,对应着ADC中断函数中case
                                                                             // 语句的ADC12IFG0
注意:在上面的语句中, ADC12IE0;  开启的是ADC转换完成中断,这个中断源对应ADC中断服务函数中case语句的ADC12IV_ADC12IFG0!!!切记
另外:应为配置的P1.1连接了按键S2在没有按下按键的时候这个管脚是悬空的,所以会感应出不稳定的电势,观察ADC12MEM0寄存器的值可以看到采样的值很不稳定,跳动很大,但是接入到固定的电平后跳变的幅度得到改善..
调试的时候在中断服务函数中设置断点,在寄存器观察窗口中查看采样转换的值。如下图:

  1. //******************************************************************************
  2. //  MSP430FR59xx Demo - ADC12, Sample A1, AVcc Ref, Set P1.0 if A1 > 0.5*AVcc
  3. //
  4. //  描述 :单通道采样,ADC的参考电源为AVCC,也就是芯片的电源电压。软件设置ADC12SC
  5. //         采样和转换寄存器,在转换完成后自动清除。在主循环中,进入LPM0低功耗模式。
  6. //         等待ADC的转换完成进入ADC的中断函数中,在ADC中断服务函数中将强制CPU退出
  7. //         低功耗模式LPM0。如果A1的转换值大于0.5AVCC,那么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.   // Configure ADC12
  34.   ADC12CTL0 = ADC12SHT0_2 | ADC12ON;        // Sampling time, S&H=16, ADC12 on
  35.   ADC12CTL1 = ADC12SHP;                     // Use sampling timer
  36.   ADC12CTL2 |= ADC12RES_2;                  // 12-bit conversion results
  37.   ADC12MCTL0 |= ADC12INCH_1;                // 选择通道1也就是A1,参考电压AVCC
  38.   ADC12IER0 |= ADC12IE0;                    // 使能ADC转换完成中断,对应着ADC中断函数中case
  39.                                             // 语句的ADC12IFG0

  40.   while (1)
  41.   {
  42.     __delay_cycles(5000);
  43.     ADC12CTL0 |= ADC12ENC | ADC12SC;        // 开始采样和转换

  44.     __bis_SR_register(LPM0_bits | GIE);     // 进入LPM0模式, ADC12_ISR 将使其强制退出
  45.     __no_operation();                       // For debugger
  46.   }
  47. }

  48. #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
  49. #pragma vector = ADC12_VECTOR
  50. __interrupt void ADC12_ISR(void)
  51. #elif defined(__GNUC__)
  52. void __attribute__ ((interrupt(ADC12_VECTOR))) ADC12_ISR (void)
  53. #else
  54. #error Compiler not supported!
  55. #endif
  56. {
  57.   switch(__even_in_range(ADC12IV, ADC12IV_ADC12RDYIFG))
  58.   {
  59.     case ADC12IV_NONE:        break;        // Vector  0:  No interrupt
  60.     case ADC12IV_ADC12OVIFG:  break;        // Vector  2:  ADC12MEMx Overflow
  61.     case ADC12IV_ADC12TOVIFG: break;        // Vector  4:  Conversion time overflow
  62.     case ADC12IV_ADC12HIIFG:  break;        // Vector  6:  ADC12BHI
  63.     case ADC12IV_ADC12LOIFG:  break;        // Vector  8:  ADC12BLO
  64.     case ADC12IV_ADC12INIFG:  break;        // Vector 10:  ADC12BIN
  65.     case ADC12IV_ADC12IFG0:                 // Vector 12:  ADC12MEM0 Interrupt
  66.       if (ADC12MEM0 >= 0x7ff)               // ADC12MEM0 = A1 > 0.5AVcc?
  67.         P1OUT |= BIT0;                      // P1.0 = 1
  68.       else
  69.         P1OUT &= ~BIT0;                     // P1.0 = 0
  70.       __bic_SR_register_on_exit(LPM0_bits); // Exit active CPU
  71.       break;                                // Clear CPUOFF bit from 0(SR)
  72.     case ADC12IV_ADC12IFG1:   break;        // Vector 14:  ADC12MEM1
  73.     case ADC12IV_ADC12IFG2:   break;        // Vector 16:  ADC12MEM2
  74.     case ADC12IV_ADC12IFG3:   break;        // Vector 18:  ADC12MEM3
  75.     case ADC12IV_ADC12IFG4:   break;        // Vector 20:  ADC12MEM4
  76.     case ADC12IV_ADC12IFG5:   break;        // Vector 22:  ADC12MEM5
  77.     case ADC12IV_ADC12IFG6:   break;        // Vector 24:  ADC12MEM6
  78.     case ADC12IV_ADC12IFG7:   break;        // Vector 26:  ADC12MEM7
  79.     case ADC12IV_ADC12IFG8:   break;        // Vector 28:  ADC12MEM8
  80.     case ADC12IV_ADC12IFG9:   break;        // Vector 30:  ADC12MEM9
  81.     case ADC12IV_ADC12IFG10:  break;        // Vector 32:  ADC12MEM10
  82.     case ADC12IV_ADC12IFG11:  break;        // Vector 34:  ADC12MEM11
  83.     case ADC12IV_ADC12IFG12:  break;        // Vector 36:  ADC12MEM12
  84.     case ADC12IV_ADC12IFG13:  break;        // Vector 38:  ADC12MEM13
  85.     case ADC12IV_ADC12IFG14:  break;        // Vector 40:  ADC12MEM14
  86.     case ADC12IV_ADC12IFG15:  break;        // Vector 42:  ADC12MEM15
  87.     case ADC12IV_ADC12IFG16:  break;        // Vector 44:  ADC12MEM16
  88.     case ADC12IV_ADC12IFG17:  break;        // Vector 46:  ADC12MEM17
  89.     case ADC12IV_ADC12IFG18:  break;        // Vector 48:  ADC12MEM18
  90.     case ADC12IV_ADC12IFG19:  break;        // Vector 50:  ADC12MEM19
  91.     case ADC12IV_ADC12IFG20:  break;        // Vector 52:  ADC12MEM20
  92.     case ADC12IV_ADC12IFG21:  break;        // Vector 54:  ADC12MEM21
  93.     case ADC12IV_ADC12IFG22:  break;        // Vector 56:  ADC12MEM22
  94.     case ADC12IV_ADC12IFG23:  break;        // Vector 58:  ADC12MEM23
  95.     case ADC12IV_ADC12IFG24:  break;        // Vector 60:  ADC12MEM24
  96.     case ADC12IV_ADC12IFG25:  break;        // Vector 62:  ADC12MEM25
  97.     case ADC12IV_ADC12IFG26:  break;        // Vector 64:  ADC12MEM26
  98.     case ADC12IV_ADC12IFG27:  break;        // Vector 66:  ADC12MEM27
  99.     case ADC12IV_ADC12IFG28:  break;        // Vector 68:  ADC12MEM28
  100.     case ADC12IV_ADC12IFG29:  break;        // Vector 70:  ADC12MEM29
  101.     case ADC12IV_ADC12IFG30:  break;        // Vector 72:  ADC12MEM30
  102.     case ADC12IV_ADC12IFG31:  break;        // Vector 74:  ADC12MEM31
  103.     case ADC12IV_ADC12RDYIFG: break;        // Vector 76:  ADC12RDY
  104.     default: break;
  105.   }
  106. }
复制代码
2-ADC-P1.1A1.rar (26.3 KB, 下载次数: 2, 售价: 1 分芯积分)
 
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表