Improve PicoSoC example firmware
This commit is contained in:
		
							parent
							
								
									dea9b88249
								
							
						
					
					
						commit
						c00811e8e4
					
				|  | @ -1,4 +1,5 @@ | ||||||
| #include <stdint.h> | #include <stdint.h> | ||||||
|  | #include <stdbool.h> | ||||||
| 
 | 
 | ||||||
| // a pointer to this is a null pointer, but the compiler does not
 | // a pointer to this is a null pointer, but the compiler does not
 | ||||||
| // know that because "sram" is a linker symbol from sections.lds.
 | // know that because "sram" is a linker symbol from sections.lds.
 | ||||||
|  | @ -167,7 +168,7 @@ void cmd_read_flash_regs() | ||||||
| 
 | 
 | ||||||
| // --------------------------------------------------------
 | // --------------------------------------------------------
 | ||||||
| 
 | 
 | ||||||
| void cmd_benchmark() | uint32_t cmd_benchmark(bool verbose) | ||||||
| { | { | ||||||
| 	uint8_t data[256]; | 	uint8_t data[256]; | ||||||
| 	uint32_t *words = (void*)data; | 	uint32_t *words = (void*)data; | ||||||
|  | @ -204,6 +205,8 @@ void cmd_benchmark() | ||||||
| 	__asm__ volatile ("rdcycle %0" : "=r"(cycles_end)); | 	__asm__ volatile ("rdcycle %0" : "=r"(cycles_end)); | ||||||
| 	__asm__ volatile ("rdinstret %0" : "=r"(instns_end)); | 	__asm__ volatile ("rdinstret %0" : "=r"(instns_end)); | ||||||
| 
 | 
 | ||||||
|  | 	if (verbose) | ||||||
|  | 	{ | ||||||
| 		print("Cycles: 0x"); | 		print("Cycles: 0x"); | ||||||
| 		print_hex(cycles_end - cycles_begin, 8); | 		print_hex(cycles_end - cycles_begin, 8); | ||||||
| 		putchar('\n'); | 		putchar('\n'); | ||||||
|  | @ -217,14 +220,50 @@ void cmd_benchmark() | ||||||
| 		putchar('\n'); | 		putchar('\n'); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	return cycles_end - cycles_begin; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // --------------------------------------------------------
 | ||||||
|  | 
 | ||||||
|  | void cmd_benchmark_all() | ||||||
|  | { | ||||||
|  | 	print("default        "); | ||||||
|  | 	reg_spictrl = (reg_spictrl & ~0x00700000) | 0x00000000; | ||||||
|  | 	print(": "); | ||||||
|  | 	print_hex(cmd_benchmark(false), 8); | ||||||
|  | 	putchar('\n'); | ||||||
|  | 
 | ||||||
|  | 	print("qspi-8         "); | ||||||
|  | 	reg_spictrl = (reg_spictrl & ~0x00700000) | 0x00200000; | ||||||
|  | 	print(": "); | ||||||
|  | 	print_hex(cmd_benchmark(false), 8); | ||||||
|  | 	putchar('\n'); | ||||||
|  | 
 | ||||||
|  | 	print("qspi-xip-8     "); | ||||||
|  | 	reg_spictrl = (reg_spictrl & ~0x00700000) | 0x00300000; | ||||||
|  | 	print(": "); | ||||||
|  | 	print_hex(cmd_benchmark(false), 8); | ||||||
|  | 	putchar('\n'); | ||||||
|  | 
 | ||||||
|  | 	print("qspi-ddr-8     "); | ||||||
|  | 	reg_spictrl = (reg_spictrl & ~0x00700000) | 0x00600000; | ||||||
|  | 	print(": "); | ||||||
|  | 	print_hex(cmd_benchmark(false), 8); | ||||||
|  | 	putchar('\n'); | ||||||
|  | 
 | ||||||
|  | 	print("qspi-ddr-xip-8 "); | ||||||
|  | 	reg_spictrl = (reg_spictrl & ~0x00700000) | 0x00700000; | ||||||
|  | 	print(": "); | ||||||
|  | 	print_hex(cmd_benchmark(false), 8); | ||||||
|  | 	putchar('\n'); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // --------------------------------------------------------
 | // --------------------------------------------------------
 | ||||||
| 
 | 
 | ||||||
| void main() | void main() | ||||||
| { | { | ||||||
| 	reg_uart_clkdiv = 104; | 	reg_uart_clkdiv = 104; | ||||||
| 
 |  | ||||||
| 	set_quad_spi_flag(); | 	set_quad_spi_flag(); | ||||||
| 	// reg_spictrl = (reg_spictrl & ~0x00700000) | 0x00600000;
 |  | ||||||
| 
 | 
 | ||||||
| 	while (getchar_prompt("Press ENTER to continue..\n") != '\r') { /* wait */ } | 	while (getchar_prompt("Press ENTER to continue..\n") != '\r') { /* wait */ } | ||||||
| 
 | 
 | ||||||
|  | @ -273,7 +312,8 @@ void main() | ||||||
| 		print("   [5] Switch to QSPI XIP mode\n"); | 		print("   [5] Switch to QSPI XIP mode\n"); | ||||||
| 		print("   [6] Switch to QSPI mode\n"); | 		print("   [6] Switch to QSPI mode\n"); | ||||||
| 		print("   [7] Switch to default mode\n"); | 		print("   [7] Switch to default mode\n"); | ||||||
| 		print("   [0] Run simplistic benchmark\n"); | 		print("   [9] Run simplistic benchmark\n"); | ||||||
|  | 		print("   [0] Benchmark all configs\n"); | ||||||
| 		print("\n"); | 		print("\n"); | ||||||
| 
 | 
 | ||||||
| 		for (int rep = 10; rep > 0; rep--) | 		for (int rep = 10; rep > 0; rep--) | ||||||
|  | @ -307,8 +347,11 @@ void main() | ||||||
| 			case '7': | 			case '7': | ||||||
| 				reg_spictrl = (reg_spictrl & ~0x00700000) | 0x00000000; | 				reg_spictrl = (reg_spictrl & ~0x00700000) | 0x00000000; | ||||||
| 				break; | 				break; | ||||||
|  | 			case '9': | ||||||
|  | 				cmd_benchmark(true); | ||||||
|  | 				break; | ||||||
| 			case '0': | 			case '0': | ||||||
| 				cmd_benchmark(); | 				cmd_benchmark_all(); | ||||||
| 				break; | 				break; | ||||||
| 			default: | 			default: | ||||||
| 				continue; | 				continue; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue