SHARE
TWEET

main.c

a guest May 3rd, 2011 343 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include        <util/delay.h>
  2. #include        <avr/io.h>
  3. #include        <avr/interrupt.h>
  4. #include        <avr/pgmspace.h>
  5. #include        <stdio.h>
  6. #include        <stdlib.h>
  7. #include        <stdint.h>
  8. #include        <string.h>
  9. #include        "can.h"
  10. #include        "uart.h"
  11.  
  12. //-----UART-Setup-----
  13. #define PRINT(string, ...)              printf_P(PSTR(string), ##__VA_ARGS__)
  14. static int putchar__(char c, FILE *stream) {
  15.         uart_putc(c);
  16.         return 0;
  17. }
  18. static FILE mystdout = FDEV_SETUP_STREAM(putchar__, 0, _FDEV_SETUP_WRITE);
  19. //--------------------
  20.  
  21. void delay(int sleep);
  22.  
  23. void init(void){
  24.         uart_init(UART_BAUD_SELECT(9600, F_CPU));
  25.         stdout = &mystdout;
  26.         sei();
  27.        
  28.         PRINT("Trying to init CAN...");
  29.         delay(1000);
  30.        
  31.         // Initialize MCP2515
  32.         if (!can_init(BITRATE_125_KBPS)) {
  33.                 PRINT("ERROR!\n\rError: Could not init CAN! Check Config!\n\r");
  34.                 for (;;);
  35.         }
  36.         else {
  37.                 PRINT("OK!\n\r");
  38.         }      
  39. }
  40.  
  41. int main(void)
  42. {
  43.         init();
  44.         PRINT("Initialization complete!\n\r\n\r");
  45.         PRINT("°°° Olimex AVR-CAN with UART, CAN and I2C-Connectivity °°°\n\r");
  46.        
  47.         can_t msg;
  48.         msg.id = 0x12;
  49.         msg.length = 2;
  50.         msg.data[0] = 0xAB;
  51.         msg.data[1] = 0xCD;
  52.         can_filter_t filter = {
  53.                 .id = 0,
  54.                 .mask = 0,
  55.                 .flags = {
  56.                         .rtr = 0
  57.                 }
  58.         };
  59.        
  60.         can_set_filter(0, &filter);
  61.         can_set_mode(LOOPBACK_MODE);
  62.        
  63.        
  64.         for(;;) {
  65.                
  66.                 if(!can_send_message(&msg)) PRINT("Could not send!\n\r");
  67.                 delay(300);
  68.                 if(can_check_message()) {
  69.                         PRINT("\n\rGot Something...\n\r");
  70.                 } else PRINT(".");
  71.                
  72.         }
  73.     return 0;
  74. }
  75.  
  76. void delay(int sleep)
  77. {
  78.         for(int x=0; x<=sleep; x++) {
  79.                 _delay_ms(1);
  80.         }
  81. }
RAW Paste Data
Top