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:性能问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/705559/msp432p401r-performance-issue

器件型号:MSP432P401R

您好!

我使用 MSP432从 ADS131A02获取48kHz 样本。

问题是 MSP432失去了一些中断、因此反应速度不够快。

这就是我要做的:通过 SPI 获取48kHz 样本并通过 UART 将其发送到 PC (FDTI 芯片)

因此、问题在于 MSP432接收和发送样本的速度太慢:

以下是我的代码:

/*
main.c
*/
#include 
#include 
#include 
#include 
#include 
#include "ADS131A02.h"
#include "UART.h"
#define RX_TAGs 9
#define TX_TAGs 7

Timer_A_PWMConfig pwmConfig =
{
Timer_A_CLOCKSOURCE_SMCLK、
Timer_A_CLOCKSOURCE_DEVIDER_1、//8MHz = Timer_A_CLOCKSOURCE_DEVIDER_3 4MHz = Timer_A_CLOCKSOURCE_DEVIDER_6 2MHz = Timer_A_CLOCKSOURCE_DEVIDER_12
2、
Timer_A_CAPTURECOMPARE 寄存器_1、
Timer_A_OUTPUTMODE_TOGGLE_SET、
1
};
Timer_A_PWMConfig pwmConfig1 =
{
Timer_A_CLOCKSOURCE_SMCLK、
Timer_A_CLOCKSOURCE_DEVIDER_1、//8MHz = Timer_A_CLOCKSOURCE_DEVIDER_3 4MHz = Timer_A_CLOCKSOURCE_DEVIDER_6 2MHz = Timer_A_CLOCKSOURCE_DEVIDER_12
1、
Timer_A_CAPTURECOMPARE 寄存器_1、
Timer_A_OUTPUTMODE_TOGGLE_RESET、//TIMER_A_OUTPUTMODE_TOGGLE、
1
};


void main (void)
{
/*暂停看门狗计时器*/
MAP_WDT_A_HOLDTimer();

GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_PJ、GPIO_PIN2 | GPIO_PIN3、GPIO_PRIMARY_MODULE_Function);
cs_setExternalClockSourceFrequency (32768、48000000);
PCM_setCoreVoltageLevel (PCM_VCORE1);
FlashCtl_setWaitState (FLASH_BANK0、2);
FlashCtl_setWaitState (FLASH_BANK1、2);
CS_startHFXT (false);

CS_initClockSignal (CS_MCLK、CS_HFXTCLK_select、CS_Clock_divider);
CS_initClockSignal (CS_SMCLK、CS_HFXTCLK_select、CS_clock_divider);// MHz

/*将 GPIO2.4配置为 PWM 的外设输出*/
MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P2、GPIO_PIN4、GPIO_PRIMARY_MODULE_Function);
MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P5、GPIO_PIN6、GPIO_PRIMARY_MODULE_Function);

/*配置 Timer_A */
MAP_Timer_A_generatePWM (TIMER_A0_BASE、&pwmConfig);
MAP_Timer_A_generatePWM (TIMER_A2_base、&pwmConfig1);
/*加电板*/
MAP_GPIO_setAsOutputPin (GPIO_PORT_P2、GPIO_PIN7);
MAP_GPIO_setOutputHighOnPin (GPIO_PORT_P2、GPIO_PIN7);

ADS131A02_SPI_Setup();
ADS131A02_start();
UART_INIT_Communication ();

while (1)
{
MAP_PCM_gotoLPM0 ();
}
}

//*
ADS131A02.c
*/
#include "ADS131A02.h"
#include "UART.h"
#include 
#include 
#include 


/* DMA 控制表*/
/* DMA 控制表*/

#pragma DATA_ALIGN (controlTable、256)
uint8_t controlTable[256];

uint8_t DMA_recBuffer[9];
uint8_t DMA_sendBuffer[9];
int count_value=0;
uint8_t DATA_ARRAT[9]={0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00};
int adc_value=0;


#define DMATX dma_ch2_EUSCIB1TX0
#define DMARX void CH3_SC0




= 0;int adc_valuel1通道#define DMARTX2 DMARTX2 #define 通道#define DMARTX2 (void)#define DMARTX2通道#define DMARTX2通道#define 通道#define DMARTX2 (void 3

switch_data=0;


