历史上的今天
返回首页

历史上的今天

今天是:2025年05月07日(星期三)

正在发生

2019年05月07日 | MSP430Fr6972--AD使用小结

2019-05-07 来源:eefocus

#include


int main(void)

{

  WDTCTL = WDTPW | WDTHOLD;                 // Stop WDT


  // GPIO Setup

  P1OUT &= ~(BIT4 |BIT5);                           // Clear LED to start

  P1DIR |= (BIT4 | BIT5);                            // P1.4/5 output

  

  //1.采样引脚配置

  ///配置为AD功能,P1.0~3(A0~3)、P9.4~7(A12~15)均可以复用为AD采样功能

  P1SEL1 |= BIT3;                           

  P1SEL0 |= BIT3;                           /// Configure P1.3 for ADC:

                                            

  // Disable the GPIO power-on default high-impedance mode to activate

  // previously configured port settings

  PM5CTL0 &= ~LOCKLPM5;



  //2.参考电压配置

  // By default, REFMSTR=1 => REFCTL is used to configure the internal reference

  while(REFCTL0 & REFGENBUSY);              // If ref generator busy, WAIT

  REFCTL0 |= REFVSEL_1 | REFON;             // Select internal ref = 2.0V

                                            // Internal Reference ON

                                            //详见《user's guide》24.3.1



  ///3.ADC相关寄存器配置

  // Configure ADC12

  //ADC12CTL0~2控制寄存器

  ADC12CTL0 = ADC12SHT0_2 | ADC12ON;        // 采样保持时间16ADCCLK;启动AD(在ADC12ENC=0的情况下,修改启动或关闭AD)

  ADC12CTL1 = ADC12SHP;                     // ADCCLK = MODOSC; sampling timer  : 从采样保持器中获取信号

  ADC12CTL2 |= ADC12RES_2;                  // 12-bit conversion results分辨率

  ADC12CTL3 |=ADC12CSTARTADD_5;             //选择ADC12MCTL5控制

  ADC12IER0 |= ADC12IE5;                    // Enable ADC conv complete interrupt(ADC12MEM5)



  //////////////////////////////////////////////////////////////////////////////

  //AD使用总结:

  //详见《user's guide》Figure 25-1 ADC12_B模块图

  //AD有32个独立采样通道A0~A31,即ADC12INCH_x选择哪个通道,这个通道与IO引脚对应,详见《datasheet》Table 4-1. Pin Attributes

      //P1.3引脚对应A3,所以这里使用ADC12INCH_3

  

  //ADC12MCTL0~31对应32个通道管理寄存器,管理响应的AD转换结果保存寄存器ADC12MEM0~31,使用哪个寄存器保存结果用ADC12CSTARTADD_x设置

      //例:ADC12CTL3 |=ADC12CSTARTADD_5;//选择ADC12MCTL5控制ADC12MEM5保存AD转换结果

      //ADC12IER0 |= ADC12IE5;中断与响应寄存器对应

      //注:ADC12MEM0~31与AD有32个独立采样通道A0~A31不需要一一对应使用

         //本例中A3通道使用的就是ADC12MEM5,即:ADC12MEMx可以任意分配给不同的通道,详见Figure 25-1

  //////////////////////////////////////////////////////////////////////////////

  ADC12MCTL5 |= ADC12INCH_3 | ADC12VRSEL_1;   //ADC12INCH_3  : 通道3   ////    ADC12VRSEL_1   :内部参考电压


  //4.等待参考电压配置完成

  while(!(REFCTL0 & REFGENRDY));            // Wait for reference generator to settle


  while(1)

  {

    //5.Ad采样并获得结果  注:AD采样是需要时间的,加上延时

    __delay_cycles(5000);                    // Delay between conversions

    ADC12CTL0 |= ADC12ENC | ADC12SC;         // Sampling and conversion start


    __bis_SR_register(LPM0_bits + GIE);      // LPM0, ADC10_ISR will force exit

    __no_operation();                        // For debug only

  }

}


///中断处理函数

#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)

#pragma vector = ADC12_VECTOR

__interrupt void ADC12_ISR(void)

#elif defined(__GNUC__)

void __attribute__ ((interrupt(ADC12_VECTOR))) ADC12_ISR (void)

#else

#error Compiler not supported!

#endif

