@@ -1064,8 +1064,7 @@ void dcd_edpt_clear_stall (uint8_t rhport, uint8_t ep_addr)
1064
1064
*/
1065
1065
static bool dcd_write_packet_memory (uint16_t dst , const void * __restrict src , size_t wNBytes )
1066
1066
{
1067
- uint32_t n = ((uint32_t )wNBytes + 1U ) >> 1U ;
1068
- uint32_t i ;
1067
+ uint32_t n = (uint32_t )wNBytes >> 1U ;
1069
1068
uint16_t temp1 , temp2 ;
1070
1069
const uint8_t * srcVal ;
1071
1070
@@ -1076,15 +1075,22 @@ static bool dcd_write_packet_memory(uint16_t dst, const void *__restrict src, si
1076
1075
srcVal = src ;
1077
1076
pdwVal = & pma [PMA_STRIDE * (dst >>1 )];
1078
1077
1079
- for ( i = n ; i != 0 ; i -- )
1078
+ while ( n -- )
1080
1079
{
1081
- temp1 = (uint16_t ) * srcVal ;
1080
+ temp1 = (uint16_t )* srcVal ;
1082
1081
srcVal ++ ;
1083
- temp2 = temp1 | ((uint16_t )((uint16_t ) (( * srcVal ) << 8U ) )) ;
1082
+ temp2 = temp1 | ((uint16_t )((( uint16_t )( * srcVal )) << 8U )) ;
1084
1083
* pdwVal = temp2 ;
1085
1084
pdwVal += PMA_STRIDE ;
1086
1085
srcVal ++ ;
1087
1086
}
1087
+
1088
+ if (wNBytes & 0x01 )
1089
+ {
1090
+ temp1 = * srcVal ;
1091
+ * pdwVal = temp2 ;
1092
+ }
1093
+
1088
1094
return true;
1089
1095
}
1090
1096
@@ -1141,7 +1147,6 @@ static bool dcd_write_packet_memory_ff(tu_fifo_t * ff, uint16_t dst, uint16_t wN
1141
1147
static bool dcd_read_packet_memory (void * __restrict dst , uint16_t src , size_t wNBytes )
1142
1148
{
1143
1149
uint32_t n = (uint32_t )wNBytes >> 1U ;
1144
- uint32_t i ;
1145
1150
// The GCC optimizer will combine access to 32-bit sizes if we let it. Force
1146
1151
// it volatile so that it won't do that.
1147
1152
__IO const uint16_t * pdwVal ;
@@ -1150,7 +1155,7 @@ static bool dcd_read_packet_memory(void *__restrict dst, uint16_t src, size_t wN
1150
1155
pdwVal = & pma [PMA_STRIDE * (src >>1 )];
1151
1156
uint8_t * dstVal = (uint8_t * )dst ;
1152
1157
1153
- for ( i = n ; i != 0U ; i -- )
1158
+ while ( n -- )
1154
1159
{
1155
1160
temp = * pdwVal ;
1156
1161
pdwVal += PMA_STRIDE ;
0 commit comments