18.4.9. GPTMR Generates T-Shaped Acceleration and Deceleration Pulses
18.4.9.1. Overview
The t_shape_accel_decel example project demonstrates the functionality of GPTMR generating a specified number of T-shaped acceleration and deceleration pulses within a specified time. It can also serve as a reference for generating a specific number of pulses.
The pulse generation automatically stops after the DMA transfer is completed.
18.4.9.2. Hardware Setup
Refer to the specific development board’s Pin Description section for details.
Connect the GPTMR compare output pin to an oscilloscope or logic analyzer.
18.4.9.3. Software Setup
For details about the GPTMR driver interface, refer to gptmr.
If you need to set the initial output compare polarity of GPTMR to high, to avoid unexpected output pulses during initialization, use the gptmr_channel_set_cmp_initial_polarity function to configure the initial polarity before pinmux initialization:
By default, the initial polarity is set to low. To configure it as high, set the macro APP_CMP_INITIAL_POLARITY_HIGH to 1.
The gptmr_config API in the example implements the relevant GPTMR configuration and initialization.
Logic for generating a specified number of pulses:
Use DMA transfers to dynamically configure the CMP1 and RELOAD registers of GPTMR.
Each RELOAD event of GPTMR triggers a DMA transfer to update the values of CMP1 and RELOAD registers.
Notes:
For SOCs with DMA_SOC_MAX_COUNT == 1, 32-bit HDMA is used, which can only transfer one 32-bit register value (RELOAD). Therefore, only the pulse frequency can be adjusted, but the duty cycle cannot.
For SOCs with DMA_SOC_MAX_COUNT > 1, 64-bit XDMA is used, which can transfer two consecutive 32-bit register values (CMP1 and RELOAD), allowing simultaneous adjustment of pulse frequency and duty cycle.
Pulses are generated in center-aligned PWM mode, requiring 0 < CMP0 < CMP1 < RELOAD, where the duty cycle is CMP1 - CMP0 and the period is RELOAD.
After generating the specified number of pulses, the timer counter must be stopped to avoid continuous pulse generation. The example achieves this through DMA linked transfers, which automatically configure the timer to stop counting on the last pulse.
The default value of CMP0 is 100 (defined by the macro APP_OFFSET_CMP0_TICK). It is recommended not to set this value too low to ensure sufficient time for DMA linked transfers.
You can adjust the macros APP_MAX_CYCLE_US and APP_MIN_CYCLE_US to configure the maximum and minimum pulse periods (in microseconds). The default maximum period is 100us, and the minimum period is 10us.
You can adjust the macro APP_CYCLE_COUNT to configure the number of pulses. By default, 100 pulses are generated.
18.4.9.4. Execution Phenomenon
Run the project, and the example executes the GPTMR functionality to generate T-shaped acceleration and deceleration pulses. Use an oscilloscope to observe the compare output pin. Upon power-up, the CMP1 compare values and RELOAD values for different pulses will be printed, followed by pulses with fixed pulse widths and varying frequencies every 500ms. The LED will keep flashing. The serial terminal outputs the following information:
For SOCs using HDMA, the CMP1 compare value remains the same, while the RELOAD value changes:
generate T_shape_accel_decel test
shape_table[0] compare_value:449, reload:9898
shape_table[1] compare_value:449, reload:9616
shape_table[2] compare_value:449, reload:9333
shape_table[3] compare_value:449, reload:9052
shape_table[4] compare_value:449, reload:8771
shape_table[5] compare_value:449, reload:8491
shape_table[6] compare_value:449, reload:8212
shape_table[7] compare_value:449, reload:7935
shape_table[8] compare_value:449, reload:7660
shape_table[9] compare_value:449, reload:7388
shape_table[10] compare_value:449, reload:7117
shape_table[11] compare_value:449, reload:6850
shape_table[12] compare_value:449, reload:6585
shape_table[13] compare_value:449, reload:6324
shape_table[14] compare_value:449, reload:6066
shape_table[15] compare_value:449, reload:5813
shape_table[16] compare_value:449, reload:5563
shape_table[17] compare_value:449, reload:5317
shape_table[18] compare_value:449, reload:5076
shape_table[19] compare_value:449, reload:4840
shape_table[20] compare_value:449, reload:4608
shape_table[21] compare_value:449, reload:4382
shape_table[22] compare_value:449, reload:4162
shape_table[23] compare_value:449, reload:3947
shape_table[24] compare_value:449, reload:3738
shape_table[25] compare_value:449, reload:3535
shape_table[26] compare_value:449, reload:3338
shape_table[27] compare_value:449, reload:3148
shape_table[28] compare_value:449, reload:2964
shape_table[29] compare_value:449, reload:2787
shape_table[30] compare_value:449, reload:2617
shape_table[31] compare_value:449, reload:2455
shape_table[32] compare_value:449, reload:2300
shape_table[33] compare_value:449, reload:2152
shape_table[34] compare_value:449, reload:2012
shape_table[35] compare_value:449, reload:1879
shape_table[36] compare_value:449, reload:1755
shape_table[37] compare_value:449, reload:1639
shape_table[38] compare_value:449, reload:1531
shape_table[39] compare_value:449, reload:1431
shape_table[40] compare_value:449, reload:1339
shape_table[41] compare_value:449, reload:1256
shape_table[42] compare_value:449, reload:1181
shape_table[43] compare_value:449, reload:1115
shape_table[44] compare_value:449, reload:1058
shape_table[45] compare_value:449, reload:1009
shape_table[46] compare_value:449, reload:969
shape_table[47] compare_value:449, reload:938
shape_table[48] compare_value:449, reload:916
shape_table[49] compare_value:449, reload:903
shape_table[50] compare_value:449, reload:899
shape_table[51] compare_value:449, reload:903
shape_table[52] compare_value:449, reload:916
shape_table[53] compare_value:449, reload:938
shape_table[54] compare_value:449, reload:969
shape_table[55] compare_value:449, reload:1009
shape_table[56] compare_value:449, reload:1058
shape_table[57] compare_value:449, reload:1115
shape_table[58] compare_value:449, reload:1181
shape_table[59] compare_value:449, reload:1256
shape_table[60] compare_value:449, reload:1339
shape_table[61] compare_value:449, reload:1431
shape_table[62] compare_value:449, reload:1531
shape_table[63] compare_value:449, reload:1639
shape_table[64] compare_value:449, reload:1755
shape_table[65] compare_value:449, reload:1879
shape_table[66] compare_value:449, reload:2012
shape_table[67] compare_value:449, reload:2152
shape_table[68] compare_value:449, reload:2300
shape_table[69] compare_value:449, reload:2455
shape_table[70] compare_value:449, reload:2617
shape_table[71] compare_value:449, reload:2787
shape_table[72] compare_value:449, reload:2964
shape_table[73] compare_value:449, reload:3148
shape_table[74] compare_value:449, reload:3338
shape_table[75] compare_value:449, reload:3535
shape_table[76] compare_value:449, reload:3738
shape_table[77] compare_value:449, reload:3947
shape_table[78] compare_value:449, reload:4162
shape_table[79] compare_value:449, reload:4382
shape_table[80] compare_value:449, reload:4608
shape_table[81] compare_value:449, reload:4840
shape_table[82] compare_value:449, reload:5076
shape_table[83] compare_value:449, reload:5317
shape_table[84] compare_value:449, reload:5563
shape_table[85] compare_value:449, reload:5813
shape_table[86] compare_value:449, reload:6066
shape_table[87] compare_value:449, reload:6324
shape_table[88] compare_value:449, reload:6585
shape_table[89] compare_value:449, reload:6850
shape_table[90] compare_value:449, reload:7117
shape_table[91] compare_value:449, reload:7388
shape_table[92] compare_value:449, reload:7660
shape_table[93] compare_value:449, reload:7935
shape_table[94] compare_value:449, reload:8212
shape_table[95] compare_value:449, reload:8491
shape_table[96] compare_value:449, reload:8771
shape_table[97] compare_value:449, reload:9052
shape_table[98] compare_value:449, reload:9333
shape_table[99] compare_value:449, reload:9616
....
For SOCs using XDMA, both CMP1 and RELOAD values change:
generate T_shape_accel_decel test
shape_table[0] compare_value:5099, reload:9898
shape_table[1] compare_value:4958, reload:9616
shape_table[2] compare_value:4816, reload:9333
shape_table[3] compare_value:4676, reload:9052
shape_table[4] compare_value:4535, reload:8771
shape_table[5] compare_value:4395, reload:8491
shape_table[6] compare_value:4256, reload:8212
shape_table[7] compare_value:4117, reload:7935
shape_table[8] compare_value:3980, reload:7660
shape_table[9] compare_value:3844, reload:7388
shape_table[10] compare_value:3708, reload:7117
shape_table[11] compare_value:3575, reload:6850
shape_table[12] compare_value:3442, reload:6585
shape_table[13] compare_value:3312, reload:6324
shape_table[14] compare_value:3183, reload:6066
shape_table[15] compare_value:3056, reload:5813
shape_table[16] compare_value:2931, reload:5563
shape_table[17] compare_value:2808, reload:5317
shape_table[18] compare_value:2688, reload:5076
shape_table[19] compare_value:2570, reload:4840
shape_table[20] compare_value:2454, reload:4608
shape_table[21] compare_value:2341, reload:4382
shape_table[22] compare_value:2231, reload:4162
shape_table[23] compare_value:2123, reload:3947
shape_table[24] compare_value:2019, reload:3738
shape_table[25] compare_value:1917, reload:3535
shape_table[26] compare_value:1819, reload:3338
shape_table[27] compare_value:1724, reload:3148
shape_table[28] compare_value:1632, reload:2964
shape_table[29] compare_value:1543, reload:2787
shape_table[30] compare_value:1458, reload:2617
shape_table[31] compare_value:1377, reload:2455
shape_table[32] compare_value:1300, reload:2300
shape_table[33] compare_value:1226, reload:2152
shape_table[34] compare_value:1156, reload:2012
shape_table[35] compare_value:1089, reload:1879
shape_table[36] compare_value:1027, reload:1755
shape_table[37] compare_value:969, reload:1639
shape_table[38] compare_value:915, reload:1531
shape_table[39] compare_value:865, reload:1431
shape_table[40] compare_value:819, reload:1339
shape_table[41] compare_value:778, reload:1256
shape_table[42] compare_value:740, reload:1181
shape_table[43] compare_value:707, reload:1115
shape_table[44] compare_value:679, reload:1058
shape_table[45] compare_value:654, reload:1009
shape_table[46] compare_value:634, reload:969
shape_table[47] compare_value:619, reload:938
shape_table[48] compare_value:608, reload:916
shape_table[49] compare_value:601, reload:903
shape_table[50] compare_value:599, reload:899
shape_table[51] compare_value:601, reload:903
shape_table[52] compare_value:608, reload:916
shape_table[53] compare_value:619, reload:938
shape_table[54] compare_value:634, reload:969
shape_table[55] compare_value:654, reload:1009
shape_table[56] compare_value:679, reload:1058
shape_table[57] compare_value:707, reload:1115
shape_table[58] compare_value:740, reload:1181
shape_table[59] compare_value:778, reload:1256
shape_table[60] compare_value:819, reload:1339
shape_table[61] compare_value:865, reload:1431
shape_table[62] compare_value:915, reload:1531
shape_table[63] compare_value:969, reload:1639
shape_table[64] compare_value:1027, reload:1755
shape_table[65] compare_value:1089, reload:1879
shape_table[66] compare_value:1156, reload:2012
shape_table[67] compare_value:1226, reload:2152
shape_table[68] compare_value:1300, reload:2300
shape_table[69] compare_value:1377, reload:2455
shape_table[70] compare_value:1458, reload:2617
shape_table[71] compare_value:1543, reload:2787
shape_table[72] compare_value:1632, reload:2964
shape_table[73] compare_value:1724, reload:3148
shape_table[74] compare_value:1819, reload:3338
shape_table[75] compare_value:1917, reload:3535
shape_table[76] compare_value:2019, reload:3738
shape_table[77] compare_value:2123, reload:3947
shape_table[78] compare_value:2231, reload:4162
shape_table[79] compare_value:2341, reload:4382
shape_table[80] compare_value:2454, reload:4608
shape_table[81] compare_value:2570, reload:4840
shape_table[82] compare_value:2688, reload:5076
shape_table[83] compare_value:2808, reload:5317
shape_table[84] compare_value:2931, reload:5563
shape_table[85] compare_value:3056, reload:5813
shape_table[86] compare_value:3183, reload:6066
shape_table[87] compare_value:3312, reload:6324
shape_table[88] compare_value:3442, reload:6585
shape_table[89] compare_value:3575, reload:6850
shape_table[90] compare_value:3708, reload:7117
shape_table[91] compare_value:3844, reload:7388
shape_table[92] compare_value:3980, reload:7660
shape_table[93] compare_value:4117, reload:7935
shape_table[94] compare_value:4256, reload:8212
shape_table[95] compare_value:4395, reload:8491
shape_table[96] compare_value:4535, reload:8771
shape_table[97] compare_value:4676, reload:9052
shape_table[98] compare_value:4816, reload:9333
shape_table[99] compare_value:4958, reload:9616
....