文檔寫的DMA起始結(jié)束地址只有14位有效,16K的地址空間不是在codedate區(qū)嗎
所以是得在固定地址定義緩存區(qū)嗎
例程沒翻到DMA的demo
熱門產(chǎn)品 :
CH397: 高集成度、低功耗USB網(wǎng)卡芯片
文檔寫的DMA起始結(jié)束地址只有14位有效,16K的地址空間不是在codedate區(qū)嗎
所以是得在固定地址定義緩存區(qū)嗎
例程沒翻到DMA的demo
這里14位指的是RAM:
我們TMR例程中是有PWM DMA的
好的多謝,看的是PWM例程,沒注意
測試用例程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地址,手動關閉中斷;
可以留一個郵箱將對應工程發(fā)送給你
好的多謝,郵箱:個人信息保護,已隱藏
已發(fā)送,注意查收