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