{

  switch (__even_in_range(ADC12IV, ADC12IV_ADC12RDYIFG))

  {

    case ADC12IV_NONE:        break;        // Vector  0:  No interrupt

    case ADC12IV_ADC12OVIFG:  break;        // Vector  2:  ADC12MEMx Overflow

    case ADC12IV_ADC12TOVIFG: break;        // Vector  4:  Conversion time overflow

    case ADC12IV_ADC12HIIFG:  break;        // Vector  6:  ADC12BHI

    case ADC12IV_ADC12LOIFG:  break;        // Vector  8:  ADC12BLO

    case ADC12IV_ADC12INIFG:  break;        // Vector 10:  ADC12BIN

    case ADC12IV_ADC12IFG0:                 // Vector 12:  ADC12MEM0 Interrupt

    case ADC12IV_ADC12IFG1:   break;        // Vector 14:  ADC12MEM1

    case ADC12IV_ADC12IFG2:   break;        // Vector 16:  ADC12MEM2

    case ADC12IV_ADC12IFG3:   break;

    case ADC12IV_ADC12IFG4:   break;        // Vector 20:  ADC12MEM4

    

    ///使用哪个ADC12MEMx存储AD结果,转换完成后就会触发响应寄存器的完成中断,标注位为ADC12IV_ADC12IFGx

    ///前提:ADC12IER0 |= ADC12IE5; //设置AD完成中断

    case ADC12IV_ADC12IFG5:   //break;        // Vector 22:  ADC12MEM5

      if (ADC12MEM5 >= 0x6B4)               // ADC12MEM = A1 > 0.5V?

        P1OUT |= BIT5;                      // P1.4 = 1

      else

        P1OUT &= ~BIT5;                     // P1.4 = 0

        __bic_SR_register_on_exit(LPM0_bits); // Exit active CPU

      break;                                // Clear CPUOFF bit from 0(SR)

    case ADC12IV_ADC12IFG6:   break;        // Vector 24:  ADC12MEM6

    case ADC12IV_ADC12IFG7:   break;        // Vector 26:  ADC12MEM7

    case ADC12IV_ADC12IFG8:   break;        // Vector 28:  ADC12MEM8

    case ADC12IV_ADC12IFG9:   break;        // Vector 30:  ADC12MEM9

    case ADC12IV_ADC12IFG10:  break;        // Vector 32:  ADC12MEM10

    case ADC12IV_ADC12IFG11:  break;        // Vector 34:  ADC12MEM11

    case ADC12IV_ADC12IFG12:  break;        // Vector 36:  ADC12MEM12     

    case ADC12IV_ADC12IFG13:  break;        // Vector 38:  ADC12MEM13

    case ADC12IV_ADC12IFG14:  break;        // Vector 40:  ADC12MEM14

    case ADC12IV_ADC12IFG15:  break;        // Vector 42:  ADC12MEM15

    case ADC12IV_ADC12IFG16:  break;        // Vector 44:  ADC12MEM16

    case ADC12IV_ADC12IFG17:  break;        // Vector 46:  ADC12MEM17

    case ADC12IV_ADC12IFG18:  break;        // Vector 48:  ADC12MEM18

    case ADC12IV_ADC12IFG19:  break;        // Vector 50:  ADC12MEM19

    case ADC12IV_ADC12IFG20:  break;        // Vector 52:  ADC12MEM20

    case ADC12IV_ADC12IFG21:  break;        // Vector 54:  ADC12MEM21

    case ADC12IV_ADC12IFG22:  break;        // Vector 56:  ADC12MEM22

    case ADC12IV_ADC12IFG23:  break;        // Vector 58:  ADC12MEM23

    case ADC12IV_ADC12IFG24:  break;        // Vector 60:  ADC12MEM24

    case ADC12IV_ADC12IFG25:  break;        // Vector 62:  ADC12MEM25

    case ADC12IV_ADC12IFG26:  break;        // Vector 64:  ADC12MEM26

    case ADC12IV_ADC12IFG27:  break;        // Vector 66:  ADC12MEM27

    case ADC12IV_ADC12IFG28:  break;        // Vector 68:  ADC12MEM28

    case ADC12IV_ADC12IFG29:  break;        // Vector 70:  ADC12MEM29

    case ADC12IV_ADC12IFG30:  break;        // Vector 72:  ADC12MEM30

    case ADC12IV_ADC12IFG31:  break;        // Vector 74:  ADC12MEM31

    case ADC12IV_ADC12RDYIFG: break;        // Vector 76:  ADC12RDY

    default: break;

  }

}


推荐阅读

史海拾趣

Charcroft Electronics Ltd公司的发展小趣事

在竞争激烈的电子行业中,供应链管理是企业成功的关键之一。Charcroft Electronics Ltd公司注重优化供应链管理,通过与供应商建立长期稳定的合作关系,确保原材料的质量和供应的稳定性。同时,公司还采用先进的供应链管理技术,实现库存的精准控制和物流的高效运作,提高了运营效率和市场响应速度。

BJB公司的发展小趣事

