CH571的定時器PWM模式怎么用DMA的

文檔寫的DMA起始結(jié)束地址只有14位有效,16K的地址空間不是在codedate區(qū)嗎image.png

所以是得在固定地址定義緩存區(qū)嗎image.png

例程沒翻到DMA的demo

這里14位指的是RAM:

image.png

我們TMR例程中是有PWM DMA的

image.png


好的多謝,看的是PWM例程,沒注意


@TECH_Rzz

測試用例程DMA循環(huán)模式正常,單次模式一直有問題,DMA緩存起始結(jié)束地址怎么修改都是發(fā)送大約七十多個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);
????????/*?計數(shù)器計滿,硬件自動清零,重新開始計數(shù)?*/
????????/*?用戶可自行添加需要的處理?*/
????}
????if(TMR2_GetITFlag(TMR1_2_IT_DMA_END))
????{
????????TMR2_ClearITFlag(TMR1_2_IT_DMA_END);
????????PRINT("DMA?end\n");
????????/*?DMA?結(jié)束?*/
????????/*?用戶可自行添加需要的處理?*/
????????R8_TMR2_CTRL_MOD?&=?~RB_TMR_COUNT_EN;
????????GPIOA_ResetBits(GPIO_Pin_11);
????}
}



在使用single模式,需要做如下處理:

自行定義一個DMA地址,手動關閉中斷;image.png

可以留一個郵箱將對應工程發(fā)送給你


好的多謝,郵箱:個人信息保護,已隱藏


已發(fā)送,注意查收


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频