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.

[参考译文] MSPM0G1507:CCS+MSPM0_SDK 上未解析的 DMA/ADC/SYSCTL 名称

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

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1503094/mspm0g1507-unresolved-dma-adc-sysctl-names-on-ccs-mspm0_sdk

部件号:MSPM0G1507
Thread 中讨论的其他器件: SysConfigMSPM0G3507

工具/软件:

您好、

我正在使用采用 VQFN32封装的 MSPM0G1507、并根据 TI 文档从头开始编写了一个简单示例。

我之所以不使用 DriverLib、是因为我无法确定如何为它的用例配置双通道 ADC 设置、因此我决定手动实现所有功能。

但是、我目前无法编译代码。 我将使用 CCS 12.1.1.00008 (基于20.1.1.8)和 MSPM0 SDK 2.04。 所有包含路径似乎都已正确设置、但ADCDMASYSCTL编译过程中不能识别诸如、或之类的标识符。

您能否给出建议、说明如何正确编译和运行这样的裸机工程?

提前感谢!

#include <ti/devices/msp/m0p/mspm0g150x.h>

#define ADC_LEN 640

uint16_t adc_buf_ch0[2][ADC_LEN];
uint16_t adc_buf_ch1[2][ADC_LEN];
volatile int sw = 0;

void DMA_IRQHandler(void)
{
    if (DMA->IRQSTATUS0 & DMA_IRQSTATUS0_DMA_CH0_MASK) {
        DMA->IRQSTATUS0 = DMA_IRQSTATUS0_DMA_CH0_MASK;
        sw ^= 1;
        DMA_CH0_CTL &= ~DMA_CH0_CTL_ENABLE_MASK;
        DMA_CH0_DSTADDR = (uint32_t)&adc_buf_ch0[sw][0];
        DMA_CH0_CTL |= DMA_CH0_CTL_ENABLE_MASK;
    }
    if (DMA->IRQSTATUS0 & DMA_IRQSTATUS0_DMA_CH1_MASK) {
        DMA->IRQSTATUS0 = DMA_IRQSTATUS0_DMA_CH1_MASK;
        DMA_CH1_CTL &= ~DMA_CH1_CTL_ENABLE_MASK;
        DMA_CH1_DSTADDR = (uint32_t)&adc_buf_ch1[sw][0];
        DMA_CH1_CTL |= DMA_CH1_CTL_ENABLE_MASK;
    }
}

void sysclk_on(void)
{
    SYSCTL->HFXTCR = SYSCTL_HFXTCR_ENABLE_MASK | SYSCTL_HFXTCR_HFXTFREQ_SEL_20MHZ;
    while (!(SYSCTL->STATUS & SYSCTL_STATUS_HFXT_GOOD_MASK));
    SYSCTL->CLKCFG = (SYSCTL->CLKCFG & ~SYSCTL_CLKCFG_HSCLK_SEL_MASK) |
                     (SYSCTL_CLKCFG_HSCLK_SEL_HFXT << SYSCTL_CLKCFG_HSCLK_SEL_OFS);
}

void sysclk_off(void)
{
    SYSCTL->HFXTCR &= ~SYSCTL_HFXTCR_ENABLE_MASK;
    SYSCTL->CLKCFG = (SYSCTL->CLKCFG & ~SYSCTL_CLKCFG_HSCLK_SEL_MASK) |
                     (SYSCTL_CLKCFG_HSCLK_SEL_HFCLK << SYSCTL_CLKCFG_HSCLK_SEL_OFS);
}

