diff --git a/FreeRTOSConfig.h b/FreeRTOSConfig.h index b923926..dfa4103 100644 --- a/FreeRTOSConfig.h +++ b/FreeRTOSConfig.h @@ -109,6 +109,7 @@ extern uint32_t SystemCoreClock; #define configQUEUE_REGISTRY_SIZE 0 #define configCHECK_FOR_STACK_OVERFLOW 2 #define configENABLE_BACKWARD_COMPATIBILITY 0 +#define configUSE_COUNTING_SEMAPHORES 1 #define configUSE_TIMERS 0 #define configTIMER_TASK_PRIORITY TSK_TIMERS_PRIO // above normal diff --git a/TinyFrame/TF_Integration.c b/TinyFrame/TF_Integration.c index 6aa1b18..f6588b3 100644 --- a/TinyFrame/TF_Integration.c +++ b/TinyFrame/TF_Integration.c @@ -31,6 +31,8 @@ void TF_WriteImpl(TinyFrame *tf, const uint8_t *buff, uint32_t len) // this is an attempt to speed it up a little by removing a couple levels of indirection assert_param(HAL_OK == HAL_PCD_EP_Transmit(hUsbDeviceFS.pData, CDC_IN_EP, (uint8_t *) buff, chunksize)); + HAL_PCD_EP_Transmit(hUsbDeviceFS.pData, CDC_IN_EP, (uint8_t *) "AAAAHELLODOLLY123", 17); + // USBD_LL_Transmit(&hUsbDeviceFS, CDC_IN_EP, (uint8_t *) buff, chunksize); // assert_param(USBD_OK == CDC_Transmit_FS((uint8_t *) buff, chunksize)); diff --git a/USB/usbd_cdc_if.c b/USB/usbd_cdc_if.c index b6ee7eb..86ec967 100644 --- a/USB/usbd_cdc_if.c +++ b/USB/usbd_cdc_if.c @@ -313,6 +313,8 @@ void USBD_CDC_TransmitDone(USBD_HandleTypeDef *pdev) assert_param(semVcomTxReadyHandle != NULL); assert_param(inIRQ()); +// if (uxSemaphoreGetCount(semVcomTxReadyHandle) == 2) return; + portBASE_TYPE taskWoken = pdFALSE; assert_param(xSemaphoreGiveFromISR(semVcomTxReadyHandle, &taskWoken) == pdTRUE); portYIELD_FROM_ISR(taskWoken); diff --git a/USB/usbd_conf.c b/USB/usbd_conf.c index d362abd..7ce997a 100644 --- a/USB/usbd_conf.c +++ b/USB/usbd_conf.c @@ -47,12 +47,13 @@ ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ -#include +#include #include "platform.h" #include "usbd_def.h" #include "usbd_core.h" #include "usbd_msc.h" #include "usbd_cdc.h" +#include "utils/malloc_safe.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ @@ -335,6 +336,9 @@ void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd) * @param pdev: Device handle * @retval USBD Status */ + +extern void PCD_WritePMA(USB_TypeDef *USBx, uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes); + USBD_StatusTypeDef USBD_LL_Init (USBD_HandleTypeDef *pdev) { #if PLAT_USB_OTGFS @@ -397,12 +401,27 @@ USBD_StatusTypeDef USBD_LL_Init (USBD_HandleTypeDef *pdev) HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , MSC_EPOUT_ADDR , PCD_SNG_BUF, ptr += 64); // 64 // CDC endpoints, EP2 two-way and EP3 in-only - HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , CDC_IN_EP , PCD_SNG_BUF, ptr += 64); // 64 - HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , CDC_OUT_EP , PCD_SNG_BUF, ptr += 64); // 64 + uint32_t buf1addr, buf2addr; + + buf1addr = (ptr += 64); + buf2addr = (ptr += 64); + + uint32_t addr_begin = buf1addr; + HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , CDC_IN_EP , PCD_DBL_BUF, buf1addr | (buf2addr << 16)); // 64 + + buf1addr = (ptr += 64); + buf2addr = (ptr += 64); + HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , CDC_OUT_EP , PCD_DBL_BUF, buf1addr | (buf2addr << 16)); // 64 + HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , CDC_CMD_EP , PCD_SNG_BUF, ptr += 16); // 16 (void)ptr; #endif + const uint8_t buf[256] = {}; + PCD_WritePMA(((PCD_HandleTypeDef*)pdev->pData)->Instance, (uint8_t *) &buf[0], (uint16_t) addr_begin, 256); + + hw_configure_sparse_pins('B', 0b111, NULL, LL_GPIO_MODE_OUTPUT, LL_GPIO_OUTPUT_PUSHPULL); + return USBD_OK; } diff --git a/USB/usbd_conf.h b/USB/usbd_conf.h index 7f7f32a..44fb38e 100644 --- a/USB/usbd_conf.h +++ b/USB/usbd_conf.h @@ -99,7 +99,7 @@ #define CDC_CUSTOM_EPS #define CDC_IN_EP 0x82 /* EP1 for data IN */ -#define CDC_OUT_EP 0x02 /* EP1 for data OUT */ +#define CDC_OUT_EP 0x04 /* EP1 for data OUT */ #define CDC_CMD_EP 0x83 /* EP2 for CDC commands */ /** @defgroup USBD_Exported_Macros diff --git a/freertos.c b/freertos.c index 6213905..faf69af 100644 --- a/freertos.c +++ b/freertos.c @@ -169,7 +169,7 @@ void MX_FREERTOS_Init(void) { /* USER CODE BEGIN RTOS_SEMAPHORES */ /* add semaphores, ... */ - xSemaphoreGive(semVcomTxReadyHandle); + assert_param(pdTRUE == xSemaphoreGive(semVcomTxReadyHandle)); /* USER CODE END RTOS_SEMAPHORES */ /* USER CODE BEGIN RTOS_TIMERS */ diff --git a/platform/plat_compat.h b/platform/plat_compat.h index 74f1025..bb65fc2 100644 --- a/platform/plat_compat.h +++ b/platform/plat_compat.h @@ -21,7 +21,7 @@ #endif // 180 is normally enough if not doing extensive debug logging -#define TSK_STACK_MSG 220 // TF message handler task stack size (all unit commands run on this thread) +#define TSK_STACK_MSG 260 // TF message handler task stack size (all unit commands run on this thread) #define TSK_STACK_IDLE 64 //configMINIMAL_STACK_SIZE #define TSK_STACK_TIMERS 64 //configTIMER_TASK_STACK_DEPTH