Hello,
I am trying to synthesize two analog waveforms in the same time with dual 10bit paralell DAC connected to my TIVA microcontroller pins as shown on the picture below:
The period of the waveforms shall be 55 us so I decided to use uDMA for that work. I want to configure the uDMA channels (14,2,4,6) to write data from the memory to the specified ports (B, E, D, F). The TIMER 2 and TIMER 3 moduls should trigger the uDMA channels very oftenb with the following sequence: CH14 - > CH2 -> CH4 -> CH6. The problem starts, when I decrease the timers preloaded values under ~30. Then my signals are falling apart. At the end, I want to setup the timers to generate uDMA event in every few clock cycles. Can you please help me? What am I doing wrong?
Thank You very much for your answer!
Best Regards,
Péter
Here is my code:
.
.
.
void InituDMA(void);
void InitGPIO(void);
//*****************************************************************************
//
// The control table used by the uDMA controller. This table must be aligned
// to a 1024 byte boundary.
//
//*****************************************************************************
#pragma DATA_ALIGN(DMAcontroltable, 1024)
uint8_t DMAcontroltable[1024];
static unsigned char OutputState_B[1024] = {46,46,38,38,34,34,65,65,6,6,107,107,10,10,6,6,111,111,33,33,99,99,43,43,103,103,70,70,75,75,96,96,79,79,11,11,67,67,38,38,40,40,64,64,44,44,75,75,32,32,102,102,4,4,0,0,8,8,43,43,108,108,70,70,97,97,96,96,101,101,107,107,73,73,6,6,77,77,32,32,65,65,75,75,38,38,101,101,38,38,0,0,38,38,34,34,38,38,34,34,38,38,34,34,38,38,34,34,38,38,34,34,38,38,34,34,38,38,42,42,38,38,34,34,102,102,42,42,6,6,66,66,70,70,100,100,102,102,100,100,38,38,100,100,70,70,100,100,6,6,100,100,38,38,72,72,102,102,46,46,6,6,46,46,69,69,46,46,100,100,46,46,100,100,46,46,100,100,46,46,100,100,46,46,100,100,101,101,100,100,45,45,100,100,4,4,100,100,76,76,100,100,3,3,100,100,74,74,40,40,34,34,108,108,105,105,32,32,15,15,100,100,15,15,40,40,15,15,108,108,15,15,64,64,15,15,4,4,15,15,73,73,15,15,13,13,15,15,65,65,15,15,5,5,15,15,73,73,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,32,32,15,15,65,65,45,45,66,66,75,75,100,100,105,105,101,101,7,7,6,6,37,37,7,7,67,67,40,40,97,97,41,41,15,15,74,74,38,38,75,75,38,38,109,109,38,38,110,110,38,38,15,15,38,38,32,32,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,65,65,38,38,107,107,38,38,6,6,38,38,33,33,38,38,43,43,38,38,70,70,38,38,96,96,38,38,11,11,38,38,38,38,38,38,64,64,38,38,75,75,38,38,102,102,38,38,0,0,38,38,43,43,38,38,70,70,38,38,96,96,38,38,107,107,38,38,6,6,38,38,32,32,38,38,75,75,38,38,101,101,38,38,0,0,38,38,34,34,38,38,34,34,38,38,34,34,38,38,34,34,38,38,34,34,38,38,34,34,38,38,34,34,38,38,34,34,38,38,13,13,38,38,8,8,38,38,2,2,38,38,13,13,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,102,102,38,38,6,6,38,38,70,70,1,1,102,102,75,75,38,38,6,6,70,70,97,97,6,6,46,46,38,38,46,46,102,102,46,46,6,6,46,46,69,69,46,46,100,100,46,46,100,100,46,46,100,100,46,46,100,100,46,46,100,100,46,46,100,100,77,77,100,100,76,76,100,100,108,108,100,100,107,107,100,100,10,10,38,38,9,9,104,104,41,41,42,42,40,40,107,107,71,71,45,45,70,70,111,111,101,101,33,33,101,101,99,99,4,4,37,37,3,3,102,102,34,34,40,40,38,38,106,106,38,38,44,44,38,38,0,0,38,38,0,0,38,38,0,0,38,38,0,0,38,38,0,0,38,38,0,0,38,38,0,0,38,38,0,0,38,38,0,0,38,38,0,0,38,38,0,0,38,38,0,0,38,38,0,0,38,38,0,0,38,38,0,0,67,67,0,0,65,65,0,0,78,78,0,0,107,107,0,0,105,105,0,0,6,6,11,11,3,3,37,37,33,33,64,64,46,46,107,107,43,43,5,5,73,73,32,32,70,70,42,42,99,99,69,69,96,96,96,96,110,110,10,10,11,11,37,37,8,8,38,38,38,38,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38,46,46,38,38};
static unsigned char OutputState_D[1024] = {50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,52,48,48,52,52,48,48,52,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,54,50,50,54,54,50,50,54,54,50,50,54,54,50,50,54,54,50,50,54,54,50,50,54,54,50,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,54,50,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,48,52,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48,50,54,52,48};
static unsigned char OutputState_E[1024] = {0,0,10,10,0,0,10,10,2,2,8,8,0,0,12,12,14,14,12,12,14,14,14,14,12,12,14,14,14,14,14,14,12,12,0,0,12,12,0,0,14,14,0,0,12,12,2,2,12,12,2,2,14,14,6,6,12,12,4,4,10,10,4,4,10,10,4,4,8,8,6,6,10,10,10,10,8,8,10,10,8,8,8,8,10,10,8,8,10,10,12,12,10,10,12,12,10,10,12,12,10,10,12,12,10,10,12,12,10,10,12,12,10,10,12,12,10,10,8,8,10,10,6,6,8,8,2,2,14,14,12,12,12,12,10,10,14,14,10,10,0,0,10,10,2,2,10,10,4,4,10,10,6,6,14,14,4,4,0,0,10,10,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,14,14,8,8,14,14,8,8,12,12,8,8,8,8,8,8,10,10,8,8,6,6,8,8,4,4,4,4,0,0,6,6,2,2,2,2,2,2,2,2,2,2,14,14,2,2,12,12,2,2,12,12,2,2,8,8,2,2,8,8,2,2,6,6,2,2,6,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,0,0,2,2,2,2,6,6,4,4,6,6,6,6,6,6,4,4,6,6,6,6,8,8,4,4,10,10,6,6,10,10,4,4,10,10,6,6,10,10,8,8,10,10,8,8,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,8,8,10,10,12,12,10,10,12,12,10,10,14,14,10,10,14,14,10,10,14,14,10,10,0,0,10,10,0,0,10,10,0,0,10,10,2,2,10,10,2,2,10,10,6,6,10,10,4,4,10,10,4,4,10,10,4,4,10,10,6,6,10,10,10,10,10,10,10,10,10,10,8,8,10,10,8,8,10,10,12,12,10,10,12,12,10,10,12,12,10,10,12,12,10,10,12,12,10,10,12,12,10,10,12,12,10,10,12,12,10,10,12,12,10,10,10,10,10,10,6,6,10,10,2,2,10,10,12,12,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,8,8,10,10,14,14,10,10,12,12,8,8,14,14,4,4,0,0,6,6,2,2,0,0,4,4,2,2,6,6,2,2,4,4,2,2,10,10,2,2,8,8,2,2,8,8,2,2,8,8,2,2,8,8,2,2,8,8,2,2,8,8,2,2,8,8,0,0,8,8,2,2,8,8,0,0,8,8,2,2,8,8,4,4,8,8,6,6,4,4,4,4,4,4,6,6,0,0,4,4,0,0,6,6,12,12,4,4,14,14,6,6,10,10,8,8,10,10,10,10,6,6,8,8,6,6,10,10,2,2,10,10,2,2,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,8,8,0,0,10,10,0,0,10,10,0,0,8,8,0,0,10,10,0,0,12,12,2,2,14,14,2,2,12,12,2,2,12,12,0,0,14,14,4,4,12,12,4,4,14,14,6,6,12,12,6,6,14,14,6,6,14,14,8,8,0,0,8,8,2,2,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10,0,0,10,10};
static unsigned char OutputState_F[1024] = {8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8,8,0,0,8};
void InitTimer()
{
SysCtlPeripheralDisable(SYSCTL_PERIPH_TIMER2);
SysCtlPeripheralReset(SYSCTL_PERIPH_TIMER2);
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER2);
SysCtlPeripheralDisable(SYSCTL_PERIPH_TIMER3);
SysCtlPeripheralReset(SYSCTL_PERIPH_TIMER3);
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER3);
SysCtlDelay(10);
TimerConfigure(TIMER2_BASE, TIMER_CFG_PERIODIC);
TimerLoadSet(TIMER2_BASE, TIMER_A, 20);
TimerConfigure(TIMER3_BASE, TIMER_CFG_PERIODIC);
TimerLoadSet(TIMER3_BASE, TIMER_A, 20);
TimerIntClear(TIMER2_BASE,TIMER_TIMA_DMA);
//TimerIntRegister(TIMER3_BASE,TIMER_A,TimerInt);
//TimerIntEnable(TIMER2_BASE,TIMER_TIMA_DMA);
TimerIntClear(TIMER3_BASE,TIMER_TIMA_DMA);
//TimerIntRegister(TIMER3_BASE,TIMER_A,TimerInt);
// TimerIntEnable(TIMER3_BASE,TIMER_TIMA_DMA);
TimerDMAEventSet(TIMER2_BASE,TIMER_DMA_TIMEOUT_A);
TimerDMAEventSet(TIMER3_BASE,TIMER_DMA_TIMEOUT_A);
}
void InituDMA(void)
{
//Just disable to be able to reset the peripheral state
SysCtlPeripheralDisable(SYSCTL_PERIPH_UDMA);
SysCtlPeripheralReset(SYSCTL_PERIPH_UDMA);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA);
SysCtlDelay(10);
uDMAEnable();
uDMAControlBaseSet(DMAcontroltable);
uDMAChannelAssign(UDMA_CH14_TIMER2A);
uDMAChannelAssign(UDMA_CH2_TIMER3A);
uDMAChannelAssign(UDMA_CH4_TIMER2A);
uDMAChannelAssign(UDMA_CH6_TIMER2A);
uDMAChannelAttributeDisable(UDMA_CH14_TIMER2A,
UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |
UDMA_ATTR_HIGH_PRIORITY |
UDMA_ATTR_REQMASK);
uDMAChannelAttributeDisable(UDMA_CH2_TIMER3A,
UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |
UDMA_ATTR_HIGH_PRIORITY |
UDMA_ATTR_REQMASK);
//Disable all the atributes in case any was set
uDMAChannelAttributeDisable(UDMA_CH4_TIMER2A,
UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |
UDMA_ATTR_HIGH_PRIORITY |
UDMA_ATTR_REQMASK);
uDMAChannelAttributeDisable(UDMA_CH6_TIMER2A,
UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |
UDMA_ATTR_HIGH_PRIORITY |
UDMA_ATTR_REQMASK);
/*
This sets up the item size to 8bits, source increment to 8bits
and destination increment to none and arbitration size to 1
*/
uDMAChannelControlSet(UDMA_CH14_TIMER2A | UDMA_PRI_SELECT,
UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_NONE |
UDMA_ARB_1);
uDMAChannelControlSet(UDMA_CH2_TIMER3A | UDMA_PRI_SELECT,
UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_NONE |
UDMA_ARB_1);
uDMAChannelControlSet(UDMA_CH4_TIMER2A | UDMA_PRI_SELECT,
UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_NONE |
UDMA_ARB_1);
uDMAChannelControlSet(UDMA_CH6_TIMER2A | UDMA_PRI_SELECT,
UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_NONE |
UDMA_ARB_1);
uDMAChannelTransferSet(UDMA_CH14_TIMER2A | UDMA_PRI_SELECT,
UDMA_MODE_BASIC,
OutputState_B, (void *)(GPIO_PORTB_BASE + 0x3FC),
1023);
uDMAChannelTransferSet(UDMA_CH2_TIMER3A | UDMA_PRI_SELECT,
UDMA_MODE_BASIC,
OutputState_E, (void *)(GPIO_PORTE_BASE + 0x3FC),
1023);
uDMAChannelTransferSet(UDMA_CH4_TIMER2A | UDMA_PRI_SELECT,
UDMA_MODE_BASIC,
OutputState_D, (void *)(GPIO_PORTD_BASE + 0x3FC),
1023);
uDMAChannelTransferSet(UDMA_CH6_TIMER2A | UDMA_PRI_SELECT,
UDMA_MODE_BASIC,
OutputState_F, (void *)(GPIO_PORTF_BASE + 0x3FC),
1023);
uDMAChannelAttributeEnable(UDMA_CH14_TIMER2A, UDMA_ATTR_USEBURST | UDMA_ATTR_HIGH_PRIORITY);
uDMAChannelAttributeEnable(UDMA_CH2_TIMER3A, UDMA_ATTR_USEBURST);
uDMAChannelAttributeEnable(UDMA_CH4_TIMER2A, UDMA_ATTR_USEBURST);
uDMAChannelAttributeEnable(UDMA_CH6_TIMER2A, UDMA_ATTR_USEBURST);
/*
| UDMA_ATTR_USEBURST |
UDMA_ATTR_HIGH_PRIORITY |
UDMA_ATTR_REQMASK
*/
//Enable the DMA chanel
uDMAChannelEnable(UDMA_CH14_TIMER2A);
uDMAChannelEnable(UDMA_CH2_TIMER3A);
uDMAChannelEnable(UDMA_CH4_TIMER2A);
uDMAChannelEnable(UDMA_CH6_TIMER2A);
}
void InitGPIO(void)
{
// Enable the peripherals used by this program.
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_7);
GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5);
GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
HWREG(GPIO_PORTF_BASE+GPIO_O_LOCK) = GPIO_LOCK_KEY;
HWREG(GPIO_PORTF_BASE+GPIO_O_CR) |= GPIO_PIN_0;
// HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = 0;
ulLoop = SYSCTL_RCGC2_R;
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
GPIO_PORTB_DATA_R = 0;
GPIO_PORTD_DATA_R = 0;
GPIO_PORTE_DATA_R = 0;
GPIO_PORTF_DATA_R = 0;
}
int main(void)
{
unsigned int tmp = 0, i = 0;
SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
InitGPIO();
InituDMA();
InitTimer();
GPIO_PORTD_DATA_R &= ~4; // clear Clock_A
GPIO_PORTF_DATA_R &= ~8; // clear Clock_B
GPIO_PORTD_DATA_R |= 32; // set Standby
GPIO_PORTD_DATA_R &= ~16; // clear NRST
for(ulLoop = 0; ulLoop < 1000000; ulLoop ++);
GPIO_PORTD_DATA_R |= 16; // set NRST
for(ulLoop = 0; ulLoop < 10000; ulLoop ++);
TimerSynchronize(TIMER3_BASE,TIMER_2A_SYNC|TIMER_3A_SYNC);
//Enable the timer to start counting
HWREG(TIMER2_BASE + TIMER_O_CTL) |= 1;
HWREG(TIMER3_BASE + TIMER_O_CTL) |= 1;
while(1)
{
if (uDMAChannelModeGet(UDMA_CH6_TIMER2A) == UDMA_MODE_STOP)
{
TimerDisable(TIMER2_BASE,TIMER_A);
TimerDisable(TIMER3_BASE,TIMER_A);
//HWREG(UDMA_CHCTL) |= UDMA_MODE_BASIC;
uDMAChannelTransferSet(UDMA_CH14_TIMER2A | UDMA_PRI_SELECT,
UDMA_MODE_BASIC,
OutputState_B, (void *)(GPIO_PORTB_BASE + 0x3FC),
1023);
uDMAChannelTransferSet(UDMA_CH2_TIMER3A | UDMA_PRI_SELECT,
UDMA_MODE_BASIC,
OutputState_E, (void *)(GPIO_PORTE_BASE + 0x3FC),
1023);
uDMAChannelTransferSet(UDMA_CH4_TIMER2A | UDMA_PRI_SELECT,
UDMA_MODE_BASIC,
OutputState_F, (void *)(GPIO_PORTF_BASE + 0x3FC),
1023);
uDMAChannelTransferSet(UDMA_CH6_TIMER2A | UDMA_PRI_SELECT,
UDMA_MODE_BASIC,
OutputState_D, (void *)(GPIO_PORTD_BASE + 0x3FC),
1023);
uDMAChannelEnable(UDMA_CH14_TIMER2A);
uDMAChannelEnable(UDMA_CH2_TIMER3A);
uDMAChannelEnable(UDMA_CH4_TIMER2A);
uDMAChannelEnable(UDMA_CH6_TIMER2A);
TimerSynchronize(TIMER3_BASE,TIMER_2A_SYNC|TIMER_3A_SYNC);
//Enable the timer to start counting
HWREG(TIMER2_BASE + TIMER_O_CTL) |= 1;
HWREG(TIMER3_BASE + TIMER_O_CTL) |= 1;
TimerSynchronize(TIMER3_BASE,TIMER_2A_SYNC|TIMER_3A_SYNC);
}
}
return 0;
}