void adc_ini(void)
{
    ADC0->CTL0 = ADC12_CTL0_SAMPLING_MODE_SEQ | ADC12_CTL0_REPEAT_MODE;
    ADC0->STEPENABLE = 0x8F; // A0_0, A0_1, A0_2, A0_3, A0_7
    ADC0->FIFOCTL = ADC12_FIFOCTL_THRESHOLD_1;
    ADC0->DMACTL = ADC12_DMACTL_ENABLE_MASK;
    ADC0->CTL1 |= ADC12_CTL1_CONVERSION_ENABLE_MASK;
    ADC0->SWTRIG = ADC12_SWTRIG_START_MASK;

    ADC1->CTL0 = ADC12_CTL0_SAMPLING_MODE_SEQ | ADC12_CTL0_REPEAT_MODE;
    ADC1->STEPENABLE = 0x8F; // A1_0, A1_1, A1_2, A1_3, A1_7
    ADC1->FIFOCTL = ADC12_FIFOCTL_THRESHOLD_1;
    ADC1->DMACTL = ADC12_DMACTL_ENABLE_MASK;
    ADC1->CTL1 |= ADC12_CTL1_CONVERSION_ENABLE_MASK;
    ADC1->SWTRIG = ADC12_SWTRIG_START_MASK;

    DMA_CH0_SRCADDR = (uint32_t)&ADC0->FIFODATA;
    DMA_CH0_DSTADDR = (uint32_t)&adc_buf_ch0[sw][0];
    DMA_CH0_XFER_SIZE = ADC_LEN;
    DMA_CH0_CTL = DMA_CH0_CTL_DST_INC_MASK | DMA_CH0_CTL_SRC_FIXED_MASK | DMA_CH0_CTL_ENABLE_MASK;

    DMA_CH1_SRCADDR = (uint32_t)&ADC1->FIFODATA;
    DMA_CH1_DSTADDR = (uint32_t)&adc_buf_ch1[sw][0];
    DMA_CH1_XFER_SIZE = ADC_LEN;
    DMA_CH1_CTL = DMA_CH1_CTL_DST_INC_MASK | DMA_CH1_CTL_SRC_FIXED_MASK | DMA_CH1_CTL_ENABLE_MASK;

    NVIC_EnableIRQ(DMA_INT_IRQn);
}

void adc_off(void)
{
    DMA_CH0_CTL &= ~DMA_CH0_CTL_ENABLE_MASK;
    DMA_CH1_CTL &= ~DMA_CH1_CTL_ENABLE_MASK;

    ADC0->CTL1 &= ~ADC12_CTL1_CONVERSION_ENABLE_MASK;
    ADC1->CTL1 &= ~ADC12_CTL1_CONVERSION_ENABLE_MASK;

    ADC0->CTL0 = 0;
    ADC1->CTL0 = 0;
}


int main()
{ SYSCFG_DL_init();
  adc_ini();
  while(1)
  { if(sw) /* do some work */; else /* do some work*/;
  }
}

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

    您好、llgiz、

    此处有两项建议:

    [报价 userid="159413" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1503094/mspm0g1507-unresolved-dma-adc-sysctl-names-on-ccs-mspm0_sdk ]我将使用 CCS 12.1.1.00008 (基于20.1.1.8)和 MSPM0 SDK 2.04。

    不确定 CCS 12.1.1.8是什么、请至少使用 CCS 12.7版本。

    junjie Zhang 说:
    所以我决定手动实现所有内容。

    在 SDK 中使用以下特征、然后手动修改:

    然后、您可以在没有 SysConfig 文件的情况下添加自定义代码。

    B.R.

    Sal

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

    您好、Sal、

    感谢您的回答。 实际上、CCS 的值是20.1.1、我使用了 GPT 来改进我的措辞、它将20.1.1更改为12.1.1 -抱歉!!

    我检查了您的建议

    mspm0_sdk_2_04_00_06/examples/nortos/LP_MSPM0G3507/driverlib/empty_non_sysconfig/empty_non_sysconfig.c

    这正是我使用的起点。

    任何进一步的建议都是非常可取的。

    此致、

    Ilgis

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

    您好、llgiz、

    您共享的代码不是用于 MSPM0、它来自其他微控制器。  以 DMA 为例、外设寄存器中没有 DMA->IRQSTATUS0。 DMA 寄存器支持的内容如下:

    junjie Zhang 说:
    您能建议如何正确编译和运行这样的裸机工程吗?

    您应该使用提供的寄存器映射和变量来配置它。

    B.R.

    Sal