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.

[参考译文] MSP432P401R:如何设置多通道 DMA?

Guru**** 2536720 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/611210/msp432p401r-how-can-i-set-up-multi-channel-dma

器件型号:MSP432P401R
 
/*
只要序列完成、就会触发此中断
*
//
__attribute__((ramfunc)
void ADC14_IRQHandler (void)
{
uint64_t status;
//打开 LED

//以12kHz 频率切换,类似于6kHz 时钟
// map_GPIO_setOutputHighOnPin (GPIO_PORT_P1、


clearNVERT= 0);clearC14_InterruptStatus = ADC14_0 (GPIO0_Interrupt0);_Interrupt0 = ADC14
)
if (status & ADC_INT8)
{
map_ADC14_disableConversion ();
//在 DMA 通道0上强制执行软件传输*/
map_dma_requestSoftwareTransfer (0);
//在 DMA 通道1上强制执行软件传输*/
map_dma_requestSoftwareTransfer (1);
//


在 DMA 通道2上强制执行软件传输*

;// enable_pot_p1 (0
~);
// enable_pot_enable_pio_transfer 1);// enable_enablepio_enable_enable_p1 (0);// enable_enable_enablepio_enable_enable_p1 (1);// enable_enable_enable_enablep1)

/* ADC14 MEM6的完成中断*/
__attribute__((ramfunc)
void DMA_INT1_IRQHandler (void)
{
//使用 DMA 的交替模式在主缓冲器和备用缓冲器之间切换*/
if (DMA_getChannelAttribute (0)& UDMA_ATT_ALTSELPRI)
| UCC_0



| UCC_0 | UCC_0 | UCC_0 |设置为 DMA_DR_0 | ADCC_0 | UCC_0 | UCC_0 | UCC_ADCC_0
number_of _samples);
}
否则
{
dma_setChannelControl (Udma_alt_select | dma_ch0_RESERVED0、
Udma_size_16 | Udma_SRC_INC_none | Udma_dst_16 | Udma_ara_1);
dma_setChannelTransfer (Udma_size_16)| Udma_void
、Udma_rt_0*、Udma_tma_tma_tma_em_bufferp0
number_of_samples);
}
//以512度量值进行切换
map_GPIO_toggleOutputOnPin (GPIO_port_P2、GPIO_PIN0);
}

// ADC14 MEM7的完成中断*/
_属性_(ramfunc)
void dma_int2_IRQHandler (




INC)|//用 void dma_ch_r_1和 uedma_tr_u_u1 (tdma_delt_ta_ta_tdma_tag_t_r_ma_tas_1)| void transdma_dma_en_r_r_r_r_r_tma_r_tma_r_tma_tma_r_tma_r_tag_r_r_tma_r_tma_ench_r_tma_tma_1 (void 1)| tma_tas_

DMA_setChannelTransfer (UDMA_PRI_SELECT | DMA_CH1_RESERVED0、
UDMA_MODE_pingpong、(void*)&ADC14->MEM[7]、
prim_buffer1、 Number of _samples);
}
否则
{
dma_setChannelControl (Udma_ALT_SELECT | dma_CH1_RESERVED0、
Udma_SIZE_16 | Udma_SRC_INC_NONE | Udma_DST_INC_16 | Udma_ARB_1);
dma_setChannelTransfer (Udma_size_16)(Udma_EDB_EDB_1
、Udma_EDB_1)| Udma_EDB_EDB_1和 UESEDB_0
number_of_samples);
}
//以512度量值进行切换
map_GPIO_toggleOutputOnPin (GPIO_PORT_P2、GPIO_PIN0);
}

// ADC14 MEM8的完成中断*/
_ attribute _(ramfunc)
void dma_int3_IRQHandler (




PRI)|// void dma_delt_t_ta_ta_tdma_r_ench_r2 | tdma_ma_r_uench_ma_ma_tas_r_1 (void 1)| tas_r_r_tas_r_tas_r_r_tas_r_r_tas_r_r_r_tas_t_r_tase_t_tas_r_r_r_tas_t_t_r_tase_tas_t_t_r_tase_

DMA_setChannelTransfer (UDMA_PRI_SELECT | DMA_CH2_RESERVED0、
UDMA_MODE_pingpong、(void*)&ADC14->MEM[8]、
prim_buffer2、 number_for_samples);
switch_data = 1;
}
否则
{
dma_setChannelControl (Udma_alt_select | dma_ch2_RESERVED0、
Udma_size_16 | Udma_SRC_INC_NONE | Udma_dst_INC_16 | Udma_arC_1);em_setChannel_16 |
Udma_transfer_udma_e*8
(Udma_udma_in_udma_transfer_udma_in_transfer_udma_in_udma_in_in_transfer_udma_udma_in_in_in_in_in_in_in
number_of _samples);
switch_data = 0;
}
//以512个度量值切换 adc8
map_GPIO_toggleOutputOnPin (GPIO_PORT_P2、GPIO_PIN0);
//map_Interrupt_disableSlepOnIsrExit ();
SCB->SCR &&~SCB_SCR_SLEEPDEOS;
} 

遗憾的是、该示例未显示如何初始化和设置上述所有内容;是否有人可能会显示初始化各种通道和触发器的顶部位以及自动扫描模式、以使其实际运行? 我只是尝试在3个数据通道中读取数据、以便我可以对它们进行比较、并且已经有相当长的一段时间了、我一直在与这个示例进行拆裂。

此致、

Julian