或者说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++); // 延时
}
此帖出自
小平头技术问答
谢谢帮顶,期待用过SD_A的高手指点
1. 可以实现多通道采集;
2.4250的SD16a_A共有一个sigma-delta AD转换器,可以选择8路输入。
3.因为只有一个AD转换器,所以只能分两次采集,每次采集之前需要重新开启以下SD16SC,并且转换结果只放在SD16MEM0里面,没有MEM1……等这些寄存器。每次转换完都会从MEM0 里取值。
4.其实原理图里都有,用户指南842页。而且一般来说也不存在编译软件没写好头文件需要用户去补充这种情况。
谢了~~我从图书馆借到这本书了,有些地方讲的挺实用,细致。你用的什么处理器?
一周热门 更多>