GPIO_setAsOutputPin (GPIO_PORT_P3、GPIO_PIN0);
GPIO_setAsOutputPin (GPIO_PORT_P3、GPIO_PIN6);

GPIO_setAsInputPin (GPIO_PORT_P3、GPIO_PIN2);

GPIO_setOutputHighOnPin (GPIO_PORT_P3、GPIO_PIN0); // CS 禁用
GPIO_setOutputLowOnPin (GPIO_PORT_P3、GPIO_PIN6); //复位使能

// SPI 主配置参数
const eUSCI_SPI_MasterConfig spiMasterConfig =
{
EUSCI_A_SPI_CLOCKSOURCE_SMCLK、 // SMCLK 时钟源
48000000、 // SMCLK = HFXT = 48Mhz
24000000、 // SPICLK =12000000
EUSCI_A_SPI_MSB_FIRST、 // MSB 优先
EUSCI_SPI_PHASE_DATA_Changed_ONFIRST_captured_on_next、 //相位 EUSCI_SPI_PHASE_DATA_Changed_ONFIRST_Capted_on_next / EUSCI_SPI_PHASE_DATA_Capted_ONFIRST_Changed_on_next
EUSCI_A_SPI_CLOCKPOLARITY_INACT_LOW、 //高极性
EUSCI_A_SPI_3引脚

};


GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P6、GPIO_PIN3 | GPIO_PIN4 | GPIO_PIN5、GPIO_PRIMARY_MODULE_FUNCTION);

/*在4线主控模式下配置 SPI */
SPI_initMaster (EUSCI_B1_base、&spiMasterConfig);
SPI_enableModule (EUSCI_B1_BASE);

/*启用中断*/
GPIO_clearInterruptFlag (GPIO_PORT_P3、GPIO_PIN2);
GPIO_enableInterrupt (GPIO_PORT_P3、GPIO_PIN2);
GPIO_interruptEdgeSelect (GPIO_PORT_P3、GPIO_PIN2、GPIO_HIGH_TO_LOW_TRANSITION);//


SPI_clearInterruptFlag (eUSCI_B1_base、eUSCI_B_SPI_Transmit _interrupt);
}
void ADS131A02_CS_Disable (void)
{
GPIO_setOutputHighOnPin (GPIO_PORT_P3、GPIO_PIN0); // CS Disable
}
void ADS131A02_CS_Enable (void)
{
GPIO_setOutputLowOnPin (GPIO_PORT_P3、GPIO_PIN0); // CS Enable
}

void write_Command (uint16_t ADSregister)
{
uint8_t valueMSB=(ADSregister>>8)&0xFF;
uint8_t valueLSB=(ADSregister)&0xFF;
ADS131A02_CS_Enable();
_DELAY_CYCLES (10);
eUSCI_A_SPI_transmitData (eUSCI_B1_base、valueMSB);
EUSCI_A_SPI_transmitData (EUSCI_B1_base、valueLSB);
// EUSCI_A_SPI_transmitData (EUSCI_B1_base、0x00);

ADS131A02_CS_Disable ();
}
void write_register (uint8_t ADSregister、uint8_t ADSregisterValue)
{
ADS131A02_CS_Enable();
_DELAY_CYCLES (10);

EUSCI_A_SPI_transmitData (EUSCI_B1_BASE、(0x40 | ADSregister));
EUSCI_A_SPI_transmitData (EUSCI_B1_base、ADSregisterValue);
// EUSCI_A_SPI_transmitData (EUSCI_B1_base、0x00);

ADS131A02_CS_Disable ();
}
uint16_t read_register (uint8_t ADSregister)
{
uint16_t ret=0;
ADS131A02_CS_Enable();
EUSCI_A_SPI_transmitData (EUSCI_B1_BASE、(0x20 | ADSregister));
RET=EUSCI_A_SPI_receiveData (EUSCI_B1_BASE);
EUSCI_A_SPI_transmitData (EUSCI_B1_BASE、0x00);
RET = RET<<8;
RET=ret | EUSCI_A_SPI_receiveData (EUSCI_B1_BASE);
///EUSCI_A_SPI_transmitData (EUSCI_B1_BASE、0x00);

ADS131A02_CS_Disable ();
return;
}
void ADS131A02_start (void)
{
GPIO_setOutputLowOnPin (GPIO_PORT_P3、GPIO_PIN6); //重置
_DELAY_CYCLES (240000);
GPIO_setOutputHighOnPin (GPIO_PORT_P3、GPIO_PIN6); //重置禁用
_DELAY_CYCLES (240000);
_DELAY_CYCLES (240000);
while (1)//(GPIO_getInputPinValue (GPIO_PORT_P7、GPIO_PIN0)!=0)
{
//等待,直到准备就绪
WRITE_COMMAND (0x0000);
WRITE_COMMAND (UNLOCK);//解锁寄存器
uint16_t myValue=Read_register (REG_STAT_1);
if (myValue!= 0xFF02)
中断;
}

WRITE_REGISTER (REG_CLK1、REG_CLK1_VALUE);//设置 CLK1
WRITE_REGISTER (REG_CLK2、REG_CLK2_VALUE);//设置 CLK2
WRITE_register (REG_A_SYS_CFG、REG_A_SYS_CFG_VALUE);//设置 CLK2
WRITE_REGISTER (REG_ADC1、REG_ADC1_VALUE);//增益 ADC
WRITE_REGISTER (REG_ADC2、REG_ADC2_VALUE);//增益 ADC
WRITE_REGISTER_ADC_ENA、REG_ADC_ENA_VALUE);// Enbale ADC
//uint8_t myValue=Read_register (REG_STAT_1);
WRITE_COMMAND (WAKEUP);//唤醒 ADC
WRITE_COMMAND (LOCK);//锁定寄存器

