Subversion Repositories HomeAutomation

Rev

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

  1. /*********************************************************************
  2.  *
  3.  *                  UART
  4.  *
  5.  *********************************************************************
  6.  * FileName:        uart.c
  7.  *
  8.  * Author               Date    Comment
  9.  *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  10.  * Johan Böhlin     21-10-06    Original        (Rev 1.0)
  11.  ********************************************************************/
  12.  
  13. #include "../Include/stackTasks.h"
  14. #include "../Include/uart.h"
  15.  
  16. #ifdef USE_UART
  17.  
  18. static char uartBusy(void);
  19.  
  20. /*
  21. *   Function: uartInit
  22. *
  23. *   Input:  none
  24. *   Output: none
  25. *   Pre-conditions: none
  26. *   Affects: none
  27. *   Depends: none
  28. */
  29. void uartInit()
  30. {
  31.         // Configure USART
  32.         TRISCbits.TRISC7=1;
  33.         TRISCbits.TRISC6=0;
  34.         TXSTA=0b00100000; // Low BRG speed
  35.         RCSTA=0b10010000;
  36.         SPBRG = SPBRG_VAL;
  37.         // USART RX interrupt
  38.         PIR1bits.RCIF=0;
  39.         PIE1bits.RCIE=1;
  40.         // High interrupt
  41.         IPR1bits.RCIP=1;
  42. }
  43.  
  44.  
  45. /*
  46. *   Function: uartPutc
  47. *
  48. *   Input:  BYTE c to send on uart
  49. *   Output: none
  50. *   Pre-conditions: call to uartInit()
  51. *   Affects: none
  52. *   Depends: none
  53. */
  54. void uartPutc(BYTE c)
  55. {
  56.     // Write the data byte to the USART
  57.     TXREG = c;      
  58.     while(uartBusy());
  59. }
  60.  
  61.  
  62. /*
  63. *   Function: uartPuts
  64. *
  65. *   Input:  Byte array to send on uart
  66. *   Output: none
  67. *   Pre-conditions: call to uartInit()
  68. *   Affects: none
  69. *   Depends: none
  70. */
  71. void uartPuts(BYTE c[])
  72. {
  73.     do
  74.     {  // Transmit a byte
  75.         while(uartBusy());
  76.         uartPutc(*c);
  77.     } while( *c++ );
  78. }
  79.  
  80. /*
  81. *   Function: uartPutrs
  82. *
  83. *   Input:  Byte array to send on uart (static)
  84. *   Output: none
  85. *   Pre-conditions: call to uartInit()
  86. *   Affects: none
  87. *   Depends: none
  88. */
  89. void uartPutrs(const rom char *c)
  90. {
  91.     do
  92.     {  // Transmit a byte
  93.         while(uartBusy());
  94.         uartPutc(*c);
  95.     } while( *c++ );
  96. }
  97.  
  98.  
  99.  
  100.  
  101. /*
  102. *   Function: uartBusy
  103. *
  104. *   Input:  none.
  105. *   Output: If usart busy or not.
  106. *   Pre-conditions: call to uartInit()
  107. *   Affects: none
  108. *   Depends: none
  109. */
  110. char uartBusy(void)
  111. {
  112.     return !TXSTAbits.TRMT;
  113. }
  114.  
  115.  
  116. /*
  117. *   Function: uartGet
  118. *
  119. *   Input:  none
  120. *   Output: Byte read
  121. *   Pre-conditions: call to uartInit()
  122. *   Affects: none
  123. *   Depends: none.
  124. */
  125. BYTE uartGet(void)
  126. {
  127.     // Return the received data
  128.     return RCREG;  
  129. }
  130.  
  131.  
  132. /*
  133. *   Function: uartISR
  134. *
  135. *   Input:  none
  136. *   Output: none
  137. *   Pre-conditions: call to uartInit()
  138. *   Affects: call to uartParse
  139. *   Depends: none.
  140. */
  141. void uartISR(void)
  142. {
  143.     if (PIR1bits.RCIF==1 && PIE1bits.RCIE==1)
  144.     {
  145.         uartParse(uartGet());
  146.         PIR1bits.RCIF=0;
  147.     }
  148. }
  149.  
  150.  
  151. #endif
  152.