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.

[参考译文] LP-MSPM0G3507:寄存器级

Guru**** 2398695 points
Other Parts Discussed in Thread: MSPM0G3507, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1491786/lp-mspm0g3507-register-level

器件型号:LP-MSPM0G3507
Thread 中讨论的其他器件:MSPM0G3507SysConfig

工具/软件:

大家好、TI、想看看您有适用于 MSPM0G3507的寄存器级代码簿。到目前为止、我已经完成了 GPIO、UART 和中断设计、但要获取相关参考资料目前很难在 ADC 上工作、我感觉缺少一些内容

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

    你好 Ruben!

    感谢您联系我们!

    您目前在使用 ADC 时遇到了什么问题?

    马修

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

    未获取数据、不确定是否设置正确

    #include "ti/devices/msp/m0p/mspm0g350x.h"
    #include "ti/driverlib/dl_adc12.h"
    #include "ti/driverlib/dl_common.h" // For DL_Common_delayCycles function
    #include "ti_msp_dl_config.h"
    #include "IndexMacros.h"
    #include "stdio.h"
    uint16_t threshold = 1;//16384 / 2; // VCC/2 or 1.15V
    int i=0;
    //data = (V * 4095) / 3.3V
    int main (void)
    {
      //IOMUX->SECCFG.PINCM[58] = Ox00040081;
    
      ADC0->ULLMEM.GPRCM.RSTCTL = 0xB1000003; // reset
      ADC0->ULLMEM.GPRCM.PWREN = 0x26000001;  // activate
      DL_Common_delayCycles(24);              // wait
    
      ADC0->ULLMEM.GPRCM.CLKCFG = 0xA9000000; // ULPCLK
      ADC0->ULLMEM.CLKFREQ = 7;               // 40-48 MHz
      ADC0->ULLMEM.CTL0 = 0x03010000;         // divide by 8
      ADC0->ULLMEM.CTL1 = 0x00000000;         // mode
      ADC0->ULLMEM.CTL2 = 0x00000000;         // MEMRES
      ADC0->ULLMEM.MEMCTL[0] = 1;             // channel 1 is PA26
      ADC0->ULLMEM.SCOMP0 = 0;                // 8 sample clocks
      //ADC0->ULLMEM.CPU_INT.IMASK = 0;         // no interrupt
    
       ADC0->ULLMEM.CTL0 |= 0x00000001;             //  enable conversions
       ADC0->ULLMEM.CTL1 |= 0x00000100;             //  start ADC
       uint32_t volatile delay=ADC0->ULLMEM.STATUS; //  time to let ADC start
    
    NVIC->IP[1] = 1<<4; // ADC0 is IRQ 4
    NVIC->ISER[0] = 1<<4; 
    NVIC->IP [1] = (NVIC->IP [1] & (~0xFF000000)) | (2<<6) ;  
    __enable_irq();
    
      while(1)
      {
      // printf("waiting\n");
      __WFI();
      }
             
    }
    void ADC0_IRQHandler(void)
    {
        uint16_t adcRaw = ADC0->ULLMEM.MEMRES[0];
    
        if (adcRaw > threshold) // Vcc/2 -> 3.04/2
        {
          i=i+1;
          printf("%d \n", i);
        }
    
    }
    
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果有人能帮忙、任何意见都将令人惊叹

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

    您仍然活跃?

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

    我尚未解码这些位(它们确实都有 CMSIS 名称)、但要缩小范围:

    您如何判断您没有获得数据? (ISR 中的断点? MEMRES== 0? 故障?) 什么元件连接到 ADC 输入?

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

    我有一个简单的红外传感器、如果我的手指通过它、就会触发

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

    你怎么知道你没有得到数据?

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

    尊敬的 Ruben:

    建议您通过导入 SDK 示例并通过 SysConfig 进行配置来配置 ADC、SysConfig 是一款用于生成代码的图形工具。 如果要构建寄存器级工程、只需按照生成的代码操作、然后将寄存器级代码复制到工程中。

    至于附加的 ADC 代码、您是否启用了 ADC 中断? 例如

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

    示波器  

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

    从未尝试过这种方法、因为在 msp432中我们也没有这样做  

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

    需要为 MSPM0启用中断。 请参阅 MSPM0示例的 ADC 初始过程  ADC12_SEQUENCE_CONVERSION

        DL_ADC12_setClockConfig(ADC12_0_INST, (DL_ADC12_ClockConfig *) &gADC12_0ClockConfig);
    
        DL_ADC12_initSeqSample(ADC12_0_INST,
            DL_ADC12_REPEAT_MODE_DISABLED, DL_ADC12_SAMPLING_SOURCE_AUTO, DL_ADC12_TRIG_SRC_SOFTWARE,
            DL_ADC12_SEQ_START_ADDR_00, DL_ADC12_SEQ_END_ADDR_03, DL_ADC12_SAMP_CONV_RES_12_BIT,
            DL_ADC12_SAMP_CONV_DATA_FORMAT_UNSIGNED);
        DL_ADC12_configConversionMem(ADC12_0_INST, ADC12_0_ADCMEM_0,
            DL_ADC12_INPUT_CHAN_2, DL_ADC12_REFERENCE_VOLTAGE_VDDA, DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0, DL_ADC12_AVERAGING_MODE_DISABLED,
            DL_ADC12_BURN_OUT_SOURCE_DISABLED, DL_ADC12_TRIGGER_MODE_AUTO_NEXT, DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
        DL_ADC12_configConversionMem(ADC12_0_INST, ADC12_0_ADCMEM_1,
            DL_ADC12_INPUT_CHAN_0, DL_ADC12_REFERENCE_VOLTAGE_VDDA, DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0, DL_ADC12_AVERAGING_MODE_DISABLED,
            DL_ADC12_BURN_OUT_SOURCE_DISABLED, DL_ADC12_TRIGGER_MODE_AUTO_NEXT, DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
        DL_ADC12_configConversionMem(ADC12_0_INST, ADC12_0_ADCMEM_2,
            DL_ADC12_INPUT_CHAN_7, DL_ADC12_REFERENCE_VOLTAGE_VDDA, DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0, DL_ADC12_AVERAGING_MODE_DISABLED,
            DL_ADC12_BURN_OUT_SOURCE_DISABLED, DL_ADC12_TRIGGER_MODE_AUTO_NEXT, DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
        DL_ADC12_configConversionMem(ADC12_0_INST, ADC12_0_ADCMEM_3,
            DL_ADC12_INPUT_CHAN_3, DL_ADC12_REFERENCE_VOLTAGE_VDDA, DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0, DL_ADC12_AVERAGING_MODE_DISABLED,
            DL_ADC12_BURN_OUT_SOURCE_DISABLED, DL_ADC12_TRIGGER_MODE_AUTO_NEXT, DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
        DL_ADC12_setPowerDownMode(ADC12_0_INST,DL_ADC12_POWER_DOWN_MODE_MANUAL);
        DL_ADC12_setSampleTime0(ADC12_0_INST,160);
        /* Enable ADC12 interrupt */
        DL_ADC12_clearInterruptStatus(ADC12_0_INST,(DL_ADC12_INTERRUPT_MEM3_RESULT_LOADED));
        DL_ADC12_enableInterrupt(ADC12_0_INST,(DL_ADC12_INTERRUPT_MEM3_RESULT_LOADED));
        DL_ADC12_enableConversions(ADC12_0_INST);

    在这种情况下、将启用 ADC 结果加载中断、 以便在加载 ADC 结果时可以输入 ADC 中断处理程序。