Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
AdRainty
rt-thread
提交
7c151557
R
rt-thread
项目概览
AdRainty
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7c151557
编写于
1月 22, 2021
作者:
L
LeeChunHei
提交者:
LeeChunHei
2月 13, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add pulse encoder and usb host to imxrt (not tested)
上级
0fb6a822
变更
9
展开全部
隐藏空白更改
内联
并排
Showing
9 changed file
with
1877 addition
and
1562 deletion
+1877
-1562
bsp/imxrt/libraries/MIMXRT1050/SConscript
bsp/imxrt/libraries/MIMXRT1050/SConscript
+10
-0
bsp/imxrt/libraries/drivers/SConscript
bsp/imxrt/libraries/drivers/SConscript
+10
-3
bsp/imxrt/libraries/drivers/usb/host/usb_host.h
bsp/imxrt/libraries/drivers/usb/host/usb_host.h
+101
-39
bsp/imxrt/libraries/drivers/usb/host/usb_host_devices.c
bsp/imxrt/libraries/drivers/usb/host/usb_host_devices.c
+359
-308
bsp/imxrt/libraries/drivers/usb/host/usb_host_devices.h
bsp/imxrt/libraries/drivers/usb/host/usb_host_devices.h
+8
-31
bsp/imxrt/libraries/drivers/usb/host/usb_host_ehci.c
bsp/imxrt/libraries/drivers/usb/host/usb_host_ehci.c
+1107
-885
bsp/imxrt/libraries/drivers/usb/host/usb_host_ehci.h
bsp/imxrt/libraries/drivers/usb/host/usb_host_ehci.h
+89
-103
bsp/imxrt/libraries/drivers/usb/host/usb_host_hci.c
bsp/imxrt/libraries/drivers/usb/host/usb_host_hci.c
+178
-164
bsp/imxrt/libraries/drivers/usb/host/usb_host_hci.h
bsp/imxrt/libraries/drivers/usb/host/usb_host_hci.h
+15
-29
未找到文件。
bsp/imxrt/libraries/MIMXRT1050/SConscript
浏览文件 @
7c151557
...
...
@@ -76,7 +76,17 @@ if GetDepend(['BSP_USING_DMA']):
src
+=
[
'MIMXRT1052/drivers/fsl_edma.c'
]
src
+=
[
'MIMXRT1052/drivers/fsl_lpuart_edma.c'
]
src
+=
[
'MIMXRT1052/drivers/fsl_lpspi_edma.c'
]
if
GetDepend
([
'BSP_USING_PULSE_ENCODER'
]):
src
+=
[
'MIMXRT1052/drivers/fsl_enc.c'
]
#Adding this as XBAR is used in pin mux
src
+=
[
'MIMXRT1052/drivers/fsl_xbara.c'
]
src
+=
[
'MIMXRT1052/drivers/fsl_xbarb.c'
]
#fsl os abstract files
src
+=
[
'MIMXRT1052/drivers/fsl_os_abstraction_rtthread.c'
]
src
+=
[
'MIMXRT1052/drivers/generic_list.c'
]
group
=
DefineGroup
(
'Libraries'
,
src
,
depend
=
[
''
],
CPPPATH
=
path
)
...
...
bsp/imxrt/libraries/drivers/SConscript
浏览文件 @
7c151557
...
...
@@ -54,15 +54,22 @@ if GetDepend('BSP_USING_AUDIO'):
if
GetDepend
(
'BSP_USING_SDIO'
):
src
+=
[
'drv_sdio.c'
]
if
GetDepend
(
'BSP_USING_USB_DEVICE'
):
if
GetDepend
(
'BSP_USING_PULSE_ENCODER'
):
src
+=
[
'drv_pulse_encoder.c'
]
if
GetDepend
(
'RT_USING_USB_DEVICE'
):
src
+=
[
'drv_usbd.c'
]
src
+=
Glob
(
'usb/device/*.c'
)
if
GetDepend
(
'
BSP_USING_USB_DEVICE
'
):
if
GetDepend
(
'
RT_USING_USB_DEVICE'
)
or
GetDepend
(
'RT_USING_USB_HOST
'
):
src
+=
Glob
(
'usb/phy/*.c'
)
CPPDEFINES
+=
[
'ENDIANNESS'
]
if
GetDepend
(
'RT_USING_USB_HOST'
):
src
+=
[
'drv_usbh.c'
]
src
+=
Glob
(
'usb/host/*.c'
)
path
=
[
cwd
,
cwd
+
'/config'
]
group
=
DefineGroup
(
'Drivers'
,
src
,
depend
=
[
''
],
CPPPATH
=
path
,
CPPDEFINES
=
CPPDEFINES
)
...
...
bsp/imxrt/libraries/drivers/usb/host/usb_host.h
浏览文件 @
7c151557
/*
* Copyright (c) 2015 - 2016, Freescale Semiconductor, Inc.
* Copyright 2016 NXP
* Copyright 2016 - 2019 NXP
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* o Redistributions of source code must retain the above copyright notice, this list
* of conditions and the following disclaimer.
*
* o Redistributions in binary form must reproduce the above copyright notice, this
* list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
* o Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef _USB_HOST_H_
...
...
@@ -34,6 +12,7 @@
#include <usb/include/usb.h>
#include <usb/include/usb_misc.h>
#include <usb/include/usb_spec.h>
#include <usb/include/usb_host_config.h>
/*******************************************************************************
* Definitions
...
...
@@ -68,6 +47,16 @@ typedef enum _usb_host_event
kUSB_HostEventDetach
,
/*!< Device is detached */
kUSB_HostEventEnumerationDone
,
/*!< Device's enumeration is done and the device is supported */
kUSB_HostEventNotSupported
,
/*!< Device's enumeration is done and the device is not supported */
/*! Device's enumeration failed due to errors
* fail reason is put in the high 2 bytes of callback event code.
* kStatus_USB_TransferFailed - the transfer failed.
* kStatus_USB_TransferCancel - transfer is canceled by application.
* kStatus_USB_Error - parsing descriptor failed, the power cannot satisfy device's requirement,
* device addresss allocation failed, transfer is not enough
* or the transfer API failed.
* kStatus_USB_AllocFail - malloc failed.
*/
kUSB_HostEventEnumerationFail
,
#if ((defined(USB_HOST_CONFIG_LOW_POWER_MODE)) && (USB_HOST_CONFIG_LOW_POWER_MODE > 0U))
kUSB_HostEventNotSuspended
,
/*!< Suspend failed */
kUSB_HostEventSuspended
,
/*!< Suspend successful */
...
...
@@ -103,7 +92,60 @@ typedef enum _usb_host_dev_info
kUSB_HostGetConfigurationDes
,
/*!< Device's configuration descriptor pointer */
kUSB_HostGetConfigurationLength
,
/*!< Device's configuration descriptor pointer */
}
usb_host_dev_info_t
;
/*! @brief Request type */
typedef
enum
_usb_host_request_type
{
kRequestDevice
=
1U
,
/*!< Control request object is device */
kRequestInterface
,
/*!< Control request object is interface */
kRequestEndpoint
,
/*!< Control request object is endpoint */
}
usb_host_request_type_t
;
/*! @brief For USB_REQUEST_STANDARD_GET_DESCRIPTOR and USB_REQUEST_STANDARD_SET_DESCRIPTOR */
typedef
struct
_usb_host_process_descriptor_param
{
uint8_t
descriptorType
;
/*!< See the usb_spec.h, such as the USB_DESCRIPTOR_TYPE_DEVICE */
uint8_t
descriptorIndex
;
/*!< The descriptor index is used to select a specific descriptor (only for configuration
and string descriptors) when several descriptors of the same type are implemented in a
device */
uint8_t
languageId
;
/*!< It specifies the language ID for string descriptors or is reset to zero for other
descriptors */
uint8_t
*
descriptorBuffer
;
/*!< Buffer pointer */
uint16_t
descriptorLength
;
/*!< Buffer data length */
}
usb_host_process_descriptor_param_t
;
/*! @brief For USB_REQUEST_STANDARD_CLEAR_FEATURE and USB_REQUEST_STANDARD_SET_FEATURE */
typedef
struct
_usb_host_process_feature_param
{
uint8_t
requestType
;
/*!< See the #usb_host_request_type_t */
uint8_t
featureSelector
;
/*!< Set/cleared feature */
uint8_t
interfaceOrEndpoint
;
/*!< Interface or end pointer */
}
usb_host_process_feature_param_t
;
/*! @brief For USB_REQUEST_STANDARD_GET_INTERFACE */
typedef
struct
_usb_host_get_interface_param
{
uint8_t
interface
;
/*!< Interface number */
uint8_t
*
alternateInterfaceBuffer
;
/*!< Save the transfer result */
}
usb_host_get_interface_param_t
;
/*! @brief For USB_REQUEST_STANDARD_GET_STATUS */
typedef
struct
_usb_host_get_status_param
{
uint16_t
statusSelector
;
/*!< Interface number, the end pointer number or OTG status selector */
uint8_t
requestType
;
/*!< See the #usb_host_request_type_t */
uint8_t
*
statusBuffer
;
/*!< Save the transfer result */
}
usb_host_get_status_param_t
;
/*! @brief For USB_REQUEST_STANDARD_SET_INTERFACE */
typedef
struct
_usb_host_set_interface_param
{
uint8_t
alternateSetting
;
/*!< Alternate setting value */
uint8_t
interface
;
/*!< Interface number */
}
usb_host_set_interface_param_t
;
/*! @brief For USB_REQUEST_STANDARD_SYNCH_FRAME */
typedef
struct
_usb_host_synch_frame_param
{
uint8_t
endpoint
;
/*!< Endpoint number */
uint8_t
*
frameNumberBuffer
;
/*!< Frame number data buffer */
}
usb_host_synch_frame_param_t
;
/*!
* @brief Host callback function typedef.
*
...
...
@@ -243,8 +285,8 @@ typedef struct _usb_host_pipe_init
/*! @brief Cancel transfer parameter structure */
typedef
struct
_usb_host_cancel_param
{
usb_host_pipe_handle
pipeHandle
;
/*!< Cancel
l
ing pipe handle*/
usb_host_transfer_t
*
transfer
;
/*!< Cancel
l
ing transfer*/
usb_host_pipe_handle
pipeHandle
;
/*!< Canceling pipe handle*/
usb_host_transfer_t
*
transfer
;
/*!< Canceling transfer*/
}
usb_host_cancel_param_t
;
/*******************************************************************************
...
...
@@ -342,7 +384,7 @@ extern usb_status_t USB_HostHelperParseAlternateSetting(usb_host_interface_handl
* @retval kStatus_USB_InvalidParameter The deviceHandle instance don't belong to hostHandle instance.
*/
extern
usb_status_t
USB_HostRemoveDevice
(
usb_host_handle
hostHandle
,
usb_device_handle
deviceHandle
);
#if (defined(USB_HOST_CONFIG_KHCI) && (USB_HOST_CONFIG_KHCI > 0U))
/*!
* @brief KHCI task function.
*
...
...
@@ -353,7 +395,8 @@ extern usb_status_t USB_HostRemoveDevice(usb_host_handle hostHandle, usb_device_
* @param[in] hostHandle The host handle.
*/
extern
void
USB_HostKhciTaskFunction
(
void
*
hostHandle
);
#endif
#if (defined(USB_HOST_CONFIG_EHCI) && (USB_HOST_CONFIG_EHCI > 0U))
/*!
* @brief EHCI task function.
*
...
...
@@ -364,7 +407,8 @@ extern void USB_HostKhciTaskFunction(void *hostHandle);
* @param[in] hostHandle The host handle.
*/
extern
void
USB_HostEhciTaskFunction
(
void
*
hostHandle
);
#endif
#if (defined(USB_HOST_CONFIG_OHCI) && (USB_HOST_CONFIG_OHCI > 0U))
/*!
* @brief OHCI task function.
*
...
...
@@ -375,7 +419,8 @@ extern void USB_HostEhciTaskFunction(void *hostHandle);
* @param[in] hostHandle The host handle.
*/
extern
void
USB_HostOhciTaskFunction
(
void
*
hostHandle
);
#endif
#if (defined(USB_HOST_CONFIG_IP3516HS) && (USB_HOST_CONFIG_IP3516HS > 0U))
/*!
* @brief IP3516HS task function.
*
...
...
@@ -386,7 +431,8 @@ extern void USB_HostOhciTaskFunction(void *hostHandle);
* @param[in] hostHandle The host handle.
*/
extern
void
USB_HostIp3516HsTaskFunction
(
void
*
hostHandle
);
#endif
#if (defined(USB_HOST_CONFIG_KHCI) && (USB_HOST_CONFIG_KHCI > 0U))
/*!
* @brief Device KHCI ISR function.
*
...
...
@@ -395,7 +441,8 @@ extern void USB_HostIp3516HsTaskFunction(void *hostHandle);
* @param[in] hostHandle The host handle.
*/
extern
void
USB_HostKhciIsrFunction
(
void
*
hostHandle
);
#endif
#if (defined(USB_HOST_CONFIG_EHCI) && (USB_HOST_CONFIG_EHCI > 0U))
/*!
* @brief Device EHCI ISR function.
*
...
...
@@ -404,7 +451,8 @@ extern void USB_HostKhciIsrFunction(void *hostHandle);
* @param[in] hostHandle The host handle.
*/
extern
void
USB_HostEhciIsrFunction
(
void
*
hostHandle
);
#endif
#if (defined(USB_HOST_CONFIG_OHCI) && (USB_HOST_CONFIG_OHCI > 0U))
/*!
* @brief Device OHCI ISR function.
*
...
...
@@ -413,7 +461,8 @@ extern void USB_HostEhciIsrFunction(void *hostHandle);
* @param[in] hostHandle The host handle.
*/
extern
void
USB_HostOhciIsrFunction
(
void
*
hostHandle
);
#endif
#if (defined(USB_HOST_CONFIG_IP3516HS) && (USB_HOST_CONFIG_IP3516HS > 0U))
/*!
* @brief Device IP3516HS ISR function.
*
...
...
@@ -422,7 +471,7 @@ extern void USB_HostOhciIsrFunction(void *hostHandle);
* @param[in] hostHandle The host handle.
*/
extern
void
USB_HostIp3516HsIsrFunction
(
void
*
hostHandle
);
#endif
/*! @}*/
/*!
...
...
@@ -566,7 +615,7 @@ extern usb_status_t USB_HostFreeTransfer(usb_host_handle hostHandle, usb_host_tr
* This function sends the USB standard request packet.
*
* @param[in] deviceHandle The device handle for control transfer.
* @param[in] usbRequest A USB standard request code. Se the usb_spec.h.
* @param[in] usbRequest A USB standard request code. Se
e
the usb_spec.h.
* @param[in] transfer The used transfer.
* @param[in] param The parameter structure is different for different request, see
* usb_host_framework.h.
...
...
@@ -694,10 +743,10 @@ extern usb_status_t USB_HostL1ResumeDeviceResquest(usb_host_handle hostHandle,
/*!
* @brief Update the lpm param.
*
* The function is used to configu
u
re the lpm token.
* The function is used to configure the lpm token.
*
* @param[in] hostHandle The host handle.
* @param[in] lpmParam HIRD va
ul
e and whether enable remotewakeup.
* @param[in] lpmParam HIRD va
lu
e and whether enable remotewakeup.
*
*/
extern
usb_status_t
USB_HostL1SleepDeviceResquestConfig
(
usb_host_handle
hostHandle
,
uint8_t
*
lpmParam
);
...
...
@@ -715,6 +764,19 @@ extern usb_status_t USB_HostUpdateHwTick(usb_host_handle hostHandle, uint64_t ti
#endif
#if ((defined(USB_HOST_CONFIG_BATTERY_CHARGER)) && (USB_HOST_CONFIG_BATTERY_CHARGER > 0U))
/*!
* @brief Set the charger type. It is only supported on RT600 currently.
*
* The set charger type becomes valid in next attach.
*
* @param[in] hostHandle The host handle.
* @param[in] type.
*
*/
extern
usb_status_t
USB_HostSetChargerType
(
usb_host_handle
hostHandle
,
uint8_t
type
);
#endif
/*! @}*/
#ifdef __cplusplus
...
...
bsp/imxrt/libraries/drivers/usb/host/usb_host_devices.c
浏览文件 @
7c151557
此差异已折叠。
点击以展开。
bsp/imxrt/libraries/drivers/usb/host/usb_host_devices.h
浏览文件 @
7c151557
/*
* Copyright (c) 2015, Freescale Semiconductor, Inc.
* Copyright 2016 NXP
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* o Redistributions of source code must retain the above copyright notice, this list
* of conditions and the following disclaimer.
*
* o Redistributions in binary form must reproduce the above copyright notice, this
* list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
* o Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef _USB_HOST_DEV_MNG_H_
...
...
@@ -79,11 +57,11 @@ typedef struct _usb_host_device_instance
usb_descriptor_device_t
*
deviceDescriptor
;
/*!< Standard device descriptor */
usb_host_pipe_handle
controlPipe
;
/*!< Device's control pipe */
uint8_t
*
configurationDesc
;
/*!< Configuration descriptor pointer */
uint8_t
*
enumBuffer
;
/*!< Buffer for enumeration */
uint16_t
configurationLen
;
/*!< Configuration descriptor length */
uint16_t
configurationValue
;
/*!< Configuration index */
uint8_t
interfaceStatus
[
USB_HOST_CONFIG_CONFIGURATION_MAX_INTERFACE
];
/*!< Interfaces' status, please reference to
#usb_host_interface_state_t */
uint8_t
*
enumBuffer
;
/*!< Buffer for enumeration
*/
uint8_t
configurationValue
;
/*!< Configuration index
*/
uint8_t
state
;
/*!< Device state for enumeration */
uint8_t
enumRetries
;
/*!< Re-enumeration when error in control transfer */
uint8_t
stallRetries
;
/*!< Re-transfer when stall */
...
...
@@ -104,11 +82,10 @@ typedef struct _usb_host_device_instance
typedef
struct
_usb_host_enum_process_entry
{
uint8_t
successState
;
/*!< When the last step is successful, the next state value */
uint8_t
retryState
;
/*!< When the last step need retry, the next state value */
usb_status_t
(
*
process
)(
usb_host_device_instance_t
*
deviceInstance
);
/*!< When the last step transfer is done, the
function is used to process the transfer
data */
usb_host_device_enumeration_status_t
successState
;
/*!< When the last step is successful, the next state value */
usb_host_device_enumeration_status_t
retryState
;
/*!< When the last step need retry, the next state value */
/*! When the last step transfer is done, the function is used to process the transfer data */
usb_status_t
(
*
process
)(
usb_host_device_instance_t
*
deviceInstance
,
uint32_t
dataLength
);
}
usb_host_enum_process_entry_t
;
/*******************************************************************************
...
...
bsp/imxrt/libraries/drivers/usb/host/usb_host_ehci.c
浏览文件 @
7c151557
此差异已折叠。
点击以展开。
bsp/imxrt/libraries/drivers/usb/host/usb_host_ehci.h
浏览文件 @
7c151557
/*
* Copyright (c) 2015, Freescale Semiconductor, Inc.
* Copyright 2016 NXP
* Copyright 2016,2019 NXP
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* o Redistributions of source code must retain the above copyright notice, this list
* of conditions and the following disclaimer.
*
* o Redistributions in binary form must reproduce the above copyright notice, this
* list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
* o Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef _USB_HOST_CONTROLLER_EHCI_H_
...
...
@@ -39,95 +17,95 @@
* Definitions
******************************************************************************/
/* EHCI host macros */
#define EHCI_HOST_T_INVALID_VALUE (1U)
#define EHCI_HOST_POINTER_TYPE_ITD (0x00U)
#define EHCI_HOST_POINTER_TYPE_QH (0x00000002U)
#define EHCI_HOST_POINTER_TYPE_SITD (0x00000004U)
#define EHCI_HOST_POINTER_TYPE_FSTN (0x00000006U)
#define EHCI_HOST_POINTER_TYPE_MASK (0x00000006U)
#define EHCI_HOST_T_INVALID_VALUE
(1U)
#define EHCI_HOST_POINTER_TYPE_ITD
(0x00U)
#define EHCI_HOST_POINTER_TYPE_QH
(0x00000002U)
#define EHCI_HOST_POINTER_TYPE_SITD
(0x00000004U)
#define EHCI_HOST_POINTER_TYPE_FSTN
(0x00000006U)
#define EHCI_HOST_POINTER_TYPE_MASK
(0x00000006U)
#define EHCI_HOST_POINTER_ADDRESS_MASK (0xFFFFFFE0U)
#define EHCI_HOST_PID_OUT
(0U
)
#define EHCI_HOST_PID_IN
(1U
)
#define EHCI_HOST_PID_SETUP
(2U
)
#define EHCI_HOST_QH_RL_SHIFT (28U)
#define EHCI_HOST_QH_RL_MASK (0xF0000000U)
#define EHCI_HOST_QH_C_SHIFT (27U)
#define EHCI_HOST_QH_MAX_PACKET_LENGTH_SHIFT (16U)
#define EHCI_HOST_QH_MAX_PACKET_LENGTH_MASK (0x07FF0000U)
#define EHCI_HOST_QH_H_SHIFT (15U)
#define EHCI_HOST_QH_DTC_SHIFT (14U)
#define EHCI_HOST_QH_EPS_SHIFT (12U)
#define EHCI_HOST_QH_ENDPT_SHIFT (8U)
#define EHCI_HOST_QH_I_SHIFT (7U)
#define EHCI_HOST_QH_DEVICE_ADDRESS_SHIFT (0U)
#define EHCI_HOST_QH_MULT_SHIFT (30U)
#define EHCI_HOST_QH_PORT_NUMBER_SHIFT (23U)
#define EHCI_HOST_QH_HUB_ADDR_SHIFT (16U)
#define EHCI_HOST_QH_UFRAME_CMASK_SHIFT (8U)
#define EHCI_HOST_QH_UFRAME_SMASK_SHIFT (0U)
#define EHCI_HOST_QH_STATUS_ERROR_MASK (0x0000007EU)
#define EHCI_HOST_PID_OUT
(0UL
)
#define EHCI_HOST_PID_IN
(1UL
)
#define EHCI_HOST_PID_SETUP
(2UL
)
#define EHCI_HOST_QH_RL_SHIFT
(28U)
#define EHCI_HOST_QH_RL_MASK
(0xF0000000U)
#define EHCI_HOST_QH_C_SHIFT
(27U)
#define EHCI_HOST_QH_MAX_PACKET_LENGTH_SHIFT
(16U)
#define EHCI_HOST_QH_MAX_PACKET_LENGTH_MASK
(0x07FF0000U)
#define EHCI_HOST_QH_H_SHIFT
(15U)
#define EHCI_HOST_QH_DTC_SHIFT
(14U)
#define EHCI_HOST_QH_EPS_SHIFT
(12U)
#define EHCI_HOST_QH_ENDPT_SHIFT
(8U)
#define EHCI_HOST_QH_I_SHIFT
(7U)
#define EHCI_HOST_QH_DEVICE_ADDRESS_SHIFT
(0U)
#define EHCI_HOST_QH_MULT_SHIFT
(30U)
#define EHCI_HOST_QH_PORT_NUMBER_SHIFT
(23U)
#define EHCI_HOST_QH_HUB_ADDR_SHIFT
(16U)
#define EHCI_HOST_QH_UFRAME_CMASK_SHIFT
(8U)
#define EHCI_HOST_QH_UFRAME_SMASK_SHIFT
(0U)
#define EHCI_HOST_QH_STATUS_ERROR_MASK
(0x0000007EU)
#define EHCI_HOST_QH_STATUS_NOSTALL_ERROR_MASK (0x0000003EU)
#define EHCI_HOST_QTD_DT_SHIFT (31U)
#define EHCI_HOST_QTD_DT_MASK (0x80000000U)
#define EHCI_HOST_QTD_TOTAL_BYTES_SHIFT (16U)
#define EHCI_HOST_QTD_TOTAL_BYTES_MASK (0x7FFF0000U)
#define EHCI_HOST_QTD_IOC_MASK (0x00008000U)
#define EHCI_HOST_QTD_C_PAGE_SHIFT (12U)
#define EHCI_HOST_QTD_CERR_SHIFT (10U)
#define EHCI_HOST_QTD_CERR_MAX_VALUE
(0x00000003U
)
#define EHCI_HOST_QTD_PID_CODE_SHIFT (8U)
#define EHCI_HOST_QTD_STATUS_SHIFT (0U)
#define EHCI_HOST_QTD_CURRENT_OFFSET_MASK (0x00000FFFU)
#define EHCI_HOST_QTD_BUFFER_POINTER_SHIFT (12U)
#define EHCI_HOST_QTD_STATUS_ACTIVE_MASK (0x00000080U)
#define EHCI_HOST_QTD_STATUS_MASK (0x000000ffU)
#define EHCI_HOST_QTD_STATUS_ERROR_MASK (0x0000007EU)
#define EHCI_HOST_QTD_DT_SHIFT
(31U)
#define EHCI_HOST_QTD_DT_MASK
(0x80000000U)
#define EHCI_HOST_QTD_TOTAL_BYTES_SHIFT
(16U)
#define EHCI_HOST_QTD_TOTAL_BYTES_MASK
(0x7FFF0000U)
#define EHCI_HOST_QTD_IOC_MASK
(0x00008000U)
#define EHCI_HOST_QTD_C_PAGE_SHIFT
(12U)
#define EHCI_HOST_QTD_CERR_SHIFT
(10U)
#define EHCI_HOST_QTD_CERR_MAX_VALUE
(0x00000003UL
)
#define EHCI_HOST_QTD_PID_CODE_SHIFT
(8U)
#define EHCI_HOST_QTD_STATUS_SHIFT
(0U)
#define EHCI_HOST_QTD_CURRENT_OFFSET_MASK
(0x00000FFFU)
#define EHCI_HOST_QTD_BUFFER_POINTER_SHIFT
(12U)
#define EHCI_HOST_QTD_STATUS_ACTIVE_MASK
(0x00000080U)
#define EHCI_HOST_QTD_STATUS_MASK
(0x000000ffU)
#define EHCI_HOST_QTD_STATUS_ERROR_MASK
(0x0000007EU)
#define EHCI_HOST_QTD_STATUS_STALL_ERROR_MASK (0x00000040U)
#define EHCI_HOST_ITD_STATUS_ACTIVE_MASK (0x80000000U)
#define EHCI_HOST_ITD_TRANSACTION_LEN_SHIFT (16U)
#define EHCI_HOST_ITD_TRANSACTION_LEN_MASK (0x0FFF0000U)
#define EHCI_HOST_ITD_IOC_SHIFT (15U)
#define EHCI_HOST_ITD_PG_SHIFT (12U)
#define EHCI_HOST_ITD_STATUS_ACTIVE_MASK
(0x80000000U)
#define EHCI_HOST_ITD_TRANSACTION_LEN_SHIFT
(16U)
#define EHCI_HOST_ITD_TRANSACTION_LEN_MASK
(0x0FFF0000U)
#define EHCI_HOST_ITD_IOC_SHIFT
(15U)
#define EHCI_HOST_ITD_PG_SHIFT
(12U)
#define EHCI_HOST_ITD_TRANSACTION_OFFSET_SHIFT (0U)
#define EHCI_HOST_ITD_TRANSACTION_OFFSET_MASK (0x00000FFFU)
#define EHCI_HOST_ITD_BUFFER_POINTER_SHIFT (12U)
#define EHCI_HOST_ITD_ENDPT_SHIFT (8U)
#define EHCI_HOST_ITD_DEVICE_ADDRESS_SHIFT (0U)
#define EHCI_HOST_ITD_MAX_PACKET_SIZE_SHIFT (0U)
#define EHCI_HOST_ITD_MULT_SHIFT (0U)
#define EHCI_HOST_ITD_DIRECTION_SHIFT (11U)
#define EHCI_HOST_SITD_STATUS_ACTIVE_MASK (0x00000080U)
#define EHCI_HOST_SITD_DIRECTION_SHIFT (31U)
#define EHCI_HOST_SITD_PORT_NUMBER_SHIFT (24U)
#define EHCI_HOST_SITD_HUB_ADDR_SHIFT (16U)
#define EHCI_HOST_SITD_ENDPT_SHIFT (8U)
#define EHCI_HOST_ITD_TRANSACTION_OFFSET_MASK
(0x00000FFFU)
#define EHCI_HOST_ITD_BUFFER_POINTER_SHIFT
(12U)
#define EHCI_HOST_ITD_ENDPT_SHIFT
(8U)
#define EHCI_HOST_ITD_DEVICE_ADDRESS_SHIFT
(0U)
#define EHCI_HOST_ITD_MAX_PACKET_SIZE_SHIFT
(0U)
#define EHCI_HOST_ITD_MULT_SHIFT
(0U)
#define EHCI_HOST_ITD_DIRECTION_SHIFT
(11U)
#define EHCI_HOST_SITD_STATUS_ACTIVE_MASK
(0x00000080U)
#define EHCI_HOST_SITD_DIRECTION_SHIFT
(31U)
#define EHCI_HOST_SITD_PORT_NUMBER_SHIFT
(24U)
#define EHCI_HOST_SITD_HUB_ADDR_SHIFT
(16U)
#define EHCI_HOST_SITD_ENDPT_SHIFT
(8U)
#define EHCI_HOST_SITD_DEVICE_ADDRESS_SHIFT (0U)
#define EHCI_HOST_SITD_CMASK_SHIFT (8U)
#define EHCI_HOST_SITD_SMASK_SHIFT (0U)
#define EHCI_HOST_SITD_TOTAL_BYTES_SHIFT (16U)
#define EHCI_HOST_SITD_TOTAL_BYTES_MASK (0x03FF0000U)
#define EHCI_HOST_SITD_TP_SHIFT (3U)
#define EHCI_HOST_SITD_TCOUNT_SHIFT (0U)
#define EHCI_HOST_SITD_IOC_SHIFT (31U)
#define EHCI_HOST_SITD_CMASK_SHIFT
(8U)
#define EHCI_HOST_SITD_SMASK_SHIFT
(0U)
#define EHCI_HOST_SITD_TOTAL_BYTES_SHIFT
(16U)
#define EHCI_HOST_SITD_TOTAL_BYTES_MASK
(0x03FF0000U)
#define EHCI_HOST_SITD_TP_SHIFT
(3U)
#define EHCI_HOST_SITD_TCOUNT_SHIFT
(0U)
#define EHCI_HOST_SITD_IOC_SHIFT
(31U)
/* register related MACROs */
#define EHCI_PORTSC1_W1_BITS (0x0000002AU)
#define EHCI_PORTSC1_W1_BITS
(0x0000002AU)
#define EHCI_MAX_UFRAME_VALUE (0x00003FFFU)
/* task event */
#define EHCI_TASK_EVENT_DEVICE_ATTACH (0x01U)
#define EHCI_TASK_EVENT_DEVICE_ATTACH
(0x01U)
#define EHCI_TASK_EVENT_TRANSACTION_DONE (0x02U)
#define EHCI_TASK_EVENT_DEVICE_DETACH (0x04U)
#define EHCI_TASK_EVENT_PORT_CHANGE (0x08U)
#define EHCI_TASK_EVENT_TIMER0 (0x10U)
#define EHCI_TASK_EVENT_TIMER1 (0x20U)
#define EHCI_TASK_EVENT_DEVICE_DETACH
(0x04U)
#define EHCI_TASK_EVENT_PORT_CHANGE
(0x08U)
#define EHCI_TASK_EVENT_TIMER0
(0x10U)
#define EHCI_TASK_EVENT_TIMER1
(0x20U)
#define USB_HostEhciLock()
USB_OsaMutexLock(ehciInstance->ehciMutex
)
#define USB_HostEhciUnlock()
USB_Osa
MutexUnlock(ehciInstance->ehciMutex)
#define USB_HostEhciLock()
(void)OSA_MutexLock(ehciInstance->ehciMutex, USB_OSA_WAIT_TIMEOUT
)
#define USB_HostEhciUnlock()
(void)OSA_
MutexUnlock(ehciInstance->ehciMutex)
/*******************************************************************************
* KHCI driver public structures, enumerations, macros, functions
...
...
@@ -144,6 +122,8 @@
#define USB_HOST_EHCI_PORT_CONNECT_DEBOUNCE_DELAY (101U)
/*! @brief Delay for port reset */
#define USB_HOST_EHCI_PORT_RESET_DELAY (11U)
/*! @brief The MAX continuous transfers that application can send. */
#define USB_HOST_EHCI_ISO_MAX_CONTINUOUS_TRANSFER (8U)
/*! @brief The SITD inserts a frame interval for putting more SITD continuously.
* There is an interval when an application sends two FS/LS ISO transfers.
* When the interval is less than the macro, the two transfers are continuous in the frame list. Otherwise, the two
...
...
@@ -171,7 +151,7 @@
*/
#define USB_HOST_EHCI_ISO_BOUNCE_UFRAME_NUMBER (16U)
/*! @brief Control or bulk transaction timeout value (unit: 100 ms) */
#define USB_HOST_EHCI_CONTROL_BULK_TIME_OUT_VALUE (
2
0U)
#define USB_HOST_EHCI_CONTROL_BULK_TIME_OUT_VALUE (
5
0U)
#if ((defined(USB_HOST_CONFIG_LOW_POWER_MODE)) && (USB_HOST_CONFIG_LOW_POWER_MODE > 0U))
typedef
enum
_bus_ehci_suspend_request_state
...
...
@@ -323,8 +303,10 @@ typedef struct _usb_host_ehci_instance
usb_host_ehci_pipe_t
*
ehciPipeIndexBase
;
/*!< Pipe buffer's start pointer*/
usb_host_ehci_pipe_t
*
ehciPipeList
;
/*!< Idle pipe list pointer*/
usb_host_ehci_pipe_t
*
ehciRunningPipeList
;
/*!< Running pipe list pointer*/
usb_osa_mutex_handle
ehciMutex
;
/*!< EHCI mutex*/
usb_osa_event_handle
taskEventHandle
;
/*!< EHCI task event*/
osa_mutex_handle_t
ehciMutex
;
/*!< EHCI mutex*/
uint32_t
mutexBuffer
[(
OSA_MUTEX_HANDLE_SIZE
+
3
)
/
4
];
/*!< The mutex buffer. */
osa_event_handle_t
taskEventHandle
;
/*!< EHCI task event*/
uint32_t
taskEventHandleBuffer
[(
OSA_EVENT_HANDLE_SIZE
+
3
)
/
4
];
/*!< EHCI task event handle buffer*/
#if ((defined(USB_HOST_CONFIG_LOW_POWER_MODE)) && (USB_HOST_CONFIG_LOW_POWER_MODE > 0U))
uint64_t
matchTick
;
USBPHY_Type
*
registerPhyBase
;
/*!< The base address of the PHY register */
...
...
@@ -355,6 +337,10 @@ typedef struct _usb_host_ehci_data
#endif
#if ((defined(USB_HOST_CONFIG_EHCI_MAX_ITD)) && (USB_HOST_CONFIG_EHCI_MAX_ITD > 0U))
usb_host_ehci_itd_t
ehciItd
[
USB_HOST_CONFIG_EHCI_MAX_ITD
];
/*!< Idle ITD list array*/
/* add additional 32bytes because the itd cannot cross over 4K boundary,
* If one ITD cross over 4K boundary, the code will move 32 bytes for ITD.
*/
uint32_t
reserved
[
8
];
#endif
#if ((defined(USB_HOST_CONFIG_EHCI_MAX_SITD)) && (USB_HOST_CONFIG_EHCI_MAX_SITD > 0U))
usb_host_ehci_sitd_t
ehciSitd
[
USB_HOST_CONFIG_EHCI_MAX_SITD
];
/*!< Idle SITD list array*/
...
...
bsp/imxrt/libraries/drivers/usb/host/usb_host_hci.c
浏览文件 @
7c151557
此差异已折叠。
点击以展开。
bsp/imxrt/libraries/drivers/usb/host/usb_host_hci.h
浏览文件 @
7c151557
/*
* Copyright (c) 2015, Freescale Semiconductor, Inc.
* Copyright 2016 NXP
* Copyright 2016 - 2019 NXP
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* o Redistributions of source code must retain the above copyright notice, this list
* of conditions and the following disclaimer.
*
* o Redistributions in binary form must reproduce the above copyright notice, this
* list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
* o Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef _USB_HOST_HCI_H_
...
...
@@ -36,9 +14,9 @@
******************************************************************************/
/*! @brief USB host lock */
#define USB_HostLock()
USB_OsaMutexLock(hostInstance->hostMutex
)
#define USB_HostLock()
OSA_MutexLock(hostInstance->hostMutex, RT_WAITING_FOREVER
)
/*! @brief USB host unlock */
#define USB_HostUnlock()
USB_Osa
MutexUnlock(hostInstance->hostMutex)
#define USB_HostUnlock()
OSA_
MutexUnlock(hostInstance->hostMutex)
/*!
* @addtogroup usb_host_controller_driver
...
...
@@ -56,6 +34,10 @@ typedef enum _usb_host_controller_control
kUSB_HostPortAttachDisable
,
/*!< Disable the port attach event */
kUSB_HostPortAttachEnable
,
/*!< Enable the port attach event */
kUSB_HostL1Config
,
/*!< L1 suspend Bus control code */
kUSB_HostSetChargerType
,
/*!< set charger type */
#if ((defined USB_HOST_CONFIG_COMPLIANCE_TEST) && (USB_HOST_CONFIG_COMPLIANCE_TEST))
kUSB_HostTestModeInit
,
/*!< intialize charger type */
#endif
}
usb_host_controller_control_t
;
/*! @brief USB host controller bus control code */
...
...
@@ -97,7 +79,9 @@ typedef struct _usb_host_controller_interface
uint32_t
ioctlEvent
,
void
*
ioctlParam
);
/*!< Control a controller function prototype*/
}
usb_host_controller_interface_t
;
#if ((defined USB_HOST_CONFIG_COMPLIANCE_TEST) && (USB_HOST_CONFIG_COMPLIANCE_TEST))
usb_status_t
USB_HostTestModeInit
(
usb_device_handle
deviceHandle
);
#endif
/*! @}*/
/*!
...
...
@@ -110,7 +94,8 @@ typedef struct _usb_host_instance
{
void
*
controllerHandle
;
/*!< The low level controller handle*/
host_callback_t
deviceCallback
;
/*!< Device attach/detach callback*/
usb_osa_mutex_handle
hostMutex
;
/*!< Host layer mutex*/
osa_mutex_handle_t
hostMutex
;
/*!< Host layer mutex*/
uint32_t
mutexBuffer
[(
OSA_MUTEX_HANDLE_SIZE
+
3
)
/
4
];
/*!< Host layer mutex*/
usb_host_transfer_t
transferList
[
USB_HOST_CONFIG_MAX_TRANSFERS
];
/*!< Transfer resource*/
usb_host_transfer_t
*
transferHead
;
/*!< Idle transfer head*/
const
usb_host_controller_interface_t
*
controllerTable
;
/*!< KHCI/EHCI interface*/
...
...
@@ -126,6 +111,7 @@ typedef struct _usb_host_instance
uint8_t
controllerId
;
/*!< The controller ID*/
}
usb_host_instance_t
;
extern
usb_host_instance_t
g_UsbHostInstance
[
USB_HOST_CONFIG_MAX_HOST
];
/*! @}*/
#endif
/* _USB_HOST_HCI_H_ */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录