ADS131A02_DMASetup();
}
void ADS131A02_data (void)
{
//读取值
}

void ADS131A02_DMASetup (void)
{
//将 DMA 分配给 SPI 通道
DMA_enableModule();
DMA_setControlBase (controlTable);

DMA_assignChannel (DMATX);
DMA_assignChannel (DMARX);

//禁用通道属性
dma_disableChannelAttribute (DMATX、Udma_attr_ALTSELECT | Udma_attr_USEBURST | Udma_attr_high_priority | Udma_attr_REQMASK);
dma_disableChannelAttribute (DMARX、Udma_attr_ALTSELECT | Udma_attr_USEBURST | Udma_attr_high_priority | Udma_attr_REQMASK);

//设置 TX 传输特性和缓冲区
DMA_setChannelControl (DMATX | UDMA_PRI_SELECT、UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_NONE | UDMA_ARB_1);
DMA_setChannelTransfer (DMATX | UDMA_PRI_SELECT、UDMA_MODE_BASIC、DATA_ARRAY、(void *) MAP_SPI_getTransmitBufferAddressForDMA (EUSCI_B1_BASE)、6);

DMA_setChannelControl (DMARX | UDMA_PRI_SELECT、UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_8 | UDMA_ARB_1);
DMA_setChannelTransfer (DMARX | UDMA_PRI_SELECT、UDMA_MODE_BASIC、(void *) MAP_SPI_getReceiveBufferAddressForDMA (EUSCI_B1_BASE)、DATA_ARRAY1、SIZE 缓冲区地址);

DMA_enableChannel (DMARX_Channel);

DMA_assignInterrupt (DMA_INT1、DMATX_Channel);
DMA_clearInterruptFlag (INT_DMA_INT1);
INTERRUPT_enableInterrupt (DMA_INT1);

DMA_assignInterrupt (DMA_INT2、DMARX_Channel);
DMA_clearInterruptFlag (INT_DMA_INT2);
INTERRUPT_enableInterrupt (DMA_INT2);

INTERRUPT_enableInterrupt (INT_PORT3);
interrupt_enableMaster();
}

