This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP-EXP432P401R:如何在MSP432启动板中将模拟信道映射到引脚

Guru**** 2595770 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/632045/msp-exp432p401r-how-analog-channels-map-to-pins-in-msp432-launchpad

部件号:MSP-EXP432P401R

我正在使用MSP432启动板来控制线性CCD并从中读取,然后通过串行USB连接发送值。 我在论坛 上找到了此代码,网址为https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/53.1322万#pi316701=3</s>31.6701万

并对其进行了修改,以关注我的需求和问题。

//Clock_Signal是通过数字I/O引脚读取的100 kHz外部时钟
UINT16_数据[2048];
P9SEL1 |= BIL1;
P9SEL0 || BIT1; //将引脚9.0 设置为三级模块功能(模拟输入?)

ADC14CTL0 &=~ADC14ENC; //关闭启用以修改位。  

ADC14CTL0 |= ADC14ON | ADC14SHP | ADC14CONSEQ_2 | ADC14MSC  | ADC14SHT04; //打开ADC14,设置采样和保持,重复单通道,连续转换,并为64个时钟进行采样和保持
ADC14CTL1 || ADC14RES__14BIT;  //将分辨率设置为14位
ADC14MCTL0 |= ADC14VRSEL_0 | ADC14INCH_14;// A0 ADC输入选择;Vref=AVCC=3.3V

ADC14CTL0 || ADC14ENC | ADC14SC;//启用ADC14并开始第一个转换

//在时钟的每个上行循环中读取一个值,直到读取2048个值
对于(int i=0;i<2048;i++){
  while (Clock_Signal=0); //等待时钟的启动周期开始(100kHz)
  DATA[I]= ADC14MEM0; //存储最新的转换结果
  while (Clock_Signal=1); //等待此时钟运行周期结束
}

//或者,将中断连接到Clock_Signal上升边缘
void Clock_Signal_ISR(){
  如果(索引< 2048){ //索引将在新扫描开始时重置为0
    DATA[index]= ADC14MEM0; //存储最新的转换结果
    索引+= 1;
  }
}
主要,次要和第三模块的功能是什么? 第三模块是否功能为模拟输入? 我是否已将WFP 9.0 正确配置为模拟输入?
设置ADC14MSC是否是将ADC14设置为自由运行模式(持续转换)所需的全部? 此模式是否会缩短ADC14的使用寿命,或者除了功耗增加之外是否有其他缺点?
是否可以根据外部信号触发ADC14以开始转换? 我只是连续运行它,因为它看起来只是触发内部计数器或通过软件。 在这种情况下,连续转换似乎是一种更安全的故障处理方法。
如何将寄存器ACD14MCTL0中的输入设置为启动板上的pin WFP 9.0 ? 此针脚与A0,A1等有何关联? 在技术参考中找不到任何内容。
采样和保持更多时钟周期有什么优势? 具体而言,采样和保持电路的时间常数是否会改变以匹配采样时间,或者采样的增益是否会因固定的快速时间常数而降低?
中断服务例程看起来更干净,更好的实践,但我以前在将中断与串行USB通信一起使用时遇到了问题。 这个问题发生在Arduino上,我不知道这里是否存在相同的问题。 如果我的时钟信号是连续的,它将在任何串行传输过程中触发中断,这以前导致了问题。 我是否需要在发送串行之前断开此中断(然后稍后重新连接)?
感谢大家的意见!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果您使用的是启动板,则它是100引脚QFP,因此9.0 是 设备的ADC通道17;引脚52。

    请参见SLAS86图4-1。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Lynnelle,

     有很多问题! 让我尝试按顺序回答这些问题:

    上面的帖子中有轻微的打字错误。 最新 的MSP432P401R数据表 是SLAS826G。 (单击链接)。 表4.1 显示了引脚与函数的映射(包括AX (x=0-23)模拟输入的映射)。 如果您从该位置搜索WFP 9.0 ,您会发现,是的,WFP 9.0 的三级功能是该端口的模拟输入(本例中为A17)。  

    对于其余的引脚功能,您需要查看6.12 (输入/输出图)部分中的表格。 例如,表6-62显示了根据1.7 P1SEL0/1位设置的WFP 1.0 -WFP的功能。  

    对于其余的问题,我建议您首先访问 TI资源浏览器 ,然后尝试 MSP432P401R驱动程序库示例。这应该会让您开始。

    此致,

     Bob

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    要设置WFP的功能9.0 ,您应该设置"P9SELx |= BIT0",而不是BIT1。

    我想(?) 时钟信号是CCD输入多路复用器时钟。

    采样时间主要由CCD多路复用器的输出阻抗驱动--较低的阻抗可实现较低的采样时间。 (另请参见SLAU356G图 和下面的公式。) 您的CCD数据表应该有这个。 我猜是因为CCD通常与主机紧密耦合,所以它的频率相当低;64时钟似乎有点高。

    据我所知,ADC14不能直接从外部源触发。 在100ksps时,您的预算相当紧张(尤其是当您有其他中断关闭时),因此我明白了为什么您选择进行连续转换。 但是,我很肯定你会得到很差的结果,因为采样不与CCD时钟同步--如果多路复用器在采样过程中切换,你会得到两个像素的“mush”。

    有一件事我没见过(我没有密切关注),但似乎可以正常工作:将CCD时钟连接到(例如) TA2CLK输入引脚(tassel=0),然后设置TA2CCR2=1 (和TA2CCR0=1)和SHS=6 (根据SLAS826G表6-51,TA2_C2),这样定时器(随后ADC)将在每个TA2CLK输入脉冲上触发。 效果应该像时钟的传递。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    仔细看,计时器的技巧不起作用--它最好的办法是将时钟除以2。

    将CCD时钟驱动到DMA0有一个解决方案:使用DMA将预设字(包括ADC14SC)复制到ADC14CTL0中。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢。