2761|0

2057

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

[TI首届低功耗设计大赛]+使用430库开发ADC+P1.1A1通道采样控制P1.0LED2 [复制链接]

这篇是FR5969的基于430库开发ADC简单试验。
本试验和前面一个使用寄存器的ADC开发试验一样,使用是FR5969片内的P1.1管脚对应的ADC通道1也就是A1。调试的时候在中断服务函数中设置断点,在寄存器观察窗口中查看采样转换的值。如下图:

  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 "main.h"
  24. #include "driverlib.h"

  25. void Init_ADC(void);
  26. /*******************************************************************************
  27. *函数名 :int _system_pre_init
  28. *描述   :系统初始化,停止看门狗
  29. *输入   :无
  30. *输出   :无
  31. *调用   :内部调用
  32. ******************************************************************************/
  33. int _system_pre_init(void)
  34. {
  35.     // Stop Watchdog timer
  36.     WDT_A_hold(__MSP430_BASEADDRESS_WDT_A__);     // Stop WDT

  37.     /*==================================*/
  38.     /* Choose if segment initialization */
  39.     /* should be done or not. */
  40.     /* Return: 0 to omit initialization */
  41.     /* 1 to run initialization */
  42.     /*==================================*/
  43.     return 1;
  44. }

  45. /*******************************************************************************
  46. *函数名 :int main
  47. *描述   :主函数
  48. *输入   :无
  49. *输出   :无
  50. *调用   :内部调用
  51. ******************************************************************************/
  52. int main(void)
  53. {
  54.   _system_pre_init();  // 停止看门狗
  55.    
  56.   Init_GPIO();         // 板子管脚初始化
  57.   Init_ADC();          // ADC初始化
  58.   while (1)
  59.   {
  60.    
  61.      __delay_cycles(5000);
  62.     ADC12_B_startConversion(ADC12_B_BASE,ADC12_B_START_AT_ADC12MEM0,ADC12_B_REPEATED_SINGLECHANNEL);

  63.     __bis_SR_register(LPM0_bits | GIE);     // 进入LPM0模式, ADC12_ISR 将使其强制退出
  64.     __no_operation();                                                                                   
  65.   }
  66. }

  67. /*******************************************************************************
  68. *函数名 :Init_GPIO
  69. *描述   :GPIO初始化,设置所有的管脚都为输出低电平
  70. *输入   :无
  71. *输出   :无
  72. *调用   :内部调用
  73. ******************************************************************************/
  74. void Init_GPIO(void)
  75. {
  76.     // Set all GPIO pins to output low for low power
  77.     GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
  78.     GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
  79.     GPIO_setOutputLowOnPin(GPIO_PORT_P3, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
  80.     GPIO_setOutputLowOnPin(GPIO_PORT_P4, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
  81.     GPIO_setOutputLowOnPin(GPIO_PORT_PJ, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7|GPIO_PIN8|GPIO_PIN9|GPIO_PIN10|GPIO_PIN11|GPIO_PIN12|GPIO_PIN13|GPIO_PIN14|GPIO_PIN15);

  82.     GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
  83.     GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
  84.     GPIO_setAsOutputPin(GPIO_PORT_P3, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
  85.     GPIO_setAsOutputPin(GPIO_PORT_P4, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
  86.     GPIO_setAsOutputPin(GPIO_PORT_PJ, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7|GPIO_PIN8|GPIO_PIN9|GPIO_PIN10|GPIO_PIN11|GPIO_PIN12|GPIO_PIN13|GPIO_PIN14|GPIO_PIN15);
  87.    
  88.     //P1.1 - A1
  89.     GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN1);
  90.     GPIO_setAsInputPin(GPIO_PORT_P1, GPIO_PIN1);
  91.     //GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1,GPIO_PIN1,GPIO_SECONDARY_MODULE_FUNCTION);
  92.    
  93.     PMM_unlockLPM5();// 关闭上电端口默认输出高阻抗的功能,使能上电保持起始设置
  94. }
  95. /*******************************************************************************
  96. *函数名 Init_ADC
  97. *描述   :ADC初始化,
  98. *输入   :无
  99. *输出   :无
  100. *调用   :内部调用
  101. ******************************************************************************/
  102. void Init_ADC(void)
  103. {
  104.   ADC12_B_init(ADC12_B_BASE,                                //ADC12_B的基地址
  105.                ADC12_B_SAMPLEHOLDSOURCE_SC,                 //采样保持信号源选择默认,也就是ADC12SHS_0
  106.                ADC12_B_CLOCKSOURCE_ADC12OSC,                //ADC12_B模块的时钟源默认,来自UCS
  107.                ADC12_B_CLOCKDIVIDER_1,                      //时钟源不分频
  108.                ADC12_B_CLOCKPREDIVIDER__1,                  //时钟源预分配器不分频
  109.                ADC12_B_MAPINTCH1);                          //
  110.                               
  111.   ADC12_B_enable(ADC12_B_BASE);                             //使能ADC12_B模块
  112.   
  113.   ADC12_B_setupSamplingTimer(ADC12_B_BASE,                  //
  114.                              ADC12_B_CYCLEHOLD_16_CYCLES,   //
  115.                              ADC12_B_CYCLEHOLD_16_CYCLES,   //
  116.                              ADC12_B_MULTIPLESAMPLESDISABLE); //
  117.       
  118.   ADC12_B_memoryConfigure(ADC12_B_BASE,                     //
  119.                           ADC12_B_MEMORY_0,                 //
  120.                           ADC12_B_INPUT_A1,                 //通道选择A1
  121.                           ADC12_B_VREFPOS_AVCC_VREFNEG_VSS, //参考电压为AVCC
  122.                           ADC12_B_NOTENDOFSEQUENCE,         //
  123.                           ADC12_B_WINDOW_COMPARATOR_DISABLE,//
  124.                           ADC12_B_DIFFERENTIAL_MODE_DISABLE);//
  125.   
  126.   ADC12_B_enableInterrupt(ADC12_B_BASE,ADC12_B_IE0,0,0);    //使能中断
  127.   
  128.   __enable_interrupt();// Enable globale interrupt          //
  129. }



  130. #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
  131. #pragma vector = ADC12_VECTOR
  132. __interrupt void ADC12_ISR(void)
  133. #elif defined(__GNUC__)
  134. void __attribute__ ((interrupt(ADC12_VECTOR))) ADC12_ISR (void)
  135. #else
  136. #error Compiler not supported!
  137. #endif
  138. {
  139.   switch(__even_in_range(ADC12IV, ADC12IV_ADC12RDYIFG))
  140.   {
  141.     case ADC12IV_NONE:        break;        // Vector  0:  No interrupt
  142.     case ADC12IV_ADC12OVIFG:  break;        // Vector  2:  ADC12MEMx Overflow
  143.     case ADC12IV_ADC12TOVIFG: break;        // Vector  4:  Conversion time overflow
  144.     case ADC12IV_ADC12HIIFG:  break;        // Vector  6:  ADC12BHI
  145.     case ADC12IV_ADC12LOIFG:  break;        // Vector  8:  ADC12BLO
  146.     case ADC12IV_ADC12INIFG:  break;        // Vector 10:  ADC12BIN
  147.     case ADC12IV_ADC12IFG0:                 // Vector 12:  ADC12MEM0 Interrupt
  148.       if (ADC12MEM0 >= 0x7ff)               // ADC12MEM0 = A1 > 0.5AVcc?
  149.         P1OUT |= BIT0;                      // P1.0 = 1
  150.       else
  151.         P1OUT &= ~BIT0;                     // P1.0 = 0
  152.       __bic_SR_register_on_exit(LPM0_bits); // Exit active CPU
  153.       break;                                // Clear CPUOFF bit from 0(SR)
  154.     case ADC12IV_ADC12IFG1:   break;        // Vector 14:  ADC12MEM1
  155.     case ADC12IV_ADC12IFG2:   break;        // Vector 16:  ADC12MEM2
  156.     case ADC12IV_ADC12IFG3:   break;        // Vector 18:  ADC12MEM3
  157.     case ADC12IV_ADC12IFG4:   break;        // Vector 20:  ADC12MEM4
  158.     case ADC12IV_ADC12IFG5:   break;        // Vector 22:  ADC12MEM5
  159.     case ADC12IV_ADC12IFG6:   break;        // Vector 24:  ADC12MEM6
  160.     case ADC12IV_ADC12IFG7:   break;        // Vector 26:  ADC12MEM7
  161.     case ADC12IV_ADC12IFG8:   break;        // Vector 28:  ADC12MEM8
  162.     case ADC12IV_ADC12IFG9:   break;        // Vector 30:  ADC12MEM9
  163.     case ADC12IV_ADC12IFG10:  break;        // Vector 32:  ADC12MEM10
  164.     case ADC12IV_ADC12IFG11:  break;        // Vector 34:  ADC12MEM11
  165.     case ADC12IV_ADC12IFG12:  break;        // Vector 36:  ADC12MEM12
  166.     case ADC12IV_ADC12IFG13:  break;        // Vector 38:  ADC12MEM13
  167.     case ADC12IV_ADC12IFG14:  break;        // Vector 40:  ADC12MEM14
  168.     case ADC12IV_ADC12IFG15:  break;        // Vector 42:  ADC12MEM15
  169.     case ADC12IV_ADC12IFG16:  break;        // Vector 44:  ADC12MEM16
  170.     case ADC12IV_ADC12IFG17:  break;        // Vector 46:  ADC12MEM17
  171.     case ADC12IV_ADC12IFG18:  break;        // Vector 48:  ADC12MEM18
  172.     case ADC12IV_ADC12IFG19:  break;        // Vector 50:  ADC12MEM19
  173.     case ADC12IV_ADC12IFG20:  break;        // Vector 52:  ADC12MEM20
  174.     case ADC12IV_ADC12IFG21:  break;        // Vector 54:  ADC12MEM21
  175.     case ADC12IV_ADC12IFG22:  break;        // Vector 56:  ADC12MEM22
  176.     case ADC12IV_ADC12IFG23:  break;        // Vector 58:  ADC12MEM23
  177.     case ADC12IV_ADC12IFG24:  break;        // Vector 60:  ADC12MEM24
  178.     case ADC12IV_ADC12IFG25:  break;        // Vector 62:  ADC12MEM25
  179.     case ADC12IV_ADC12IFG26:  break;        // Vector 64:  ADC12MEM26
  180.     case ADC12IV_ADC12IFG27:  break;        // Vector 66:  ADC12MEM27
  181.     case ADC12IV_ADC12IFG28:  break;        // Vector 68:  ADC12MEM28
  182.     case ADC12IV_ADC12IFG29:  break;        // Vector 70:  ADC12MEM29
  183.     case ADC12IV_ADC12IFG30:  break;        // Vector 72:  ADC12MEM30
  184.     case ADC12IV_ADC12IFG31:  break;        // Vector 74:  ADC12MEM31
  185.     case ADC12IV_ADC12RDYIFG: break;        // Vector 76:  ADC12RDY
  186.     default: break;
  187.   }
  188. }
复制代码
2-ADC-P1.1A1-库.rar (549.44 KB, 下载次数: 8, 售价: 2 分芯积分)

 
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

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