文档写的DMA起始结束地址只有14位有效,16K的地址空间不是在codedate区吗
所以是得在固定地址定义缓存区吗
例程没翻到DMA的demo
热门产品 :
CH339: 7端口多功能USB HUB控制器芯片
文档写的DMA起始结束地址只有14位有效,16K的地址空间不是在codedate区吗
所以是得在固定地址定义缓存区吗
例程没翻到DMA的demo
这里14位指的是RAM:
我们TMR例程中是有PWM DMA的
好的多谢,看的是PWM例程,没注意
测试用例程DMA循环模式正常,单次模式一直有问题,DMA缓存起始结束地址怎么修改都是发送大约七十多个PWM才停止
__attribute__((aligned(4))) uint32_t PwmBuf[48]; #if 1 /* 定时器2,DMA PWM.*/ GPIOA_ModeCfg(GPIO_Pin_11, GPIO_ModeOut_PP_5mA); //GPIOPinRemap(ENABLE, RB_PIN_TMR2); TMR2_PWMCycleCfg(72); // 周期72/60M 1.2us PwmBufWriteData(); TMR2_DMACfg(ENABLE, (uint16_t)(uint32_t)&PwmBuf[0], (uint16_t)(uint32_t)&PwmBuf[5], Mode_Single); TMR2_PWMInit(High_Level, PWM_Times_1); TMR2_ClearITFlag(TMR1_2_IT_DMA_END); PFIC_EnableIRQ(TMR2_IRQn); TMR2_ITCfg(ENABLE, TMR1_2_IT_DMA_END); #endif __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); PRINT("DMA end\n"); /* DMA 结束 */ /* 用户可自行添加需要的处理 */ R8_TMR2_CTRL_MOD &= ~RB_TMR_COUNT_EN; GPIOA_ResetBits(GPIO_Pin_11); } }
在使用single模式,需要做如下处理:
自行定义一个DMA地址,手动关闭中断;
可以留一个邮箱将对应工程发送给你
好的多谢,邮箱:个人信息保护,已隐藏
已发送,注意查收