mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 00:51:42 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* Implementation of utility functions to verify
 | 
						|
   unit tests aren't performing SMP-unsafe DPORT reads.
 | 
						|
*/
 | 
						|
 | 
						|
#include "unity.h"
 | 
						|
#include "sdkconfig.h"
 | 
						|
#include "freertos/FreeRTOS.h"
 | 
						|
#include "freertos/task.h"
 | 
						|
#include "soc/uart_periph.h"
 | 
						|
#include "test_apb_dport_access.h"
 | 
						|
#include "test_utils.h"
 | 
						|
 | 
						|
#ifndef CONFIG_FREERTOS_UNICORE
 | 
						|
 | 
						|
static void apb_access_loop_task(void *ignore);
 | 
						|
 | 
						|
static volatile bool apb_access_corrupt;
 | 
						|
static TaskHandle_t apb_task_handle;
 | 
						|
 | 
						|
void start_apb_access_loop(void)
 | 
						|
{
 | 
						|
    apb_access_corrupt = false;
 | 
						|
    xTaskCreatePinnedToCore(apb_access_loop_task, "accessAPB", 2048, NULL,
 | 
						|
                            UNITY_FREERTOS_PRIORITY - 1,
 | 
						|
                            &apb_task_handle, !UNITY_FREERTOS_CPU);
 | 
						|
}
 | 
						|
 | 
						|
void verify_apb_access_loop(void)
 | 
						|
{
 | 
						|
    vTaskDelete(apb_task_handle);
 | 
						|
    apb_task_handle = NULL;
 | 
						|
    TEST_ASSERT_FALSE(apb_access_corrupt);
 | 
						|
    printf("Verified no APB corruption from operations\n");
 | 
						|
}
 | 
						|
 | 
						|
static void apb_access_loop_task(void *ignore)
 | 
						|
{
 | 
						|
    uint32_t initial = REG_READ(UART_DATE_REG(0));
 | 
						|
    while(1) {
 | 
						|
        if (REG_READ(UART_DATE_REG(0)) != initial) {
 | 
						|
            apb_access_corrupt = true;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#else /*CONFIG_FREERTOS_UNICORE */
 | 
						|
 | 
						|
void start_apb_access_loop(void)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
void verify_apb_access_loop(void)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
#endif
 |