//-------------------------------------------------------// // Project Code : ALE300K03-21-LGE-GEN2.0-ME-CPU1 // File Name : Dma.cpp // Created on : 2022. 9. 29. // Description : // Author : KimJeongWoo // Last modified Date : //-------------------------------------------------------// #include "Cpu2DeviceDefine.h" //-------------------------------------------------------------------// // DMA를 사용하려고 하는 메모리의 영역이 DMA를 지원하는지 확인해야함 // // EX) Flash 영역에서는 DMA 사용 안됨, LS메모리도 마찬가지 // // // //-------------------------------------------------------------------// void DmaVariableInit() { // memset(&Dma1, 0, (sizeof(Dma1) / sizeof(int))); // memset(&Dma3, 0, (sizeof(Dma3) / sizeof(int))); // memset(&Ai, 0, (sizeof(Ai) / sizeof(int))); // memset(&IntAi, 0, (sizeof(IntAi) / sizeof(int))); } void InitDma() { SysCtl_selectSecMaster(0, SYSCTL_SEC_MASTER_DMA); DMA_initController(); DmaVariableInit(); InitDma1(); InitDma2(); InitDma3(); InitDma4(); } //DMA1, DI, AD_FLT, GATE_FLT void InitDma1() { // DMA_configAddresses(DMA_CH1_BASE, &Dma1, (const void*)(CS_FPGA + CS_FPGA_READ_OFFSET)); // DMA_configBurst(DMA_CH1_BASE, 4, 1, 1); // DMA_configTransfer(DMA_CH1_BASE, 1, 1, 1); // DMA_configWrap(DMA_CH1_BASE, 0xFFFF, 0, 0xFFFF, 0); // DMA_configMode(DMA_CH1_BASE, DMA_TRIGGER_XINT1, (DMA_CFG_ONESHOT_ENABLE | DMA_CFG_CONTINUOUS_ENABLE)); //// DMA_setPriorityMode(1); // DMA_setInterruptMode(DMA_CH1_BASE, DMA_INT_AT_END); // DMA_enableTrigger(DMA_CH1_BASE); // DMA_enableInterrupt(DMA_CH1_BASE); // DMA_startChannel(DMA_CH1_BASE); // // Interrupt_register(INT_DMA_CH1, &Dma1_Isr); // Interrupt_enable(INT_DMA_CH1); } // DMA2 = External ADC void InitDma2() { // DMA_configAddresses(DMA_CH2_BASE, &Ai, (const void*)(CS_FPGA + CS_FPGA_ADC_READ_OFFSET)); // DMA_configBurst(DMA_CH2_BASE, 6, 0, 1); // DMA_configTransfer(DMA_CH2_BASE, 6, 1, 1); // DMA_configWrap(DMA_CH2_BASE, 0xFFFF, 0, 0xFFFF, 0); // DMA_configMode(DMA_CH2_BASE, DMA_TRIGGER_XINT2, (DMA_CFG_ONESHOT_ENABLE | DMA_CFG_CONTINUOUS_ENABLE | DMA_CFG_SIZE_16BIT)); // DMA_setInterruptMode(DMA_CH2_BASE, DMA_INT_AT_END); // DMA_enableTrigger(DMA_CH2_BASE); // DMA_enableInterrupt(DMA_CH2_BASE); // DMA_startChannel(DMA_CH2_BASE); // // Interrupt_register(INT_DMA_CH2, &Dma2_Isr); // Interrupt_enable(INT_DMA_CH2); } // DMA3 PWM, DO, RSV, DAC, WD..... void InitDma3() { // DMA_configAddresses(DMA_CH3_BASE, (const void*)(CS_FPGA + CS_FPGA_WRITE_OFFSET), &Dma3); // DMA_configBurst(DMA_CH3_BASE, 23, 1, 1); // DMA_configTransfer(DMA_CH3_BASE, 2, 1, 1); // DMA_configWrap(DMA_CH3_BASE, 0xFFFF, 0, 0xFFFF, 0); // DMA_configMode(DMA_CH3_BASE, DMA_TRIGGER_SOFTWARE, (DMA_CFG_ONESHOT_ENABLE | DMA_CFG_CONTINUOUS_ENABLE | DMA_CFG_SIZE_16BIT)); // DMA_setInterruptMode(DMA_CH3_BASE, DMA_INT_AT_END); // DMA_enableTrigger(DMA_CH3_BASE); // DMA_enableInterrupt(DMA_CH3_BASE); // DMA_startChannel(DMA_CH3_BASE); // // Interrupt_register(INT_DMA_CH3, &Dma3_Isr); // Interrupt_enable(INT_DMA_CH3); } //DMA3 = Internal ADC Read // ADCA Interrupt 1번이 체널이 제일 많아 오래걸리므로 ADCA1번 기준으로 설정 void InitDma4() { // DMA_configAddresses(DMA_CH4_BASE, &AdcData, (const void*)ADCARESULT_BASE); // DMA_configBurst(DMA_CH4_BASE, 8, 1, 1); // DMA_configTransfer(DMA_CH4_BASE, 4, 0x19, 1); // DMA_configWrap(DMA_CH4_BASE, 0xFFFF, 0, 0xFFFF, 0); // DMA_configMode(DMA_CH4_BASE, DMA_TRIGGER_ADCA1, (DMA_CFG_ONESHOT_ENABLE | DMA_CFG_CONTINUOUS_ENABLE | DMA_CFG_SIZE_16BIT)); // DMA_setInterruptMode(DMA_CH4_BASE, DMA_INT_AT_END); // DMA_enableTrigger(DMA_CH4_BASE); // DMA_enableInterrupt(DMA_CH4_BASE); // DMA_startChannel(DMA_CH4_BASE); // // Interrupt_register(INT_DMA_CH4, &NtcRead); // Interrupt_enable(INT_DMA_CH4); }