tmr dma报错,如下程序,为将输出脉冲停止下来,我在中断中将新的数组付给脉冲,但会报错
#include "ledpwm.h"
#include "CH57x_common.h"
__attribute__((aligned(4))) uint32_t PwmBuf[100];
__attribute__((aligned(4))) uint32_t PwmBuf1[100];
volatile uint8_t capFlag = 0;
void maichong()
{
GPIOB_ModeCfg(GPIO_Pin_11, GPIO_ModeOut_PP_5mA);
GPIOPinRemap(ENABLE, RB_PIN_TMR2);
PRINT("TMR2 DMA PWM\n");
TMR2_PWMCycleCfg(120000); // 周期 2000us
PwmBuf[0]=12000;
PwmBuf[1]=1200;
PwmBuf[2]=120;
TMR2_DMACfg(ENABLE, (uint16_t)(uint32_t)&PwmBuf[0], (uint16_t)(uint32_t)&PwmBuf[2], Mode_Single);
TMR2_PWMInit(High_Level, PWM_Times_1);
/* 开启计数溢出中断,计满1000个周期进入中断 */
TMR2_ClearITFlag(TMR1_2_IT_DMA_END);
PFIC_EnableIRQ(TMR2_IRQn);
TMR2_ITCfg(ENABLE, TMR1_2_IT_DMA_END);
}
__attribute__((interrupt("WCH-Interrupt-fast")))
__attribute__((section(".highcode")))
void TMR2_IRQHandler(void)
{
if(TMR2_GetITFlag(TMR0_3_IT_CYC_END))
{
TMR2_ClearITFlag(TMR0_3_IT_CYC_END);
/* 计数器计满,硬件自动清零,重新开始计数 */
/* 用户可自行添加需要的处理 */
}
if(TMR2_GetITFlag(TMR1_2_IT_DMA_END))
{
TMR2_ClearITFlag(TMR1_2_IT_DMA_END);
PwmBuf1[0]=0;
PwmBuf1[1]=0;
PwmBuf1[2]=0;
TMR2_DMACfg(ENABLE, (uint16_t)(uint32_t)&PwmBuf1[0], (uint16_t)(uint32_t)&PwmBuf1[2], Mode_Single);
/* DMA 结束 */
/* 用户可自行添加需要的处理 */
}
}