atsamd21, atsamd51: add support for USB INTERRUPT OUT
Этот коммит содержится в:
родитель
c4de195f04
коммит
3ad2530ee7
3 изменённых файлов: 35 добавлений и 3 удалений
|
@ -43,7 +43,7 @@ func TestBinarySize(t *testing.T) {
|
||||||
// microcontrollers
|
// microcontrollers
|
||||||
{"hifive1b", "examples/echo", 4612, 280, 0, 2252},
|
{"hifive1b", "examples/echo", 4612, 280, 0, 2252},
|
||||||
{"microbit", "examples/serial", 2724, 388, 8, 2256},
|
{"microbit", "examples/serial", 2724, 388, 8, 2256},
|
||||||
{"wioterminal", "examples/pininterrupt", 6039, 1485, 116, 6816},
|
{"wioterminal", "examples/pininterrupt", 6063, 1485, 116, 6816},
|
||||||
|
|
||||||
// TODO: also check wasm. Right now this is difficult, because
|
// TODO: also check wasm. Right now this is difficult, because
|
||||||
// wasm binaries are run through wasm-opt and therefore the
|
// wasm binaries are run through wasm-opt and therefore the
|
||||||
|
|
|
@ -225,7 +225,23 @@ func initEndpoint(ep, config uint32) {
|
||||||
setEPSTATUSCLR(ep, sam.USB_DEVICE_EPSTATUSCLR_BK0RDY)
|
setEPSTATUSCLR(ep, sam.USB_DEVICE_EPSTATUSCLR_BK0RDY)
|
||||||
|
|
||||||
case usb.ENDPOINT_TYPE_INTERRUPT | usb.EndpointOut:
|
case usb.ENDPOINT_TYPE_INTERRUPT | usb.EndpointOut:
|
||||||
// TODO: not really anything, seems like...
|
// set packet size
|
||||||
|
usbEndpointDescriptors[ep].DeviceDescBank[0].PCKSIZE.SetBits(epPacketSize(64) << usb_DEVICE_PCKSIZE_SIZE_Pos)
|
||||||
|
|
||||||
|
// set data buffer address
|
||||||
|
usbEndpointDescriptors[ep].DeviceDescBank[0].ADDR.Set(uint32(uintptr(unsafe.Pointer(&udd_ep_out_cache_buffer[ep]))))
|
||||||
|
|
||||||
|
// set endpoint type
|
||||||
|
setEPCFG(ep, ((usb.ENDPOINT_TYPE_INTERRUPT + 1) << sam.USB_DEVICE_EPCFG_EPTYPE0_Pos))
|
||||||
|
|
||||||
|
// receive interrupts when current transfer complete
|
||||||
|
setEPINTENSET(ep, sam.USB_DEVICE_EPINTENSET_TRCPT0)
|
||||||
|
|
||||||
|
// set byte count to zero, we have not received anything yet
|
||||||
|
usbEndpointDescriptors[ep].DeviceDescBank[0].PCKSIZE.ClearBits(usb_DEVICE_PCKSIZE_BYTE_COUNT_Mask << usb_DEVICE_PCKSIZE_BYTE_COUNT_Pos)
|
||||||
|
|
||||||
|
// ready for next transfer
|
||||||
|
setEPSTATUSCLR(ep, sam.USB_DEVICE_EPSTATUSCLR_BK0RDY)
|
||||||
|
|
||||||
case usb.ENDPOINT_TYPE_BULK | usb.EndpointIn:
|
case usb.ENDPOINT_TYPE_BULK | usb.EndpointIn:
|
||||||
// set packet size
|
// set packet size
|
||||||
|
|
|
@ -228,7 +228,23 @@ func initEndpoint(ep, config uint32) {
|
||||||
setEPSTATUSCLR(ep, sam.USB_DEVICE_ENDPOINT_EPSTATUSCLR_BK0RDY)
|
setEPSTATUSCLR(ep, sam.USB_DEVICE_ENDPOINT_EPSTATUSCLR_BK0RDY)
|
||||||
|
|
||||||
case usb.ENDPOINT_TYPE_INTERRUPT | usb.EndpointOut:
|
case usb.ENDPOINT_TYPE_INTERRUPT | usb.EndpointOut:
|
||||||
// TODO: not really anything, seems like...
|
// set packet size
|
||||||
|
usbEndpointDescriptors[ep].DeviceDescBank[0].PCKSIZE.SetBits(epPacketSize(64) << usb_DEVICE_PCKSIZE_SIZE_Pos)
|
||||||
|
|
||||||
|
// set data buffer address
|
||||||
|
usbEndpointDescriptors[ep].DeviceDescBank[0].ADDR.Set(uint32(uintptr(unsafe.Pointer(&udd_ep_out_cache_buffer[ep]))))
|
||||||
|
|
||||||
|
// set endpoint type
|
||||||
|
setEPCFG(ep, ((usb.ENDPOINT_TYPE_INTERRUPT + 1) << sam.USB_DEVICE_ENDPOINT_EPCFG_EPTYPE0_Pos))
|
||||||
|
|
||||||
|
// receive interrupts when current transfer complete
|
||||||
|
setEPINTENSET(ep, sam.USB_DEVICE_ENDPOINT_EPINTENSET_TRCPT0)
|
||||||
|
|
||||||
|
// set byte count to zero, we have not received anything yet
|
||||||
|
usbEndpointDescriptors[ep].DeviceDescBank[0].PCKSIZE.ClearBits(usb_DEVICE_PCKSIZE_BYTE_COUNT_Mask << usb_DEVICE_PCKSIZE_BYTE_COUNT_Pos)
|
||||||
|
|
||||||
|
// ready for next transfer
|
||||||
|
setEPSTATUSCLR(ep, sam.USB_DEVICE_ENDPOINT_EPSTATUSCLR_BK0RDY)
|
||||||
|
|
||||||
case usb.ENDPOINT_TYPE_BULK | usb.EndpointIn:
|
case usb.ENDPOINT_TYPE_BULK | usb.EndpointIn:
|
||||||
// set packet size
|
// set packet size
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче