PDU_Code/build/CAN_Communication.lst

404 lines
21 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

ARM GAS C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s page 1
1 .cpu cortex-m4
2 .arch armv7e-m
3 .fpu fpv4-sp-d16
4 .eabi_attribute 27, 1
5 .eabi_attribute 28, 1
6 .eabi_attribute 20, 1
7 .eabi_attribute 21, 1
8 .eabi_attribute 23, 3
9 .eabi_attribute 24, 1
10 .eabi_attribute 25, 1
11 .eabi_attribute 26, 1
12 .eabi_attribute 30, 1
13 .eabi_attribute 34, 1
14 .eabi_attribute 18, 4
15 .file "CAN_Communication.c"
16 .text
17 .Ltext0:
18 .cfi_sections .debug_frame
19 .file 1 "Core/Src/CAN_Communication.c"
20 .section .text.can_init,"ax",%progbits
21 .align 1
22 .global can_init
23 .syntax unified
24 .thumb
25 .thumb_func
27 can_init:
28 .LVL0:
29 .LFB130:
1:Core/Src/CAN_Communication.c **** /*
2:Core/Src/CAN_Communication.c **** * CAN_Communication.c
3:Core/Src/CAN_Communication.c **** *
4:Core/Src/CAN_Communication.c **** * Created on: 24. April, 2024
5:Core/Src/CAN_Communication.c **** * Author: nived
6:Core/Src/CAN_Communication.c **** */
7:Core/Src/CAN_Communication.c **** #include "CAN_Communication.h"
8:Core/Src/CAN_Communication.c **** #include "Channel_Control.h"
9:Core/Src/CAN_Communication.c **** #include "Current_Monitoring.h"
10:Core/Src/CAN_Communication.c ****
11:Core/Src/CAN_Communication.c **** rx_status_frame rxstate = {};
12:Core/Src/CAN_Communication.c **** volatile uint8_t canmsg_received = 0;
13:Core/Src/CAN_Communication.c **** extern PortExtenderGPIO EN_Ports;
14:Core/Src/CAN_Communication.c **** extern CurrentMeasurements current_measurements_adc_val;
15:Core/Src/CAN_Communication.c ****
16:Core/Src/CAN_Communication.c **** void can_init(CAN_HandleTypeDef* hcan) {
30 .loc 1 16 40 view -0
31 .cfi_startproc
32 @ args = 0, pretend = 0, frame = 0
33 @ frame_needed = 0, uses_anonymous_args = 0
34 .loc 1 16 40 is_stmt 0 view .LVU1
35 0000 08B5 push {r3, lr}
36 .cfi_def_cfa_offset 8
37 .cfi_offset 3, -8
38 .cfi_offset 14, -4
17:Core/Src/CAN_Communication.c **** ftcan_init(hcan);
39 .loc 1 17 3 is_stmt 1 view .LVU2
40 0002 FFF7FEFF bl ftcan_init
41 .LVL1:
ARM GAS C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s page 2
18:Core/Src/CAN_Communication.c **** ftcan_add_filter(0x00, 0x00); // No Filter
42 .loc 1 18 3 view .LVU3
43 0006 0021 movs r1, #0
44 0008 0846 mov r0, r1
45 000a FFF7FEFF bl ftcan_add_filter
46 .LVL2:
19:Core/Src/CAN_Communication.c **** }
47 .loc 1 19 1 is_stmt 0 view .LVU4
48 000e 08BD pop {r3, pc}
49 .cfi_endproc
50 .LFE130:
52 .section .text.can_sendloop,"ax",%progbits
53 .align 1
54 .global can_sendloop
55 .syntax unified
56 .thumb
57 .thumb_func
59 can_sendloop:
60 .LFB131:
20:Core/Src/CAN_Communication.c ****
21:Core/Src/CAN_Communication.c **** void can_sendloop() {
61 .loc 1 21 21 is_stmt 1 view -0
62 .cfi_startproc
63 @ args = 0, pretend = 0, frame = 8
64 @ frame_needed = 0, uses_anonymous_args = 0
65 0000 00B5 push {lr}
66 .cfi_def_cfa_offset 4
67 .cfi_offset 14, -4
68 0002 83B0 sub sp, sp, #12
69 .cfi_def_cfa_offset 16
22:Core/Src/CAN_Communication.c **** static uint8_t additionaltxcouter = 0;
70 .loc 1 22 3 view .LVU6
23:Core/Src/CAN_Communication.c ****
24:Core/Src/CAN_Communication.c **** uint8_t status_data[7];
71 .loc 1 24 3 view .LVU7
25:Core/Src/CAN_Communication.c **** status_data[0] = EN_Ports.porta.porta;
72 .loc 1 25 3 view .LVU8
73 .loc 1 25 34 is_stmt 0 view .LVU9
74 0004 0F4B ldr r3, .L5
75 0006 1A78 ldrb r2, [r3] @ zero_extendqisi2
76 .loc 1 25 18 view .LVU10
77 0008 8DF80020 strb r2, [sp]
26:Core/Src/CAN_Communication.c **** status_data[1] = EN_Ports.portb.portb;
78 .loc 1 26 3 is_stmt 1 view .LVU11
79 .loc 1 26 34 is_stmt 0 view .LVU12
80 000c 5B78 ldrb r3, [r3, #1] @ zero_extendqisi2
81 .loc 1 26 18 view .LVU13
82 000e 8DF80130 strb r3, [sp, #1]
27:Core/Src/CAN_Communication.c **** status_data[2] = rxstate.tsacfans;
83 .loc 1 27 3 is_stmt 1 view .LVU14
84 .loc 1 27 27 is_stmt 0 view .LVU15
85 0012 0D4B ldr r3, .L5+4
86 0014 DA78 ldrb r2, [r3, #3] @ zero_extendqisi2
87 .loc 1 27 18 view .LVU16
88 0016 8DF80220 strb r2, [sp, #2]
28:Core/Src/CAN_Communication.c **** status_data[3] = rxstate.radiatorfans;
89 .loc 1 28 3 is_stmt 1 view .LVU17
ARM GAS C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s page 3
90 .loc 1 28 27 is_stmt 0 view .LVU18
91 001a 9A78 ldrb r2, [r3, #2] @ zero_extendqisi2
92 .loc 1 28 18 view .LVU19
93 001c 8DF80320 strb r2, [sp, #3]
29:Core/Src/CAN_Communication.c **** status_data[4] = rxstate.pwmaggregat;
94 .loc 1 29 3 is_stmt 1 view .LVU20
95 .loc 1 29 27 is_stmt 0 view .LVU21
96 0020 1A79 ldrb r2, [r3, #4] @ zero_extendqisi2
97 .loc 1 29 18 view .LVU22
98 0022 8DF80420 strb r2, [sp, #4]
30:Core/Src/CAN_Communication.c **** status_data[5] = rxstate.cooling_pump;
99 .loc 1 30 3 is_stmt 1 view .LVU23
100 .loc 1 30 27 is_stmt 0 view .LVU24
101 0026 5A79 ldrb r2, [r3, #5] @ zero_extendqisi2
102 .loc 1 30 18 view .LVU25
103 0028 8DF80520 strb r2, [sp, #5]
31:Core/Src/CAN_Communication.c **** status_data[6] = 0xFF ^ rxstate.checksum;
104 .loc 1 31 3 is_stmt 1 view .LVU26
105 .loc 1 31 34 is_stmt 0 view .LVU27
106 002c 9B79 ldrb r3, [r3, #6] @ zero_extendqisi2
107 .loc 1 31 18 view .LVU28
108 002e DB43 mvns r3, r3
109 0030 8DF80630 strb r3, [sp, #6]
32:Core/Src/CAN_Communication.c **** ftcan_transmit(TX_STATUS_MSG_ID, status_data, 7);
110 .loc 1 32 3 is_stmt 1 view .LVU29
111 0034 0722 movs r2, #7
112 0036 6946 mov r1, sp
113 0038 C920 movs r0, #201
114 003a FFF7FEFF bl ftcan_transmit
115 .LVL3:
33:Core/Src/CAN_Communication.c ****
34:Core/Src/CAN_Communication.c **** uint8_t data[8];
116 .loc 1 34 3 view .LVU30
35:Core/Src/CAN_Communication.c **** return;
117 .loc 1 35 1 view .LVU31
36:Core/Src/CAN_Communication.c **** if (additionaltxcouter < 4) {
37:Core/Src/CAN_Communication.c **** switch (additionaltxcouter) {
38:Core/Src/CAN_Communication.c **** case 0:
39:Core/Src/CAN_Communication.c ****
40:Core/Src/CAN_Communication.c **** data[0] = current_measurements_adc_val.always_on >> 8;
41:Core/Src/CAN_Communication.c **** data[1] = current_measurements_adc_val.always_on & 0xFF;
42:Core/Src/CAN_Communication.c **** data[2] = current_measurements_adc_val.misc >> 8;
43:Core/Src/CAN_Communication.c **** data[3] = current_measurements_adc_val.misc & 0xFF;
44:Core/Src/CAN_Communication.c **** data[4] = current_measurements_adc_val.inverters >> 8;
45:Core/Src/CAN_Communication.c **** data[5] = current_measurements_adc_val.inverters & 0xFF;
46:Core/Src/CAN_Communication.c **** data[6] = current_measurements_adc_val.sdc >> 8;
47:Core/Src/CAN_Communication.c **** data[7] = current_measurements_adc_val.sdc & 0xFF;
48:Core/Src/CAN_Communication.c **** ftcan_transmit(CUR_CHANNELS_1_ID, data, 8);
49:Core/Src/CAN_Communication.c ****
50:Core/Src/CAN_Communication.c **** break;
51:Core/Src/CAN_Communication.c **** case 1:
52:Core/Src/CAN_Communication.c ****
53:Core/Src/CAN_Communication.c **** data[0] = current_measurements_adc_val.tsac_fans >> 8;
54:Core/Src/CAN_Communication.c **** data[1] = current_measurements_adc_val.tsac_fans & 0xFF;
55:Core/Src/CAN_Communication.c **** data[2] = current_measurements_adc_val.cooling_pump >> 8;
56:Core/Src/CAN_Communication.c **** data[3] = current_measurements_adc_val.cooling_pump & 0xFF;
57:Core/Src/CAN_Communication.c **** data[4] = current_measurements_adc_val.aggregat >> 8;
ARM GAS C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s page 4
58:Core/Src/CAN_Communication.c **** data[5] = current_measurements_adc_val.aggregat & 0xFF;
59:Core/Src/CAN_Communication.c **** data[6] = current_measurements_adc_val.epsc >> 8;
60:Core/Src/CAN_Communication.c **** data[7] = current_measurements_adc_val.epsc & 0xFF;
61:Core/Src/CAN_Communication.c **** ftcan_transmit(CUR_CHANNELS_2_ID, data, 8);
62:Core/Src/CAN_Communication.c ****
63:Core/Src/CAN_Communication.c **** break;
64:Core/Src/CAN_Communication.c **** case 2:
65:Core/Src/CAN_Communication.c ****
66:Core/Src/CAN_Communication.c **** data[0] = current_measurements_adc_val.ebsvalve_a >> 8;
67:Core/Src/CAN_Communication.c **** data[1] = current_measurements_adc_val.ebsvalve_a & 0xFF;
68:Core/Src/CAN_Communication.c **** data[2] = current_measurements_adc_val.ebsvalve_b >> 8;
69:Core/Src/CAN_Communication.c **** data[3] = current_measurements_adc_val.ebsvalve_b & 0xFF;
70:Core/Src/CAN_Communication.c **** data[4] = current_measurements_adc_val.ebs_cs_valve >> 8;
71:Core/Src/CAN_Communication.c **** data[5] = current_measurements_adc_val.ebs_cs_valve & 0xFF;
72:Core/Src/CAN_Communication.c **** data[6] = current_measurements_adc_val.gss >> 8;
73:Core/Src/CAN_Communication.c **** data[7] = current_measurements_adc_val.gss & 0xFF;
74:Core/Src/CAN_Communication.c **** ftcan_transmit(CUR_CHANNELS_3_ID, data, 8);
75:Core/Src/CAN_Communication.c ****
76:Core/Src/CAN_Communication.c **** break;
77:Core/Src/CAN_Communication.c **** case 3:
78:Core/Src/CAN_Communication.c ****
79:Core/Src/CAN_Communication.c **** data[0] = current_measurements_adc_val.radiator_fans >> 8;
80:Core/Src/CAN_Communication.c **** data[1] = current_measurements_adc_val.radiator_fans & 0xFF;
81:Core/Src/CAN_Communication.c **** data[2] = current_measurements_adc_val.acu >> 8;
82:Core/Src/CAN_Communication.c **** data[3] = current_measurements_adc_val.acu & 0xFF;
83:Core/Src/CAN_Communication.c **** data[4] = current_measurements_adc_val.servos >> 8;
84:Core/Src/CAN_Communication.c **** data[5] = current_measurements_adc_val.servos & 0xFF;
85:Core/Src/CAN_Communication.c **** data[6] = current_measurements_adc_val.lidar >> 8;
86:Core/Src/CAN_Communication.c **** data[7] = current_measurements_adc_val.lidar & 0xFF;
87:Core/Src/CAN_Communication.c **** ftcan_transmit(CUR_CHANNELS_4_ID, data, 8);
88:Core/Src/CAN_Communication.c ****
89:Core/Src/CAN_Communication.c **** break;
90:Core/Src/CAN_Communication.c **** default:
91:Core/Src/CAN_Communication.c **** break;
92:Core/Src/CAN_Communication.c **** }
93:Core/Src/CAN_Communication.c **** additionaltxcouter++;
94:Core/Src/CAN_Communication.c **** } else {
95:Core/Src/CAN_Communication.c **** additionaltxcouter = 0;
96:Core/Src/CAN_Communication.c **** }
97:Core/Src/CAN_Communication.c **** }
118 .loc 1 97 1 is_stmt 0 view .LVU32
119 003e 03B0 add sp, sp, #12
120 .cfi_def_cfa_offset 4
121 @ sp needed
122 0040 5DF804FB ldr pc, [sp], #4
123 .L6:
124 .align 2
125 .L5:
126 0044 00000000 .word EN_Ports
127 0048 00000000 .word rxstate
128 .cfi_endproc
129 .LFE131:
131 .section .text.ftcan_msg_received_cb,"ax",%progbits
132 .align 1
133 .global ftcan_msg_received_cb
134 .syntax unified
135 .thumb
ARM GAS C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s page 5
136 .thumb_func
138 ftcan_msg_received_cb:
139 .LVL4:
140 .LFB132:
98:Core/Src/CAN_Communication.c ****
99:Core/Src/CAN_Communication.c **** void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t* data) {
141 .loc 1 99 78 is_stmt 1 view -0
142 .cfi_startproc
143 @ args = 0, pretend = 0, frame = 0
144 @ frame_needed = 0, uses_anonymous_args = 0
145 @ link register save eliminated.
100:Core/Src/CAN_Communication.c **** canmsg_received = 1;
146 .loc 1 100 3 view .LVU34
147 .loc 1 100 19 is_stmt 0 view .LVU35
148 0000 0C4B ldr r3, .L10
149 0002 4FF0010C mov ip, #1
150 0006 83F800C0 strb ip, [r3]
101:Core/Src/CAN_Communication.c **** if ((id == RX_STATUS_MSG_ID) && (datalen == 7)) {
151 .loc 1 101 3 is_stmt 1 view .LVU36
152 .loc 1 101 6 is_stmt 0 view .LVU37
153 000a C828 cmp r0, #200
154 000c 00D0 beq .L9
155 .LVL5:
156 .L7:
102:Core/Src/CAN_Communication.c **** rxstate.iostatus.porta.porta = data[0];
103:Core/Src/CAN_Communication.c **** rxstate.iostatus.portb.portb = data[1];
104:Core/Src/CAN_Communication.c **** rxstate.radiatorfans = data[2];
105:Core/Src/CAN_Communication.c **** rxstate.tsacfans = data[3];
106:Core/Src/CAN_Communication.c **** rxstate.pwmaggregat = data[4];
107:Core/Src/CAN_Communication.c **** rxstate.cooling_pump = data[5];
108:Core/Src/CAN_Communication.c **** rxstate.checksum = data[6];
109:Core/Src/CAN_Communication.c **** }
110:Core/Src/CAN_Communication.c **** }
157 .loc 1 110 1 view .LVU38
158 000e 7047 bx lr
159 .LVL6:
160 .L9:
101:Core/Src/CAN_Communication.c **** if ((id == RX_STATUS_MSG_ID) && (datalen == 7)) {
161 .loc 1 101 32 discriminator 1 view .LVU39
162 0010 0729 cmp r1, #7
163 0012 FCD1 bne .L7
102:Core/Src/CAN_Communication.c **** rxstate.iostatus.porta.porta = data[0];
164 .loc 1 102 5 is_stmt 1 view .LVU40
102:Core/Src/CAN_Communication.c **** rxstate.iostatus.porta.porta = data[0];
165 .loc 1 102 40 is_stmt 0 view .LVU41
166 0014 1178 ldrb r1, [r2] @ zero_extendqisi2
167 .LVL7:
102:Core/Src/CAN_Communication.c **** rxstate.iostatus.porta.porta = data[0];
168 .loc 1 102 34 view .LVU42
169 0016 084B ldr r3, .L10+4
170 0018 1970 strb r1, [r3]
103:Core/Src/CAN_Communication.c **** rxstate.radiatorfans = data[2];
171 .loc 1 103 5 is_stmt 1 view .LVU43
103:Core/Src/CAN_Communication.c **** rxstate.radiatorfans = data[2];
172 .loc 1 103 40 is_stmt 0 view .LVU44
173 001a 5178 ldrb r1, [r2, #1] @ zero_extendqisi2
103:Core/Src/CAN_Communication.c **** rxstate.radiatorfans = data[2];
ARM GAS C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s page 6
174 .loc 1 103 34 view .LVU45
175 001c 5970 strb r1, [r3, #1]
104:Core/Src/CAN_Communication.c **** rxstate.tsacfans = data[3];
176 .loc 1 104 5 is_stmt 1 view .LVU46
104:Core/Src/CAN_Communication.c **** rxstate.tsacfans = data[3];
177 .loc 1 104 32 is_stmt 0 view .LVU47
178 001e 9178 ldrb r1, [r2, #2] @ zero_extendqisi2
104:Core/Src/CAN_Communication.c **** rxstate.tsacfans = data[3];
179 .loc 1 104 26 view .LVU48
180 0020 9970 strb r1, [r3, #2]
105:Core/Src/CAN_Communication.c **** rxstate.pwmaggregat = data[4];
181 .loc 1 105 5 is_stmt 1 view .LVU49
105:Core/Src/CAN_Communication.c **** rxstate.pwmaggregat = data[4];
182 .loc 1 105 28 is_stmt 0 view .LVU50
183 0022 D178 ldrb r1, [r2, #3] @ zero_extendqisi2
105:Core/Src/CAN_Communication.c **** rxstate.pwmaggregat = data[4];
184 .loc 1 105 22 view .LVU51
185 0024 D970 strb r1, [r3, #3]
106:Core/Src/CAN_Communication.c **** rxstate.cooling_pump = data[5];
186 .loc 1 106 5 is_stmt 1 view .LVU52
106:Core/Src/CAN_Communication.c **** rxstate.cooling_pump = data[5];
187 .loc 1 106 31 is_stmt 0 view .LVU53
188 0026 1179 ldrb r1, [r2, #4] @ zero_extendqisi2
106:Core/Src/CAN_Communication.c **** rxstate.cooling_pump = data[5];
189 .loc 1 106 25 view .LVU54
190 0028 1971 strb r1, [r3, #4]
107:Core/Src/CAN_Communication.c **** rxstate.checksum = data[6];
191 .loc 1 107 5 is_stmt 1 view .LVU55
107:Core/Src/CAN_Communication.c **** rxstate.checksum = data[6];
192 .loc 1 107 32 is_stmt 0 view .LVU56
193 002a 5179 ldrb r1, [r2, #5] @ zero_extendqisi2
107:Core/Src/CAN_Communication.c **** rxstate.checksum = data[6];
194 .loc 1 107 26 view .LVU57
195 002c 5971 strb r1, [r3, #5]
108:Core/Src/CAN_Communication.c **** }
196 .loc 1 108 5 is_stmt 1 view .LVU58
108:Core/Src/CAN_Communication.c **** }
197 .loc 1 108 28 is_stmt 0 view .LVU59
198 002e 9279 ldrb r2, [r2, #6] @ zero_extendqisi2
199 .LVL8:
108:Core/Src/CAN_Communication.c **** }
200 .loc 1 108 22 view .LVU60
201 0030 9A71 strb r2, [r3, #6]
202 .loc 1 110 1 view .LVU61
203 0032 ECE7 b .L7
204 .L11:
205 .align 2
206 .L10:
207 0034 00000000 .word canmsg_received
208 0038 00000000 .word rxstate
209 .cfi_endproc
210 .LFE132:
212 .global canmsg_received
213 .section .bss.canmsg_received,"aw",%nobits
216 canmsg_received:
217 0000 00 .space 1
218 .global rxstate
ARM GAS C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s page 7
219 .section .bss.rxstate,"aw",%nobits
220 .align 2
223 rxstate:
224 0000 00000000 .space 8
224 00000000
225 .text
226 .Letext0:
227 .file 2 "c:\\users\\nived\\appdata\\roaming\\code\\user\\globalstorage\\bmd.stm32-for-vscode\\@xpa
228 .file 3 "c:\\users\\nived\\appdata\\roaming\\code\\user\\globalstorage\\bmd.stm32-for-vscode\\@xpa
229 .file 4 "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f302xc.h"
230 .file 5 "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h"
231 .file 6 "c:\\users\\nived\\appdata\\roaming\\code\\user\\globalstorage\\bmd.stm32-for-vscode\\@xpa
232 .file 7 "Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_def.h"
233 .file 8 "Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_hal_can.h"
234 .file 9 "Core/Inc/Channel_Control.h"
235 .file 10 "Core/Inc/CAN_Communication.h"
236 .file 11 "Core/Inc/can-halal.h"
ARM GAS C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s page 8
DEFINED SYMBOLS
*ABS*:00000000 CAN_Communication.c
C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s:21 .text.can_init:00000000 $t
C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s:27 .text.can_init:00000000 can_init
C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s:53 .text.can_sendloop:00000000 $t
C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s:59 .text.can_sendloop:00000000 can_sendloop
C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s:126 .text.can_sendloop:00000044 $d
C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s:223 .bss.rxstate:00000000 rxstate
C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s:132 .text.ftcan_msg_received_cb:00000000 $t
C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s:138 .text.ftcan_msg_received_cb:00000000 ftcan_msg_received_cb
C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s:207 .text.ftcan_msg_received_cb:00000034 $d
C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s:216 .bss.canmsg_received:00000000 canmsg_received
C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s:217 .bss.canmsg_received:00000000 $d
C:\Users\nived\AppData\Local\Temp\ccHsRWp9.s:220 .bss.rxstate:00000000 $d
UNDEFINED SYMBOLS
ftcan_init
ftcan_add_filter
ftcan_transmit
EN_Ports