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.

ADC MUX

小弟初学,在28035中的关于adc的应用,adcMUX这个部分模块一般都做什么功能呢?GpioCtrlRegs.AIOMUX1.bit.AIO2 = 2;这样设置是何意?请求支援

  • 因为某些ADC的输入引脚也有IO引脚的功能,即AIO,所以可以通过AIOMUX复用寄存器来配置这个引脚是IO口功能还是ADC输入引脚。

    Eric

  • GpioCtrlRegs.AIOMUX1.bit.AIO2 = 2;    // Configure AIO2 for A2 (analog input) operation
        GpioCtrlRegs.AIOMUX1.bit.AIO4 = 2;    // Configure AIO4 for A4 (analog input) operation
        GpioCtrlRegs.AIOMUX1.bit.AIO6 = 2;    // Configure AIO6 for A6 (analog input) operation
        GpioCtrlRegs.AIOMUX1.bit.AIO10 = 2;   // Configure AIO10 for B2 (analog input) operation
        GpioCtrlRegs.AIOMUX1.bit.AIO12 = 2;   // Configure AIO12 for B4 (analog input) operation
        GpioCtrlRegs.AIOMUX1.bit.AIO14 = 2;

    这些设置的意思是2、4、6、10、12、14都为adc输入引脚吗,为何其值都为2呢?我没有找到ti相关的文档说明此设置,能否给推荐一下,谢谢

  • 我下载的28035例程关于adc采样的,DSP2803x_examples\adc_soc,我在程序中跑时,从AdcResult.ADCRESULT0得到的采样数字量与实际电压值经过

    4096*(input  Analog -0)/3.3运算得到的值不对,要小的多这是为什呢,我程序都没动,基准电压是用的内部参考:

    AdcRegs.ADCCTL1.bit.ADCBGPWD = 1; // Power ADC BG
    AdcRegs.ADCCTL1.bit.ADCREFPWD = 1; // Power reference
    AdcRegs.ADCCTL1.bit.ADCPWDN = 1; // Power ADC
    AdcRegs.ADCCTL1.bit.ADCENABLE = 1; // Enable ADC
    AdcRegs.ADCCTL1.bit.ADCREFSEL = 0; // Select interal BG

  • 这个例程中转换SOC0,SOC1,SOC2,其中SOC0的结果是要丢弃的,具体查看勘误表说明,也即是ADCRESULT0的结果要丢弃,查看ADCRESULT1,ADCRESULT2.

    Eric

  • 关于AIOMUX寄存器,要查看文档

    TMS320F2803x Piccolo System Control and
    Interrupts Reference Guide

    说明。

    这个在芯片主页中有这个用户指南。

    Eric

  • 在28035例程中,我在这将AIOMUX定义为IO功能,将IO分别加电压时,没有定义其为ADC输入引脚,为何还有正确的采样值呢?岂不是定义IO和ADC都一样了?还是说我哪个地方又没有注意到,谢谢指正!

     GpioCtrlRegs.AIOMUX1.bit.AIO2 = 0;    // Configure AIO2 for A2 (analog input) operation
        GpioCtrlRegs.AIOMUX1.bit.AIO4 = 0;    // Configure AIO4 for A4 (analog input) operation
        GpioCtrlRegs.AIOMUX1.bit.AIO6 = 0;    // Configure AIO6 for A6 (analog input) operation
        GpioCtrlRegs.AIOMUX1.bit.AIO10 = 0;   // Configure AIO10 for B2 (analog input) operation
        GpioCtrlRegs.AIOMUX1.bit.AIO12 = 0;   // Configure AIO12 for B4 (analog input) operation
        GpioCtrlRegs.AIOMUX1.bit.AIO14 = 0;   // Configure AIO14 for B6 (analog input) operation

  • 你说的采样到正确的采样值是怎么回事?你往哪个引脚输入多少伏电压,ADC结果是多少?

    在配置AIO前,要添加EALLOW;,如下

    EALLOW;

    GpioCtrlRegs.AIOMUX1.bit.AIO2 = 0;    // Configure AIO2 for A2 (analog input) operation

    ……

    EDIS;

    Eric

  • 向28035的80个引脚的第16个引脚ADCINA2/COMP1A/AIO2外加1v的模拟量,经过AdcResult.ADCRESULT0数字量为1240,所以说是正确的,

    AdcRegs.ADCSOC0CTL.bit.CHSEL = 2; //set SOC0 channel select to ADCINA4
    AdcRegs.ADCSOC1CTL.bit.CHSEL = 2;

    我疑问是无论GpioCtrlRegs.AIOMUX1.bit.AIO2 = 0;还是GpioCtrlRegs.AIOMUX1.bit.AIO2 = 2;采样结果都正确呢,我配置成GpioCtrlRegs.AIOMUX1.bit.AIO2 = 0;即将AIOMUX1配置成IO口功能了,结果为何还能采样。这是我的疑问,请帮我解惑!谢谢

  • 刚在system control user guide 中确认了一下,当AIO功能使能的时候,并不会禁止输入到ADC的通过,只不过AIO模块能够去控制这个IO口。

    Eric

  • 好的,谢谢您的耐心解答