/***************************************************************************** * * CAN Test-APP * * Compiler : avr-gcc 4.3.0 / avr-libc 1.6.2 / AVR Studio 4.14 * * AVR Memory Usage * ---------------- * Device: at90can128 * * Program: 1198 bytes (0.9% Full) * (.text + .data + .bootloader) * * Data: 26 bytes (0.6% Full) * (.data + .bss + .noinit) * * * Build succeeded with 0 Warnings... * * * by : Thomas Fuchs, Wolfsburg, Germany * linux@cc-robotics.de * * License : Copyright (c) 2009 Thomas Fuchs * * Tested with AT90CAN128 ****************************************************************************/ #include #include #include #include #include "utils.h" // CPU speed #define F_CPU 16000000UL // ggf. im Projekt definieren! //----- // CAN //----- // bitrates #define _10KBPS 0 // untested #define _20KBPS 1 // untested #define _50KBPS 2 // untested #define _100KBPS 3 #define _125KBPS 4 #define _250KBPS 5 #define _500KBPS 6 #define _1MBPS 7 // untested // global structs and variables // Struktur der CAN-Botschaft typedef struct { uint16_t id; // MSG ID 11 Bit uint16_t msk; // Mask for ID 11 Bit uint8_t length; // DLC length uint8_t data[8]; // Data field 8 Byte }CAN_messageType; // CAN 2.0 A message 11 Bit CAN_messageType msg; extern CAN_messageType recMsg; // external functions // externe Funktionen extern bool initCAN(uint8_t bitrate);; extern void can_tx(CAN_messageType msg); extern void configRX(); /***************************************************************************/ //delay routine (milliseconds) //Funktion um x Millisekunden zu warten void delay_ms(uint16_t period) { for(unsigned int i=0; i<=period; i++) _delay_ms(1); } // initializes all recommended interfaces // Initialisierung static bool initialize() { // Init CAN interface // Init-Funktion für CAN aufrufen mit 100KBPS // mit Sicherheitsabfrage ob erfolgreich if(initCAN(_100KBPS)); else return false; // Empfang konfigurieren configRX(); // alle globalen Interrupts nach der Initialisierung einschalten sei(); //activate global interrups return true; } // main, progstart // Start des Hauptprogramms int main() { // Initialisieren while(!(initialize())); // Testnachricht //--------------- // send: Test OK msg.length = 7; msg.id = 0x024; msg.data[0] = 0x54; msg.data[1] = 0x65; msg.data[2] = 0x73; msg.data[3] = 0x74; msg.data[4] = 0x20; msg.data[5] = 0x4F; msg.data[6] = 0x4B; // Funktion zum Senden mit der erstellten Nachricht aufrufen can_tx(msg); while (1) { // warte auf CAN-Nachricht per Interrupt... } }