diff --git a/cores/arduino/USB/USBCore.cpp b/cores/arduino/USB/USBCore.cpp index 20fa0cea59986f2e3355294f82f5dd702b151576..455b271d9d6507364baa34085e90a371bdd9e0a5 100644 --- a/cores/arduino/USB/USBCore.cpp +++ b/cores/arduino/USB/USBCore.cpp @@ -637,7 +637,7 @@ void USB_ISR(void) UDD_Stall(0); } - if( flags & USB_DEVICE_EPINTFLAG_STALL1 ) + if( flags & USB_DEVICE_EPINTFLAG_STALL(2) ) { /* Clear the stall flag */ udd_clear_stall_request(0); diff --git a/cores/arduino/USB/samd21_device.c b/cores/arduino/USB/samd21_device.c index cbc8351849ed994aa16a6de98e883487b6e3c977..8ba091fe4b94d9ec243247893853bc5444ca1627 100644 --- a/cores/arduino/USB/samd21_device.c +++ b/cores/arduino/USB/samd21_device.c @@ -294,7 +294,7 @@ void UDD_Stall(uint32_t ep) uint8_t ep_num = ep; // Stall endpoint - USB->DEVICE.DeviceEndpoint[ep_num].EPSTATUSSET.reg = USB_DEVICE_EPSTATUSSET_STALLRQ1; + USB->DEVICE.DeviceEndpoint[ep_num].EPSTATUSSET.reg = USB_DEVICE_EPSTATUSSET_STALLRQ(2); } uint32_t UDD_FifoByteCount(uint32_t ep) diff --git a/cores/arduino/USB/samd21_device.h b/cores/arduino/USB/samd21_device.h index db7b4d1eb9cf4dd6dfcafafdf48ddec7e213511a..deded25b4614e50cd702291aca4a147f2a2d4734 100644 --- a/cores/arduino/USB/samd21_device.h +++ b/cores/arduino/USB/samd21_device.h @@ -62,21 +62,21 @@ extern "C" { #define udd_read_endpoint_flag(ep) USB->DEVICE.DeviceEndpoint[ep].EPINTFLAG.reg // Is transfer completed ? -#define udd_is_IN_transf_cplt(ep) (USB->DEVICE.DeviceEndpoint[ep].EPINTFLAG.reg & USB_DEVICE_EPINTFLAG_TRCPT1) -#define udd_is_OUT_transf_cplt(ep) (USB->DEVICE.DeviceEndpoint[ep].EPINTFLAG.reg & USB_DEVICE_EPINTFLAG_TRCPT0) +#define udd_is_IN_transf_cplt(ep) (USB->DEVICE.DeviceEndpoint[ep].EPINTFLAG.reg & USB_DEVICE_EPINTFLAG_TRCPT(2)) +#define udd_is_OUT_transf_cplt(ep) (USB->DEVICE.DeviceEndpoint[ep].EPINTFLAG.reg & USB_DEVICE_EPINTFLAG_TRCPT(1)) // Clear the transfer complete flag -#define udd_clear_IN_transf_cplt(ep) USB->DEVICE.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRCPT1 -#define udd_clear_OUT_transf_cplt(ep) USB->DEVICE.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRCPT0 +#define udd_clear_IN_transf_cplt(ep) USB->DEVICE.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRCPT(2) +#define udd_clear_OUT_transf_cplt(ep) USB->DEVICE.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRCPT(1) // Enable interrupt transfer complete -#define udd_ept_enable_it_IN_transf_cplt(ep) USB->DEVICE.DeviceEndpoint[ep].EPINTENSET.reg = USB_DEVICE_EPINTENSET_TRCPT1 -#define udd_ept_enable_it_OUT_transf_cplt(ep) USB->DEVICE.DeviceEndpoint[ep].EPINTENSET.reg = USB_DEVICE_EPINTENSET_TRCPT0 +#define udd_ept_enable_it_IN_transf_cplt(ep) USB->DEVICE.DeviceEndpoint[ep].EPINTENSET.reg = USB_DEVICE_EPINTENSET_TRCPT(2) +#define udd_ept_enable_it_OUT_transf_cplt(ep) USB->DEVICE.DeviceEndpoint[ep].EPINTENSET.reg = USB_DEVICE_EPINTENSET_TRCPT(1) // Enables SETUP received interrupt #define udd_enable_setup_received_interrupt(ep) USB->DEVICE.DeviceEndpoint[ep].EPINTENSET.reg = USB_DEVICE_EPINTFLAG_RXSTP // Clear the stall flag -#define udd_clear_stall_request(ep) USB->DEVICE.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_STALL1 +#define udd_clear_stall_request(ep) USB->DEVICE.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_STALL(2) // Remove stall -#define udd_remove_stall_request(ep) USB->DEVICE.DeviceEndpoint[ep].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSCLR_STALLRQ1 +#define udd_remove_stall_request(ep) USB->DEVICE.DeviceEndpoint[ep].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSCLR_STALLRQ(2) // Endpoint Interrupt Summary #define udd_endpoint_interrupt() USB->DEVICE.EPINTSMRY.reg diff --git a/cores/arduino/USB/samd21_host.c b/cores/arduino/USB/samd21_host.c index 622569baf545de393583c8e11e95cfbea6876842..69cbb6916fc8f6dff0adccf24d848d90de92bdbc 100644 --- a/cores/arduino/USB/samd21_host.c +++ b/cores/arduino/USB/samd21_host.c @@ -74,12 +74,14 @@ void UHD_Init(void) PM->APBBMASK.reg |= PM_APBBMASK_USB; /* Set up the USB DP/DM pins */ - PORT->Group[0].PINCFG[PIN_PA24G_USB_DM].bit.PMUXEN = 1; - PORT->Group[0].PMUX[PIN_PA24G_USB_DM/2].reg &= ~(0xF << (4 * (PIN_PA24G_USB_DM & 0x01u))); - PORT->Group[0].PMUX[PIN_PA24G_USB_DM/2].reg |= MUX_PA24G_USB_DM << (4 * (PIN_PA24G_USB_DM & 0x01u)); - PORT->Group[0].PINCFG[PIN_PA25G_USB_DP].bit.PMUXEN = 1; - PORT->Group[0].PMUX[PIN_PA25G_USB_DP/2].reg &= ~(0xF << (4 * (PIN_PA25G_USB_DP & 0x01u))); - PORT->Group[0].PMUX[PIN_PA25G_USB_DP/2].reg |= MUX_PA25G_USB_DP << (4 * (PIN_PA25G_USB_DP & 0x01u)); + pinPeripheral( PIN_USB_DM, PIO_COM ); + pinPeripheral( PIN_USB_DP, PIO_COM ); +// PORT->Group[0].PINCFG[PIN_PA24G_USB_DM].bit.PMUXEN = 1; +// PORT->Group[0].PMUX[PIN_PA24G_USB_DM/2].reg &= ~(0xF << (4 * (PIN_PA24G_USB_DM & 0x01u))); +// PORT->Group[0].PMUX[PIN_PA24G_USB_DM/2].reg |= MUX_PA24G_USB_DM << (4 * (PIN_PA24G_USB_DM & 0x01u)); +// PORT->Group[0].PINCFG[PIN_PA25G_USB_DP].bit.PMUXEN = 1; +// PORT->Group[0].PMUX[PIN_PA25G_USB_DP/2].reg &= ~(0xF << (4 * (PIN_PA25G_USB_DP & 0x01u))); +// PORT->Group[0].PMUX[PIN_PA25G_USB_DP/2].reg |= MUX_PA25G_USB_DP << (4 * (PIN_PA25G_USB_DP & 0x01u)); /* ---------------------------------------------------------------------------------------------- * Put Generic Clock Generator 0 as source for Generic Clock Multiplexer 6 (USB reference) @@ -155,9 +157,10 @@ void UHD_Init(void) } uhd_state = UHD_STATE_NO_VBUS; + // Put VBUS on USB port - pinMode( 32, OUTPUT ); - digitalWrite( 32, HIGH ); + pinMode( PIN_USB_HOST_ENABLE, OUTPUT ); + digitalWrite( PIN_USB_HOST_ENABLE, HIGH ); uhd_enable_connection_int(); @@ -455,7 +458,7 @@ void UHD_Pipe_Send(uint32_t ul_pipe, uint32_t ul_token_type) } else { - USB->HOST.HostPipe[ul_pipe].PINTFLAG.reg = USB_HOST_PINTFLAG_TRCPT0; + USB->HOST.HostPipe[ul_pipe].PINTFLAG.reg = USB_HOST_PINTFLAG_TRCPT(1); // Transfer Complete 0 USB->HOST.HostPipe[ul_pipe].PSTATUSSET.reg = USB_HOST_PSTATUSSET_BK0RDY; } @@ -463,6 +466,9 @@ void UHD_Pipe_Send(uint32_t ul_pipe, uint32_t ul_token_type) uhd_unfreeze_pipe(ul_pipe); } +#define USB_HOST_PINTFLAG_TRCPT_Pos 0 /**< \brief (USB_HOST_PINTFLAG) Transfer Complete 0/1 Interrupt Flag */ +#define USB_HOST_PINTFLAG_TRCPT_Msk (0x3u << USB_HOST_PINTFLAG_TRCPT_Pos) +#define USB_HOST_PINTFLAG_TRCPT(value) ((USB_HOST_PINTFLAG_TRCPT_Msk & ((value) << USB_HOST_PINTFLAG_TRCPT_Pos))) /** * \brief Check for pipe transfer completion. diff --git a/cores/arduino/USB/samd21_host.h b/cores/arduino/USB/samd21_host.h index 04f93fc15316a9b6b44b819802b210f4924b7662..5e2e2c897201a2c4fbe53218c458f99ef08d1224 100644 --- a/cores/arduino/USB/samd21_host.h +++ b/cores/arduino/USB/samd21_host.h @@ -99,10 +99,10 @@ extern __attribute__((__aligned__(4))) volatile UsbHostDescriptor usb_pipe_table #define uhd_byte_count(p) usb_pipe_table[p].HostDescBank[0].PCKSIZE.bit.BYTE_COUNT #define uhd_ack_setup_ready(p) USB->HOST.HostPipe[p].PINTFLAG.reg = USB_HOST_PINTFLAG_TXSTP #define Is_uhd_setup_ready(p) ((USB->HOST.HostPipe[p].PINTFLAG.reg&USB_HOST_PINTFLAG_TXSTP) == USB_HOST_PINTFLAG_TXSTP) -#define uhd_ack_in_received(p) USB->HOST.HostPipe[p].PINTFLAG.reg = USB_HOST_PINTFLAG_TRCPT0 -#define Is_uhd_in_received(p) ( (USB->HOST.HostPipe[p].PINTFLAG.reg&USB_HOST_PINTFLAG_TRCPT0) == USB_HOST_PINTFLAG_TRCPT0 ) -#define uhd_ack_out_ready(p) USB->HOST.HostPipe[p].PINTFLAG.reg = USB_HOST_PINTFLAG_TRCPT0 -#define Is_uhd_out_ready(p) ((USB->HOST.HostPipe[p].PINTFLAG.reg&USB_HOST_PINTFLAG_TRCPT0) == USB_HOST_PINTFLAG_TRCPT0) +#define uhd_ack_in_received(p) USB->HOST.HostPipe[p].PINTFLAG.reg = USB_HOST_PINTFLAG_TRCPT(1) +#define Is_uhd_in_received(p) ((USB->HOST.HostPipe[p].PINTFLAG.reg&USB_HOST_PINTFLAG_TRCPT(1)) == USB_HOST_PINTFLAG_TRCPT(1)) +#define uhd_ack_out_ready(p) USB->HOST.HostPipe[p].PINTFLAG.reg = USB_HOST_PINTFLAG_TRCPT(1) +#define Is_uhd_out_ready(p) ((USB->HOST.HostPipe[p].PINTFLAG.reg&USB_HOST_PINTFLAG_TRCPT(1)) == USB_HOST_PINTFLAG_TRCPT(1)) #define uhd_ack_nak_received(p) usb_pipe_table[p].HostDescBank[1].STATUS_BK.reg &= ~USB_HOST_STATUS_BK_ERRORFLOW #define Is_uhd_nak_received(p) (usb_pipe_table[p].HostDescBank[1].STATUS_BK.reg & USB_HOST_STATUS_BK_ERRORFLOW) diff --git a/cores/validation/validation_usb_host/build_as6/test.cppproj b/cores/validation/validation_usb_host/build_as6/test.cppproj index 294776ba8f1760c505045653e91b7848afa51d4f..418ad9ac7afda2d2f9dd9c130bfb1e50f4a10c0b 100644 --- a/cores/validation/validation_usb_host/build_as6/test.cppproj +++ b/cores/validation/validation_usb_host/build_as6/test.cppproj @@ -150,6 +150,7 @@ <ListValues> <Value>DEBUG</Value> <Value>MAX_DEVICES_ALLOWED=8</Value> + <Value>ARDUINO_SAMD_ZERO</Value> <Value>DEBUG_USB_HOST</Value> </ListValues> </armgcc.compiler.symbols.DefSymbols> @@ -180,6 +181,7 @@ <Value>USB_PID=0x004d</Value> <Value>ARDUINO_SAM_ZERO</Value> <Value>DEBUG_USB_HOST</Value> + <Value>ARDUINO_SAMD_ZERO</Value> </ListValues> </armgcccpp.compiler.symbols.DefSymbols> <armgcccpp.compiler.directories.DefaultIncludePath>False</armgcccpp.compiler.directories.DefaultIncludePath> @@ -215,7 +217,7 @@ </armgcccpp.linker.libraries.LibrarySearchPaths> <armgcccpp.linker.optimization.GarbageCollectUnusedSections>True</armgcccpp.linker.optimization.GarbageCollectUnusedSections> <armgcccpp.linker.memorysettings.ExternalRAM /> - <armgcccpp.linker.miscellaneous.LinkerFlags>-Tflash.ld</armgcccpp.linker.miscellaneous.LinkerFlags> + <armgcccpp.linker.miscellaneous.LinkerFlags>-Tflash_without_bootloader.ld</armgcccpp.linker.miscellaneous.LinkerFlags> <armgcccpp.assembler.general.IncludePaths> <ListValues> <Value>../../../arduino</Value> @@ -456,10 +458,10 @@ <SubType>compile</SubType> <Link>core\WVariant.h</Link> </Compile> - <Compile Include="C:\jcb\support\arduino\ArduinoZero\hardware\arduino\samd\cores\validation\validation_usb_host\test_usb_host_adk.cpp"> + <None Include="C:\jcb\support\arduino\ArduinoZero\hardware\arduino\samd\cores\validation\validation_usb_host\test_usb_host_adk.cpp"> <SubType>compile</SubType> <Link>core\main\test_usb_host_adk.cpp</Link> - </Compile> + </None> <Compile Include="C:\jcb\support\arduino\ArduinoZero\hardware\arduino\samd\libraries\USBHost\src\address.h"> <SubType>compile</SubType> <Link>core\host_example\address.h</Link> @@ -584,10 +586,10 @@ <SubType>compile</SubType> <Link>core\host_example\usb_ch9.h</Link> </Compile> - <None Include="C:\jcb\support\arduino\ArduinoZero\hardware\arduino\samd\cores\validation\validation_usb_host\test_usb_host_KeyboardController.cpp"> + <Compile Include="C:\jcb\support\arduino\ArduinoZero\hardware\arduino\samd\cores\validation\validation_usb_host\test_usb_host_KeyboardController.cpp"> <SubType>compile</SubType> <Link>core\main\test_usb_host_KeyboardController.cpp</Link> - </None> + </Compile> <None Include="C:\jcb\support\arduino\ArduinoZero\hardware\arduino\samd\cores\validation\validation_usb_host\test_usb_host_MouseController.cpp"> <SubType>compile</SubType> <Link>core\main\test_usb_host_MouseController.cpp</Link>