driver/fw: DMA burst works

This commit is contained in:
jaseg 2023-08-27 23:51:11 +02:00
parent ec28fcd9f9
commit e54c5479c3

View file

@ -8,6 +8,265 @@ uint32_t read_fuse_monitor(void);
void set_rj45_leds(uint32_t leds);
void set_status_leds(uint32_t leds);
uint16_t waveform[512] = {
128, 255,
131, 255,
134, 255,
137, 255,
140, 254,
143, 254,
146, 254,
149, 253,
152, 253,
155, 252,
158, 251,
162, 250,
165, 250,
167, 249,
170, 248,
173, 246,
176, 245,
179, 244,
182, 243,
185, 241,
188, 240,
190, 238,
193, 237,
196, 235,
198, 234,
201, 232,
203, 230,
206, 228,
208, 226,
211, 224,
213, 222,
215, 220,
218, 218,
220, 215,
222, 213,
224, 211,
226, 208,
228, 206,
230, 203,
232, 201,
234, 198,
235, 196,
237, 193,
238, 190,
240, 188,
241, 185,
243, 182,
244, 179,
245, 176,
246, 173,
248, 170,
249, 167,
250, 165,
250, 162,
251, 158,
252, 155,
253, 152,
253, 149,
254, 146,
254, 143,
254, 140,
255, 137,
255, 134,
255, 131,
255, 128,
255, 124,
255, 121,
255, 118,
254, 115,
254, 112,
254, 109,
253, 106,
253, 103,
252, 100,
251, 97,
250, 93,
250, 90,
249, 88,
248, 85,
246, 82,
245, 79,
244, 76,
243, 73,
241, 70,
240, 67,
238, 65,
237, 62,
235, 59,
234, 57,
232, 54,
230, 52,
228, 49,
226, 47,
224, 44,
222, 42,
220, 40,
218, 37,
215, 35,
213, 33,
211, 31,
208, 29,
206, 27,
203, 25,
201, 23,
198, 21,
196, 20,
193, 18,
190, 17,
188, 15,
185, 14,
182, 12,
179, 11,
176, 10,
173, 9,
170, 7,
167, 6,
165, 5,
162, 5,
158, 4,
155, 3,
152, 2,
149, 2,
146, 1,
143, 1,
140, 1,
137, 0,
134, 0,
131, 0,
128, 0,
124, 0,
121, 0,
118, 0,
115, 1,
112, 1,
109, 1,
106, 2,
103, 2,
100, 3,
97, 4,
93, 5,
90, 5,
88, 6,
85, 7,
82, 9,
79, 10,
76, 11,
73, 12,
70, 14,
67, 15,
65, 17,
62, 18,
59, 20,
57, 21,
54, 23,
52, 25,
49, 27,
47, 29,
44, 31,
42, 33,
40, 35,
37, 37,
35, 40,
33, 42,
31, 44,
29, 47,
27, 49,
25, 52,
23, 54,
21, 57,
20, 59,
18, 62,
17, 65,
15, 67,
14, 70,
12, 73,
11, 76,
10, 79,
9, 82,
7, 85,
6, 88,
5, 90,
5, 93,
4, 97,
3, 100,
2, 103,
2, 106,
1, 109,
1, 112,
1, 115,
0, 118,
0, 121,
0, 124,
0, 127,
0, 131,
0, 134,
0, 137,
1, 140,
1, 143,
1, 146,
2, 149,
2, 152,
3, 155,
4, 158,
5, 162,
5, 165,
6, 167,
7, 170,
9, 173,
10, 176,
11, 179,
12, 182,
14, 185,
15, 188,
17, 190,
18, 193,
20, 196,
21, 198,
23, 201,
25, 203,
27, 206,
29, 208,
31, 211,
33, 213,
35, 215,
37, 218,
40, 220,
42, 222,
44, 224,
47, 226,
49, 228,
52, 230,
54, 232,
57, 234,
59, 235,
62, 237,
65, 238,
67, 240,
70, 241,
73, 243,
76, 244,
79, 245,
82, 246,
85, 248,
88, 249,
90, 250,
93, 250,
97, 251,
100, 252,
103, 253,
106, 253,
109, 254,
112, 254,
115, 254,
118, 255,
121, 255,
124, 255,
};
int main(void) {
/* Configure clocks for 168 MHz system clock.
@ -100,6 +359,7 @@ int main(void) {
OUT(10) | OUT(11) | OUT(12) | OUT(13) | OUT(14) | OUT(15);
GPIOB->AFR[0] = AFRL(0, 2) | AFRL(1, 2) | AFRL(3, 1) | AFRL(6, 6) | AFRL(7, 6);
GPIOB->AFR[1] = AFRH(8, 4) | AFRH(9, 4);
GPIOB->OSPEEDR = (3<<0) | (3<<1) | (3<<3);
/* GPIOC:
* C0-C3: (testpoint)
@ -118,6 +378,7 @@ int main(void) {
IN(6) | IN(7) | IN(8) |
AF(10);
GPIOC->AFR[1] = AFRH(10, 2);
GPIOC->OSPEEDR = (3<<10);
/* GPIOD:
* D0-D6: (testpoint)
@ -127,14 +388,25 @@ int main(void) {
GPIOD->MODER = IN(0) | IN(1) | IN(2) | IN(3) | IN(4) | IN(5) | IN(6) |
IN(8) | IN(9);
TIM1->CCMR1 = (6<<TIM_CCMR1_OC2M_Pos);
TIM1->CCMR2 = (6<<TIM_CCMR2_OC3M_Pos);
TIM1->CCMR1 = (6<<TIM_CCMR1_OC2M_Pos) | TIM_CCMR1_OC2PE;
TIM1->CCMR2 = (6<<TIM_CCMR2_OC3M_Pos) | TIM_CCMR2_OC3PE;
TIM1->CCER = TIM_CCER_CC2E | TIM_CCER_CC2NE | TIM_CCER_CC3E | TIM_CCER_CC3NE;
TIM1->BDTR = TIM_BDTR_MOE | (32<<TIM_BDTR_DTG_Pos);
TIM1->PSC = 0;
TIM1->BDTR = TIM_BDTR_MOE | (32<<TIM_BDTR_DTG_Pos) | TIM_BDTR_MOE;
TIM1->DCR = (14<<TIM_DCR_DBA_Pos) | (1<<TIM_DCR_DBL_Pos);
TIM1->PSC = 4;
TIM1->ARR = 256;
TIM1->CCR2 = 64;
TIM1->CCR3 = 192;
TIM1->DIER = TIM_DIER_UDE;
TIM1->CR1 |= TIM_CR1_CEN;
DMAMUX1->CCR = 25;
DMA1_Channel1->CCR = (1<<DMA_CCR_MSIZE_Pos) | (1<<DMA_CCR_PSIZE_Pos) | DMA_CCR_MINC | DMA_CCR_CIRC | DMA_CCR_DIR | DMA_CCR_TCIE;
DMA1_Channel1->CNDTR = COUNT_OF(waveform);
DMA1_Channel1->CPAR = &TIM1->DMAR;
DMA1_Channel1->CMAR = &waveform;
DMA1_Channel1->CCR |= DMA_CCR_EN;
int i = 0;
int j = 0;
while (23) {