summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2018-03-11 12:53:40 +0700
committerhathach <[email protected]>2018-03-11 12:53:40 +0700
commitc39b24001d57a128dc0d094c509ae4ed3998e617 (patch)
treeaa18335e511186e2b58d8a0c9478c21e629fd069
parent539fbe5d6276575d3f2dd943b7d5d7463a522732 (diff)
clean up
-rw-r--r--hw/mcu/nxp/lpc43xx/hal/dcd_lpc43xx.c100
-rw-r--r--hw/mcu/nxp/lpc43xx/hal/dcd_lpc43xx.h104
-rw-r--r--tinyusb/tusb_hal.h2
3 files changed, 105 insertions, 101 deletions
diff --git a/hw/mcu/nxp/lpc43xx/hal/dcd_lpc43xx.c b/hw/mcu/nxp/lpc43xx/hal/dcd_lpc43xx.c
index 2337f9b49..6fb16f16d 100644
--- a/hw/mcu/nxp/lpc43xx/hal/dcd_lpc43xx.c
+++ b/hw/mcu/nxp/lpc43xx/hal/dcd_lpc43xx.c
@@ -58,106 +58,6 @@
//--------------------------------------------------------------------+
// MACRO CONSTANT TYPEDEF
//--------------------------------------------------------------------+
-#define DCD_QHD_MAX 12
-#define DCD_QTD_MAX 12
-#define DCD_QTD_PER_QHD_MAX 2 // maximum number of qtd that are linked into one queue head at a time
-
-#define QTD_NEXT_INVALID 0x01
-
-/*---------- ENDPTCTRL ----------*/
-enum {
- ENDPTCTRL_MASK_STALL = BIT_(0),
- ENDPTCTRL_MASK_TOGGLE_INHIBIT = BIT_(5), ///< used for test only
- ENDPTCTRL_MASK_TOGGLE_RESET = BIT_(6),
- ENDPTCTRL_MASK_ENABLE = BIT_(7)
-};
-
-/*---------- USBCMD ----------*/
-enum {
- USBCMD_MASK_RUN_STOP = BIT_(0),
- USBCMD_MASK_RESET = BIT_(1),
- USBCMD_MASK_SETUP_TRIPWIRE = BIT_(13),
- USBCMD_MASK_ADD_QTD_TRIPWIRE = BIT_(14) ///< This bit is used as a semaphore to ensure the to proper addition of a new dTD to an active (primed) endpoint’s linked list. This bit is set and cleared by software during the process of adding a new dTD
-};
-// Interrupt Threshold bit 23:16
-
-/*---------- USBSTS, USBINTR ----------*/
-enum {
- INT_MASK_USB = BIT_(0),
- INT_MASK_ERROR = BIT_(1),
- INT_MASK_PORT_CHANGE = BIT_(2),
- INT_MASK_RESET = BIT_(6),
- INT_MASK_SOF = BIT_(7),
- INT_MASK_SUSPEND = BIT_(8),
- INT_MASK_NAK = BIT_(16)
-};
-
-//------------- PORTSC -------------//
-enum {
- PORTSC_CURRENT_CONNECT_STATUS_MASK = BIT_(0),
- PORTSC_FORCE_PORT_RESUME_MASK = BIT_(6),
- PORTSC_SUSPEND_MASK = BIT_(7)
-
-};
-
-typedef struct {
- // Word 0: Next QTD Pointer
- uint32_t next; ///< Next link pointer This field contains the physical memory address of the next dTD to be processed
-
- // Word 1: qTQ Token
- uint32_t : 3 ;
- volatile uint32_t xact_err : 1 ;
- uint32_t : 1 ;
- volatile uint32_t buffer_err : 1 ;
- volatile uint32_t halted : 1 ;
- volatile uint32_t active : 1 ;
- uint32_t : 2 ;
- uint32_t iso_mult_override : 2 ; ///< This field can be used for transmit ISOs to override the MULT field in the dQH. This field must be zero for all packet types that are not transmit-ISO.
- uint32_t : 3 ;
- uint32_t int_on_complete : 1 ;
- volatile uint32_t total_bytes : 15 ;
- uint32_t : 0 ;
-
- // Word 2-6: Buffer Page Pointer List, Each element in the list is a 4K page aligned, physical memory address. The lower 12 bits in each pointer are reserved (except for the first one) as each memory pointer must reference the start of a 4K page
- uint32_t buffer[5]; ///< buffer1 has frame_n for TODO Isochronous
-
- //------------- DCD Area -------------//
- uint16_t expected_bytes;
- uint8_t used;
- uint8_t reserved;
-} dcd_qtd_t;
-
-STATIC_ASSERT( sizeof(dcd_qtd_t) == 32, "size is not correct");
-
-typedef struct ATTR_ALIGNED(64) {
- // Word 0: Capabilities and Characteristics
- uint32_t : 15 ; ///< Number of packets executed per transaction descriptor 00 - Execute N transactions as demonstrated by the USB variable length protocol where N is computed using Max_packet_length and the Total_bytes field in the dTD. 01 - Execute one transaction 10 - Execute two transactions 11 - Execute three transactions Remark: Non-isochronous endpoints must set MULT = 00. Remark: Isochronous endpoints must set MULT = 01, 10, or 11 as needed.
- uint32_t int_on_setup : 1 ; ///< Interrupt on setup This bit is used on control type endpoints to indicate if USBINT is set in response to a setup being received.
- uint32_t max_package_size : 11 ; ///< This directly corresponds to the maximum packet size of the associated endpoint (wMaxPacketSize)
- uint32_t : 2 ;
- uint32_t zero_length_termination : 1 ; ///< This bit is used for non-isochronous endpoints to indicate when a zero-length packet is received to terminate transfers in case the total transfer length is “multiple”. 0 - Enable zero-length packet to terminate transfers equal to a multiple of Max_packet_length (default). 1 - Disable zero-length packet on transfers that are equal in length to a multiple Max_packet_length.
- uint32_t iso_mult : 2 ; ///<
- uint32_t : 0 ;
-
- // Word 1: Current qTD Pointer
- volatile uint32_t qtd_addr;
-
- // Word 2-9: Transfer Overlay
- volatile dcd_qtd_t qtd_overlay;
-
- // Word 10-11: Setup request (control OUT only)
- volatile tusb_control_request_t setup_request;
-
- //--------------------------------------------------------------------+
- /// Due to the fact QHD is 64 bytes aligned but occupies only 48 bytes
- /// thus there are 16 bytes padding free that we can make use of.
- //--------------------------------------------------------------------+
- volatile uint8_t list_qtd_idx[DCD_QTD_PER_QHD_MAX];
-
- uint8_t reserved[16-DCD_QTD_PER_QHD_MAX];
-} dcd_qhd_t;
-
-STATIC_ASSERT( sizeof(dcd_qhd_t) == 64, "size is not correct");
//--------------------------------------------------------------------+
// INTERNAL OBJECT & FUNCTION DECLARATION
diff --git a/hw/mcu/nxp/lpc43xx/hal/dcd_lpc43xx.h b/hw/mcu/nxp/lpc43xx/hal/dcd_lpc43xx.h
index 92bb42769..673486f63 100644
--- a/hw/mcu/nxp/lpc43xx/hal/dcd_lpc43xx.h
+++ b/hw/mcu/nxp/lpc43xx/hal/dcd_lpc43xx.h
@@ -47,6 +47,110 @@
extern "C" {
#endif
+//--------------------------------------------------------------------+
+// MACRO CONSTANT TYPEDEF
+//--------------------------------------------------------------------+
+#define DCD_QHD_MAX 12
+#define DCD_QTD_MAX 12
+#define DCD_QTD_PER_QHD_MAX 2 // maximum number of qtd that are linked into one queue head at a time
+
+#define QTD_NEXT_INVALID 0x01
+
+/*---------- ENDPTCTRL ----------*/
+enum {
+ ENDPTCTRL_MASK_STALL = BIT_(0),
+ ENDPTCTRL_MASK_TOGGLE_INHIBIT = BIT_(5), ///< used for test only
+ ENDPTCTRL_MASK_TOGGLE_RESET = BIT_(6),
+ ENDPTCTRL_MASK_ENABLE = BIT_(7)
+};
+
+/*---------- USBCMD ----------*/
+enum {
+ USBCMD_MASK_RUN_STOP = BIT_(0),
+ USBCMD_MASK_RESET = BIT_(1),
+ USBCMD_MASK_SETUP_TRIPWIRE = BIT_(13),
+ USBCMD_MASK_ADD_QTD_TRIPWIRE = BIT_(14) ///< This bit is used as a semaphore to ensure the to proper addition of a new dTD to an active (primed) endpoint’s linked list. This bit is set and cleared by software during the process of adding a new dTD
+};
+// Interrupt Threshold bit 23:16
+
+/*---------- USBSTS, USBINTR ----------*/
+enum {
+ INT_MASK_USB = BIT_(0),
+ INT_MASK_ERROR = BIT_(1),
+ INT_MASK_PORT_CHANGE = BIT_(2),
+ INT_MASK_RESET = BIT_(6),
+ INT_MASK_SOF = BIT_(7),
+ INT_MASK_SUSPEND = BIT_(8),
+ INT_MASK_NAK = BIT_(16)
+};
+
+//------------- PORTSC -------------//
+enum {
+ PORTSC_CURRENT_CONNECT_STATUS_MASK = BIT_(0),
+ PORTSC_FORCE_PORT_RESUME_MASK = BIT_(6),
+ PORTSC_SUSPEND_MASK = BIT_(7)
+
+};
+
+typedef struct {
+ // Word 0: Next QTD Pointer
+ uint32_t next; ///< Next link pointer This field contains the physical memory address of the next dTD to be processed
+
+ // Word 1: qTQ Token
+ uint32_t : 3 ;
+ volatile uint32_t xact_err : 1 ;
+ uint32_t : 1 ;
+ volatile uint32_t buffer_err : 1 ;
+ volatile uint32_t halted : 1 ;
+ volatile uint32_t active : 1 ;
+ uint32_t : 2 ;
+ uint32_t iso_mult_override : 2 ; ///< This field can be used for transmit ISOs to override the MULT field in the dQH. This field must be zero for all packet types that are not transmit-ISO.
+ uint32_t : 3 ;
+ uint32_t int_on_complete : 1 ;
+ volatile uint32_t total_bytes : 15 ;
+ uint32_t : 0 ;
+
+ // Word 2-6: Buffer Page Pointer List, Each element in the list is a 4K page aligned, physical memory address. The lower 12 bits in each pointer are reserved (except for the first one) as each memory pointer must reference the start of a 4K page
+ uint32_t buffer[5]; ///< buffer1 has frame_n for TODO Isochronous
+
+ //------------- DCD Area -------------//
+ uint16_t expected_bytes;
+ uint8_t used;
+ uint8_t reserved;
+} dcd_qtd_t;
+
+STATIC_ASSERT( sizeof(dcd_qtd_t) == 32, "size is not correct");
+
+typedef struct ATTR_ALIGNED(64) {
+ // Word 0: Capabilities and Characteristics
+ uint32_t : 15 ; ///< Number of packets executed per transaction descriptor 00 - Execute N transactions as demonstrated by the USB variable length protocol where N is computed using Max_packet_length and the Total_bytes field in the dTD. 01 - Execute one transaction 10 - Execute two transactions 11 - Execute three transactions Remark: Non-isochronous endpoints must set MULT = 00. Remark: Isochronous endpoints must set MULT = 01, 10, or 11 as needed.
+ uint32_t int_on_setup : 1 ; ///< Interrupt on setup This bit is used on control type endpoints to indicate if USBINT is set in response to a setup being received.
+ uint32_t max_package_size : 11 ; ///< This directly corresponds to the maximum packet size of the associated endpoint (wMaxPacketSize)
+ uint32_t : 2 ;
+ uint32_t zero_length_termination : 1 ; ///< This bit is used for non-isochronous endpoints to indicate when a zero-length packet is received to terminate transfers in case the total transfer length is “multiple”. 0 - Enable zero-length packet to terminate transfers equal to a multiple of Max_packet_length (default). 1 - Disable zero-length packet on transfers that are equal in length to a multiple Max_packet_length.
+ uint32_t iso_mult : 2 ; ///<
+ uint32_t : 0 ;
+
+ // Word 1: Current qTD Pointer
+ volatile uint32_t qtd_addr;
+
+ // Word 2-9: Transfer Overlay
+ volatile dcd_qtd_t qtd_overlay;
+
+ // Word 10-11: Setup request (control OUT only)
+ volatile tusb_control_request_t setup_request;
+
+ //--------------------------------------------------------------------+
+ /// Due to the fact QHD is 64 bytes aligned but occupies only 48 bytes
+ /// thus there are 16 bytes padding free that we can make use of.
+ //--------------------------------------------------------------------+
+ volatile uint8_t list_qtd_idx[DCD_QTD_PER_QHD_MAX];
+
+ uint8_t reserved[16-DCD_QTD_PER_QHD_MAX];
+} dcd_qhd_t;
+
+STATIC_ASSERT( sizeof(dcd_qhd_t) == 64, "size is not correct");
+
#ifdef __cplusplus
}
diff --git a/tinyusb/tusb_hal.h b/tinyusb/tusb_hal.h
index 024129c96..76a1e15c4 100644
--- a/tinyusb/tusb_hal.h
+++ b/tinyusb/tusb_hal.h
@@ -87,7 +87,7 @@ void hal_usb_int_disable(uint8_t port);
uint32_t hal_tick_get(void);
// for debug only, halt mcu if assert/verify is failed if debugger is attached
-void hal_debugger_breakpoint(void);
+void hal_debugger_breakpoint(void) ATTR_WEAK;
#ifdef __cplusplus
}