void dma_int2_IRQHandler (void)
{
ADS131A02_CS_Disable ();
DMA_clearInterruptFlag (INT_DMA_INT2);

DMA_setChannelControl (DMARX | UDMA_PRI_SELECT、UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_8 | UDMA_ARB_1);
DMA_setChannelTransfer (DMARX | UDMA_PRI_SELECT、UDMA_MODE_BASIC、(void *) SPI_getReceiveBufferAddressForDMA (EUSCI_B1_BASE)、DATA_ARRAY1、SIZE、缓冲区接收器_TX);
DMA_enableChannel (DMARX_Channel);

if (Flag_UART==1)
{
memcpy (zUI8_buff TX、data_array1、sizeof (data_array1[0])* size_buff TX);
DMA_setChannelControl (UDMA_PRI_SELECT | DMA_CH0_EUSCIA0TX、UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_NONE | UDMA_ARB_1);
DMA_setChannelTransfer (UDMA_PRI_SELECT | DMA_CH0_EUSCIA0TX、UDMA_MODE_BASIC、zUI8_buff_TX、(void*) UART_getTransmitBufferAddressForDMA (EUSCI_A0_BASE)、Size_buff_TX);
DMA_enableChannel (0);
}

}
void dma_int1_IRQHandler (void)
{
DMA_clearInterruptFlag (INT_DMA_INT1);
ADS131A02_CS_Disable ();

}
void PORT3_IRQHandler (void)
{
UINT_fast16_t status = GPIO_getEnabledInterruptStatus (GPIO_PORT_P3);
GPIO_clearInterruptFlag (GPIO_PORT_P3、状态);

IF (STATUS & GPIO_PIN2)
{
GPIO_clearInterruptFlag (GPIO_PORT_P3、GPIO_PIN2);
ADS131A02_CS_Enable();
DMA_SPI_TX();
}
}

void dma_spi_tx (void)
{
//设置 TX 传输特性和缓冲区
DMA_setChannelControl (DMATX | UDMA_PRI_SELECT、UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_NONE | UDMA_ARB_1);
DMA_setChannelTransfer (DMATX | UDMA_PRI_SELECT、UDMA_MODE_BASIC、DATA_ARRAY、(void *) SPI_getTransmitBufferAddressForDMA (EUSCI_B1_BASE)、6);
DMA_enableChannel (DMATX_Channel);
}

//
* UART.c
*/
#include "UART.h"
#include 
#include 
#include 


extern char receive_uart[100]={};
void UART_DMASetup (void);
void UART_Send_out (char * read_buf);
uint8_t BufferRad[2]={};

#define zCHAN_DMA_UART_TX DMA_CHANGE_0

uint8_t wert_inc=0;uart_uart_uart_uart_icrou_icrou_ics/uart_uart_icrou_icrou_


// DMA 控制表
//*********
#ifdef ewarm
#pragma DATA_alignment=1024
#else
#pragma DATA_ALIGN (controlTable、1024)
#endif
uint8_t controlTable[1024];


//*********
//
// 115200波特
率//software-dl.ti.com/.../index.html
//*********
const eUSCI_UART_Config uartConfig =
{
EUSCI_A_UART_CLOCKSOURCE_SMCLK、 // SMCLK 时钟源
26、 // BRDIV = 26
0、 // UCxBRF = 0
111、 // UCxBRS = 111
EUSCI_A_UART_NO_奇 偶校验、 //无奇偶校验
EUSCI_A_UART_LSB_FIRST、 // LSB 优先
EUSCI_A_UART_One_stop_bit、 //一个停止位
EUSCI_A_UART_MODE、 // UART 模式
EUSCI_A_UART_oversampling_BAUDRATE_generation //过采样
};

//***************
////////


*************
void UART_init_Communication (void)
{

MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P1、GPIO_PIN1 | GPIO_PIN2 | GPIO_PIN3、GPIO_PRIMARY_MODULE_FUNCTION);

MAP_UART_initModule (EUSCI_A0_BASE、uartConfig);

MAP_UART_enableModule (EUSCI_A0_BASE);

MAP_UART_enableInterrupt (EUSCI_A0_BASE、EUSCI_A_UART_receive_interrupt);
MAP_Interrupt_enableInterrupt (INT_EUSCIA0);

// Interrupt_disableSlepOnIsrExit ();

//char info[]="UART";
//uart_Send_out (info);
// memset (zUI8_buff _TX、0x00、size_buff _TX);
UART_DMASetup();
}

