@@ -54,6 +54,21 @@ const uint8_t dcd_data[] = { 0x00 };
54
54
//
55
55
//--------------------------------------------------------------------+
56
56
57
+ static void init_usb_phy (USBPHY_Type * usb_phy ) {
58
+ // Enable PHY support for Low speed device + LS via FS Hub
59
+ usb_phy -> CTRL |= USBPHY_CTRL_SET_ENUTMILEVEL2_MASK | USBPHY_CTRL_SET_ENUTMILEVEL3_MASK ;
60
+
61
+ // Enable all power for normal operation
62
+ // TODO may not be needed since it is called within CLOCK_EnableUsbhs0PhyPllClock()
63
+ usb_phy -> PWD = 0 ;
64
+
65
+ // TX Timing
66
+ uint32_t phytx = usb_phy -> TX ;
67
+ phytx &= ~(USBPHY_TX_D_CAL_MASK | USBPHY_TX_TXCAL45DM_MASK | USBPHY_TX_TXCAL45DP_MASK );
68
+ phytx |= USBPHY_TX_D_CAL (0x0C ) | USBPHY_TX_TXCAL45DP (0x06 ) | USBPHY_TX_TXCAL45DM (0x06 );
69
+ usb_phy -> TX = phytx ;
70
+ }
71
+
57
72
void board_init (void )
58
73
{
59
74
// make sure the dcache is on.
@@ -117,52 +132,24 @@ void board_init(void)
117
132
118
133
LPUART_Init (UART_PORT , & uart_config , freq );
119
134
120
- //------------- USB0 -------------//
135
+ //------------- USB -------------//
136
+ // Note: RT105x RT106x and later have dual USB controllers.
121
137
122
138
// Clock
123
139
CLOCK_EnableUsbhs0PhyPllClock (kCLOCK_Usbphy480M , 480000000U );
124
140
CLOCK_EnableUsbhs0Clock (kCLOCK_Usb480M , 480000000U );
125
141
126
- USBPHY_Type * usb_phy ;
127
-
128
- // RT105x RT106x have dual USB controller.
129
142
#ifdef USBPHY1
130
- usb_phy = USBPHY1 ;
143
+ init_usb_phy ( USBPHY1 ) ;
131
144
#else
132
- usb_phy = USBPHY ;
145
+ init_usb_phy ( USBPHY ) ;
133
146
#endif
134
147
135
- // Enable PHY support for Low speed device + LS via FS Hub
136
- usb_phy -> CTRL |= USBPHY_CTRL_SET_ENUTMILEVEL2_MASK | USBPHY_CTRL_SET_ENUTMILEVEL3_MASK ;
137
-
138
- // Enable all power for normal operation
139
- usb_phy -> PWD = 0 ;
140
-
141
- // TX Timing
142
- uint32_t phytx = usb_phy -> TX ;
143
- phytx &= ~(USBPHY_TX_D_CAL_MASK | USBPHY_TX_TXCAL45DM_MASK | USBPHY_TX_TXCAL45DP_MASK );
144
- phytx |= USBPHY_TX_D_CAL (0x0C ) | USBPHY_TX_TXCAL45DP (0x06 ) | USBPHY_TX_TXCAL45DM (0x06 );
145
- usb_phy -> TX = phytx ;
146
-
147
- // RT105x RT106x have dual USB controller.
148
148
#ifdef USBPHY2
149
149
// USB1
150
150
CLOCK_EnableUsbhs1PhyPllClock (kCLOCK_Usbphy480M , 480000000U );
151
151
CLOCK_EnableUsbhs1Clock (kCLOCK_Usb480M , 480000000U );
152
-
153
- usb_phy = USBPHY2 ;
154
-
155
- // Enable PHY support for Low speed device + LS via FS Hub
156
- usb_phy -> CTRL |= USBPHY_CTRL_SET_ENUTMILEVEL2_MASK | USBPHY_CTRL_SET_ENUTMILEVEL3_MASK ;
157
-
158
- // Enable all power for normal operation
159
- usb_phy -> PWD = 0 ;
160
-
161
- // TX Timing
162
- phytx = usb_phy -> TX ;
163
- phytx &= ~(USBPHY_TX_D_CAL_MASK | USBPHY_TX_TXCAL45DM_MASK | USBPHY_TX_TXCAL45DP_MASK );
164
- phytx |= USBPHY_TX_D_CAL (0x0C ) | USBPHY_TX_TXCAL45DP (0x06 ) | USBPHY_TX_TXCAL45DM (0x06 );
165
- usb_phy -> TX = phytx ;
152
+ init_usb_phy (USBPHY2 );
166
153
#endif
167
154
}
168
155
@@ -208,8 +195,28 @@ uint32_t board_button_read(void)
208
195
209
196
int board_uart_read (uint8_t * buf , int len )
210
197
{
211
- LPUART_ReadBlocking (UART_PORT , buf , len );
212
- return len ;
198
+ int count = 0 ;
199
+
200
+ while ( count < len )
201
+ {
202
+ uint8_t const rx_count = LPUART_GetRxFifoCount (UART_PORT );
203
+ if (!rx_count )
204
+ {
205
+ // clear all error flag if any
206
+ uint32_t status_flags = LPUART_GetStatusFlags (UART_PORT );
207
+ status_flags &= (kLPUART_RxOverrunFlag | kLPUART_ParityErrorFlag | kLPUART_FramingErrorFlag | kLPUART_NoiseErrorFlag );
208
+ LPUART_ClearStatusFlags (UART_PORT , status_flags );
209
+ break ;
210
+ }
211
+
212
+ for (int i = 0 ; i < rx_count ; i ++ )
213
+ {
214
+ buf [count ] = LPUART_ReadByte (UART_PORT );
215
+ count ++ ;
216
+ }
217
+ }
218
+
219
+ return count ;
213
220
}
214
221
215
222
int board_uart_write (void const * buf , int len )
0 commit comments