Initializes a CAN interface with the passed baud rate.
33 static int CAN_A_in_use=0;
34 static int CAN_B_in_use=0;
38 switch(CAN_Int.
canrx){
39 case 10:
if(!CAN_B_in_use){
40 TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
canrx);
41 TMC_BASE_PIO->CTL[0].QSEL1 |= ((
Uint32)0x3 << 20);
42 TMC_BASE_PIO->CTL[0].MUX1 |= ((
Uint32)0x2 << 20);
43 switch(CAN_Int.
cantx){
44 case 8: TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
cantx);
45 TMC_BASE_PIO->CTL[0].MUX1 |= ((
Uint32)0x2 << 16);
47 case 12: TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
cantx);
48 TMC_BASE_PIO->CTL[0].MUX1 |= ((
Uint32)0x2 << 24);
50 case 16: TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
cantx);
51 TMC_BASE_PIO->CTL[0].MUX2 |= (0x2);
53 case 20: TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
cantx);
54 TMC_BASE_PIO->CTL[0].MUX2 |= (0x3 << 8);
65 case 13:
if(!CAN_B_in_use){
66 TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
canrx);
67 TMC_BASE_PIO->CTL[0].QSEL1 |= (0x3 << (CAN_Int.
canrx*2));
68 TMC_BASE_PIO->CTL[0].MUX1 |= ((
Uint32)0x2 << 26);
69 switch(CAN_Int.
cantx){
70 case 8: TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
cantx);
71 TMC_BASE_PIO->CTL[0].MUX1 |= ((
Uint32)0x2 << 16);
73 case 12: TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
cantx);
74 TMC_BASE_PIO->CTL[0].MUX1 |= ((
Uint32)0x2 << 24);
76 case 16: TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
cantx);
77 TMC_BASE_PIO->CTL[0].MUX2 |= (0x2);
79 case 20: TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
cantx);
80 TMC_BASE_PIO->CTL[0].MUX2 |= (0x3 << 8);
91 case 17:
if(!CAN_B_in_use){
92 TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
canrx);
93 TMC_BASE_PIO->CTL[0].QSEL2 |= (0x3 << 2);
94 TMC_BASE_PIO->CTL[0].MUX2 |= (0x2 << 2);
95 switch(CAN_Int.
cantx){
96 case 8: TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
cantx);
97 TMC_BASE_PIO->CTL[0].MUX1 |= ((
Uint32)0x2 << 16);
99 case 12: TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
cantx);
100 TMC_BASE_PIO->CTL[0].MUX1 |= ((
Uint32)0x2 << 24);
102 case 16: TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
cantx);
103 TMC_BASE_PIO->CTL[0].MUX2 |= (0x2);
105 case 20: TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
cantx);
106 TMC_BASE_PIO->CTL[0].MUX2 |= (0x3 << 8);
117 case 18:
if(!CAN_A_in_use){
118 TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
canrx);
119 TMC_BASE_PIO->CTL[0].QSEL2 |= (0x3 << 4);
120 TMC_BASE_PIO->CTL[0].MUX2 |= (0x3 << 4);
121 switch(CAN_Int.
cantx){
122 case 19: TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
cantx);
123 TMC_BASE_PIO->CTL[0].MUX2 |= (0x3 << 6);
125 case 31: TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
cantx);
126 TMC_BASE_PIO->CTL[0].MUX2 |= ((
Uint32)0x1 << 30);
137 case 21:
if(!CAN_B_in_use){
138 TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
canrx);
139 TMC_BASE_PIO->CTL[0].QSEL2 |= (0x3 << 10);
140 TMC_BASE_PIO->CTL[0].MUX2 |= (0x3 << 10);
141 switch(CAN_Int.
cantx){
142 case 8: TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
cantx);
143 TMC_BASE_PIO->CTL[0].MUX1 |= ((
Uint32)0x2 << 16);
145 case 12: TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
cantx);
146 TMC_BASE_PIO->CTL[0].MUX1 |= ((
Uint32)0x2 << 24);
148 case 16: TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
cantx);
149 TMC_BASE_PIO->CTL[0].MUX2 |= (0x2);
151 case 20: TMC_BASE_PIO->CTL[0].PUD &= ~(0x1 << CAN_Int.
cantx);
152 TMC_BASE_PIO->CTL[0].MUX2 |= (0x3 << 8);
163 case 30:
if(!CAN_A_in_use){
164 TMC_BASE_PIO->CTL[0].PUD &= ~((
Uint32)0x1 << CAN_Int.
canrx);
165 TMC_BASE_PIO->CTL[0].QSEL2 |= ((
Uint32)0x3 << 28);
166 TMC_BASE_PIO->CTL[0].MUX2 |= ((
Uint32)0x1 << 28);
167 switch(CAN_Int.
cantx){
168 case 19: TMC_BASE_PIO->CTL[0].PUD &= ~((
Uint32)0x1 << CAN_Int.
cantx);
169 TMC_BASE_PIO->CTL[0].MUX2 |= (0x3 << 6);
171 case 31: TMC_BASE_PIO->CTL[0].PUD &= ~((
Uint32)0x1 << CAN_Int.
cantx);
172 TMC_BASE_PIO->CTL[0].MUX2 |= ((
Uint32)0x1 << 30);
190 CAN->
MC |= (0x1 << 10);
191 CAN->
MC |= (0x1 << 13);
193 TMC_BASE_SCR->PCLKCR0 |= (0x1 << 14);
203 return CAN_setBaudrate(CAN, baudrate);