最近在学习MSP430的AD采样,使用官方给的例子是没问题的,但是我看了很多例子,基本上都是使用P6SEL=0x01的0端口来举例,调试通过,而且也没问题,现在我需要改一下转换通道,AD一共是有16个可以使用的模拟通道,然后我改为P7.0即A12通道,程序如下:
void ADC_init()
{
P7SEL |= 0x000f; // 选择并设置通道(功能选择:作为模拟输入)
ADC12CTL0 = ADC12ON + ADC12MSC + ADC12SHT1_8; // 打开 ADC12, 多次采样,extend sampling time
// to avoid overflow of results
ADC12CTL1 = ADC12SHP + ADC12CONSEQ_2; // 使用采样定时器, 单通道多次转换
ADC12IE = 0x008; // ADC12IFG.3中断允许
ADC12CTL0 |= ADC12ENC; // 使能ADC转换
ADC12MCTL0 = ADC12INCH_12; // ref+=AVcc, channel = A12 -> P7.0
ADC12CTL0 |= ADC12SC; // 开始转换 – software trigger
}
这样配置了ADC以后,无法进入到中断,但是我把ADC12IE=0x008改为ADC12IE=0x001以后,进入中断完全没问题。后来也对照了ADC的配置和例子,基本上没问题,但是就是想不通是哪里配置出了问题???还有就是我想问下ADC12MEM有16个存储器,是不是不用配置就会使用默认,即每一个转换通道的转换结果都会默认存储在对应的存储器???还有一个,ADC12MCTLx这个寄存器的配置我会,但是不知道它跟转换通道相关的寄存器配置有什么关系?是每一个通道对应一个ADC12MCTL?但是每一个ADC12MCTL都有一个INCH可以选择模拟输入通道,能不能给我说说ADC12MCTL???还有就是配置AD转换的时候是不是只要配置了PxSEL=0x01(设置为模拟输入)就可以了?还要不要配置ADC12MCTL的INCH选择一下通道,这2个都可以设置AD的通道,有什么不一样?例子里面我看了一下,即使只配置PxSEL也可以进行转换,但是有时候也有配置INCH,那到底INCH什么情况下才需要配置???
麻烦帮我解决以上问题,在此谢过,感激不尽!!!
Wei Jingwen:
回复 Triton Zhang:
好的,谢谢你的热心回答,解答很详细,代码我拷过去也是为了看一下例子里面的程序,能否通过,如果可以,说明这样配置应该是没问题的,然后我会看着数据手册上的资料对寄存器根据需要进行配置。刚才你说的很对,谢谢你的提醒,学习方面还有待提高和加强