或者说MSP430F4250到底有没有其他SD_A通道?
想做两路AD,可是配置寄存器时
1.MSP430x4xx user's guid 是放在一起的,在介绍SD16CCTLx寄存器第0位SD16GRP下面有一行小字:Reserved inMSP430F42x0,MSP430FG42x0…devices.不解: GRP位reserve了还如何实现多通道功能?
2.好吧 我想那不行分两次用单通道单次转换,给通道1配置成与通道0一样的,编译通不过,才发现MSP430x42x.h里也没有其他通道寄存器的宏定义。难道真的是没有其他通道?
3.我给头文件里补上后面通道的寄存器的宏定义,仿真时查看SD16MEM1,SD16MEM2……一直是65535,什么情况?
4.在中断函数里switch了一下SD16IV,发现进不去6,SD16MEM1无法赋值给变量,什么情况?
综上:请教高手:MSP430F4250到底能不能实现多道单次转换?要配置哪个关键寄存器??多谢大神指点!
附:最后改的只用通道1的子程序(如犯低级错误,还望高手勿笑,不吝赐教)
/*SD16 convert*/
void SD16_convert(void)
{
P6SEL=0Xff;
SD16CTL = SD16REFON; // 1.2V ref, SMCLK
SD16AE= SD16AE0+SD16AE1;
/*
SD16INCTL0 |= SD16INCH0+SD16INTDLY_0;
SD16CCTL0 |= SD16SNGL+SD16IE+SD16XOSR+SD16OSR0;
for (i = 0; i < 0xff00; i++); // 延时
__enable_interrupt(); // 开中断
SD16CCTL0 |=SD16SC; //开始转换
// _BIS_SR(LPM0_bits); // Enter LPM0
for (i = 0; i < 0x1000; i++); // 延时
*/
SD16INCTL1 |= SD16INCH1+SD16INTDLY_0;
SD16CCTL1 |= SD16SNGL+SD16IE+SD16XOSR+SD16OSR0;
for (i = 0; i < 0xff00; i++); // 延时
__enable_interrupt(); // 开中断
SD16CCTL1 |=SD16SC;
for (i = 0; i < 0x1000; i++); // 延时
}
此帖出自
小平头技术问答
谢了~~我从图书馆借到这本书了,有些地方讲的挺实用,细致。你用的什么处理器?
一周热门 更多>