Может кому-то приходилось работать с российским контроллером ARM Cortex M3, не могу разобраться почему SSP (SPI Texas Instruments) в режиме slave, нестабильно работает.
Передаю данные с частотой 1.5 Мбит, но некоторые данные стабильно теряются, в чем может быть ошибка?
Код
void main()
{
.......................................................
MDR_RST_CLK->PER_CLOCK|=(1<<20)|(1<<23)|(1<<24);
MDR_PORTD->ANALOG|=(1<<2)|(1<<6);
MDR_PORTD->FUNC=0x2020;
MDR_PORTD->PWR|=0x3030;
MDR_PORTD->OE|=(1<<6);
// PS! PD5 is broken! Not work!
MDR_PORTC->ANALOG|=1|(1<<1);
MDR_PORTC->FUNC=0x0F;
MDR_PORTC->PWR|=0x0F;
MDR_RST_CLK->SSP_CLOCK|=(1<<25); // Enable SSP2
MDR_SSP2->CR0=15|(1<<4);
MDR_SSP2->CR1|=1<<2; // Slave
MDR_SSP2->CR1|=1<<1; // Start SSP2
...................................................................
}
{
.......................................................
MDR_RST_CLK->PER_CLOCK|=(1<<20)|(1<<23)|(1<<24);
MDR_PORTD->ANALOG|=(1<<2)|(1<<6);
MDR_PORTD->FUNC=0x2020;
MDR_PORTD->PWR|=0x3030;
MDR_PORTD->OE|=(1<<6);
// PS! PD5 is broken! Not work!
MDR_PORTC->ANALOG|=1|(1<<1);
MDR_PORTC->FUNC=0x0F;
MDR_PORTC->PWR|=0x0F;
MDR_RST_CLK->SSP_CLOCK|=(1<<25); // Enable SSP2
MDR_SSP2->CR0=15|(1<<4);
MDR_SSP2->CR1|=1<<2; // Slave
MDR_SSP2->CR1|=1<<1; // Start SSP2
...................................................................
}
Код
while (1)
{
...............
while((MDR_SSP2->SR&4)==0);
tx=MDR_SSP2->DR;
while((MDR_UART1->FR&64)!=0);
MDR_UART1->DR=tx;
...............
}
{
...............
while((MDR_SSP2->SR&4)==0);
tx=MDR_SSP2->DR;
while((MDR_UART1->FR&64)!=0);
MDR_UART1->DR=tx;
...............
}
В SSP передаю счетчик от 0 до 63, на выходе UART получаю со сбоями:
CODE
0
1
2
3
4
5
6
7
8
9
10
11
12
13
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
0
1
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
0
1
2
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
0
1
2
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
0
1
2
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
0
1
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
0
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
0
1
2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
37
38
39
40
41
42
43
44
45
46
47
1
2
3
4
5
6
7
8
9
10
11
12
13
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
0
1
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
0
1
2
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
0
1
2
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
0
1
2
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
0
1
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
0
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
0
1
2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
37
38
39
40
41
42
43
44
45
46
47
Спасибо!