32 #ifdef SUPPORT_FOR_AT90CAN__ 34 #include <avr/pgmspace.h> 84 #if CAN_RX_BUFFER_SIZE > 0 88 volatile uint8_t _messages_waiting;
91 #if CAN_TX_BUFFER_SIZE > 0 95 volatile uint8_t _transmission_in_progress = 0;
105 #if CAN_TX_BUFFER_SIZE == 0 106 if (_free_buffer == 0)
108 #elif CAN_FORCE_TX_ORDER 109 if (_transmission_in_progress)
114 for (i = 0;i < 15;i++)
120 if ((CANCDMOB & ((1 << CONMOB1) | (1 << CONMOB0))) == 0)
130 void _disable_mob_interrupt(
uint8_t mob)
133 CANIE2 &= ~(1 << mob);
135 CANIE1 &= ~(1 << (mob - 8));
141 void _enable_mob_interrupt(
uint8_t mob)
144 CANIE2 |= (1 << mob);
146 CANIE1 |= (1 << (mob - 8));
151 bool at90can_init(
uint8_t bitrate)
157 CANGCON |= (1 << SWRES);
161 CANBT1 = pgm_read_byte(&_at90can_cnf[bitrate][0]);
162 CANBT2 = pgm_read_byte(&_at90can_cnf[bitrate][1]);
163 CANBT3 = pgm_read_byte(&_at90can_cnf[bitrate][2]);
167 CANGIE = (1 << ENIT) | (1 << ENRX) | (1 << ENTX);
174 at90can_disable_filter( 0xff );
176 #if CAN_RX_BUFFER_SIZE > 0 180 #if CAN_TX_BUFFER_SIZE > 0 185 CANGCON = (1 << ENASTB);
199 if ((CANHPMOB & 0xF0) != 0xF0)
205 CANPAGE = CANHPMOB & 0xF0;
206 mob = (CANHPMOB >> 4);
209 if (CANSTMOB & (1 << TXOK))
215 #if CAN_TX_BUFFER_SIZE > 0 221 at90can_copy_message_to_mob( buf );
225 CANCDMOB |= (1<<CONMOB0);
229 _disable_mob_interrupt(mob);
230 _transmission_in_progress = 0;
237 CANIE2 &= ~(1 << mob);
239 CANIE1 &= ~(1 << (mob - 8));
246 #if CAN_RX_BUFFER_SIZE > 0 252 at90can_copy_mob_to_message( buf );
264 CANCDMOB = (1 << CONMOB1) | (CANCDMOB & (1 <<
IDE));
270 CANIE2 &= ~(1 << mob);
272 CANIE1 &= ~(1 << (mob - 8));
292 #endif // SUPPORT_FOR_AT90CAN__
can_t * can_buffer_get_dequeue_ptr(can_buffer_t *buf)
void can_buffer_init(can_buffer_t *buf, uint8_t size, can_t *list)
void can_buffer_dequeue(can_buffer_t *buf)
#define CAN_INDICATE_RX_TRAFFIC_FUNCTION
#define CAN_TX_BUFFER_SIZE
const uint8_t can_filter [] PROGMEM
#define CAN_RX_BUFFER_SIZE
#define CAN_INDICATE_TX_TRAFFIC_FUNCTION
Datenstruktur zum Aufnehmen von CAN Nachrichten.
void can_buffer_enqueue(can_buffer_t *buf)
can_t * can_buffer_get_enqueue_ptr(can_buffer_t *buf)