@@ -208,6 +208,7 @@ void UHS_NI MAX3421E_HOST::busprobe(void) {
208
208
regWr (rMODE , MODE_LS_HOST ); // start low-speed host
209
209
vbusState = LSHOST ;
210
210
}
211
+ sof_timer .wake ();
211
212
tmpdata = regRd (rMODE ) | bmSOFKAENAB ; // start SOF generation
212
213
regWr (rHIRQ , bmFRAMEIRQ ); // see data sheet.
213
214
regWr (rMODE , tmpdata );
@@ -221,6 +222,7 @@ void UHS_NI MAX3421E_HOST::busprobe(void) {
221
222
regWr (rMODE , MODE_FS_HOST ); // start full-speed host
222
223
vbusState = FSHOST ;
223
224
}
225
+ sof_timer .wake ();
224
226
tmpdata = regRd (rMODE ) | bmSOFKAENAB ; // start SOF generation
225
227
regWr (rHIRQ , bmFRAMEIRQ ); // see data sheet.
226
228
regWr (rMODE , tmpdata );
@@ -306,7 +308,7 @@ int16_t UHS_NI MAX3421E_HOST::Init(int16_t mseconds) {
306
308
uint32_t spd = UHS_MAX3421E_SPD ;
307
309
again :
308
310
MAX3421E_SPI_Settings = SPISettings (spd , MSBFIRST , SPI_MODE0 );
309
- /* MAX3421E - full-duplex SPIclass , interrupt kind, vbus off */
311
+ /* MAX3421E - full-duplex SPI , interrupt kind, vbus off */
310
312
regWr (rPINCTL , (bmFDUPSPI | bmIRQ_SENSE | GPX_VBDET ));
311
313
if (reset () == 0 ) {
312
314
MAX_HOST_DEBUG ("Fail SPI speed %lu\r\n" , spd );
@@ -340,6 +342,7 @@ int16_t UHS_NI MAX3421E_HOST::Init(int16_t mseconds) {
340
342
#endif
341
343
/* MAX3421E - full-duplex SPI, interrupt kind, vbus off */
342
344
if (reset () == 0 ) { //OSCOKIRQ hasn't asserted in time
345
+ MAX_HOST_DEBUG ("OSCOKIRQ hasn't asserted in time" );
343
346
return ( -1 );
344
347
}
345
348
regWr (rPINCTL , (bmFDUPSPI | bmIRQ_SENSE | GPX_VBDET ));
@@ -353,9 +356,9 @@ int16_t UHS_NI MAX3421E_HOST::Init(int16_t mseconds) {
353
356
354
357
regWr (rMODE , bmDPPULLDN | bmDMPULLDN | bmHOST ); // set pull-downs, Host
355
358
356
- // Enable interrupts on the MAX3421e
357
- regWr (rHIEN , IRQ_CHECK_MASK );
358
- // Enable interrupt pin on the MAX3421e , set pulse width for edge
359
+ // Enable interrupts on condition detections and bus events
360
+ regWr (rHIEN , bmCONDETIE | bmBUSEVENTIE );
361
+ // Enable interrupt pin, set pulse width for edge
359
362
regWr (rCPUCTL , (bmIE | bmPULSEWIDTH ));
360
363
361
364
/* check if device is connected */
@@ -870,7 +873,6 @@ void UHS_NI MAX3421E_HOST::ISRTask(void)
870
873
{
871
874
DDSB ();
872
875
873
- counted = false;
874
876
if (!UHS_PIN_READ (irq_pin )) {
875
877
uint8_t HIRQALL = regRd (rHIRQ ); //determine interrupt source
876
878
uint8_t HIRQ = HIRQALL & IRQ_CHECK_MASK ;
@@ -911,6 +913,7 @@ void UHS_NI MAX3421E_HOST::ISRTask(void)
911
913
}
912
914
#endif
913
915
916
+ counted = false;
914
917
if (HIRQ & bmFRAMEIRQ ) {
915
918
HIRQ_sendback |= bmFRAMEIRQ ;
916
919
counted = sof_timer .decrement ();
@@ -919,10 +922,6 @@ void UHS_NI MAX3421E_HOST::ISRTask(void)
919
922
// usb_task_state = UHS_USB_HOST_STATE_WAIT_BUS_READY;
920
923
//}
921
924
sofevent = false;
922
- } else {
923
- // Any event other than a FRAMEIRQ should start
924
- // the timer so state transitions can happen
925
- sof_timer .wake ();
926
925
}
927
926
928
927
//MAX_HOST_DEBUG("\r\n%s%s%s\r\n",
0 commit comments