Subversion Repositories HomeAutomation

Rev

Details | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
61 jimmy 1
/**
2
 * CAN test program.
3
 *
4
 * @target  AVR
5
 * @date    2006-10-29
6
 * @author  Jimmy Myhrman
7
 *  
8
 */
9
 
10
/*-----------------------------------------------------------------------------
11
 * Includes
12
 *---------------------------------------------------------------------------*/
13
/* system files */
14
#include <avr/io.h>
15
#include <avr/interrupt.h>
16
#include <avr/wdt.h>
17
#include <stdio.h>
18
/* lib files */
19
#include <can.h>
20
#include <uart.h>
21
#include <timebase.h>
22
#include <protocol.h>
23
 
24
 
25
/*-----------------------------------------------------------------------------
26
 * Main Program
27
 *---------------------------------------------------------------------------*/
28
int main(void) {
127 jimmy 29
    Timebase_Init();
30
    Uart_Init();
61 jimmy 31
    sei();
32
 
33
    printf("\n------------------------------\n");
34
    printf("   CAN Monitor\n");
35
    printf("------------------------------\n");
36
 
37
    printf("CanInit...");
127 jimmy 38
    if (Can_Init() != CAN_OK) {
61 jimmy 39
        printf("FAILED!\n");
40
    }
41
    else {
42
        printf("OK!\n");
43
    }
44
 
45
    uint32_t timeStamp = 0;
46
 
127 jimmy 47
    Can_Message_t txMsg;
48
    Can_Message_t rxMsg;
61 jimmy 49
    txMsg.DataLength = 8;
50
    txMsg.Data.bytes[0] = 7;
127 jimmy 51
    txMsg.Id = 0;
61 jimmy 52
    txMsg.RemoteFlag = 0;
53
    txMsg.ExtendedFlag = 1;
54
 
55
    /* main loop */
56
    while (1) {
142 jimmy 57
        /* service the CAN routines */
58
        Can_Service();
61 jimmy 59
 
60
        /* send CAN message and check for CAN errors once every second */
127 jimmy 61
        if (Timebase_PassedTimeMillis(timeStamp) >= 1000) {
142 jimmy 62
            timeStamp = Timebase_CurrentTime();
127 jimmy 63
            /* send txMsg */
61 jimmy 64
            txMsg.Id++;
142 jimmy 65
            //Can_Send(&txMsg);
66
            printf(".");
67
        }
68
 
69
        /* check if any messages have been received */
70
        while (Can_Receive(&rxMsg) == CAN_OK) {
71
            //printf("MSG Received: ID=%lx, DLC=%u, EXT=%u, RTR=%u, ", rxMsg.Id, (uint16_t)(rxMsg.DataLength), (uint16_t)(rxMsg.ExtendedFlag), (uint16_t)(rxMsg.RemoteFlag));
72
            //printf("data={ ");
73
            /*for (uint8_t i=0; i<rxMsg.DataLength; i++) {
74
                printf("%x ", rxMsg.Data.bytes[i]);
75
            }*/
76
            //printf("}\n");
77
            if (Can_Send(&rxMsg) != CAN_OK) {
78
                break;
61 jimmy 79
            }
80
        }
81
    }
82
 
83
    return 0;
84
}