tmr dma報(bào)錯(cuò),如下程序,為將輸出脈沖停止下來,我在中斷中將新的數(shù)組付給脈沖,但會報(bào)錯(cuò)
#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);
? /* 開啟計(jì)數(shù)溢出中斷,計(jì)滿1000個(gè)周期進(jìn)入中斷 */
? 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);
? ? ? ? /* 計(jì)數(shù)器計(jì)滿,硬件自動清零,重新開始計(jì)數(shù) */
? ? ? ? /* 用戶可自行添加需要的處理 */
? ? }
? ? 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 結(jié)束 */
? ? ? ? /* 用戶可自行添加需要的處理 */
? ? }
}