58 #define __SPI_CODE_TEST__ 0
62 #define __USE_SPI_PORT1__ 1
63 #define __USE_SPI_PORT1A__ 1
64 #define __USE_SPI_PORT2A__ 1
65 #define __USE_SPI_PORT3A__ 1
84 #define IS_MASTER(flags) ((flags) & SPI_MASTER)
87 #define SPI_PORT(XX, YY) \
89 pic32_spi##XX##_init(uint32_t baudrate, uint32_t flags) \
92 IEC##YY##CLR = _IEC##YY##_SPI##XX##EIE_MASK | \
93 _IEC##YY##_SPI##XX##TXIE_MASK | \
94 _IEC##YY##_SPI##XX##RXIE_MASK; \
96 IFS##YY##CLR = _IFS##YY##_SPI##XX##EIF_MASK | \
97 _IFS##YY##_SPI##XX##TXIF_MASK | \
98 _IFS##YY##_SPI##XX##RXIF_MASK; \
100 SPI##XX##BRG = pic32_clock_calculate_brg(2, baudrate); \
106 if(!IS_MASTER(flags)) { \
107 return -SPI_ERR_UNIMPLEMENTED; \
110 SPI##XX##CON = flags | _SPI##XX##CON_ON_MASK; \
112 return SPI_NO_ERRORS; \
116 pic32_spi##XX##_close() \
118 SPI##XX##CONCLR = _SPI##XX##CON_ON_MASK; \
119 return SPI_NO_ERRORS; \
123 pic32_spi##XX##_write(const uint8_t *data, uint32_t len) \
128 for(i = 0; i < len; ++i) { \
129 SPI##XX##STATCLR = _SPI##XX##STAT_SPIROV_MASK; \
130 while(!SPI##XX##STATbits.SPITBE) { \
134 SPI##XX##BUF = data[i]; \
136 while(!SPI##XX##STATbits.SPIRBF) { \
139 SPI##XX##STATCLR = _SPI##XX##STAT_SPIROV_MASK; \
140 dummy = SPI##XX##BUF; \
143 return SPI_NO_ERRORS; \
147 pic32_spi##XX##_read(uint8_t *data, uint32_t len) \
151 for(i = 0; i < len; ++i) { \
152 SPI##XX##STATCLR = _SPI##XX##STAT_SPIROV_MASK; \
153 while(!SPI##XX##STATbits.SPITBE) { \
157 while(!SPI##XX##STATbits.SPIRBF) { \
160 SPI##XX##STATCLR = _SPI##XX##STAT_SPIROV_MASK; \
161 data[i] = SPI##XX##BUF & 0x00FF; \
164 return SPI_NO_ERRORS; \
168 #ifdef __USE_SPI_PORT1__
172 #ifdef __USE_SPI_PORT1A__
176 #ifdef __USE_SPI_PORT2A__
180 #ifdef __USE_SPI_PORT3A__
SPI interface for PIC32MX (pic32mx795f512l)
INTERRUPT interface for PIC32MX (pic32mx795f512l)
CLOCK interface for PIC32MX (pic32mx795f512l)