前几个月在做项目时,由于使用的是别人提供的开发板,部分IO口不能直接使用,比如P60-P64都用在了其他地方。而这时我需要使用430内置的ADC12来进行AD转换,因此可以使用的P6口只用P65-P67。
一开始,我在网上收集到的大多数例程都是使用P60口的,而一直找不到使用特定IO口进行AD转换的程序,TI官方给的例程也没有提到相关的内容。无奈之下只能看430的user guide,主要注意一些其他例程中没有提到的控制寄存器的使用方法。
最终我整理出了一点头绪,在此与大家分享。
1 void adcintial() 2 { 3 ADC12CTL0 &=~ENC; 4 P6SEL |= BIT5; // P6.5 ADC option select 5 ADC12CTL0 = SHT0_2 + ADC12ON + REFON + REF2_5V; // Set sampling time, turn on ADC12 6 ADC12CTL1 = CSTARTADD_5 + SHP; // Use sampling timer 7 ADC12MCTL5 = SREF_1 + INCH_5; 8 ADC12IE = 0x20; // Enable interrupt 9 ADC12CTL0 |= ENC; // Conversion enabled 10 }
以上一段代码是用在ADC12初始化的,其中与使用P60口做单通道单次转换不同的地方在第六行和第七行。
第六行中CSTARTADD_5是转换的起始IO口,最后的数字5表示这是从P65开始转换。
第七行中INCH_5是转换是需要用到的IO口,这里用的是P65口。
1 #pragma vector=ADC12_VECTOR 2 __interrupt void ADC12_ISR (void) 3 { 4 ad_data=ADC12MEM5; 5 }
然后这是ADC12中断部分的代码,ADC12MEM5是临时储存寄存器,这个寄存器和选择转换的通道一一对应。这里使用的是P65作为转换通道,因此转换的最后结果会存放在ADC12MEM5中。
这是我第一篇博客,如有疏漏,希望大家多多指正!