Thread 中讨论的其他器件:MSPM0G3507、 SysConfig
工具/软件:
大家好、TI、想看看您有适用于 MSPM0G3507的寄存器级代码簿。到目前为止、我已经完成了 GPIO、UART 和中断设计、但要获取相关参考资料目前很难在 ADC 上工作、我感觉缺少一些内容
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.
工具/软件:
大家好、TI、想看看您有适用于 MSPM0G3507的寄存器级代码簿。到目前为止、我已经完成了 GPIO、UART 和中断设计、但要获取相关参考资料目前很难在 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);
}
}
需要为 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 中断处理程序。