spimaster.c 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include <core.h>
  2. #include "spimaster.h"
  3. //CKE=1 CKP=0 SMP=0
  4. #define SPImasterXInit(X) do {\
  5. SSP##X##STATbits.SMP = 0; \
  6. SSP##X##STATbits.CKE = 1; \
  7. SSP##X##CON1.CKP = 0; \
  8. SSP##X##CON1.SSP##X##EN = 1; \
  9. SSP##X##CON1.SSP##X##M = 0b0001; /* SPI Master mode, clock = FOSC/16 */ \
  10. } while(0);
  11. void SPImaster1Init()
  12. {
  13. #ifdef _PORTC_SDO1
  14. TRISC &= ~_PORTC_SDO1;
  15. #endif
  16. #ifdef _PORTC_SCK1
  17. TRISC &= ~_PORTC_SCK1;
  18. #endif
  19. #ifdef _PORTC_SDI1
  20. TRISC |= _PORTC_SDI1;
  21. #endif
  22. SPImasterXInit(1);
  23. }
  24. void SPImaster2Init()
  25. {
  26. #ifdef _PORTB_SDO2
  27. TRISB &= ~_PORTB_SDO2;
  28. #else
  29. #ifdef _PORTD_SDO2
  30. TRISD &= ~_PORTD_SDO2;
  31. #endif
  32. #ifdef _PORTB_SCK2
  33. TRISB &= ~_PORTB_SCK2;
  34. #else
  35. #ifdef _PORTD_SCK2
  36. TRISD &= ~_PORTD_SCK2;
  37. #endif
  38. #ifdef _PORTB_SDI2
  39. TRISB |= _PORTB_SDI2;
  40. #else
  41. #ifdef _PORTD_SDI2
  42. TRISD |= _PORTD_SDI2;
  43. #endif
  44. SPImasterXInit(2);
  45. }
  46. byte SPImaster1Transfer(byte b)
  47. {
  48. SSP1BUF = b;
  49. while(!SSP1STATbits.BF);
  50. return SSP1BUF;
  51. }
  52. byte SPImaster2Transfer(byte b);
  53. {
  54. SSP2BUF = b;
  55. while(!SSP2STATbits.BF);
  56. return SSP2BUF;
  57. }