随着科技的不断进步,BJB公司意识到技术创新的重要性。因此,公司加大了研发投入,积极引进先进的技术和设备,致力于照明配件产品的创新和升级。经过不懈的努力,BJB成功研发出具有高效节能、环保低碳特点的照明配件产品,不仅提升了产品的性能和质量,也满足了客户对绿色照明的需求。

HOPERF公司的发展小趣事

为了进一步提升生产效率和产品质量,HOPERF在无锡太湖科技园建立了3万平方米的现代化生产基地。该基地引进了德国、美国等地区的先进封装测试生产设备和高精密测试测量仪器,并严格按照ISO9001国际质量认证体系进行生产管理。这种高标准的生产管理流程确保了产品质量的可靠性和稳定性,赢得了国内外客户的广泛认可和信赖。

璟德(ACX)公司的发展小趣事

2008年,璟德(ACX)成功在台北证券交易所上市,股票代码为3152。这一举措为公司带来了更多的资金支持,也提升了其品牌影响力和市场地位。上市后,璟德(ACX)加大了对研发和市场拓展的投入,进一步巩固了其在无线通信领域的领先地位。

ELINA INDEK公司的发展小趣事

因美纳(Illumina)公司成立于2000年,起初是一家专注于基因测序技术的小型企业。在创始人Jay Flatley的领导下,公司成功研发出了一系列高性能、低成本的基因测序仪器,使得基因测序技术从昂贵的实验室研究工具转变为广泛应用的医疗诊断工具。这一技术突破不仅为因美纳赢得了市场份额,也为整个医疗行业带来了革命性的变化。

ZTE高新兴(Gosuncn)公司的发展小趣事

作为一家领先的电子公司,因美纳深知自己的社会责任。公司积极参与各种公益活动,推动基因测序技术在医疗、环保等领域的应用。同时,因美纳还注重可持续发展,通过采用环保材料、优化生产流程等方式降低对环境的影响。这种积极履行社会责任和推动可持续发展的做法赢得了社会各界的广泛赞誉。

问答坊 | AI 解惑

新型有源箝位软开关PWM控制器UCC289X的原理及应用

摘要:介绍了电流控制型芯片UCC289X的基本原理,设计出了基于该芯片的同步整流有源箝位正激变换器的实用电路。实验结果证明,该芯片具有较好的控制特性和稳定性。 关键词:UCC289X;脉宽调制;有源箝位;峰值电流控制   0    引言 ...…

查看全部问答>

咋办

:\'( :\'( :\'( :\'( :\'( :\'( :\'( :\'( :\'( :\'( 不能灌水不能传东西。。要下载咋办哈…

查看全部问答>

请教:50万伏电压对摄像头的影响?

如题,(光缆传输)用不用加抗干挠器?先谢谢了!…

查看全部问答>

请教老师们:VS 2005c#怎样才能访问到2410的GPIO口

在下正用c#在windows ce 5.0操作系统下写一个设备(ARM9 S3C2410)的程序,但不知VS 2005 c#怎样才能访问到2410的GPIO口?有没有这样的dll或函数?如果没有,采用PB5编写GPIO的流接口驱动程序,VS2005 C#又怎样调用?…

查看全部问答>

新手:常用40脚avr单片机型号?at89s52是嘛?

额,我有一个avr&51的开发板(51用的是STC89C52),现在想学习一下avr单片机,不知道买哪一款avr单片机,所以想问问大家,还有avr下载是不是可以用并口下载啊,用什么软件呢?谢谢各位了!…

查看全部问答>

ps2键盘控制

PS2键盘控制实验这是一个主机和键盘的双向通讯的实验,扫描码在四个数码管上显示,其中包括分频电路,键盘电路和显示电路,在分频和键盘电路上存有疑惑和问题,恳请大家帮忙。分频电路为:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_L ...…

查看全部问答>

Cortex-m364位乘如何实现?

项目需要在STM32上实现ms-ADPCM,有大量的乘除计算,需要对64位有符号整型进行乘法计算,相乘的两个数据在40位左右,相乘的结果基本在80位以上,这个怎么实现?…

查看全部问答>

stm8s103K3怎么把输出IO设置成推挽?

漏极开路和推挽输出在哪里设置? 谢谢!!…

查看全部问答>

为什么在手持设备中会用到电子罗盘?

为什么在手持设备中会用到电子罗盘?…

查看全部问答>

求一块STM32的开发板?

大侠们好,本人硬件菜鸟一名,之前只搞过PIC的单片机,现在换了个工作,要用STM32F107,所以来求购一块开发板,菜鸟级的就行,大侠帮帮忙,QQ270312067…

查看全部问答>