implement hcd_uframe_number for ohci

able to get 8 byte descriptors using LPC1769 + base, but failed to reset
and set address.
This commit is contained in:
hathach 2020-05-22 21:45:34 +07:00
parent 4c01099a3d
commit d108ea4326
3 changed files with 32 additions and 9 deletions

View File

@ -18,8 +18,8 @@
arm_target_debug_interface_type="ADIv5" arm_target_debug_interface_type="ADIv5"
arm_target_device_name="LPC4088" arm_target_device_name="LPC4088"
arm_target_interface_type="SWD" arm_target_interface_type="SWD"
c_preprocessor_definitions="CORE_M4;__LPC4000_FAMILY;__LPC408x_SUBFAMILY;ARM_MATH_CM4;FLASH_PLACEMENT=1;BOARD_EA4088QS;CFG_TUSB_MCU=OPT_MCU_LPC40XX;CFG_TUSB_MEM_SECTION= __attribute__((section(".bss2")))" c_preprocessor_definitions="CORE_M4;__LPC4000_FAMILY;__LPC408x_SUBFAMILY;ARM_MATH_CM4;FLASH_PLACEMENT=1;BOARD_EA4088QS;CFG_TUSB_MCU=OPT_MCU_LPC40XX;CFG_TUSB_MEM_SECTION= __attribute__((section(".bss2")));CFG_TUSB_DEBUG=2;LOGGER_RTT"
c_user_include_directories="../../src;$(rootDir)/hw;$(rootDir)/src;$(lpcDir)/inc" c_user_include_directories="../../src;$(rootDir)/hw;$(rootDir)/src;$(lpcDir)/inc;$(rootDir)/lib/SEGGER_RTT/RTT"
debug_register_definition_file="$(ProjectDir)/LPC408x_7x_Registers.xml" debug_register_definition_file="$(ProjectDir)/LPC408x_7x_Registers.xml"
debug_target_connection="J-Link" debug_target_connection="J-Link"
gcc_enable_all_warnings="Yes" gcc_enable_all_warnings="Yes"
@ -55,6 +55,7 @@
<folder Name="ea4088qs"> <folder Name="ea4088qs">
<file file_name="../../../../../hw/bsp/ea4088qs/ea4088qs.c" /> <file file_name="../../../../../hw/bsp/ea4088qs/ea4088qs.c" />
</folder> </folder>
<file file_name="../../../../../hw/bsp/board.c" />
</folder> </folder>
<folder Name="mcu"> <folder Name="mcu">
<folder Name="nxp"> <folder Name="nxp">
@ -91,12 +92,6 @@
</folder> </folder>
</folder> </folder>
</folder> </folder>
<folder
Name="segger_rtt"
exclude=""
filter="*.c;*.h"
path="../../../../../lib/segger_rtt"
recurse="No" />
<folder <folder
Name="src" Name="src"
exclude="" exclude=""
@ -109,6 +104,19 @@
filter="*.c;*.h" filter="*.c;*.h"
path="../../../../../src" path="../../../../../src"
recurse="Yes" /> recurse="Yes" />
<folder Name="lib">
<folder Name="SEGGER_RTT">
<folder Name="RTT">
<file file_name="../../../../../lib/SEGGER_RTT/RTT/SEGGER_RTT.c" />
<file file_name="../../../../../lib/SEGGER_RTT/RTT/SEGGER_RTT.h" />
<file file_name="../../../../../lib/SEGGER_RTT/RTT/SEGGER_RTT_Conf.h" />
<file file_name="../../../../../lib/SEGGER_RTT/RTT/SEGGER_RTT_printf.c" />
</folder>
<folder Name="Syscalls">
<file file_name="../../../../../lib/SEGGER_RTT/Syscalls/SEGGER_RTT_Syscalls_SES.c" />
</folder>
</folder>
</folder>
</project> </project>
<configuration <configuration
Name="EA4088 QuickStart" Name="EA4088 QuickStart"

View File

@ -166,7 +166,7 @@ bool hcd_init(void)
OHCI_REG->interrupt_disable = OHCI_REG->interrupt_enable; // disable all interrupts OHCI_REG->interrupt_disable = OHCI_REG->interrupt_enable; // disable all interrupts
OHCI_REG->interrupt_status = OHCI_REG->interrupt_status; // clear current set bits OHCI_REG->interrupt_status = OHCI_REG->interrupt_status; // clear current set bits
OHCI_REG->interrupt_enable = OHCI_INT_WRITEBACK_DONEHEAD_MASK | OHCI_INT_RESUME_DETECTED_MASK | OHCI_REG->interrupt_enable = OHCI_INT_WRITEBACK_DONEHEAD_MASK | OHCI_INT_RESUME_DETECTED_MASK |
OHCI_INT_UNRECOVERABLE_ERROR_MASK | /*OHCI_INT_FRAME_OVERFLOW_MASK |*/ OHCI_INT_RHPORT_STATUS_CHANGE_MASK | OHCI_INT_UNRECOVERABLE_ERROR_MASK | OHCI_INT_FRAME_OVERFLOW_MASK | OHCI_INT_RHPORT_STATUS_CHANGE_MASK |
OHCI_INT_MASTER_ENABLE_MASK; OHCI_INT_MASTER_ENABLE_MASK;
OHCI_REG->control |= OHCI_CONTROL_CONTROL_BULK_RATIO | OHCI_CONTROL_LIST_CONTROL_ENABLE_MASK | OHCI_REG->control |= OHCI_CONTROL_CONTROL_BULK_RATIO | OHCI_CONTROL_LIST_CONTROL_ENABLE_MASK |
@ -181,6 +181,13 @@ bool hcd_init(void)
return true; return true;
} }
uint32_t hcd_uframe_number(uint8_t rhport)
{
(void) rhport;
return (ohci_data.frame_number_hi << 16 | OHCI_REG->frame_number) << 3;
}
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// PORT API // PORT API
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
@ -606,6 +613,12 @@ void hcd_isr(uint8_t hostid)
if (int_status == 0) return; if (int_status == 0) return;
// Frame number overflow
if ( int_status & OHCI_INT_FRAME_OVERFLOW_MASK )
{
ohci_data.frame_number_hi++;
}
//------------- RootHub status -------------// //------------- RootHub status -------------//
if ( int_status & OHCI_INT_RHPORT_STATUS_CHANGE_MASK ) if ( int_status & OHCI_INT_RHPORT_STATUS_CHANGE_MASK )
{ {

View File

@ -180,6 +180,8 @@ typedef struct TU_ATTR_ALIGNED(256)
ohci_ed_t ed_pool[HCD_MAX_ENDPOINT]; ohci_ed_t ed_pool[HCD_MAX_ENDPOINT];
ohci_gtd_t gtd_pool[HCD_MAX_XFER]; ohci_gtd_t gtd_pool[HCD_MAX_XFER];
volatile uint16_t frame_number_hi;
} ohci_data_t; } ohci_data_t;
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+