AnsweredAssumed Answered

DMA with PIT problem

Question asked by Wenderson Oliveira on Aug 6, 2014
Latest reply on Aug 7, 2014 by Wenderson Oliveira

Hi all


I'm having a problem with DMA with PIT triggering. I've tried to config the TPM0 (CH0) timer to trigger the DMA, but it doesn't work; I always have a program break at PE_DEBUGHALT(); .

I was testing that because I want to use DMA to output a waveform at DAC, with a sample rate of the PIT. So, I've tried to do this:


#define SINUS_LENGTH 256  uint16_t Sinus[SINUS_LENGTH] = {         2047U,  2097U,  2147U,  2198U,  2248U,  2298U,  2347U,  2397U,  2446U,  2496U,  2544U,  2593U,  2641U,  2689U,         2737U,  2784U,  2830U,  2877U,  2922U,  2967U,  3012U,  3056U,  3099U,  3142U,  3184U,  3226U,  3266U,  3306U,         3346U,  3384U,  3422U,  3458U,  3494U,  3530U,  3564U,  3597U,  3629U,  3661U,  3691U,  3721U,  3749U,  3776U,         3803U,  3828U,  3852U,  3875U,  3897U,  3918U,  3938U,  3957U,  3974U,  3991U,  4006U,  4020U,  4033U,  4044U,         4055U,  4064U,  4072U,  4079U,  4084U,  4088U,  4092U,  4093U,  4094U,  4093U,  4092U,  4088U,  4084U,  4079U,         4072U,  4064U,  4055U,  4044U,  4033U,  4020U,  4006U,  3991U,  3974U,  3957U,  3938U,  3918U,  3897U,  3875U,         3852U,  3828U,  3803U,  3776U,  3749U,  3721U,  3691U,  3661U,  3629U,  3597U,  3564U,  3530U,  3494U,  3458U,         3422U,  3384U,  3346U,  3306U,  3266U,  3226U,  3184U,  3142U,  3099U,  3056U,  3012U,  2967U,  2922U,  2877U,         2830U,  2784U,  2737U,  2689U,  2641U,  2593U,  2544U,  2496U,  2446U,  2397U,  2347U,  2298U,  2248U,  2198U,         2147U,  2097U,  2047U,  1997U,  1947U,  1896U,  1846U,  1796U,  1747U,  1697U,  1648U,  1598U,  1550U,  1501U,         1453U,  1405U,  1357U,  1310U,  1264U,  1217U,  1172U,  1127U,  1082U,  1038U,  995U,   952U,   910U,   868U,         828U,   788U,   748U,   710U,   672U,   636U,   600U,   564U,   530U,   497U,   465U,   433U,   403U,   373U,         345U,   318U,   291U,   266U,   242U,   219U,   197U,   176U,   156U,   137U,   120U,   103U,   88U,    74U,         61U,    50U,    39U,    30U,    22U,    15U,    10U,    6U,     2U,     1U,     0U,     1U,     2U,     6U,         10U,    15U,    22U,    30U,    39U,    50U,    61U,    74U,    88U,    103U,   120U,   137U,   156U,   176U,         197U,   219U,   242U,   266U,   291U,   318U,   345U,   373U,   403U,   433U,   465U,   497U,   530U,   564U,         600U,   636U,   672U,   710U,   748U,   788U,   828U,   868U,   910U,   952U,   995U,   1038U,  1082U,  1127U,         1172U,  1217U,  1264U,  1310U,  1357U,  1405U,  1453U,  1501U,  1550U,  1598U,  1648U,  1697U,  1747U,  1796U,         1846U,  1896U,  1947U,  1997U };  void InitTimer(void) {   TPM0_SC = 0;    TPM0_CNT = 0;   TPM0_MOD = TPM_MOD_MOD(0xFFFF);   TPM0_C0V = TPM_CnV_VAL(0x1770);    TPM0_C0SC = (TPM_CnSC_CHIE_MASK | TPM_CnSC_MSA_MASK | TPM_CnSC_DMA_MASK);    TPM0_SC = (TPM_SC_CMOD(0x01) | TPM_SC_PS(0x00) | TPM_SC_DMA_MASK); //Set up clock and prescaler }  void InitMuxDMA(void) {   //Channel Configuration Register   DMAMUX0_CHCFG0 = DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_TRIG_MASK | DMAMUX_CHCFG_SOURCE(24); }  void InitDMA(void) {   //DMA Source Addr   DMA_SAR0 = (uint32_t)&Sinus[0];   //DMA Destination Addr   DMA_DAR0 = (uint32_t)&DAC0_DAT0L;   //DMA Status Register/ Byte Counter Register   DMA_DSR_BCR0 = DMA_DSR_BCR_BCR(256);   //DMA Control Register   DMA_DCR0 = DMA_DCR_ERQ_MASK | DMA_DCR_CS_MASK | DMA_DCR_SINC_MASK | DMA_DCR_SSIZE(0b10) | DMA_DCR_DINC_MASK | DMA_DCR_DSIZE(0b10);   //DMA Mux   InitMuxDMA(); }


Target: KL25Z


Can anyone help?

Original Attachment has been moved to: DMA-error-project-(FRDM-KL25Z).zip