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.

[参考译文] MSP432WARE:ADC14单路差分测量+ UART

Guru**** 2535750 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/586251/msp432ware-adc14-single-_differential-measurements-uart

器件型号:MSP432WARE
主题中讨论的其他器件:MSPWARE

尊敬的所有人:  

我是 MSP432和嵌入式系统的新手。 我将开始进行 有关差分电压测量的新项目、并将在 LabVIEW 上可视化、但首先、

我尝试合并 MSPWARE 的两个示例代码。

第一个是 ADC14单差分二进制补码代码。

第二个是12MHz UART 回显 代码。

这两个来自 driverlib 示例的代码、我从 启动文件中启用并定义 EUSCIA0_IRQHandler 和 ADC14_IRQHandler。

2.我从 Echo 代码复制到 UART 配置使能和中断设置到 ADC14代码。

我想在终端中看到"result"值。  

如何组合这些器件。  

谢谢你。

/*每次转换完成时都会发生此中断。 由于 FPU
*在堆栈模式下启用、因此我们能够安全地使用 FPU 执行
*高效浮点算术。*/


void ADC14_IRQHandler (void)
{
uint64_t status;

status = MAP_ADC14_getEnabableInterruptStatus ();
MAP_ADC14_clearInterult Flag (status);

if (status)

= ADC14_ADC14_getRestattruatu_ADC0 (status_ADC14);if (status_ADC0)= ADC_ADCtruatu_ADC0)


}/*




将 ADC 结果(14位)转换为相对于3.3V 基准的浮点
值*/


静态浮点转换 TOFloat (uint16_t 结果)
{
int32_t temp;

if (0x8000 & result)
{
temp =(Result >> 2)|0xFFFFC000;
return ((* 3.3f)/8191);
}
else
(temp =(result>3f)
;}8191 (Result)






/* EUSCI A0 UART ISR -将数据回传到 PC 主机*/


void EUSCIA0_IRQHandler (void)
{
uint32_t status = MAP_UART_getEnabableInterruptStatus (EUSCI_A0_BASE);

MAP_UART_clearInterruptFlag (EUSCI_A0_BASE、STATUS);

if (status & EUSCI_AT_RAT_LAUNT_UART_LAUNT_LAUNT_LAUNT_LAUNIT_UST_LAUNIT_LAUNT_UART_LAUNT




});TO_AT_AT_AT_AIFT_AT_LAG_UST_LAUNT_LAG_

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

    您好!

    根据 ADC 的采样率、有几种方法可以解决此问题。  您可以简单地测量采样、并通过中断写入 UART TX 缓冲区、这会将采样率限制为传输的速度。  您可以在散聚模式下使用 DMA 尝试将信息写入 UART 而无需 CPU 开销、但仍会受到 UART 频率的限制。

    请注意、UART 限制为7MBaud。

    作为起点、我只需将发送 API 移入 ADC 中断服务例程。  您需要发送两个字节、因为结果为14位宽。

    void ADC14_IRQHandler (void)
    {
    uint64_t status; 
    uint16_t txByte; status = MAP_ADC14_getEncableInterruptStatus (); MAP_ADC14_clearInterruptFlag (status); if (status & ADC_INT0) { txByte = MAP_ADC14_getResult (ADC_MEM0);
    //等待 TX 缓冲区准备就绪
    while (!MAP_UART_getInterruptStatus (EUSCI_A0_BASE、EUSCI_A_UART_Transmit _interrupt_FLAG));
    MAP_UART_transmitData (eUSCI_A0_BASE、(uint8_t) txByte); 
    txByte = txByte >> 8; 
    //等待 TX 缓冲区准备就绪 
    while (!MAP_UART_getInterruptStatus (EUSCI_A0_BASE、EUSCI_A_UART_Transmit _interrupt_FLAG));
    MAP_UART_transmitData (eUSCI_A0_BASE、(uint8_t) txByte); 
    } 

    此致、
    Chris

     

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

    终端现在显示一些值、但如果我返回"result"、则该代码会直接将电压转换为2^0和2^14之间的值。
    也许这会是个愚蠢的问题、但我应该选择哪个用户从 UART 读取 LabVIEW 正常电压值或位值? 我需要进行越来越多的研究。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在某些情况下、将原始值发送到主机(在您的情况下为 LabVIEW)是有道理的、这样微控制器就可以更快地恢复休眠。 如果电源不是转换器、那么无论您是在 MSP 上还是在主机 PC 上进行处理、我都不会感到重要。

    Chris