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.
工具/软件:
您好、
我正在使用采用 VQFN32封装的 MSPM0G1507、并根据 TI 文档从头开始编写了一个简单示例。
我之所以不使用 DriverLib、是因为我无法确定如何为它的用例配置双通道 ADC 设置、因此我决定手动实现所有功能。
但是、我目前无法编译代码。 我将使用 CCS 12.1.1.00008 (基于20.1.1.8)和 MSPM0 SDK 2.04。 所有包含路径似乎都已正确设置、但ADC
DMA
SYSCTL
编译过程中不能识别诸如、或之类的标识符。
您能否给出建议、说明如何正确编译和运行这样的裸机工程?
提前感谢!
#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