Subversion Repositories HomeAutomation

Rev

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

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