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.

[参考译文] MSP430F447:MSP430x44x 与 ADC THS1206接口

Guru**** 1635240 points
Other Parts Discussed in Thread: THS1206, MSP430F447, ADS8342, TM4C123FH6PM
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/919171/msp430f447-msp430x44x-vs-adc-ths1206-interface

器件型号:MSP430F447
主题中讨论的其他器件:THS1206TMS320C6201ADS8342TM4C123FH6PM

您好!

我从 ADC 论坛收到了 MCU MSP430与 ADC THS1206 EVM 源代码、地址如下。

https://e2e.ti.com/support/data-converters/f/73/p/911632/3390319#3390319

/cfs-file/__key/communityserver-discussions-components-files/73/THS1206.zip

我不确定如何使用 MSP430x44x GPIO 模式实现如图2所示的读取时序。

Q1>如何以几个信号中的一个为例来生成 tw (CS)、tsu (R/NW)、TH (R/NW) of /CS0和 CS1信号?

    请告诉我源代码位于上述地址的哪个位置?

此致、
Jame、Shin

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

    尊敬的 TI 工程师:

    上一帖子链接地址的 ZIP 文件中有一个 THS1206.c 文件。

    Q2>请解释 READ_ADC (void)函数是否使 TW (CS)=最小10ns 时序。 ?

    此致、
    Jame、Shin

    /******** /*
    文件名:main.c*/
    /*说明:此程序使用 MSP430F449从
    ADS8342 16位250kSPS 并行 ADC 读取500 *//*个样本。 */
    /*样本存储在缓冲器 ADC_DATA 中。 */
    *是指由编译器为
    ADC_DATA 内存中的*//*地址创建的.map 文件。 然后、数据被传输*/
    /*至缓冲器 DAC_DATA 并发送一个 DAC7731。 LCD 显示*/
    //*正在传输的方向数据。 */
    /*作者:Tom Hendrick、数据采集产品、 */
    * 德克萨斯州达拉斯 //
    *由德州仪器(TI)公司创建的2003 (C)。*/*
    版本:1.0*/
    /#include
    
    #include "SBLCDA2.h"
    #include "THS1206.h"
    
    /******** 函数原型 //*
    */
    void init_sys (void); /* MSP430初始化例程*/
    void delay (int); //软件延迟 *
    / void adc_read (void); /*进行 ADC 转换 */
    void display (void); /*表示程序完成 //
    void complete (void);
    void timer (void);
    void InitializeLCD (void);
    void clearDisplay (void);
    void ortMajor( unsigned int);
    void displaySpecial (long int);
    void displayMinor (int、int);
    void displayHPA449 (void);
    
    void reset_adc (void);
    void CONFIG_ADC (void);
    /* *
    /******** /
    
    /******** //*
    */
    *全局变量声明 */
    * */
    ******** /unsigned
    
    int adc_data[4]; //为转换的数据存储
    unsigned int hi_Byte、lo_Byte、dac_hi;
    int i、j、 FIFO = 4;
    /******** //*
    */
    * main()变量声明 */
    * */
    ******** /
    
    void main (void)
    {
    // int test;
    init_sys ();//初始化 MSP430
    InitializeLCD();
    clearDisplay();
    
    DisplaySpecial (SoftBaugh);
    
    while (1){
    sortMajor( adc_data[3]);
    displayMinor( 5, UL_one );
    displayMinor( 4,UL_two );
    displayMinor( 3, UR_ZERO );
    displayMinor( 2, UR_Six );
    }
    }
    
    /********* //*
    原型- init_sys */
    * */
    *!nA init_sys //
    *!la ANSI C */
    /*!PI * */
    /*!PO * */
    *!LV * */
    /*说明 //
    //*此原型初始化 MSP430F149 */
    ********* /
    void init_sys (void)
    {
    void setupXT2 (void);//本地函数原型 //
    void setupports (void);//本地函数原型 */
    
    setupXT2();
    setupports();
    
    //while (1)
    //{
    RESET_ADC();
    CONFIG_ADC();
    延迟(10);
    _EINT(); //启用中断
    //}
    timer();
    }/*********
    //*
    原型- setupXT2 */
    * */
    *!nA XT2_osc //
    *!la ANSI C */
    /*!PI * */
    /*!PO * */
    *!LV * */
    /*说明 //
    //*此原型设置 XT2振荡器并进行测试 /*
    它在继续之前已经稳定下来 */
    ********* /
    void setupXT2 (void)
    
    {
    WDTCTL = WDTPW + WDTHOLD; //停止看门狗计时器
    FLL_CTL0&=XT2OFF; //打开 XT2振荡器。
    FLL_CTL1|=SELM_XT2+SELS; //选择 XT2 osc。 原因
    // SMCLK & MCLK
    //测试示波器。 标志位
    执行{
    IFG1 &=~OFIFG; //清除 OFIFG 位
    } while (OFIFG&IFG1); //
    
    }
    
    
    /********* //*
    原型-设置端口 */
    * */
    *!NA 设置端口 //
    *!la ANSI C */
    /*!PI * */
    /*!PO * */
    *!LV * */
    /*说明 *//*
    此原型可根据需要设置 GPIO 端口*/
    ********* /
    void setupports (void)
    {
    //SetupPort1
    P1DIR = RE+RDnWR_DC_CS+CONV_CLK;
    P1SEL = CONV_CLK;
    P1OUT = RE+DC_CS;
    //SetupPort2
    P2DIR = DC_A0+DC_A1+DC_A2+DC_A3;
    P2OUT = CS;
    //SetupInterrupt
    P2IFG = INT; //清除中断标志
    P2IES = INT; //设置边沿选择
    P2IE = INT; //启用外部中断
    
    }
    
    
    /********* //*
    原型-完成 */
    * */
    *!NA 完成 //
    *!la ANSI C */
    /*!PI * */
    /*!PO * */*
    !LV I */
    /*说明 //
    //*此原型检查 URXIFG0位。 如果接收器*/
    /*仍在接收数据,程序将一直等到所有位*/
    /*都被接收到并且 URXIFG0位被置位 */
    ********* /
    void complete (void)
    {
    操作
    {
    IFG2 &=~ INT;
    }
    while (INT & IFG2);
    }
    
    /********* //*
    原型-延迟 */
    * */
    *!nA 延迟 //
    *!la ANSI C */
    /*!PI * */
    /*!PO * */*
    !LV I */
    /*说明 //
    //*此原型的延迟约为1秒 */
    ********* /
    
    空延迟(int time)
    {
    int i;
    对于(i = 0;i >时间;i++);
    }
    
    
    /********* //*
    原型-闪存 */
    * */
    *!NA 闪存 //
    *!la ANSI C */
    /*!PI * */
    /*!PO * */*
    !LV I */
    /*说明 //
    //*此原型指示程序已完成 */
    ********* /
    空显示(空)
    {
    while (1)
    {
    P1OUT |= BIT0; //设置 P1.0
    // delay();
    P1OUT &=~BIT0; //清除 P1.0
    // delay();
    }
    }
    
    /************ //*
    原型- RESET_ADC */
    * */
    /*!nA reset_adc //
    *!la ANSI C */
    /*!PI * */
    /*!PO * */*
    !LV I */
    /*说明 //
    //*此原型将重置配置寄存器 */
    ********* /
    void reset_adc (void)
    {
    //SetupPort3和6用于写入
    P3DIR = 0x0ff;
    P6DIR = 0x0ff;
    P1OUT &=~RE; // RE 低电平
    P2OUT |= CS; // DC_CS 低电平
    P1OUT &=~RDnWR; // RE 低电平
    P3OUT = 0x01; //写复位
    P6OUT = 0x04;
    P1OUT |= RDnWR; // RE 高电平
    P1OUT &=~RDnWR; // RE 低电平
    P3OUT = 0x00; //清除写操作
    P6OUT = 0x04;
    P1OUT |= RDnWR; // RE 高电平
    P2OUT &=~CS; // DC_CS 高电平
    P1OUT |= RE; // RE 高电平
    //SetupPort3和6进行读取
    P3DIR = 0x000;
    P6DIR = 0x000;
    }
    
    /********* //*
    原型- CONFIG_ADC */
    * */
    *!nA CONFIG_ADC //
    *!la ANSI C */
    /*!PI * */
    /*!PO * */*
    !LV I */
    /*说明 //
    //*此原型将重置配置寄存器 */
    ********* /
    void CONFIG_ADC (void)
    {
    //SetupPort3和6用于写入
    P3DIR = 0x0ff;
    P6DIR = 0x0ff;
    P1OUT &=~RE; // RE 低电平
    P2OUT |= CS; // DC_CS 低电平
    P1OUT &=~RDnWR; // RE 低电平
    P3OUT = 0x9A; //写复位
    P6OUT = 0x00;
    P1OUT |= RDnWR; // RE 高电平
    P1OUT &=~RDnWR; // RE 低电平
    P3OUT = 0xC2; //清除写操作
    P6OUT = 0x04;
    P1OUT |= RDnWR; // RE 高电平
    P2OUT &=~CS; // DC_CS 高电平
    P1OUT |= RE; // RE 高电平
    //SetupPort3和6进行读取
    P3DIR = 0x000;
    P6DIR = 0x000;
    }
    
    /********* //*
    原型-转换 */
    * */
    *!NA 转换 //
    *!la ANSI C */
    /*!PI * */
    /*!PO * */
    *!LV * */
    /*说明 //
    //*此原型执行 ADC 转换 */
    ********* /
    空定时器(空)
    {
    TACTL = TASSEL1 + TACLR; // SMCLK、清除 Tar
    CCR0 = 10000-1; // PWM 周期
    CCTL1 = OUTMOD_7; // CCR1复位/设置
    CCR1 = 4950; // CCR1 PWM 占空比
    TACTL |= MC0; //以向上计数模式启动 Timer_A
    }
    
    /********* //*
    原型-转换 */
    * */
    *!NA 转换 //
    *!la ANSI C */
    /*!PI * */
    /*!PO * */
    *!LV * */
    /*说明 //
    //*此原型执行 ADC 转换 */
    ********* /
    interrupt[port2_vector] void read_adc (void)
    {
    P2IFG &=~INT;
    
    对于(i=0;i<4;i++){
    P2OUT |= CS;
    LO_BYTE = P3IN;//存储低字节
    HI_byte = P6IN;//存储高位字节
    hi_Byte = hi_Byte << 8; //左移高字节8位以进行准备
    //表示第二个字节。
    ADC_DATA[i]=(hi_BYTE + lo_BYTE);
    P2OUT &=~CS;
    }
    clearDisplay();
    
    } 

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

    您好!

    我想将 TI ADC THS1260器件连接到 MCU。

    但是、 下面  连接了 THS1260的接口(μ C/31/33或 μ ②TMS320C54x 或 μ ①TMS320C30 ③ TMS320C6201)。

    我收到了使用 GPIO 模式作为 DSP 并行外部接口 MSP430器件的源代码。

    我希望在 MSP430论坛上获得有关此源代码分析的帮助。

    Q3>我无法分析源代码、其中/CS0信号在下降沿(最小值) 10ns 持续时间后再次上升。  

        您能解释一下顺序源代码(MSP430)的操作吗?

        /cfs-file/__key/communityserver-discussions-components-files/73/THS1206.zip

     

     

    我正在等待您的热情回答。

    此致、
    Jame、Shin

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

    [引用 user="Jame shin"]Q2>请解释 READ_ADC (void)函数是否使 TW (CS)=最小10ns 时序。 ?[/QUES] CS 处于低电平的时间取决于:

    •  MSP430F447的 MCLK 频率(最大值为8MHz)。
    • 编译器为 READ_ADC 函数生成的指令、这反过来取决于编译器选项中设置的优化级别。
    • CS 输出变为低电平然后变为高电平之间指令的总周期时序。

    如果  MSP430F447的最小指令周期时间为 125ns、则 满足 TW (CS)要求。

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

    Jame、您好!

    请告诉我您一方的状态、您是否仍需要此方面的支持。 非常感谢。

    此致

    Peter

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

    您好、Peter、

    是的、我需要支持。

    我在 ADC 论坛的支持下、找到了我的应用所需的 ADC 器件。

    我选择的 ADC 器件为 THS1206 (12位分辨率、4通道输入、6MSPS、并行接口)。

    我收到了源代码请求、请求源代码运行 ADC。

    但是、我收到了 MCU (MSP430F449IPZ)和 ADC (ADS8342、16位4Ch 输入、250kSPS、并行接口)运行的源代码。

    查看源代码、与引脚编号对应的引脚配置设置似乎不够。

    未分析从上一帖子链接的源代码。

    我想分析此源代码并将其迁移到 Tiva C MCU (TM4C123FH6PM)。

    我想知道链接的源代码是否编译正确、或者源代码是否缺少任何内容

    MCU 的主要特点是没有并行接口、因此我想提一下在 GPIO 模式下的位带操作设置和操作。

    此致

    Jame、Shin

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

    Jame、您好!

    很抱歉、此 MSP-forum 只能在 MSP430和 MSP432器件上为您提供帮助。 对于到 Tiva C MCU 的代码迁移、请在相应的论坛中启动一个新主题、并发布指向此主题的链接、以链接两者。

    我知道、从您的角度来看、这是一个项目、但我们一侧的 E2E 系统与产品相关、这也是因为我们的目标是允许其他用户从给定产品的类似案例中学习。 非常感谢您的理解。

    此致

    Peter

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

    你好。 Peter、

    在上一个海报中、我介绍了 MCU 的源代码(MSP430F449IPZ)。

    这就是我问 MSP430论坛的原因。

    这似乎是一个部分决定的通知。

    我再次向之前与 MSP430相关的源代码的链接地址提出顺序问题。

    Q1>在以下链接的地址的编译过程中是否存在编译错误?

    /cfs-file/__key/communityserver-discussions-components-files/73/THS1206.zip

    感谢您接受我的问题。

    此致

    Jame、Shin

    PS、 MSP430论坛是否会以线程帖子的形式为供应商提供帮助?

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

    Jame、您好!

    请考虑我们的免费 CCS IDE、它提供了一个全功能的代码开发和调试环境、其中包括一个用于检查代码编译的强大 C 编译器。 非常感谢。

    为方便起见、请在此处找到指向 CCS IDE 主页的链接。

    此致

    Peter