unaligned_load: Add doubleexceptionvector behaviour test
This commit is contained in:
		
							parent
							
								
									c7a7dfdf82
								
							
						
					
					
						commit
						7ebebf6d22
					
				
					 1 changed files with 38 additions and 0 deletions
				
			
		|  | @ -1,6 +1,7 @@ | |||
| /* Very basic example that just demonstrates we can run at all!
 | ||||
|  */ | ||||
| #include "esp/rom.h" | ||||
| #include "esp/timer.h" | ||||
| #include "espressif/esp_common.h" | ||||
| #include "espressif/sdk_private.h" | ||||
| #include "FreeRTOS.h" | ||||
|  | @ -118,6 +119,8 @@ void test_string(const char *string, char *label, bool evict_cache) | |||
|     run_test(string, test_l16si, "load as l16si", nullvalue, evict_cache); | ||||
| } | ||||
| 
 | ||||
| static void test_doubleexceptions(); | ||||
| 
 | ||||
| void user_init(void) | ||||
| { | ||||
|     sdk_uart_div_modify(0, UART_CLK_FREQ / 115200); | ||||
|  | @ -130,4 +133,39 @@ void user_init(void) | |||
|     test_string(iramtest, "IRAM", 0); | ||||
|     test_string(iromtest, "Cached flash", 0); | ||||
|     test_string(iromtest, "'Uncached' flash", 1); | ||||
| 
 | ||||
|     test_doubleexceptions(); | ||||
| } | ||||
| 
 | ||||
| static volatile bool frc1_ran; | ||||
| static volatile bool frc1_finished; | ||||
| static volatile char frc1_buf[80]; | ||||
| 
 | ||||
| static void frc1_interrupt_handler(void) | ||||
| { | ||||
|     frc1_ran = true; | ||||
|     timer_set_run(FRC1, false); | ||||
|     strcpy((char *)frc1_buf, iramtest); | ||||
|     frc1_finished = true; | ||||
| } | ||||
| 
 | ||||
| static void test_doubleexceptions() | ||||
| { | ||||
|     printf("Testing DoubleException behaviour...\r\n"); | ||||
|     timer_set_interrupts(FRC1, false); | ||||
|     timer_set_run(FRC1, false); | ||||
|     _xt_isr_attach(INUM_TIMER_FRC1, frc1_interrupt_handler); | ||||
|     timer_set_frequency(FRC1, 1000); | ||||
|     timer_set_interrupts(FRC1, true); | ||||
|     timer_set_run(FRC1, true); | ||||
|     sdk_os_delay_us(2000); | ||||
| 
 | ||||
|     if(!frc1_ran) | ||||
|         printf("ERROR: FRC1 timer exception never fired.\r\n"); | ||||
|     else if(!frc1_finished) | ||||
|         printf("ERROR: FRC1 timer exception never finished.\r\n"); | ||||
|     else if(strcmp((char *)frc1_buf, iramtest)) | ||||
|         printf("ERROR: FRC1 strcpy from IRAM failed.\r\n"); | ||||
|     else | ||||
|         printf("PASSED\r\n"); | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue