Subversion Repositories HomeAutomation

Rev

Rev 148 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 148 Rev 149
1
/**
1
/**
2
 * CAN Test. This program immediately echoes back all received CAN messages to
2
 * CAN Test. This program immediately echoes back all received CAN messages to
3
 * the bus, but increases ID with 1 before doing so.
3
 * the bus, but increases ID with 1 before doing so.
4
 *
4
 *
5
 * @date    2006-11-21
5
 * @date    2006-11-21
6
 * @author  Jimmy Myhrman
6
 * @author  Jimmy Myhrman
7
 *  
7
 *  
8
 */
8
 */
9
 
9
 
10
/*-----------------------------------------------------------------------------
10
/*-----------------------------------------------------------------------------
11
 * Includes
11
 * Includes
12
 *---------------------------------------------------------------------------*/
12
 *---------------------------------------------------------------------------*/
13
/* system files */
13
/* system files */
14
#include <avr/io.h>
14
#include <avr/io.h>
15
#include <avr/interrupt.h>
15
#include <avr/interrupt.h>
16
#include <avr/wdt.h>
16
#include <avr/wdt.h>
17
#include <stdio.h>
17
#include <stdio.h>
18
/* lib files */
18
/* lib files */
19
#include <can.h>
19
#include <can.h>
20
#include <uart.h>
20
#include <serial.h>
21
#include <timebase.h>
21
#include <timebase.h>
22
 
22
 
23
 
23
 
24
/*-----------------------------------------------------------------------------
24
/*-----------------------------------------------------------------------------
25
 * Main Program
25
 * Main Program
26
 *---------------------------------------------------------------------------*/
26
 *---------------------------------------------------------------------------*/
27
int main(void) {
27
int main(void) {
28
    Timebase_Init();
28
    Timebase_Init();
29
    Uart_Init();
29
    Serial_Init();
30
    sei();
30
    sei();
31
   
31
   
32
    printf("\n------------------------------------------------------------\n");
32
    printf("\n------------------------------------------------------------\n");
33
    printf(  "   CAN Test: Echo\n");
33
    printf(  "   CAN Test: Echo\n");
34
    printf(  "------------------------------------------------------------\n");
34
    printf(  "------------------------------------------------------------\n");
35
   
35
   
36
    printf("CanInit...");
36
    printf("CanInit...");
37
    if (Can_Init() != CAN_OK) {
37
    if (Can_Init() != CAN_OK) {
38
        printf("FAILED!\n");
38
        printf("FAILED!\n");
39
    }
39
    }
40
    else {
40
    else {
41
        printf("OK!\n");
41
        printf("OK!\n");
42
    }
42
    }
43
   
43
   
44
    uint32_t timeStamp = 0;
44
    uint32_t timeStamp = 0;
45
   
45
   
46
    Can_Message_t txMsg;
46
    Can_Message_t txMsg;
47
    Can_Message_t rxMsg;
47
    Can_Message_t rxMsg;
48
    txMsg.DataLength = 8;
48
    txMsg.DataLength = 8;
49
    txMsg.Data.bytes[0] = 7;
49
    txMsg.Data.bytes[0] = 7;
50
    txMsg.Id = 0;
50
    txMsg.Id = 0;
51
    txMsg.RemoteFlag = 0;
51
    txMsg.RemoteFlag = 0;
52
    txMsg.ExtendedFlag = 1;
52
    txMsg.ExtendedFlag = 1;
53
   
53
   
54
    /* main loop */
54
    /* main loop */
55
    while (1) {
55
    while (1) {
56
        /* service the CAN routines */
56
        /* service the CAN routines */
57
        Can_Service();
57
        Can_Service();
58
       
58
       
59
        /* send CAN message and check for CAN errors once every second */
59
        /* send CAN message and check for CAN errors once every second */
60
        if (Timebase_PassedTimeMillis(timeStamp) >= 1000) {
60
        if (Timebase_PassedTimeMillis(timeStamp) >= 1000) {
61
            timeStamp = Timebase_CurrentTime();
61
            timeStamp = Timebase_CurrentTime();
62
        }
62
        }
63
       
63
       
64
        /* check if any messages have been received */
64
        /* check if any messages have been received */
65
        while (Can_Receive(&rxMsg) == CAN_OK) {
65
        while (Can_Receive(&rxMsg) == CAN_OK) {
66
            /* echo back with increased Id */
66
            /* echo back with increased Id */
67
            rxMsg.Id++;
67
            rxMsg.Id++;
68
            while (Can_Send(&rxMsg) != CAN_OK);
68
            while (Can_Send(&rxMsg) != CAN_OK);
69
        }
69
        }
70
    }
70
    }
71
   
71
   
72
    return 0;
72
    return 0;
73
}
73
}
74
 
74