36 void reverseString(
volatile char *psz_s1,
volatile char *psz_s2);
38 #define CONFIG_SLAVE_ORDY() CONFIG_RB2_AS_DIG_OUTPUT()
39 #define SLAVE_ORDY _LATB2
42 STATE_WAIT_FOR_STRING,
43 STATE_SEND_REV_STRING,
44 STATE_LAST_REVCHAR_STRING,
47 volatile STATE e_mystate = STATE_WAIT_FOR_STRING;
49 volatile char sz_1[BUFSIZE+1];
50 volatile char sz_2[BUFSIZE+1];
53 void _ISR _SPI1Interrupt (
void) {
56 case STATE_WAIT_FOR_STRING:
58 sz_1[u16_index] = SPI1BUF;
60 if (sz_1[u16_index-1] == 0) {
63 reverseString(sz_1,sz_2);
66 SPI1BUF = sz_2[u16_index];
69 e_mystate = STATE_SEND_REV_STRING;
72 case STATE_SEND_REV_STRING:
75 SPI1BUF = sz_2[u16_index];
77 if (sz_2[u16_index-1] == 0) {
80 e_mystate = STATE_LAST_REVCHAR_STRING;
83 case STATE_LAST_REVCHAR_STRING:
87 e_mystate = STATE_WAIT_FOR_STRING;
90 e_mystate = STATE_WAIT_FOR_STRING;
95 void reverseString(
volatile char *psz_s1,
volatile char *psz_s2) {
96 volatile char *psz_s1end;
103 while (*psz_s1end) psz_s1end++;
106 while (psz_s1end != psz_s1) {
107 *psz_s2 = *psz_s1end;
112 *psz_s2 = *psz_s1end;
118 void configSPI1(
void) {
120 SPI1CON1 = CLK_POL_ACTIVE_HIGH |
127 #if (defined(__dsPIC33E__) || defined(__PIC24E__))
134 CONFIG_RP6_AS_DIG_PIN();
136 CONFIG_RP7_AS_DIG_PIN();
138 CONFIG_RP5_AS_DIG_PIN();
140 CONFIG_RP3_AS_DIG_PIN();
148 SPI1STATbits.SPIROV = 0;
149 SPI1STATbits.SPIEN = 1;