Skip to content

Commit cb92733

Browse files
committed
minor bitbang refactor
1 parent ed2920c commit cb92733

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

board/drivers/canbitbang.h

+11-8
Original file line numberDiff line numberDiff line change
@@ -116,29 +116,34 @@ void set_bitbanged_gmlan(int val) {
116116
}
117117

118118
void bitbang_gmlan(CAN_FIFOMailBox_TypeDef *to_bang) {
119-
puts("called bitbang_gmlan\n");
120-
121119
char pkt_stuffed[MAX_BITS_CAN_PACKET];
122120
int len = get_bit_message(pkt_stuffed, to_bang);
123121

122+
// TODO: interrupts are disabled for a long time...
123+
enter_critical_section();
124+
124125
// actual bitbang loop
125126
set_bitbanged_gmlan(1); // recessive
126127
set_gpio_mode(GPIOB, 13, MODE_OUTPUT);
127-
enter_critical_section();
128128

129129
// 33.3 kbps
130130
#define SPEEED 30
131131

132132
// wait for bus silent for 7 frames
133133
int silent_count = 0;
134134
while (silent_count < 7) {
135+
if (silent_count > 0) {
136+
// bit time delay
137+
int lwait = TIM2->CNT;
138+
while (get_ts_elapsed(TIM2->CNT, lwait) < SPEEED);
139+
}
140+
141+
// check for silent
135142
int read = get_gpio_input(GPIOB, 12);
136143
silent_count++;
137144
if (read == 0) {
138145
silent_count = 0;
139146
}
140-
int lwait = TIM2->CNT;
141-
while (get_ts_elapsed(TIM2->CNT, lwait) < SPEEED);
142147
}
143148

144149
// send my message with optional failure
@@ -159,10 +164,8 @@ void bitbang_gmlan(CAN_FIFOMailBox_TypeDef *to_bang) {
159164

160165
fail:
161166
set_bitbanged_gmlan(1); // recessive
162-
exit_critical_section();
163167
set_gpio_mode(GPIOB, 13, MODE_INPUT);
164-
165-
puts("bitbang done\n");
168+
exit_critical_section();
166169
}
167170

168171
#endif

0 commit comments

Comments
 (0)