//*********
//
void UART_DMASetup (void)
{

//将 DMA 分配给 SPI 通道
//map_dma_enableModule();
//map_dma_setControlBase (controlTable);

MAP_DMA_赋 值通道(DMA_CH0_EUSCIA0TX);
//禁用通道属性
MAP_DMA_disableChannelAttribute (DMA_CH0_EUSCIA0TX、UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST | UDMA_ATTR_HIGH_PRIOR|UDMA_ATTR_REQMASK);

MAP_DMA_setChannelControl (UDMA_PRI_SELECT | DMA_CH0_EUSCIA0TX、UDMA_SIZE 8 | UDMA_SRC_INC_8 | UDMA_DST_INC_NONE | UDMA_ARB_1);

MAP_DMA_setChannelTransfer (UDMA_PRI_SELECT | DMA_CH0_EUSCIA0TX、UDMA_MODE_BASIC、zUI8_buff_TX、(void*) MAP_UART_getTransmitBufferAddressForDMA (EUSCI_A0_BASE)、SIZE_TX_COUNT_x);

}



/
*空 UART_DMA (空) *
/
void UART_DMA (void)
{
MAP_DMA_setChannelControl (UDMA_PRI_SELECT | DMA_CH0_EUSCIA0TX、UDMA_SIZE 8 | UDMA_SRC_INC_8 | UDMA_DST_INC_NONE | UDMA_ARB_1);
MAP_DMA_setChannelTransfer (UDMA_PRI_SELECT | DMA_CH0_EUSCIA0TX、UDMA_MODE_BASIC、zUI8_buff_TX、(void*) MAP_UART_getTransmitBufferAddressForDMA (EUSCI_A0_BASE)、SIZE;
MAP_DMA_enableChannel (0);
}

/*********
* void UART_Send_out (void) *
/
void UART_Send_out (char* read_buf)
{
int i;
for (i=0;i < strlen (read_buf);i++)
{
while (!(EUSCI_A_IFG_TXIFG 和 EUSCI_A0->IFG);
MAP_UART_transmitData (EUSCI_A0_BASE、READ_BUF[i]);
}
}

void COM (void)
{
if (strcmp (receive_uart、"start")=0)
{
Flag_UART=1;
}
否则、如果(strcmp (receive_uart、"stop")= 0 || strcmp (receive_uart、"stopt")= 0)
{
FLAG_UART=0;
}
memset (receive_UART、0x00、100);
}/*************



* EUSCI_A0_INT_BASE ISR。 。
秘书长的报告 /
void EUSCIA0_IRQHandler (void)
{
uint32_t status = MAP_UART_getEnabledInterruptStatus (EUSCI_A0_BASE);

MAP_UART_clearInterruptFlag (EUSCI_A0_BASE、STATUS);

IF (STATUS 和 EUSCI_A_UART_receive_interrupt)
{
UART_Wert = UART_receiveData (EUSCI_A0_BASE);

if (UART_Wert = 10 || UART_Wert == 13 || UART_Wert == 58)
{
com();
wert_inc=0;
}
其他
{
if (UART_Wert!= 0)
{
Receive_UART[wert_inc]= UART_Wert;
wert_inc++;
}
}

MAP_Interrupt_disableSlepOnIsrExit();
}
}

我的问题是如何提高 MSP432的性能? 有可能吗?

问题是 DMA TX 始终必须重新配置、并且芯片选择必须启用/禁用。

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

    MSP432支持团队目前已于7月4日结束工作、但将尽快回复您。
    很抱歉给您带来的不便。

    此致、
    Andre
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、请处理/CS 和 DMA。 我不知道一种真正好的方法可以让它消失(我曾考虑过一些、但它们都太危险了、无法部署)、但我认为您可以剃除以下物品:
    ----------
    我无法在这里看到所有常量、但如果这与大多数 SPI+DMA 操作类似、RX 计数与 TX 计数相同。 因此、您实际上不需要 INT1和 INT2。 当 Rx (INT2)触发时、确保 Tx 侧按 SPI 的性质完成。 具体来说:摆脱 DMA_INT1。

    或者:单束跳转方法:Tx DMA 将在 Rx DMA 之前完成2个字节的时间。 而是使用 INT1、例如在可宽延时间内进行 UART DMA 设置、然后在 UCBUSY 上旋转(此时几乎肯定为=0)。
    ----------
    当 DRDY 触发时、您重新初始化 TX DMA 并将其启动。 将重新初始化移动到(INT2) ISR 中的可宽延时间、然后使用引脚 ISR 只需设置使能位。 (未经请求:我认为您无需清除 P3.2 IFG 两次。)
    ----------
    同样、对于 UART DMA。
    ----------
    请记住、借助快速 SPI 和小型+频繁事务、在某些情况下 DMA 中断会成为净损失。 我尝试过大多数这些技巧、尝试驱动 SPI DAC、最后只想说中断(尽管不是 DMA)。 考虑一个结构、其中 DRDY ISR 执行所有完成+再创新+ CS (切换两次)+重新启动、并根据中断记账的成本进行平衡。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bruce、

    DMA RX 需要等待504个值才能到达以触发 DMA_INT2。
    DMA TX 只发送6个值从 ADC 读取、也就是这样。
    我将尝试您的技巧以提高性能、并将返回此处。
    我希望 MSP432能够处理48kHz 样本的读取并将其发送到 UART。 否则、我必须找到另一个能够处理它的 MCU。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    AH OK、这样超长周期为 DMA_INT2触发(?)。

    了解这一点后、示波器跟踪可以比较好地映射3个 ISR 中每一个 ISR 的成本。 (对于应该是3个32位分配的任务,DMA_setChannelTransfer 似乎做了很多工作--只有一个需要。)

    如果 Rx 缓冲区真的很大,memcpy()可能会对您造成伤害。 我建议您使用双缓冲区(data_array1[2][size_buff_TX]) SPI RX DMA --您必须在描述符中设置该地址--并直接从 SPI Rx 缓冲区执行 UART DMA。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bruce、

    首先、我将 RX DMA 缓冲区更改为接收6个字节而不是504、并取消注释仅禁用了/CS 的 DMA_INT1。

    即使 UART 没有启用以发送数据、他也会丢失已有的 INT 值。

    现在、我将 RX DMA 保留为504、并启用 DMA_INT1以重新初始化 DMA TX 并禁用/CS。 我还将 DATA_ARRAY1设置为双缓冲器、如您所说、并稍微更改代码以优化 CPU 性能:

    void dma_int2_IRQHandler (void)
    {
    ADS131A02_CS_Disable ();
    DMA_clearInterruptFlag (INT_DMA_INT2);
    
    if (Flag_UART==1)
    {
    //memcpy (zUI8_buff TX、data_array1、sizeof (data_array1[0])* size_buff TX);
    DMA_setChannelControl (UDMA_PRI_SELECT | DMA_CH0_EUSCIA0TX、UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_NONE | UDMA_ARB_1);
    DMA_setChannelTransfer (UDMA_PRI_SELECT | DMA_CH0_EUSCIA0TX、UDMA_MODE_BASIC、DATA_array1[swapbuffer]、(void*) UART_getTransmitBufferAddressForDMA (EUSCI_A0_BASE)、Size_buff_TX);
    DMA_enableChannel (0);
    }
    
    DMA_setChannelControl (DMARX | UDMA_PRI_SELECT、UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_8 | UDMA_ARB_1);
    
    if (swapbuffer=0)
    swapbuffer=1;
    其他
    swapbuffer=0;
    
    DMA_setChannelTransfer (DMARX | UDMA_PRI_SELECT、UDMA_MODE_BASIC、(void *) SPI_getReceiveBufferAddressForDMA (EUSCI_B1_base)、DATA_array1[swapbuffer]、size_buffer_TX);
    DMA_enableChannel (DMARX_Channel);
    }
    void DMA_INT1_IRQHandler (void)
    {
    DMA_clearInterruptFlag (INT_DMA_INT1);
    ADS131A02_CS_Disable ();
    DMA_setChannelControl (DMATX | UDMA_PRI_SELECT、UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_NONE | UDMA_ARB_1);
    DMA_setChannelTransfer (DMATX | UDMA_PRI_SELECT、UDMA_MODE_BASIC、DATA_ARRAY、(void *) SPI_getTransmitBufferAddressForDMA (EUSCI_B1_base)、6);
    
    }
    void PORT3_IRQHandler (void)
    {
    UINT_fast16_t status = GPIO_getEnabledInterruptStatus (GPIO_PORT_P3);
    GPIO_clearInterruptFlag (GPIO_PORT_P3、状态);
    
    IF (STATUS & GPIO_PIN2)
    {
    ADS131A02_CS_Enable();
    DMA_enableChannel (DMATX_Channel);
    }
    } 

    现在它正在工作、并且不会丢失任何 INT 数据!