Subversion Repositories HomeAutomation

Rev

Rev 25 | Go to most recent revision | Blame | Last modification | View Log | SVN | RSS feed

  1. /*********************************************************************
  2.  *
  3.  *                  Main application
  4.  *
  5.  *********************************************************************
  6.  * FileName:        Main.c
  7.  *
  8.  * Author               Date    Comment
  9.  *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  10.  * Johan Böhlin     21-10-06    Original        (Rev 1.0)
  11.  ********************************************************************/
  12.  
  13. #include "../Include/compiler.h"
  14. #include "../Include/stackTasks.h"
  15. #include "../Include/Tick.h"
  16.  
  17. #ifdef USE_CAN
  18.     #include "../Include/CAN.h"
  19. #endif
  20.  
  21. #ifdef USE_UART
  22.     #include "../Include/uart.h"
  23. #endif
  24.  
  25.  
  26.  
  27. static void mainInit(void);
  28.  
  29. void main()
  30. {
  31.     static TICK t = 0;
  32.  
  33.     // Inits
  34.  
  35.     mainInit();
  36.  
  37.     #ifdef USE_CAN
  38.         canInit();
  39.     #endif
  40.  
  41.     #ifdef USE_UART
  42.         uartInit();
  43.         uartPutrs("BOOT OK!");
  44.     #endif
  45.  
  46.     tickInit();
  47.  
  48.     while(1)
  49.     {
  50.         if ((tickGet()-t)>=10*TICK_SECOND)
  51.         {
  52.             CAN_MESSAGE cm;
  53.  
  54.             t = tickGet();
  55.        
  56.             // Send heartbeat
  57.             cm.ident=0x00000707;
  58.             cm.extended=FALSE;
  59.             cm.data_length=1;
  60.             cm.data[0]='H';
  61.  
  62.             while(!canSendMessage(cm));
  63.  
  64.            
  65.         }
  66.     }
  67. }
  68.  
  69.  
  70. #pragma interruptlow HighISR
  71. void HighISR(void)
  72. {
  73.     #ifdef USE_CAN
  74.         canISR();
  75.     #endif
  76.  
  77.     #ifdef USE_UART
  78.         uartISR();
  79.     #endif
  80.  
  81.     tickUpdate();
  82. }
  83. #pragma code highVector=0x08
  84. void HighVector (void)
  85. {
  86.     _asm goto HighISR _endasm
  87. }
  88. #pragma code // Return to default code section
  89.  
  90.  
  91.  
  92. #pragma interruptlow LowISR
  93. void LowISR(void)
  94. {
  95.  
  96. }
  97. #pragma code lowVector=0x18
  98. void LowVector (void)
  99. {
  100.     _asm goto LowISR _endasm
  101. }
  102. #pragma code // Return to default code section
  103.  
  104.  
  105. /*
  106. *   Function: mainInit
  107. *
  108. *   Input:  none
  109. *   Output: none
  110. *   Pre-conditions: none
  111. *   Affects: Se code
  112. *   Depends: none.
  113. */
  114. void mainInit()
  115. {
  116.     LED0_TRIS=0;   
  117.  
  118.     // Enable internal PORTB pull-ups
  119.     INTCON2bits.RBPU = 0;
  120.    
  121.     // Enable Interrupts
  122.     INTCONbits.GIEH = 1;
  123.     INTCONbits.GIEL = 1;
  124.  
  125. }
  126.  
  127. /*
  128. *   Function: canParse
  129. *
  130. *   Input:  Received can message
  131. *   Output: none
  132. *   Pre-conditions: canInit and received packet.
  133. *   Affects: Sensors/actuators/etc. See code.
  134. *   Depends: none.
  135. */
  136. #ifdef USE_CAN
  137. void canParse(CAN_MESSAGE cm)
  138. {
  139.     int i=0;
  140.  
  141.     if (cm.extended==TRUE)
  142.     {
  143.         uartPutc((BYTE)(cm.ident>>24));
  144.         uartPutc((BYTE)(cm.ident>>16));
  145.     }
  146.     uartPutc((BYTE)(cm.ident>>8));
  147.     uartPutc((BYTE)(cm.ident));
  148.  
  149.     for(i=0;i<cm.data_length && i<8;i++)
  150.         uartPutc(cm.data[cm.data_length-i-1]);
  151.  
  152. }
  153. #endif
  154.  
  155.  
  156. /*
  157. *   Function: uartParse
  158. *
  159. *   Input:  Received uart message
  160. *   Output: none
  161. *   Pre-conditions: uartInit and received byte.
  162. *   Affects: Sensors/actuators/etc. See code.
  163. *   Depends: none.
  164. */
  165. #ifdef USE_UART
  166. void uartParse(BYTE c)
  167. {
  168.  
  169.  
  170.     if (c=='1')
  171.     {
  172.         CAN_MESSAGE cm;
  173.         cm.ident=0x00000123;
  174.         cm.extended=FALSE;
  175.         cm.data_length=4;
  176.         cm.data[0]='!';
  177.         cm.data[1]='j';
  178.         cm.data[2]='e';
  179.         cm.data[3]='H';
  180.  
  181.         while(!canSendMessage(cm));
  182.     }
  183.  
  184.     if (c=='2')
  185.     {
  186.         CAN_MESSAGE cm;
  187.         cm.ident=0x0ABCDEF0;
  188.         cm.extended=TRUE;
  189.         cm.data_length=8;
  190.         cm.data[0]='!';
  191.         cm.data[1]='g';
  192.         cm.data[2]='a';
  193.         cm.data[3]='d';
  194.         cm.data[4]=' ';
  195.         cm.data[5]='d';
  196.         cm.data[6]='o';
  197.         cm.data[7]='G';
  198.  
  199.  
  200.         while(!canSendMessage(cm));
  201.     }
  202.  
  203.     if (c=='d')
  204.     {
  205.         uartPutc('D');
  206.     }
  207.  
  208.     if (c=='D')
  209.     {
  210.         uartPutrs("Debug? Debug!");
  211.     }
  212.  
  213.     if (c=='3')
  214.     {
  215.         uartPutc(RXB0CON);
  216.         uartPutc(RXB1CON);
  217.         uartPutc(123);
  218.         uartPutc(B0CON);
  219.         uartPutc(B1CON);
  220.         uartPutc(B2CON);
  221.         uartPutc(123); 
  222.         uartPutc(B3CON);   
  223.         uartPutc(B4CON);   
  224.         uartPutc(B5CON);
  225.         uartPutc(123); 
  226.         uartPutc(CANSTAT); 
  227.         uartPutc(COMSTAT); 
  228.         uartPutc(ECANCON);
  229.         uartPutc(123); 
  230.         uartPutc(TXB0CON); 
  231.         uartPutc(TXB1CON); 
  232.         uartPutc(TXB2CON); 
  233.         uartPutc(123);
  234.         uartPutc(PIR3);
  235.         uartPutc(PIE3);
  236.         uartPutc(123);
  237.         uartPutc(BRGCON1);
  238.         uartPutc(BRGCON2);
  239.         uartPutc(BRGCON3);
  240.         uartPutc(123);
  241.         uartPutc(RXFCON0);
  242.         uartPutc(RXFCON1);
  243.         uartPutc(123);
  244.         uartPutc(RXFBCON0);
  245.         uartPutc(RXFBCON1);
  246.         uartPutc(RXFBCON2);
  247.         uartPutc(RXFBCON3);
  248.         uartPutc(RXFBCON4);
  249.         uartPutc(RXFBCON5);
  250.         uartPutc(RXFBCON6);
  251.         uartPutc(RXFBCON7);
  252.         uartPutc(123);
  253.         uartPutc(TXBIE);
  254.         uartPutc(BIE0);
  255.     }
  256.  
  257. }
  258. #endif
  259.