Line 100... |
Line 100... |
100 |
|
100 |
|
101 |
void main() |
101 |
void main() |
102 |
{ |
102 |
{ |
103 |
|
103 |
|
104 |
unsigned int8 replyBuf[4]; |
104 |
unsigned int8 replyBuf[4]; |
- |
|
105 |
unsigned int8 i=0; |
105 |
|
106 |
|
106 |
setup_adc_ports(NO_ANALOGS|VSS_VDD); |
107 |
setup_adc_ports(NO_ANALOGS|VSS_VDD); |
107 |
setup_adc(ADC_CLOCK_DIV_2); |
108 |
setup_adc(ADC_CLOCK_DIV_2); |
108 |
setup_psp(PSP_DISABLED); |
109 |
setup_psp(PSP_DISABLED); |
109 |
setup_wdt(WDT_OFF); |
110 |
setup_wdt(WDT_OFF); |
Line 113... |
Line 114... |
113 |
setup_timer_3(T3_DISABLED|T3_DIV_BY_1); |
114 |
setup_timer_3(T3_DISABLED|T3_DIV_BY_1); |
114 |
setup_ccp1(CCP_OFF); |
115 |
setup_ccp1(CCP_OFF); |
115 |
setup_comparator(NC_NC_NC_NC); |
116 |
setup_comparator(NC_NC_NC_NC); |
116 |
setup_vref(FALSE); |
117 |
setup_vref(FALSE); |
117 |
|
118 |
|
118 |
usb_init(); |
119 |
printf("MLAB I2C to USB adapter started \n\r "); |
119 |
|
120 |
|
- |
|
121 |
output_high(PIN_B4); |
120 |
|
122 |
|
- |
|
123 |
usb_init(); |
121 |
|
124 |
|
122 |
while (TRUE) { |
125 |
while (TRUE) { |
123 |
if (usb_enumerated()) |
126 |
if (usb_enumerated()) |
124 |
{ |
127 |
{ |
- |
|
128 |
|
- |
|
129 |
output_low(PIN_B4); |
- |
|
130 |
|
- |
|
131 |
/* if(usb_kbhit(0)) |
- |
|
132 |
{ |
- |
|
133 |
printf("control data received... \n\r"); |
- |
|
134 |
|
125 |
usb_gets(0,control_data,8,100); |
135 |
usb_gets(0,control_data,8,100); |
126 |
|
136 |
|
127 |
switch(control_data[1]) |
137 |
switch(control_data[1]) |
128 |
{ |
138 |
{ |
129 |
case CMD_ECHO: // echo (for transfer reliability testing) |
139 |
case CMD_ECHO: // echo (for transfer reliability testing) |
Line 135... |
Line 145... |
135 |
case CMD_GET_FUNC: |
145 |
case CMD_GET_FUNC: |
136 |
usb_puts(0,(I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL),32,50); |
146 |
usb_puts(0,(I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL),32,50); |
137 |
break; |
147 |
break; |
138 |
|
148 |
|
139 |
case CMD_SET_DELAY: |
149 |
case CMD_SET_DELAY: |
140 |
/* The delay function used delays 4 system ticks per cycle. */ |
- |
|
141 |
/* This gives 1/3us at 12Mhz per cycle. The delay function is */ |
- |
|
142 |
/* called twice per clock edge and thus four times per full cycle. */ |
- |
|
143 |
/* Thus it is called one time per edge with the full delay */ |
- |
|
144 |
/* value and one time with the half one. Resulting in */ |
- |
|
145 |
/* 2 * n * 1/3 + 2 * 1/2 n * 1/3 = n us. */ |
- |
|
146 |
clock_delay = *(unsigned short*)(control_data+2); |
150 |
clock_delay = *(unsigned short*)(control_data+2); |
147 |
if(!clock_delay) clock_delay = 1; |
151 |
if(!clock_delay) clock_delay = 1; |
148 |
clock_delay2 = clock_delay/2; |
152 |
clock_delay2 = clock_delay/2; |
149 |
if(!clock_delay2) clock_delay2 = 1; |
153 |
if(!clock_delay2) clock_delay2 = 1; |
150 |
break; |
154 |
break; |
Line 153... |
Line 157... |
153 |
case CMD_I2C_IO + CMD_I2C_BEGIN: |
157 |
case CMD_I2C_IO + CMD_I2C_BEGIN: |
154 |
case CMD_I2C_IO + CMD_I2C_END: |
158 |
case CMD_I2C_IO + CMD_I2C_END: |
155 |
case CMD_I2C_IO + CMD_I2C_BEGIN + CMD_I2C_END: |
159 |
case CMD_I2C_IO + CMD_I2C_BEGIN + CMD_I2C_END: |
156 |
// these are only allowed as class transfers |
160 |
// these are only allowed as class transfers |
157 |
|
161 |
|
158 |
// return i2c_do((struct i2c_cmd*)data); |
162 |
return i2c_do((struct i2c_cmd*)data); |
159 |
break; |
163 |
break; |
160 |
|
164 |
|
161 |
case CMD_GET_STATUS: |
165 |
case CMD_GET_STATUS: |
162 |
replyBuf[0] = status; |
166 |
replyBuf[0] = status; |
163 |
usb_puts(0,replyBuf,1,50); |
167 |
usb_puts(0,replyBuf,1,50); |
Line 165... |
Line 169... |
165 |
|
169 |
|
166 |
default: |
170 |
default: |
167 |
// must not happen ... |
171 |
// must not happen ... |
168 |
break; |
172 |
break; |
169 |
} |
173 |
} |
- |
|
174 |
}*/ |
- |
|
175 |
|
- |
|
176 |
if(usb_kbhit(i)) |
- |
|
177 |
{ |
- |
|
178 |
printf(" data received at endpoint %d \n\r ", i); |
- |
|
179 |
} |
170 |
|
180 |
|
171 |
delay_ms(10); |
181 |
delay_ms(10); |
- |
|
182 |
|
- |
|
183 |
output_high(PIN_B4); |
- |
|
184 |
i++; |
172 |
} |
185 |
} |
173 |
} |
186 |
} |
174 |
} |
187 |
} |