38 void reverseString(
volatile char *psz_s1,
volatile char *psz_s2) {
39 volatile char *psz_s1end;
46 while (*psz_s1end) psz_s1end++;
49 while (psz_s1end != psz_s1) {
63 #define SLAVE_I2C_ADDR 0x60
67 STATE_WAIT_FOR_WRITE_DATA,
72 volatile STATE e_mystate = STATE_WAIT_FOR_ADDR;
74 volatile char sz_1[BUFSIZE+1];
75 volatile char sz_2[BUFSIZE+1];
79 void _ISRFAST _SI2C1Interrupt(
void) {
83 case STATE_WAIT_FOR_ADDR:
87 if (I2C1STATbits.R_W) {
88 I2C1TRN = sz_2[u16_index++];
89 I2C1CONbits.SCLREL = 1;
90 e_mystate = STATE_SEND_READ_DATA;
91 }
else e_mystate = STATE_WAIT_FOR_WRITE_DATA;
93 case STATE_WAIT_FOR_WRITE_DATA:
95 sz_1[u16_index++] = I2C1RCV;
96 if (sz_1[u16_index-1] == 0) {
98 reverseString(sz_1,sz_2);
99 e_mystate = STATE_WAIT_FOR_ADDR;
102 case STATE_SEND_READ_DATA:
104 I2C1TRN = sz_2[u16_index++];
105 I2C1CONbits.SCLREL = 1;
106 if (sz_2[u16_index-1] == 0) e_mystate = STATE_SEND_READ_LAST;
109 case STATE_SEND_READ_LAST:
110 e_mystate = STATE_WAIT_FOR_ADDR;
113 e_mystate = STATE_WAIT_FOR_ADDR;
121 I2C1ADD = SLAVE_I2C_ADDR>>1;