Skip to content
Snippets Groups Projects
Commit 56d8e158 authored by dwn1c21's avatar dwn1c21
Browse files

Update accelerator tests in nanosoc_chip

parent f8a7a959
No related branches found
No related tags found
No related merge requests found
Showing
with 2835 additions and 413 deletions
......@@ -54,14 +54,9 @@ volatile int dma_done_irq_expected;
volatile int dma_error_irq_occurred;
volatile int dma_error_irq_expected;
int pl230_dma_detect(void);
int ID_Check(const unsigned int id_array[], unsigned int offset);
void dma_memory_copy (unsigned int src, unsigned int dest, unsigned int size, unsigned int num);
void dma_data_struct_init(void);
void dma_pl230_init(void);
int dma_simple_test(void);
int dma_interrupt_test(void);
int dma_event_test(void);
void delay(void);
/* Maximum to 32 DMA channel */
......@@ -91,16 +86,6 @@ typedef struct /* 8 words per channel */
pl230_dma_data_structure *dma_data;
volatile unsigned int source_data_array[DATA_SIZE]; /* Data array for memory DMA test */
volatile unsigned int dest_data_array[DATA_SIZE]; /* Data array for memory DMA test */
#if defined ( __CC_ARM )
__asm void address_test_write(unsigned int addr, unsigned int wdata);
__asm unsigned int address_test_read(unsigned int addr);
#else
void address_test_write(unsigned int addr, unsigned int wdata);
unsigned int address_test_read(unsigned int addr);
#endif
void HardFault_Handler_c(unsigned int * hardfault_args, unsigned lr_value);
......@@ -140,47 +125,25 @@ typedef struct {
#define UNLAB_IMG_DATA ((UNLAB_IMG_DATA_typedef *) UNLAB_IMG_DATA_BASE)
#define KNN_RESULTS_BASE (0x30000100)
typedef struct {
__IO uint32_t UNLAB_IMG_DOT_PROD[10];
__IO uint32_t LAB_IMG_DOT_PROD[10];
__IO uint32_t COMB_DOT_PROD[10];
__IO uint32_t KNN_result[10];
__IO uint32_t max;
} KNN_RESULTS_TYPEDEF;
#define KNN_RESULTS ((KNN_RESULTS_TYPEDEF *) KNN_RESULTS_BASE)
volatile uint32_t unlab_dot_prod;
volatile uint32_t lab_dot_prod;
volatile uint32_t comb_dot_prod;
volatile uint32_t priming_mode_reg;
// Image vectors
const uint8_t num_of_images = 4;
const uint32_t img_vectors[][196] = {
{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03121212, 0x7E88AF1A, 0xA6FFF77F, 0x00000000, 0x00000000, 0x00000000, 0x1E245E9A, 0xAAFDFDFD, 0xFDFDE1AC, 0xFDF2C340, 0x00000000, 0x00000000, 0x00000031, 0xEEFDFDFD, 0xFDFDFDFD, 0xFDFB5D52, 0x52382700, 0x00000000, 0x00000000, 0x00000012, 0xDBFDFDFD, 0xFDFDC6B6, 0xF7F10000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x509C6BFD, 0xFDCD0B00, 0x2B9A0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000E019A, 0xFD5A0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000008B, 0xFDBE0200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000B, 0xBEFD4600, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x23F1E1A0, 0x6C010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0051F0FD, 0xFD771900, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002DBA, 0xFDFD961B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x5DFCFDBB, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00F9FDF9, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002E82, 0xB7FDFDCF, 0x02000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2794E5FD, 0xFDFDFAB6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00001872, 0xDDFDFDFD, 0xFDC94E00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1742D5FD, 0xFDFDFDC6, 0x51020000, 0x00000000, 0x00000000, 0x00000000, 0x000012AB, 0xDBFDFDFD, 0xFDC35009, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x37ACE2FD, 0xFDFDFDF4, 0x850B0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x88FDFDFD, 0xD4878410, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000033, 0x9FFD9F32, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000030EE, 0xFCFCFCED, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0036E3FD, 0xFCEFE9FC, 0x39060000, 0x00000000, 0x00000000, 0x00000000, 0x0000000A, 0x3CE0FCFD, 0xFCCA54FC, 0xFD7A0000, 0x00000000, 0x00000000, 0x00000000, 0x000000A3, 0xFCFCFCFD, 0xFCFC60BD, 0xFDA70000, 0x00000000, 0x00000000, 0x00000000, 0x000033EE, 0xFDFDBE72, 0xFDE42F4F, 0xFFA80000, 0x00000000, 0x00000000, 0x00000000, 0x0030EEFC, 0xFCB30C4B, 0x79150000, 0xFDF33200, 0x00000000, 0x00000000, 0x00000000, 0x26A5FDE9, 0xD0540000, 0x00000000, 0xFDFCA500, 0x00000000, 0x00000000, 0x00000007, 0xB2FCF047, 0x131C0000, 0x00000000, 0xFDFCC300, 0x00000000, 0x00000000, 0x00000039, 0xFCFC3F00, 0x00000000, 0x00000000, 0xFDFCC300, 0x00000000, 0x00000000, 0x000000C6, 0xFDBE0000, 0x00000000, 0x00000000, 0xFFFDC400, 0x00000000, 0x00000000, 0x00004CF6, 0xFC700000, 0x00000000, 0x00000000, 0xFDFC9400, 0x00000000, 0x00000000, 0x000055FC, 0xE6190000, 0x00000000, 0x00000787, 0xFDBA0C00, 0x00000000, 0x00000000, 0x000055FC, 0xDF000000, 0x00000000, 0x000783FC, 0xE1470000, 0x00000000, 0x00000000, 0x000055FC, 0x91000000, 0x00000000, 0x30A5FCAD, 0x00000000, 0x00000000, 0x00000000, 0x000056FD, 0xE1000000, 0x00000072, 0xEEFDA200, 0x00000000, 0x00000000, 0x00000000, 0x000055FC, 0xF992301D, 0x55B2E1FD, 0xDFA73800, 0x00000000, 0x00000000, 0x00000000, 0x000055FC, 0xFCFCE5D7, 0xFCFCFCC4, 0x82000000, 0x00000000, 0x00000000, 0x00000000, 0x00001CC7, 0xFCFCFDFC, 0xFCE99100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000019, 0x80FCFDFC, 0x8D250000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x43E82700, 0x00000000, 0x00000000, 0x3E510000, 0x00000000, 0x00000000, 0x00000000, 0x78B42700, 0x00000000, 0x00000000, 0x7EA30000, 0x00000000, 0x00000000, 0x00000002, 0x99D22800, 0x00000000, 0x00000000, 0xDCA30000, 0x00000000, 0x00000000, 0x0000001B, 0xFEA20000, 0x00000000, 0x00000000, 0xDEA30000, 0x00000000, 0x00000000, 0x000000B7, 0xFE7D0000, 0x00000000, 0x0000002E, 0xF5A30000, 0x00000000, 0x00000000, 0x000000C6, 0xFE380000, 0x00000000, 0x00000078, 0xFEA30000, 0x00000000, 0x00000000, 0x000017E7, 0xFE1D0000, 0x00000000, 0x0000009F, 0xFE780000, 0x00000000, 0x00000000, 0x0000A3FE, 0xD8100000, 0x00000000, 0x0000009F, 0xFE430000, 0x00000000, 0x0000000E, 0x56B2F8FE, 0x5B000000, 0x00000000, 0x0000009F, 0xFE550000, 0x002F3174, 0x9096F1F3, 0xEAB3F1FC, 0x28000000, 0x00000000, 0x00000096, 0xFDEDCFCF, 0xCFFDFEFA, 0xF0C68F5B, 0x1C05E9FA, 0x00000000, 0x00000000, 0x00000000, 0x77B1B1B1, 0xB1B16238, 0x00000000, 0x0066FEDC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00A9FE89, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00A9FE39, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00A9FE39, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00A9FF5E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00A9FE60, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00A9FE99, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00A9FF99, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0060FE99, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
{ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00007CFD, 0xFF3F0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0060F4FB, 0xFD3E0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007FFBFB, 0xFD3E0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x44ECFBD3, 0x1F080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000003C, 0xE4FBFB5E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000009B, 0xFDFDBD00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000014FD, 0xFBEB4200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0020CDFD, 0xFB7E0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0068FBFD, 0xB80F0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x50F0FBC1, 0x17000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0xFDFDFD9F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000097, 0xFBFBFB27, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000030DD, 0xFBFBAC00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000EAFB, 0xFBC40C00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FDFB, 0xFB590000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x009FFFFD, 0xFD1F0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30E4FDF7, 0x8C080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40FBFDDC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40FBFDDC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x18C1FDDC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
// { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3794D2FD, 0xFD715794, 0x37000000, 0x00000000, 0x00000000, 0x00000000, 0x00000057, 0xE8FCFDBD, 0xD2FCFCFD, 0xA8000000, 0x00000000, 0x00000000, 0x00000000, 0x000439F2, 0xFCBE4105, 0x0CB6FCFD, 0x74000000, 0x00000000, 0x00000000, 0x00000000, 0x0060FCFC, 0xB70E0000, 0x5CFCFCE1, 0x15000000, 0x00000000, 0x00000000, 0x00000000, 0x84FDFC92, 0x0E000000, 0xD7FCFC4F, 0x00000000, 0x00000000, 0x00000000, 0x0000007E, 0xFDF7B009, 0x0000084E, 0xF5FD8100, 0x00000000, 0x00000000, 0x00000000, 0x000010E8, 0xFCB00000, 0x0024C9FC, 0xFCA90B00, 0x00000000, 0x00000000, 0x00000000, 0x000016FC, 0xFC1E1677, 0xC5F1FDFC, 0xFB4D0000, 0x00000000, 0x00000000, 0x00000000, 0x000010E7, 0xFCFDFCFC, 0xFCE2E3FC, 0xE7000000, 0x00000000, 0x00000000, 0x00000000, 0x00000037, 0xEBFDD98A, 0x2A18C0FC, 0x8F000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003EFFFD, 0x6D000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0047FDFC, 0x15000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FDFC, 0x15000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0047FDFC, 0x15000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006AFDFC, 0x15000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002DFFFD, 0x15000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000DAFC, 0x38000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000060FC, 0xBD2A0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000EB8, 0xFCAA0B00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000E, 0x93FC2A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
// { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000D, 0x19647A07, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002197D0, 0xFCFCFC92, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000028, 0x98F4FCFD, 0xE0D3FCE8, 0x28000000, 0x00000000, 0x00000000, 0x00000000, 0x000F98EF, 0xFCFCFCD8, 0x1F25FCFC, 0x3C000000, 0x00000000, 0x00000000, 0x00000000, 0x0060FCFC, 0xFCFCD91D, 0x0025FCFC, 0x3C000000, 0x00000000, 0x00000000, 0x00000000, 0x00B5FCFC, 0xDCA71E00, 0x004DFCFC, 0x3C000000, 0x00000000, 0x00000000, 0x00000000, 0x001A803A, 0x16000000, 0x0064FCFC, 0x3C000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x009DFCFC, 0x3C000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x006E797A, 0x79CAFCC2, 0x03000000, 0x00000000, 0x00000000, 0x00000000, 0x00000A35, 0xB3FDFDFF, 0xFDFDE423, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0536E3FC, 0xF3E4AAF2, 0xFCFCE775, 0x06000000, 0x00000000, 0x00000000, 0x00000006, 0x4EFCFC7D, 0x3B0012D0, 0xFCFCFCFC, 0x57070000, 0x00000000, 0x00000000, 0x00000587, 0xFCFCB410, 0x0015CBFD, 0xF781ADFC, 0xFCB84231, 0x31000000, 0x00000000, 0x000388FC, 0xF16A1100, 0x35C8FCD8, 0x41000E48, 0xA3F1FCFC, 0xDF000000, 0x00000000, 0x0069FCF2, 0x581249AA, 0xF4FC7E1D, 0x00000000, 0x0059B4B4, 0x25000000, 0x00000000, 0x00E7FCF5, 0xCDD8FCFC, 0xFC7C0300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00CFFCFC, 0xFCFCB274, 0x24040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000D5D8F, 0x79170600, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
// { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000026, 0x2B69FFFD, 0xFDFDFDFD, 0xAE060000, 0x00000000, 0x00000000, 0x00000000, 0x002B8BE0, 0xE2FCFDFC, 0xFCFCFCFC, 0xFC9E0E00, 0x00000000, 0x00000000, 0x00000000, 0x00B2FCFC, 0xFCFCFDFC, 0xFCFCFCFC, 0xFCFC3B00, 0x00000000, 0x00000000, 0x00000000, 0x006DFCFC, 0xE6848584, 0x84BDFCFC, 0xFCFC3B00, 0x00000000, 0x00000000, 0x00000000, 0x00041D1D, 0x18000000, 0x000EE2FC, 0xFCAC0700, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0055F3FC, 0xFC900000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x58BDFCFC, 0xFC0E0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00005BD4, 0xF7FCFCFC, 0xCC090000, 0x00000000, 0x00000000, 0x00000000, 0x00207DC1, 0xC1C1FDFC, 0xFCFCEE66, 0x1C000000, 0x00000000, 0x00000000, 0x00000000, 0x2DDEFCFC, 0xFCFCFDFC, 0xFCFCB100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2DDFFDFD, 0xFDFDFFFD, 0xFDFDFD4A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001F7B34, 0x2C2C2C2C, 0x8FFCFC4A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0FFCFC4A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x56FCFC4A, 0x00000000, 0x00000000, 0x00000000, 0x0000054B, 0x09000000, 0x00000062, 0xF2FCFC4A, 0x00000000, 0x00000000, 0x00000000, 0x003DB7FC, 0x1D000000, 0x00125CEF, 0xFCFCF341, 0x00000000, 0x00000000, 0x00000000, 0x00D0FCFC, 0x93868686, 0x86CBFDFC, 0xFCBC5300, 0x00000000, 0x00000000, 0x00000000, 0x00D0FCFC, 0xFCFCFCFC, 0xFCFCFDE6, 0x99080000, 0x00000000, 0x00000000, 0x00000000, 0x00319DFC, 0xFCFCFCFC, 0xD9CF922D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000767, 0xEBFCAC67, 0x18000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
// { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x26DEE100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000093, 0xEAFCB000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0017C5FD, 0xFCD01300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x26B2FCFD, 0x75410000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x39FCFCFD, 0x59000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000026, 0xDEFDFD4F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000083, 0xFCB31B00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000C6F6, 0xDC250000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x004FFDFC, 0x871C0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x108CFDFC, 0x76000000, 0x006F8C8C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0DBFFFFD, 0x38000072, 0x71DEFDFD, 0xFF1B0000, 0x00000000, 0x00000000, 0x00000000, 0x4CFCFDDF, 0x250030AE, 0xFCFCF2D6, 0xFDC71F00, 0x00000000, 0x00000000, 0x0000000D, 0x6DFCE482, 0x0026A5FD, 0xE9A4313F, 0xFDD61F00, 0x00000000, 0x00000000, 0x00000049, 0xFCFC7E00, 0x17B2FCF0, 0x94072CD7, 0xF0940000, 0x00000000, 0x00000000, 0x00000077, 0xFCFC0000, 0xC5FCFC3F, 0x0039FCFC, 0x8C000000, 0x00000000, 0x00000000, 0x00000087, 0xFDAE0030, 0xE5FD7000, 0x26DEFD70, 0x00000000, 0x00000000, 0x00000000, 0x00000087, 0xFCAD0030, 0xE3FC9EE2, 0xEAC91B0C, 0x00000000, 0x00000000, 0x00000000, 0x00000039, 0xFCFC3968, 0xF0FCFCFD, 0xE94A0000, 0x00000000, 0x00000000, 0x00000000, 0x00000033, 0xF2FCFDFC, 0xFCFCFCF0, 0x94000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4BBDFDFC, 0xFC9D703F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
// { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000073, 0x79A2FDFD, 0xD5000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3F6BAAFB, 0xFCFCFCFC, 0xFAD60000, 0x00000000, 0x00000000, 0x00000000, 0x19C0E2E2, 0xF1FCFDCA, 0xFCFCFCFC, 0xFCE10000, 0x00000000, 0x00000000, 0x00000044, 0xDFFCFCFC, 0xFCFC2713, 0x2741E0FC, 0xFCB70000, 0x00000000, 0x00000000, 0x000000BA, 0xFCFCFCF5, 0x6C350000, 0x0096FCFC, 0xDC140000, 0x00000000, 0x00000000, 0x000046F2, 0xFCFCDE3B, 0x00000000, 0x00B2FCFC, 0x8D000000, 0x00000000, 0x00000000, 0x0000B9FC, 0xFCC24300, 0x00000011, 0x5AF0FCC2, 0x43000000, 0x00000000, 0x00000000, 0x000053CD, 0xBE180000, 0x00000079, 0xFCFCD118, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00004DF7, 0xFCF86A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FDFC, 0xFC660000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0086FFFD, 0xFD270000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x06B7FDFC, 0x6B020000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000A, 0x66FCFDA3, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000DA8, 0xFCFC6E02, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000029FC, 0xFCD90000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00289BFC, 0xD61F0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00A5FCFC, 0x6A000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2BB3FC96, 0x27000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x89FCDD27, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x43FC4F00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
// { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000B, 0xCBE52000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000001A, 0x2F2F1E5F, 0xFED70D00, 0x00000000, 0x00000000, 0x00000000, 0x0000002D, 0x9AB9B9DF, 0xFDFD85AF, 0xFFBC1300, 0x00000000, 0x00000000, 0x00000000, 0x0000006E, 0xFDFDFDF6, 0xA1E4FDFD, 0xFE5C0000, 0x00000000, 0x00000000, 0x00000000, 0x000080F5, 0xFD9E8915, 0x0030E9FD, 0xE9080000, 0x00000000, 0x00000000, 0x00000000, 0x00008BFE, 0xDF190000, 0x24AAFEF4, 0x6A000000, 0x00000000, 0x00000000, 0x00000000, 0x000037D4, 0xFDA10B1A, 0xB2FDEC71, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000079B, 0xFDE450DF, 0xFDFD6D00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000008D, 0xFDFDFDFE, 0xFD9A1D00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000006E, 0xFDFDFDFE, 0xB3260000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003AB, 0xFEFEFEB3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ABFD, 0xFDFDFDB2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1A7BFEFD, 0xCB9CFDC8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5DFDFE79, 0x0D5DFD9E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0xEFFD4C08, 0x20DBFD7E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000085, 0xFEBF0005, 0x6CEAFE6A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000084, 0xFDBE0555, 0xFDEC9A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000099, 0xFDA9C0FD, 0xFD4D0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0xFDFDFEEC, 0x81090000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000011, 0x76F3BF71, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }
};
// Expected computation results
uint32_t dot_prod[][10] = {
{ 5940005, 3496022, 1051791, 1605337, 1910830, 2773263, 4612435, 2535639, 2274572, 3193068 },
{ 3496022, 6750341, 1100231, 1447223, 2392601, 2926749, 3997919, 3262491, 2923369, 2919214 },
{ 1051791, 1100231, 3853933, 519285, 1153015, 1594873, 2441160, 1406185, 1099882, 1091279 },
{ 1605337, 1447223, 519285, 3797773, 1557532, 1848301, 2503632, 1506368, 1748434, 2946425 },
{ 1910830, 2392601, 1153015, 1557532, 5023736, 3021796, 3029971, 2533650, 3112962, 3264308 },
{ 2773263, 2926749, 1594873, 1848301, 3021796, 6274755, 4031146, 3368938, 3177637, 3469498 },
{ 4612435, 3997919, 2441160, 2503632, 3029971, 4031146, 7993613, 3033041, 2929288, 4084276 },
{ 2535639, 3262491, 1406185, 1506368, 2533650, 3368938, 3033041, 6035429, 2481153, 2773577 },
{ 2274572, 2923369, 1099882, 1748434, 3112962, 3177637, 2929288, 2481153, 5515060, 3165445 },
{ 3193068, 2919214, 1091279, 2946425, 3264308, 3469498, 4084276, 2773577, 3165445, 5761652 }
};
volatile uint32_t priming_mode_reg_exp;
int main (void)
{
int result=0;
int max=0;
uint8_t current_lab_img=0;
uint8_t current_unlab_img=0;
int current_state;
temp_data=0;
hardfault_occurred = 0;
hardfault_expected = 0;
......@@ -189,42 +152,15 @@ int main (void)
UartStdOutInit();
// Test banner message and revision number
puts("\nCortex Microcontroller System Design Kit - DMA Test - revision $Revision: 371321 $\n");
puts("\nFast KNN Demo\n");
if (pl230_dma_detect()!=0) {
return 0; /* Quit test if DMA is not present */
}
// Use P0 [0:1] to request data and P0[2:3] to see if data has been recieved
//Set P0[0:1] as output and P0[2:3] as input
CMSDK_GPIO1->OUTENABLESET = 0x40;
CMSDK_GPIO1->OUTENABLECLR = 0x80;
// check image locations
printf("Lab IMG 0 Addr: 0x%08x\n",&(LAB_IMG_DATA->LAB_IMG[0][0]));
printf("Lab IMG 1 Addr: 0x%08x\n",&(LAB_IMG_DATA->LAB_IMG[1][0]));
printf("Lab IMG 2 Addr: 0x%08x\n",&(LAB_IMG_DATA->LAB_IMG[2][0]));
printf("Lab IMG 3 Addr: 0x%08x\n",&(LAB_IMG_DATA->LAB_IMG[3][0]));
printf("Lab IMG 4 Addr: 0x%08x\n",&(LAB_IMG_DATA->LAB_IMG[4][0]));
printf("Lab IMG 5 Addr: 0x%08x\n",&(LAB_IMG_DATA->LAB_IMG[5][0]));
printf("Lab IMG 6 Addr: 0x%08x\n",&(LAB_IMG_DATA->LAB_IMG[6][0]));
printf("Lab IMG 7 Addr: 0x%08x\n",&(LAB_IMG_DATA->LAB_IMG[7][0]));
printf("Lab IMG 8 Addr: 0x%08x\n",&(LAB_IMG_DATA->LAB_IMG[8][0]));
printf("Lab IMG 9 Addr: 0x%08x\n",&(LAB_IMG_DATA->LAB_IMG[9][0]));
printf("UNLab IMG 0 Addr: 0x%08x\n",&(UNLAB_IMG_DATA->UNLAB_IMG[0][0]));
printf("UNLab IMG 1 Addr: 0x%08x\n",&(UNLAB_IMG_DATA->UNLAB_IMG[1][0]));
printf("UNLab IMG 2 Addr: 0x%08x\n",&(UNLAB_IMG_DATA->UNLAB_IMG[2][0]));
printf("UNLab IMG 3 Addr: 0x%08x\n",&(UNLAB_IMG_DATA->UNLAB_IMG[3][0]));
printf("UNLab IMG 4 Addr: 0x%08x\n",&(UNLAB_IMG_DATA->UNLAB_IMG[4][0]));
printf("UNLab IMG 5 Addr: 0x%08x\n",&(UNLAB_IMG_DATA->UNLAB_IMG[5][0]));
printf("UNLab IMG 6 Addr: 0x%08x\n",&(UNLAB_IMG_DATA->UNLAB_IMG[6][0]));
printf("UNLab IMG 7 Addr: 0x%08x\n",&(UNLAB_IMG_DATA->UNLAB_IMG[7][0]));
printf("UNLab IMG 8 Addr: 0x%08x\n",&(UNLAB_IMG_DATA->UNLAB_IMG[8][0]));
printf("UNLab IMG 9 Addr: 0x%08x\n",&(UNLAB_IMG_DATA->UNLAB_IMG[9][0]));
dma_data_struct_init();
dma_pl230_init();
......@@ -236,77 +172,278 @@ int main (void)
// If P1[7] set then set data request low (as data should be recieved)
CMSDK_GPIO1->DATAOUT &= 0xBF;
printf("Finished unlabelled image transfer \n");
//printf("Finished unlabelled image transfer \n");
// Reset the accelerator
FAST_KNN_regs->SW_RESET_REG = 0x00000000;
CMSDK_DMA->CHNL_ENABLE_SET = (1<<0); /* Enable channel 0 */
//copy unlabelled image
dma_memory_copy((unsigned int) &UNLAB_IMG_DATA->UNLAB_IMG[current_unlab_img][0], (unsigned int) COPY_ADDR_DST, 2, DATA_SIZE);
do { /* Wait until PL230 DMA controller return to idle state */
current_state = (CMSDK_DMA->DMA_STATUS >> 4) & 0xF;
} while (current_state!=0);
}
//printf("Copied Unlabelled image\n");
for(int i = 0; i < 10; i++){
dma_memory_copy((unsigned int) &LAB_IMG_DATA->LAB_IMG[i][0], (unsigned int) COPY_ADDR_DST + 4*DATA_SIZE, 2, DATA_SIZE);
do { /* Wait until PL230 DMA controller return to idle state */
current_state = (CMSDK_DMA->DMA_STATUS >> 4) & 0xF;
} while (current_state!=0);
KNN_RESULTS->UNLAB_IMG_DOT_PROD[i] = FAST_KNN_regs->UNLAB_IMG_DOT_PROD;
KNN_RESULTS->LAB_IMG_DOT_PROD[i] = FAST_KNN_regs->LAB_IMG_DOT_PROD;
KNN_RESULTS->COMB_DOT_PROD[i] = FAST_KNN_regs->COMB_DOT_PROD;
KNN_RESULTS->KNN_result[i] = KNN_RESULTS->UNLAB_IMG_DOT_PROD[i] + KNN_RESULTS->LAB_IMG_DOT_PROD[i] - 2*(KNN_RESULTS->COMB_DOT_PROD[i]);
result += dma_simple_test();
FAST_KNN_regs->PRIMING_MODE_REG = 0;
FAST_KNN_regs->LAB_IMG_DOT_PROD = 0;
FAST_KNN_regs->COMB_DOT_PROD = 0;
}
KNN_RESULTS->max=0;
for(int i = 1; i<10; i++){
if(KNN_RESULTS->KNN_result[i]>KNN_RESULTS->KNN_result[KNN_RESULTS->max]){
KNN_RESULTS->max = i;
}
}
//printf("Max KNN is imag %u\n", KNN_RESULTS->max);
current_unlab_img++;
if(current_unlab_img>=10){
current_unlab_img=0;
}
}
if (result==0) {
printf ("\n** TEST PASSED **\n");
} else {
printf ("\n** TEST FAILED **, Error code = (0x%x)\n", result);
}
UartEndSimulation();
return 0;
}
/* --------------------------------------------------------------- */
/* Detect if DMA controller is present or not */
/* Simple software DMA test */
/* --------------------------------------------------------------- */
// int dma_simple_test(void)
// {
// int return_val=0;
// int err_code=0;
// int i, j;
// unsigned int current_state;
// puts("uDMA simple test\n");
// CMSDK_DMA->CHNL_ENABLE_SET = (1<<0); /* Enable channel 0 */
// for (i = 0; i < num_of_images - 1; i++) {
// // Reset the accelerator
// FAST_KNN_regs->SW_RESET_REG=0x00000000;
// //address_test_write(SW_RESET_REG_ADDR, 0x00000000);
// printf("Priming accelerator with image %u as unlabelled image...\n", i);
// dma_memory_copy ((unsigned int) &img_vectors[i][0], (unsigned int) COPY_ADDR_DST, 2, DATA_SIZE);
// do { /* Wait until PL230 DMA controller return to idle state */
// current_state = (CMSDK_DMA->DMA_STATUS >> 4) & 0xF;
// } while (current_state!=0);
// printf("Priming finished\n");
// for (j = i + 1; j < num_of_images; j++) {
// printf("Loading image %u to accelerator...\n", j);
// dma_memory_copy ((unsigned int) &img_vectors[j][0], (unsigned int) COPY_ADDR_DST + 4*DATA_SIZE, 2, DATA_SIZE);
// do { /* Wait until PL230 DMA controller return to idle state */
// current_state = (CMSDK_DMA->DMA_STATUS >> 4) & 0xF;
// } while (current_state!=0);
// printf("Loading image %u finished\n", j);
// // Read the dot product buffers
// unlab_dot_prod = FAST_KNN_regs->UNLAB_IMG_DOT_PROD; //address_test_read(UNLAB_IMG_DOT_PROD_ADDR);
// lab_dot_prod = FAST_KNN_regs->LAB_IMG_DOT_PROD; //address_test_read(LAB_IMG_DOT_PROD_ADDR);
// comb_dot_prod = FAST_KNN_regs->COMB_DOT_PROD; //address_test_read(COMB_DOT_PROD_ADDR);
// priming_mode_reg = FAST_KNN_regs->PRIMING_MODE_REG; //address_test_read(PRIMING_MODE_REG_ADDR);
// // Set the expected values of accelerator registers
// priming_mode_reg_exp = 1;
// printf("%45s %8s %8s\n", "", "Expected", "Read");
// printf("%45s %8u %8u\n", "Unlab img buf dot prod:", dot_prod[i][i], unlab_dot_prod);
// printf("%45s %8u %8u\n", "Lab img buf dot prod:", dot_prod[j][j], lab_dot_prod);
// printf("%45s %8u %8u\n", "Comb buf dot prod:", dot_prod[i][j], comb_dot_prod);
// printf("%45s %8u %8u\n", "Priming mode reg:", priming_mode_reg_exp, priming_mode_reg);
// if (unlab_dot_prod == dot_prod[i][i] &&
// lab_dot_prod == dot_prod[j][j] &&
// comb_dot_prod == dot_prod[i][j] &&
// priming_mode_reg == priming_mode_reg_exp) {
// printf ("\n** Test on images %u, %u PASSED **\n\n", i, j);
// } else {
// printf ("ERROR : Test on images %u, %u FAILED **\n\n", i, j);
// return_val=1;
// }
// // Set the priming register value to zero to continue test with image i as unlabelled image
// FAST_KNN_regs->PRIMING_MODE_REG = 0x00000000;
// //address_test_write(PRIMING_MODE_REG_ADDR, 0x00000000);
// // Set lab_dot_prod and comb_dot_prod register values to 0
// FAST_KNN_regs->LAB_IMG_DOT_PROD = 0x00000000;
// FAST_KNN_regs->COMB_DOT_PROD = 0x00000000;
// //address_test_write(LAB_IMG_DOT_PROD_ADDR, 0x00000000);
// //address_test_write(COMB_DOT_PROD_ADDR, 0x00000000);
// }
// }
// return(return_val);
// }
/* --------------------------------------------------------------- */
/* Simple DMA interrupt test */
/* --------------------------------------------------------------- */
// int dma_interrupt_test(void)
// {
// int return_val=0;
// int err_code=0;
// int i;
// unsigned int current_state;
// puts("DMA interrupt test");
// puts("- DMA done");
// CMSDK_DMA->CHNL_ENABLE_SET = (1<<0); /* Enable channel 0 */
// /* setup data for DMA */
// dma_done_irq_expected = 1;
// dma_done_irq_occurred = 0;
// NVIC_ClearPendingIRQ(DMA_IRQn);
// NVIC_EnableIRQ(DMA_IRQn);
// dma_memory_copy ((unsigned int) &source_data_array[0],(unsigned int) &dest_data_array[0], 2, 4);
// delay();
// /* Can't guarantee that there is sleep support, so use a polling loop */
// do { /* Wait until PL230 DMA controller return to idle state */
// current_state = (CMSDK_DMA->DMA_STATUS >> 4) & 0xF;
// } while (current_state!=0);
// for (i=0;i<4;i++) {
// /* Debugging printf: */
// /*printf (" - dest[i] = %x\n", dest_data_array[i]);*/
// if (dest_data_array[i]!= i){
// printf ("ERROR:dest_data_array[%d], expected %x, actual %x\n", i, i, dest_data_array[i]);
// err_code |= (1<<i);
// }
// }
// if (dma_done_irq_occurred==0){
// puts ("ERROR: DMA done IRQ missing");
// err_code |= (1<<4);
// }
// puts("- DMA err");
// CMSDK_DMA->CHNL_ENABLE_SET = (1<<0); /* Enable channel 0 */
// /* setup data for DMA */
// for (i=0;i<4;i++) {
// source_data_array[i] = i;
// dest_data_array[i] = 0;
// }
// dma_error_irq_expected = 1;
// dma_error_irq_occurred = 0;
// NVIC_ClearPendingIRQ(DMA_IRQn);
// NVIC_EnableIRQ(DMA_IRQn);
// /* Generate DMA transfer to invalid memory location */
// dma_memory_copy ((unsigned int) &source_data_array[0],0xEF000000, 2, 4);
// delay();
// /* Can't guarantee that there is sleep support, so use a polling loop */
// do { /* Wait until PL230 DMA controller return to idle state */
// current_state = (CMSDK_DMA->DMA_STATUS >> 4) & 0xF;
// } while (current_state!=0);
// if (dma_error_irq_occurred==0){
// puts ("ERROR: DMA err IRQ missing");
// err_code |= (1<<5);
// }
// /* Clear up */
// dma_done_irq_expected = 0;
// dma_done_irq_occurred = 0;
// dma_error_irq_expected = 0;
// dma_error_irq_occurred = 0;
// NVIC_DisableIRQ(DMA_IRQn);
// /* Generate return value */
// if (err_code != 0) {
// printf ("ERROR : DMA done interrupt failed (0x%x)\n", err_code);
// return_val=1;
// } else {
// puts ("-Passed");
// }
// return(return_val);
// }
int pl230_dma_detect(void)
{
int result;
int volatile rdata; /* dummy variable for read data in bus fault testing */
unsigned const int pl230_id[12] = {
0x30, 0xB2, 0x0B, 0x00,
0x0D, 0xF0, 0x05, 0xB1};
puts("Detect if DMA controller is present...");
hardfault_occurred = 0;
hardfault_expected = 1;
rdata = address_test_read(CMSDK_PL230_BASE+ 0xFE0);
hardfault_expected = 0;
result = hardfault_occurred ? 1 : ID_Check(&pl230_id[0], CMSDK_PL230_BASE);
hardfault_occurred = 0;
if (result!=0) {
puts("** TEST SKIPPED ** DMA controller is not present.\n");
UartEndSimulation();
}
return(result);
}
int ID_Check(const unsigned int id_array[], unsigned int offset)
{
int i;
unsigned long expected_val, actual_val;
unsigned long compare_mask;
int mismatch = 0;
unsigned long test_addr;
/* Check the peripheral ID and component ID */
for (i=0;i<8;i++) {
test_addr = offset + 4*i + 0xFE0;
expected_val = id_array[i];
actual_val = HW32_REG(test_addr);
/* create mask to ignore version numbers */
if (i==2) { compare_mask = 0xF0;} // mask out version field
else { compare_mask = 0x00;} // compare whole value
if ((expected_val & (~compare_mask)) != (actual_val & (~compare_mask))) {
printf ("Difference found: %x, expected %x, actual %x\n", test_addr, expected_val, actual_val);
mismatch++;
}
} // end_for
return (mismatch);
}
/* --------------------------------------------------------------- */
/* DMA event test */
/* --------------------------------------------------------------- */
// int dma_event_test(void)
// {
// int return_val=0;
// int err_code=0;
// int i;
// unsigned int current_state;
// puts("DMA event test");
// puts("- DMA done event to RXEV");
// CMSDK_DMA->CHNL_ENABLE_SET = (1<<0); /* Enable channel 0 */
// /* setup data for DMA */
// for (i=0;i<4;i++) {
// source_data_array[i] = i;
// dest_data_array[i] = 0;
// }
// dma_done_irq_expected = 1;
// dma_done_irq_occurred = 0;
// NVIC_ClearPendingIRQ(DMA_IRQn);
// NVIC_DisableIRQ(DMA_IRQn);
// /* Clear event register - by setting event with SEV and then clear it with WFE */
// __SEV();
// __WFE(); /* First WFE will not enter sleep because of previous event */
// dma_memory_copy ((unsigned int) &source_data_array[0],(unsigned int) &dest_data_array[0], 2, 4);
// __WFE(); /* This will cause the processor to enter sleep */
// /* Processor woken up */
// current_state = (CMSDK_DMA->DMA_STATUS >> 4) & 0xF;
// if (current_state!=0) {
// puts ("ERROR: DMA status should be IDLE after wake up");
// err_code |= (1<<5);
// }
// for (i=0;i<4;i++) {
// /*printf (" - dest[i] = %x\n", dest_data_array[i]);*/
// if (dest_data_array[i]!= i){
// printf ("ERROR:dest_data_array[%d], expected %x, actual %x\n", i, i, dest_data_array[i]);
// err_code |= (1<<i);
// }
// }
// /* Generate return value */
// if (err_code != 0) {
// printf ("ERROR : DMA event failed (0x%x)\n", err_code);
// return_val=1;
// } else {
// puts ("-Passed");
// }
// return(return_val);
// }
/* --------------------------------------------------------------- */
/* Initialize DMA data structure */
/* --------------------------------------------------------------- */
......@@ -439,237 +576,6 @@ void dma_memory_copy (unsigned int src, unsigned int dest, unsigned int size, un
return;
}
/* --------------------------------------------------------------- */
/* Simple software DMA test */
/* --------------------------------------------------------------- */
int dma_simple_test(void)
{
int return_val=0;
int err_code=0;
int i, j;
unsigned int current_state;
puts("uDMA simple test\n");
CMSDK_DMA->CHNL_ENABLE_SET = (1<<0); /* Enable channel 0 */
for (i = 0; i < num_of_images - 1; i++) {
// Reset the accelerator
FAST_KNN_regs->SW_RESET_REG=0x00000000;
//address_test_write(SW_RESET_REG_ADDR, 0x00000000);
printf("Priming accelerator with image %u as unlabelled image...\n", i);
dma_memory_copy ((unsigned int) &img_vectors[i][0], (unsigned int) COPY_ADDR_DST, 2, DATA_SIZE);
do { /* Wait until PL230 DMA controller return to idle state */
current_state = (CMSDK_DMA->DMA_STATUS >> 4) & 0xF;
} while (current_state!=0);
printf("Priming finished\n");
for (j = i + 1; j < num_of_images; j++) {
printf("Loading image %u to accelerator...\n", j);
dma_memory_copy ((unsigned int) &img_vectors[j][0], (unsigned int) COPY_ADDR_DST + 4*DATA_SIZE, 2, DATA_SIZE);
do { /* Wait until PL230 DMA controller return to idle state */
current_state = (CMSDK_DMA->DMA_STATUS >> 4) & 0xF;
} while (current_state!=0);
printf("Loading image %u finished\n", j);
// Read the dot product buffers
unlab_dot_prod = FAST_KNN_regs->UNLAB_IMG_DOT_PROD; //address_test_read(UNLAB_IMG_DOT_PROD_ADDR);
lab_dot_prod = FAST_KNN_regs->LAB_IMG_DOT_PROD; //address_test_read(LAB_IMG_DOT_PROD_ADDR);
comb_dot_prod = FAST_KNN_regs->COMB_DOT_PROD; //address_test_read(COMB_DOT_PROD_ADDR);
priming_mode_reg = FAST_KNN_regs->PRIMING_MODE_REG; //address_test_read(PRIMING_MODE_REG_ADDR);
// Set the expected values of accelerator registers
priming_mode_reg_exp = 1;
printf("%45s %8s %8s\n", "", "Expected", "Read");
printf("%45s %8u %8u\n", "Unlab img buf dot prod:", dot_prod[i][i], unlab_dot_prod);
printf("%45s %8u %8u\n", "Lab img buf dot prod:", dot_prod[j][j], lab_dot_prod);
printf("%45s %8u %8u\n", "Comb buf dot prod:", dot_prod[i][j], comb_dot_prod);
printf("%45s %8u %8u\n", "Priming mode reg:", priming_mode_reg_exp, priming_mode_reg);
if (unlab_dot_prod == dot_prod[i][i] &&
lab_dot_prod == dot_prod[j][j] &&
comb_dot_prod == dot_prod[i][j] &&
priming_mode_reg == priming_mode_reg_exp) {
printf ("\n** Test on images %u, %u PASSED **\n\n", i, j);
} else {
printf ("ERROR : Test on images %u, %u FAILED **\n\n", i, j);
return_val=1;
}
// Set the priming register value to zero to continue test with image i as unlabelled image
FAST_KNN_regs->PRIMING_MODE_REG = 0x00000000;
//address_test_write(PRIMING_MODE_REG_ADDR, 0x00000000);
// Set lab_dot_prod and comb_dot_prod register values to 0
FAST_KNN_regs->LAB_IMG_DOT_PROD = 0x00000000;
FAST_KNN_regs->COMB_DOT_PROD = 0x00000000;
//address_test_write(LAB_IMG_DOT_PROD_ADDR, 0x00000000);
//address_test_write(COMB_DOT_PROD_ADDR, 0x00000000);
}
}
return(return_val);
}
/* --------------------------------------------------------------- */
/* Simple DMA interrupt test */
/* --------------------------------------------------------------- */
int dma_interrupt_test(void)
{
int return_val=0;
int err_code=0;
int i;
unsigned int current_state;
puts("DMA interrupt test");
puts("- DMA done");
CMSDK_DMA->CHNL_ENABLE_SET = (1<<0); /* Enable channel 0 */
/* setup data for DMA */
for (i=0;i<4;i++) {
source_data_array[i] = i;
dest_data_array[i] = 0;
}
dma_done_irq_expected = 1;
dma_done_irq_occurred = 0;
NVIC_ClearPendingIRQ(DMA_IRQn);
NVIC_EnableIRQ(DMA_IRQn);
dma_memory_copy ((unsigned int) &source_data_array[0],(unsigned int) &dest_data_array[0], 2, 4);
delay();
/* Can't guarantee that there is sleep support, so use a polling loop */
do { /* Wait until PL230 DMA controller return to idle state */
current_state = (CMSDK_DMA->DMA_STATUS >> 4) & 0xF;
} while (current_state!=0);
for (i=0;i<4;i++) {
/* Debugging printf: */
/*printf (" - dest[i] = %x\n", dest_data_array[i]);*/
if (dest_data_array[i]!= i){
printf ("ERROR:dest_data_array[%d], expected %x, actual %x\n", i, i, dest_data_array[i]);
err_code |= (1<<i);
}
}
if (dma_done_irq_occurred==0){
puts ("ERROR: DMA done IRQ missing");
err_code |= (1<<4);
}
puts("- DMA err");
CMSDK_DMA->CHNL_ENABLE_SET = (1<<0); /* Enable channel 0 */
/* setup data for DMA */
for (i=0;i<4;i++) {
source_data_array[i] = i;
dest_data_array[i] = 0;
}
dma_error_irq_expected = 1;
dma_error_irq_occurred = 0;
NVIC_ClearPendingIRQ(DMA_IRQn);
NVIC_EnableIRQ(DMA_IRQn);
/* Generate DMA transfer to invalid memory location */
dma_memory_copy ((unsigned int) &source_data_array[0],0xEF000000, 2, 4);
delay();
/* Can't guarantee that there is sleep support, so use a polling loop */
do { /* Wait until PL230 DMA controller return to idle state */
current_state = (CMSDK_DMA->DMA_STATUS >> 4) & 0xF;
} while (current_state!=0);
if (dma_error_irq_occurred==0){
puts ("ERROR: DMA err IRQ missing");
err_code |= (1<<5);
}
/* Clear up */
dma_done_irq_expected = 0;
dma_done_irq_occurred = 0;
dma_error_irq_expected = 0;
dma_error_irq_occurred = 0;
NVIC_DisableIRQ(DMA_IRQn);
/* Generate return value */
if (err_code != 0) {
printf ("ERROR : DMA done interrupt failed (0x%x)\n", err_code);
return_val=1;
} else {
puts ("-Passed");
}
return(return_val);
}
/* --------------------------------------------------------------- */
/* DMA event test */
/* --------------------------------------------------------------- */
int dma_event_test(void)
{
int return_val=0;
int err_code=0;
int i;
unsigned int current_state;
puts("DMA event test");
puts("- DMA done event to RXEV");
CMSDK_DMA->CHNL_ENABLE_SET = (1<<0); /* Enable channel 0 */
/* setup data for DMA */
for (i=0;i<4;i++) {
source_data_array[i] = i;
dest_data_array[i] = 0;
}
dma_done_irq_expected = 1;
dma_done_irq_occurred = 0;
NVIC_ClearPendingIRQ(DMA_IRQn);
NVIC_DisableIRQ(DMA_IRQn);
/* Clear event register - by setting event with SEV and then clear it with WFE */
__SEV();
__WFE(); /* First WFE will not enter sleep because of previous event */
dma_memory_copy ((unsigned int) &source_data_array[0],(unsigned int) &dest_data_array[0], 2, 4);
__WFE(); /* This will cause the processor to enter sleep */
/* Processor woken up */
current_state = (CMSDK_DMA->DMA_STATUS >> 4) & 0xF;
if (current_state!=0) {
puts ("ERROR: DMA status should be IDLE after wake up");
err_code |= (1<<5);
}
for (i=0;i<4;i++) {
/*printf (" - dest[i] = %x\n", dest_data_array[i]);*/
if (dest_data_array[i]!= i){
printf ("ERROR:dest_data_array[%d], expected %x, actual %x\n", i, i, dest_data_array[i]);
err_code |= (1<<i);
}
}
/* Generate return value */
if (err_code != 0) {
printf ("ERROR : DMA event failed (0x%x)\n", err_code);
return_val=1;
} else {
puts ("-Passed");
}
return(return_val);
}
/* --------------------------------------------------------------- */
/* DMA interrupt handlers */
......@@ -698,50 +604,6 @@ void DMA_Handler(void)
}
}
/* Test function for read */
#if defined ( __CC_ARM )
/* Test function for read - for ARM / Keil */
__asm unsigned int address_test_read(unsigned int addr)
{
LDR R1,[R0]
DSB ; Ensure bus fault occurred before leaving this subroutine
MOVS R0, R1
BX LR
}
#else
/* Test function for read - for gcc */
unsigned int address_test_read(unsigned int addr) __attribute__((naked));
unsigned int address_test_read(unsigned int addr)
{
__asm(" ldr r1,[r0]\n"
" dsb \n"
" movs r0, r1 \n"
" bx lr \n"
);
}
#endif
#if defined ( __CC_ARM )
/* Test function for write - for ARM / Keil */
__asm void address_test_write(unsigned int addr, unsigned int wdata)
{
STR R1,[R0]
DSB ; Ensure bus fault occurred before leaving this subroutine
BX LR
}
#else
/* Test function for write - for gcc */
void address_test_write(unsigned int addr, unsigned int wdata) __attribute__((naked));
void address_test_write(unsigned int addr, unsigned int wdata)
{
__asm(" str r1,[r0]\n"
" dsb \n"
" bx lr \n"
);
}
#endif
#if defined ( __CC_ARM )
/* ARM or Keil toolchain */
__asm void HardFault_Handler(void)
......
......@@ -125,7 +125,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>CMSIS_AGDI</Key>
<Name>-X"CMSIS-DAP v2 Interface" -UE461B011D7265A2D -O238 -S0 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC6000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO2 -FD80000000 -FC1000 -FN1 -FF0NanoSoC -FS020000000 -FL04000</Name>
<Name>-X"CMSIS-DAP v2 Interface" -UE461B011D7265A2D -O230 -S0 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC6000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO2 -FD80000000 -FC1000 -FN1 -FF0NanoSoC -FS020000000 -FL04000</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
......@@ -158,7 +158,7 @@
<Mm>
<WinNumber>1</WinNumber>
<SubType>0</SubType>
<ItemText>0x90000000</ItemText>
<ItemText>0x300001A0</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
......
/*
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
* Project: 'fast_knn_demo'
* Target: 'Debug'
*/
#ifndef RTE_COMPONENTS_H
#define RTE_COMPONENTS_H
/*
* Define the Device Header File:
*/
#define CMSIS_device_header "ARMCM0.h"
#endif /* RTE_COMPONENTS_H */
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
<SchemaVersion>1.0</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Extensions>
<cExt>*.c</cExt>
<aExt>*.s*; *.src; *.a*</aExt>
<oExt>*.obj; *.o</oExt>
<lExt>*.lib</lExt>
<tExt>*.txt; *.h; *.inc; *.md</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp</CppX>
<nMigrate>0</nMigrate>
</Extensions>
<DaveTm>
<dwLowDateTime>0</dwLowDateTime>
<dwHighDateTime>0</dwHighDateTime>
</DaveTm>
<Target>
<TargetName>Debug</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<TargetOption>
<CLKADS>12000000</CLKADS>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>1</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>79</PageWidth>
<PageLength>66</PageLength>
<TabStop>8</TabStop>
<ListingPath>.\</ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget>
</OPTFL>
<CpuCode>7</CpuCode>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
<tRtrace>0</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>3</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>BIN\CMSIS_AGDI.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>CMSIS_AGDI</Key>
<Name>-X"CMSIS-DAP v2 Interface" -UE461B011D7265A2D -O230 -S0 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC6000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO2 -FD80000000 -FC1000 -FN1 -FF0NanoSoC -FS020000000 -FL04000</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name></Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(1010=1548,327,1959,756,0)(1007=1694,373,1901,594,0)(1008=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGDARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name>-T0</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>257</SubType>
<ItemText>0x300001A0</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<ScvdList>
<Filename>.\EventRecorderStub.scvd</Filename>
<Type></Type>
<SubType>1</SubType>
</ScvdList>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>1</periodic>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
</TargetOption>
</Target>
<Group>
<GroupName>Startup</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>1</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\common\Device\ARM\CMSDK_CM0\Source\ARM\startup_CMSDK_CM0.s</PathWithFileName>
<FilenameWithoutPath>startup_CMSDK_CM0.s</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>Application</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\fast_knn_demo2.c</PathWithFileName>
<FilenameWithoutPath>fast_knn_demo2.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\common\retarget\retarget.c</PathWithFileName>
<FilenameWithoutPath>retarget.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\common\retarget\uart_stdout.c</PathWithFileName>
<FilenameWithoutPath>uart_stdout.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\common\Device\ARM\CMSDK_CM0\Source\CMSDK_driver.c</PathWithFileName>
<FilenameWithoutPath>CMSDK_driver.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>System</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>6</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\common\Device\ARM\CMSDK_CM0\Source\system_CMSDK_CM0.c</PathWithFileName>
<FilenameWithoutPath>system_CMSDK_CM0.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>::CMSIS</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>1</RteFlg>
</Group>
</ProjectOpt>
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
<SchemaVersion>2.1</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Targets>
<Target>
<TargetName>Debug</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6210000::V6.21::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>ARMCM0</Device>
<Vendor>ARM</Vendor>
<PackID>ARM.Cortex_DFP.1.0.0</PackID>
<PackURL>https://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000,0x00020000) IROM(0x00000000,0x00040000) CPUTYPE("Cortex-M0") CLOCK(12000000) ESEL ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
<FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000)</FlashDriverDll>
<DeviceId>0</DeviceId>
<RegisterFile>$$Device:ARMCM0$Device\ARMCM0\Include\ARMCM0.h</RegisterFile>
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
<Linker></Linker>
<OHString></OHString>
<InfinionOptionDll></InfinionOptionDll>
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<SFDFile></SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
<BinPath></BinPath>
<IncludePath></IncludePath>
<LibPath></LibPath>
<RegisterFilePath></RegisterFilePath>
<DBRegisterFilePath></DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
<ButtonStop>0</ButtonStop>
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\</OutputDirectory>
<OutputName>fast_knn_demo2</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>1</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
<ListingPath>.\</ListingPath>
<HexFormatSelection>1</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopU1X>0</nStopU1X>
<nStopU2X>0</nStopU2X>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopB1X>0</nStopB1X>
<nStopB2X>0</nStopB2X>
</BeforeMake>
<AfterMake>
<RunUserProg1>1</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name>fromelf.exe fast_knn_demo2.axf --vhx --8x1 --output fast_knn_demo2.hex</UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopA1X>0</nStopA1X>
<nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
<SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
<RVCTCodeConst>0</RVCTCodeConst>
<RVCTZI>0</RVCTZI>
<RVCTOtherData>0</RVCTOtherData>
<ModuleSelection>0</ModuleSelection>
<IncludeInBuild>1</IncludeInBuild>
<AlwaysBuild>0</AlwaysBuild>
<GenerateAssemblyFile>0</GenerateAssemblyFile>
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>1</ComprImg>
</CommonProperty>
<DllOption>
<SimDllName>SARMCM3.DLL</SimDllName>
<SimDllArguments> </SimDllArguments>
<SimDlgDll>DARMCM1.DLL</SimDlgDll>
<SimDlgDllArguments>-pCM0</SimDlgDllArguments>
<TargetDllName>SARMCM3.DLL</TargetDllName>
<TargetDllArguments> </TargetDllArguments>
<TargetDlgDll>TARMCM1.DLL</TargetDlgDll>
<TargetDlgDllArguments>-pCM0</TargetDlgDllArguments>
</DllOption>
<DebugOption>
<OPTHX>
<HexSelection>1</HexSelection>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
<Oh166RecLen>16</Oh166RecLen>
</OPTHX>
</DebugOption>
<Utilities>
<Flash1>
<UseTargetDll>1</UseTargetDll>
<UseExternalTool>0</UseExternalTool>
<RunIndependent>0</RunIndependent>
<UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
<Capability>1</Capability>
<DriverSelection>4096</DriverSelection>
</Flash1>
<bUseTDR>1</bUseTDR>
<Flash2>BIN\UL2CM3.DLL</Flash2>
<Flash3>"" ()</Flash3>
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>
<pFcArmRoot></pFcArmRoot>
<FcArmLst>0</FcArmLst>
</Utilities>
<TargetArmAds>
<ArmAdsMisc>
<GenerateListings>0</GenerateListings>
<asHll>1</asHll>
<asAsm>1</asAsm>
<asMacX>1</asMacX>
<asSyms>1</asSyms>
<asFals>1</asFals>
<asDbgD>1</asDbgD>
<asForm>1</asForm>
<ldLst>0</ldLst>
<ldmm>1</ldmm>
<ldXref>1</ldXref>
<BigEnd>0</BigEnd>
<AdsALst>1</AdsALst>
<AdsACrf>1</AdsACrf>
<AdsANop>0</AdsANop>
<AdsANot>0</AdsANot>
<AdsLLst>1</AdsLLst>
<AdsLmap>1</AdsLmap>
<AdsLcgr>1</AdsLcgr>
<AdsLsym>1</AdsLsym>
<AdsLszi>1</AdsLszi>
<AdsLtoi>1</AdsLtoi>
<AdsLsun>1</AdsLsun>
<AdsLven>1</AdsLven>
<AdsLsxf>1</AdsLsxf>
<RvctClst>0</RvctClst>
<GenPPlst>0</GenPPlst>
<AdsCpuType>"Cortex-M0"</AdsCpuType>
<RvctDeviceName></RvctDeviceName>
<mOS>0</mOS>
<uocRom>0</uocRom>
<uocRam>0</uocRam>
<hadIROM>1</hadIROM>
<hadIRAM>1</hadIRAM>
<hadXRAM>0</hadXRAM>
<uocXRam>0</uocXRam>
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
<useUlib>0</useUlib>
<EndSel>1</EndSel>
<uLtcg>0</uLtcg>
<nSecure>0</nSecure>
<RoSelD>3</RoSelD>
<RwSelD>3</RwSelD>
<CodeSel>0</CodeSel>
<OptFeed>0</OptFeed>
<NoZi1>0</NoZi1>
<NoZi2>0</NoZi2>
<NoZi3>0</NoZi3>
<NoZi4>0</NoZi4>
<NoZi5>0</NoZi5>
<Ro1Chk>0</Ro1Chk>
<Ro2Chk>0</Ro2Chk>
<Ro3Chk>0</Ro3Chk>
<Ir1Chk>1</Ir1Chk>
<Ir2Chk>0</Ir2Chk>
<Ra1Chk>0</Ra1Chk>
<Ra2Chk>0</Ra2Chk>
<Ra3Chk>0</Ra3Chk>
<Im1Chk>1</Im1Chk>
<Im2Chk>0</Im2Chk>
<OnChipMemories>
<Ocm1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm1>
<Ocm2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm2>
<Ocm3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm3>
<Ocm4>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm4>
<Ocm5>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm5>
<Ocm6>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm6>
<IRAM>
<Type>0</Type>
<StartAddress>0x20000000</StartAddress>
<Size>0x20000</Size>
</IRAM>
<IROM>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x40000</Size>
</IROM>
<XRAM>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRAM>
<OCR_RVCT1>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT1>
<OCR_RVCT2>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT2>
<OCR_RVCT3>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT3>
<OCR_RVCT4>
<Type>1</Type>
<StartAddress>0x20000000</StartAddress>
<Size>0x4000</Size>
</OCR_RVCT4>
<OCR_RVCT5>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT5>
<OCR_RVCT6>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT6>
<OCR_RVCT7>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT7>
<OCR_RVCT8>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT8>
<OCR_RVCT9>
<Type>0</Type>
<StartAddress>0x30000000</StartAddress>
<Size>0x2000</Size>
</OCR_RVCT9>
<OCR_RVCT10>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT10>
</OnChipMemories>
<RvctStartVector></RvctStartVector>
</ArmAdsMisc>
<Cads>
<interw>1</interw>
<Optim>4</Optim>
<oTime>1</oTime>
<SplitLS>0</SplitLS>
<OneElfS>0</OneElfS>
<Strict>0</Strict>
<EnumInt>0</EnumInt>
<PlainCh>0</PlainCh>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<wLevel>0</wLevel>
<uThumb>0</uThumb>
<uSurpInc>0</uSurpInc>
<uC99>1</uC99>
<uGnu>0</uGnu>
<useXO>0</useXO>
<v6Lang>3</v6Lang>
<v6LangP>3</v6LangP>
<vShortEn>1</vShortEn>
<vShortWch>1</vShortWch>
<v6Lto>0</v6Lto>
<v6WtE>0</v6WtE>
<v6Rtti>0</v6Rtti>
<VariousControls>
<MiscControls></MiscControls>
<Define>CORTEX_M0</Define>
<Undefine></Undefine>
<IncludePath>..\..\common\CMSIS\Include;..\..\common\Device\ARM\CMSDK_CM0\Include;..\..\common\retarget;..\..\common\generic</IncludePath>
</VariousControls>
</Cads>
<Aads>
<interw>1</interw>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<thumb>0</thumb>
<SplitLS>0</SplitLS>
<SwStkChk>0</SwStkChk>
<NoWarn>0</NoWarn>
<uSurpInc>0</uSurpInc>
<useXO>0</useXO>
<ClangAsOpt>1</ClangAsOpt>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Aads>
<LDads>
<umfTarg>1</umfTarg>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<noStLib>0</noStLib>
<RepFail>1</RepFail>
<useFile>0</useFile>
<TextAddressRange>0x00000000</TextAddressRange>
<DataAddressRange>0x00000000</DataAddressRange>
<pXoBase></pXoBase>
<ScatterFile></ScatterFile>
<IncludeLibs></IncludeLibs>
<IncludeLibsPath></IncludeLibsPath>
<Misc></Misc>
<LinkerInputFile></LinkerInputFile>
<DisabledWarnings></DisabledWarnings>
</LDads>
</TargetArmAds>
</TargetOption>
<Groups>
<Group>
<GroupName>Startup</GroupName>
<Files>
<File>
<FileName>startup_CMSDK_CM0.s</FileName>
<FileType>2</FileType>
<FilePath>..\..\common\Device\ARM\CMSDK_CM0\Source\ARM\startup_CMSDK_CM0.s</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>Application</GroupName>
<Files>
<File>
<FileName>fast_knn_demo2.c</FileName>
<FileType>1</FileType>
<FilePath>.\fast_knn_demo2.c</FilePath>
</File>
<File>
<FileName>retarget.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\common\retarget\retarget.c</FilePath>
</File>
<File>
<FileName>uart_stdout.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\common\retarget\uart_stdout.c</FilePath>
</File>
<File>
<FileName>CMSDK_driver.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\common\Device\ARM\CMSDK_CM0\Source\CMSDK_driver.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>System</GroupName>
<Files>
<File>
<FileName>system_CMSDK_CM0.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\common\Device\ARM\CMSDK_CM0\Source\system_CMSDK_CM0.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>::CMSIS</GroupName>
</Group>
</Groups>
</Target>
</Targets>
<RTE>
<apis/>
<components>
<component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="6.0.0" condition="ARMv6_7_8-M Device">
<package name="CMSIS" schemaVersion="1.7.7" url="https://www.keil.com/pack/" vendor="ARM" version="6.0.0"/>
<targetInfos>
<targetInfo name="Debug"/>
</targetInfos>
</component>
</components>
<files/>
</RTE>
</Project>
/*
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
* Project: 'fast_knn_demo'
* Target: 'Debug'
*/
#ifndef RTE_COMPONENTS_H
#define RTE_COMPONENTS_H
/*
* Define the Device Header File:
*/
#define CMSIS_device_header "ARMCM0.h"
#endif /* RTE_COMPONENTS_H */
#ifdef CORTEX_M0
#include "CMSDK_CM0.h"
#endif
#ifdef CORTEX_M0PLUS
#include "CMSDK_CM0plus.h"
#endif
#ifdef CORTEX_M3
#include "CMSDK_CM3.h"
#endif
#ifdef CORTEX_M4
#include "CMSDK_CM4.h"
#endif
#define ACC_BASE_ADDR 0x60000000
#define ACC_SIZE 0xC
#include <stdio.h>
#include "uart_stdout.h"
#define HW32_REG(ADDRESS) (*((volatile unsigned long *)(ADDRESS)))
#define HW16_REG(ADDRESS) (*((volatile unsigned short *)(ADDRESS)))
#define HW8_REG(ADDRESS) (*((volatile unsigned char *)(ADDRESS)))
void HardFault_Handler_c(unsigned int * hardfault_args, unsigned lr_value);
int hell_fire_test(void);
int acc_test_word(unsigned int test_addr);
#define HELL_FIRE_RESULTS_BASE (0x90000000UL)
typedef struct{
__IO uint32_t acc_result[18]
} HELL_FIRE_RESULTS_typedef;
#define HELL_FIRE_RESULTS ((HELL_FIRE_RESULTS_typedef *) HELL_FIRE_RESULTS_BASE)
#define HELL_FIRE_DATA_BASE (0x80000000UL)
typedef struct{
__IO uint8_t weights[16];
__IO uint8_t bias[4];
__IO uint8_t data[288];
} HELL_FIRE_DATA_typedef;
#define HELL_FIRE_DATA ((HELL_FIRE_DATA_typedef *) HELL_FIRE_DATA_BASE)
/* Global variables */
volatile int hardfault_occurred;
volatile int hardfault_expected;
volatile int temp_data;
int hardfault_verbose=0; // 0:Not displaying anything in hardfault handler
void wait_gpio_handshake();
int main (void)
{
int err_code = 0;
uint16_t i;
uint16_t j;
uint8_t curr_vector=0;
uint8_t accelerator_output[16];
// UART init
UartStdOutInit();
// Test banner message and revision number
puts("Hell Fire Demo\n");
// Use P0 [0:1] to request data and P0[2:3] to see if data has been recieved
//Set P0[0:1] as output and P0[2:3] as input
CMSDK_GPIO1->OUTENABLESET = 0x40;
CMSDK_GPIO1->OUTENABLECLR = 0x80;
temp_data=0;
hardfault_occurred = 0;
hardfault_expected = 0;
while(1){
// Send weights to accelerator
for(i=0;i<16;i++){
HW8_REG(ACC_BASE_ADDR) = HELL_FIRE_DATA->weights[i];
}
// Send Data to accelerator
for(i=0;i<16;i++){
HW8_REG(ACC_BASE_ADDR) = HELL_FIRE_DATA->data[i+16*curr_vector];
}
for(i=0;i<16;i++){
accelerator_output[i]=HW8_REG(ACC_BASE_ADDR);
}
wait_gpio_handshake();
}
/* Generate test pass/fail and return value */
if (err_code==0) {
printf ("\n** TEST PASSED **\n");
} else {
printf ("\n** TEST FAILED **, Error code = (0x%x)\n", err_code);
}
UartEndSimulation();
return 0;
}
/* -------------------------------------------------------------------- */
/* Hell Fire test */
/* -------------------------------------------------------------------- */
int hell_fire_test(void)
{
int err_code = 0;
int i;
puts ("Checking Hell Fire Accelerator");
/* Test max and min addresses in SRAM boundary */
// Starting location
for(i = ACC_BASE_ADDR; i<(ACC_BASE_ADDR+ACC_SIZE);i=i+4)
{
if (acc_test_word(i)!=0) err_code++;
}
/* Test addresses beyond SRAM boundary */
hardfault_occurred = 0;
hardfault_expected = 0;
if (err_code> 0) {
puts (" Failed\n");
printf ("Error code : %x\n", err_code);
return 1;
} else {
puts (" Passed\n");
return 0;
}
}
int acc_test_word(unsigned int test_addr)
{
int result=0; // This will only work if result and temp are not store in address being tested
int j=0;
int temp[4];
__disable_irq(); // Make sure interrupt will not affect the result of the test
/* Use consistence memory access size in checking so that it work with
both little endian and big endian configs */
printf("Writing data at %x\n", test_addr);
for (j=0; j<8;j++)
{
HW32_REG(test_addr)=0x01010101;
}
printf("Reading data at %x\n", test_addr);
for (j=0; j<4;j++)
{
temp[j]=HW32_REG(test_addr);
}
for (j=0; j<4;j++)
{
printf("Read data: %x\n",temp[j]);
if(temp[j]!=0x00040004){
result++;
}
}
__enable_irq(); // re-enable IRQ
if (result !=0) printf ("ERROR: Memory location test failed at %x\n", test_addr);
return result;
}
void wait_gpio_handshake(){
// Set P1[6] to request data
CMSDK_GPIO1->DATAOUT |= (1<<6);
while(!((CMSDK_GPIO1->DATA)&0x80)){;}
// If P1[7] set then set data request low (as data should be recieved)
CMSDK_GPIO1->DATAOUT &= 0xBF;
return;
}
/* -------------------------------------------------------------------- */
/* Helper functions for testing bus fault */
/* -------------------------------------------------------------------- */
#if defined ( __CC_ARM )
/* Test function for write - for ARM / Keil */
__asm void address_test_write(unsigned int addr, unsigned int wdata)
{
STR R1,[R0]
DSB ; Ensure bus fault occurred before leaving this subroutine
BX LR
}
#else
/* Test function for write - for gcc */
void address_test_write(unsigned int addr, unsigned int wdata) __attribute__((naked));
void address_test_write(unsigned int addr, unsigned int wdata)
{
__asm(" str r1,[r0]\n"
" dsb \n"
" bx lr \n"
);
}
#endif
/* Test function for read */
#if defined ( __CC_ARM )
/* Test function for read - for ARM / Keil */
__asm unsigned int address_test_read(unsigned int addr)
{
LDR R1,[R0]
DSB ; Ensure bus fault occurred before leaving this subroutine
MOVS R0, R1
BX LR
}
#else
/* Test function for read - for gcc */
unsigned int address_test_read(unsigned int addr) __attribute__((naked));
unsigned int address_test_read(unsigned int addr)
{
__asm(" ldr r1,[r0]\n"
" dsb \n"
" movs r0, r1 \n"
" bx lr \n"
);
}
#endif
#if defined ( __CC_ARM )
/* ARM or Keil toolchain */
__asm void HardFault_Handler(void)
{
MOVS r0, #4
MOV r1, LR
TST r0, r1
BEQ stacking_used_MSP
MRS R0, PSP ; // first parameter - stacking was using PSP
B get_LR_and_branch
stacking_used_MSP
MRS R0, MSP ; // first parameter - stacking was using MSP
get_LR_and_branch
MOV R1, LR ; // second parameter is LR current value
LDR R2,=__cpp(HardFault_Handler_c)
BX R2
ALIGN
}
#else
/* gcc toolchain */
void HardFault_Handler(void) __attribute__((naked));
void HardFault_Handler(void)
{
__asm(" movs r0,#4\n"
" mov r1,lr\n"
" tst r0,r1\n"
" beq stacking_used_MSP\n"
" mrs r0,psp\n" /* first parameter - stacking was using PSP */
" ldr r1,=HardFault_Handler_c \n"
" bx r1\n"
"stacking_used_MSP:\n"
" mrs r0,msp\n" /* first parameter - stacking was using PSP */
" ldr r1,=HardFault_Handler_c \n"
" bx r1\n"
".pool\n" );
}
#endif
/* C part of the fault handler - common between ARM / Keil /gcc */
void HardFault_Handler_c(unsigned int * hardfault_args, unsigned lr_value)
{
unsigned int stacked_pc;
unsigned int stacked_r0;
hardfault_occurred++;
if (hardfault_verbose) puts ("[Hard Fault Handler]");
if (hardfault_expected==0) {
puts ("ERROR : Unexpected HardFault interrupt occurred.\n");
UartEndSimulation();
while (1);
}
stacked_r0 = ((unsigned long) hardfault_args[0]);
stacked_pc = ((unsigned long) hardfault_args[6]);
if (hardfault_verbose) printf(" - Stacked R0 : 0x%x\n", stacked_r0);
if (hardfault_verbose) printf(" - Stacked PC : 0x%x\n", stacked_pc);
/* Modify R0 to a valid address */
hardfault_args[0] = (unsigned long) &temp_data;
return;
}
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
<SchemaVersion>1.0</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Extensions>
<cExt>*.c</cExt>
<aExt>*.s*; *.src; *.a*</aExt>
<oExt>*.obj; *.o</oExt>
<lExt>*.lib</lExt>
<tExt>*.txt; *.h; *.inc; *.md</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp</CppX>
<nMigrate>0</nMigrate>
</Extensions>
<DaveTm>
<dwLowDateTime>0</dwLowDateTime>
<dwHighDateTime>0</dwHighDateTime>
</DaveTm>
<Target>
<TargetName>Debug</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<TargetOption>
<CLKADS>12000000</CLKADS>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>1</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>79</PageWidth>
<PageLength>66</PageLength>
<TabStop>8</TabStop>
<ListingPath>.\</ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget>
</OPTFL>
<CpuCode>7</CpuCode>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
<tRtrace>0</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>3</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>BIN\CMSIS_AGDI.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>CMSIS_AGDI</Key>
<Name>-X"CMSIS-DAP v2 Interface" -UE461B011D7265A2D -O238 -S0 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC6000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO2 -FD80000000 -FC1000 -FN1 -FF0NanoSoC -FS020000000 -FL04000</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name></Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(1010=1548,327,1959,756,0)(1007=1694,373,1901,594,0)(1008=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGDARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name>-T0</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>0</SubType>
<ItemText>0x80000010</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<ScvdList>
<Filename>.\EventRecorderStub.scvd</Filename>
<Type></Type>
<SubType>1</SubType>
</ScvdList>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>1</periodic>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
</TargetOption>
</Target>
<Group>
<GroupName>Startup</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>1</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\common\Device\ARM\CMSDK_CM0\Source\ARM\startup_CMSDK_CM0.s</PathWithFileName>
<FilenameWithoutPath>startup_CMSDK_CM0.s</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>Application</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\hell_fire_demo.c</PathWithFileName>
<FilenameWithoutPath>hell_fire_demo.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\common\retarget\retarget.c</PathWithFileName>
<FilenameWithoutPath>retarget.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\common\retarget\uart_stdout.c</PathWithFileName>
<FilenameWithoutPath>uart_stdout.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\common\Device\ARM\CMSDK_CM0\Source\CMSDK_driver.c</PathWithFileName>
<FilenameWithoutPath>CMSDK_driver.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>System</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>6</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\common\Device\ARM\CMSDK_CM0\Source\system_CMSDK_CM0.c</PathWithFileName>
<FilenameWithoutPath>system_CMSDK_CM0.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>::CMSIS</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>1</RteFlg>
</Group>
</ProjectOpt>
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
<SchemaVersion>2.1</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Targets>
<Target>
<TargetName>Debug</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6210000::V6.21::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>ARMCM0</Device>
<Vendor>ARM</Vendor>
<PackID>ARM.Cortex_DFP.1.0.0</PackID>
<PackURL>https://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000,0x00020000) IROM(0x00000000,0x00040000) CPUTYPE("Cortex-M0") CLOCK(12000000) ESEL ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
<FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000)</FlashDriverDll>
<DeviceId>0</DeviceId>
<RegisterFile>$$Device:ARMCM0$Device\ARMCM0\Include\ARMCM0.h</RegisterFile>
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
<Linker></Linker>
<OHString></OHString>
<InfinionOptionDll></InfinionOptionDll>
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<SFDFile></SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
<BinPath></BinPath>
<IncludePath></IncludePath>
<LibPath></LibPath>
<RegisterFilePath></RegisterFilePath>
<DBRegisterFilePath></DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
<ButtonStop>0</ButtonStop>
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\</OutputDirectory>
<OutputName>hell_fire_demo</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>1</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
<ListingPath>.\</ListingPath>
<HexFormatSelection>1</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopU1X>0</nStopU1X>
<nStopU2X>0</nStopU2X>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopB1X>0</nStopB1X>
<nStopB2X>0</nStopB2X>
</BeforeMake>
<AfterMake>
<RunUserProg1>1</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name>fromelf.exe hell_fire_demo.axf --vhx --8x1 --output hell_fire_demo.hex</UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopA1X>0</nStopA1X>
<nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
<SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
<RVCTCodeConst>0</RVCTCodeConst>
<RVCTZI>0</RVCTZI>
<RVCTOtherData>0</RVCTOtherData>
<ModuleSelection>0</ModuleSelection>
<IncludeInBuild>1</IncludeInBuild>
<AlwaysBuild>0</AlwaysBuild>
<GenerateAssemblyFile>0</GenerateAssemblyFile>
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>1</ComprImg>
</CommonProperty>
<DllOption>
<SimDllName>SARMCM3.DLL</SimDllName>
<SimDllArguments> </SimDllArguments>
<SimDlgDll>DARMCM1.DLL</SimDlgDll>
<SimDlgDllArguments>-pCM0</SimDlgDllArguments>
<TargetDllName>SARMCM3.DLL</TargetDllName>
<TargetDllArguments> </TargetDllArguments>
<TargetDlgDll>TARMCM1.DLL</TargetDlgDll>
<TargetDlgDllArguments>-pCM0</TargetDlgDllArguments>
</DllOption>
<DebugOption>
<OPTHX>
<HexSelection>1</HexSelection>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
<Oh166RecLen>16</Oh166RecLen>
</OPTHX>
</DebugOption>
<Utilities>
<Flash1>
<UseTargetDll>1</UseTargetDll>
<UseExternalTool>0</UseExternalTool>
<RunIndependent>0</RunIndependent>
<UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging>
<Capability>1</Capability>
<DriverSelection>4096</DriverSelection>
</Flash1>
<bUseTDR>1</bUseTDR>
<Flash2>BIN\UL2CM3.DLL</Flash2>
<Flash3>"" ()</Flash3>
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>
<pFcArmRoot></pFcArmRoot>
<FcArmLst>0</FcArmLst>
</Utilities>
<TargetArmAds>
<ArmAdsMisc>
<GenerateListings>0</GenerateListings>
<asHll>1</asHll>
<asAsm>1</asAsm>
<asMacX>1</asMacX>
<asSyms>1</asSyms>
<asFals>1</asFals>
<asDbgD>1</asDbgD>
<asForm>1</asForm>
<ldLst>0</ldLst>
<ldmm>1</ldmm>
<ldXref>1</ldXref>
<BigEnd>0</BigEnd>
<AdsALst>1</AdsALst>
<AdsACrf>1</AdsACrf>
<AdsANop>0</AdsANop>
<AdsANot>0</AdsANot>
<AdsLLst>1</AdsLLst>
<AdsLmap>1</AdsLmap>
<AdsLcgr>1</AdsLcgr>
<AdsLsym>1</AdsLsym>
<AdsLszi>1</AdsLszi>
<AdsLtoi>1</AdsLtoi>
<AdsLsun>1</AdsLsun>
<AdsLven>1</AdsLven>
<AdsLsxf>1</AdsLsxf>
<RvctClst>0</RvctClst>
<GenPPlst>0</GenPPlst>
<AdsCpuType>"Cortex-M0"</AdsCpuType>
<RvctDeviceName></RvctDeviceName>
<mOS>0</mOS>
<uocRom>0</uocRom>
<uocRam>0</uocRam>
<hadIROM>1</hadIROM>
<hadIRAM>1</hadIRAM>
<hadXRAM>0</hadXRAM>
<uocXRam>0</uocXRam>
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
<useUlib>0</useUlib>
<EndSel>1</EndSel>
<uLtcg>0</uLtcg>
<nSecure>0</nSecure>
<RoSelD>3</RoSelD>
<RwSelD>3</RwSelD>
<CodeSel>0</CodeSel>
<OptFeed>0</OptFeed>
<NoZi1>0</NoZi1>
<NoZi2>0</NoZi2>
<NoZi3>0</NoZi3>
<NoZi4>0</NoZi4>
<NoZi5>0</NoZi5>
<Ro1Chk>0</Ro1Chk>
<Ro2Chk>0</Ro2Chk>
<Ro3Chk>0</Ro3Chk>
<Ir1Chk>1</Ir1Chk>
<Ir2Chk>0</Ir2Chk>
<Ra1Chk>0</Ra1Chk>
<Ra2Chk>0</Ra2Chk>
<Ra3Chk>0</Ra3Chk>
<Im1Chk>1</Im1Chk>
<Im2Chk>0</Im2Chk>
<OnChipMemories>
<Ocm1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm1>
<Ocm2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm2>
<Ocm3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm3>
<Ocm4>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm4>
<Ocm5>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm5>
<Ocm6>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm6>
<IRAM>
<Type>0</Type>
<StartAddress>0x20000000</StartAddress>
<Size>0x20000</Size>
</IRAM>
<IROM>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x40000</Size>
</IROM>
<XRAM>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRAM>
<OCR_RVCT1>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT1>
<OCR_RVCT2>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT2>
<OCR_RVCT3>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT3>
<OCR_RVCT4>
<Type>1</Type>
<StartAddress>0x20000000</StartAddress>
<Size>0x4000</Size>
</OCR_RVCT4>
<OCR_RVCT5>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT5>
<OCR_RVCT6>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT6>
<OCR_RVCT7>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT7>
<OCR_RVCT8>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT8>
<OCR_RVCT9>
<Type>0</Type>
<StartAddress>0x30000000</StartAddress>
<Size>0x2000</Size>
</OCR_RVCT9>
<OCR_RVCT10>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT10>
</OnChipMemories>
<RvctStartVector></RvctStartVector>
</ArmAdsMisc>
<Cads>
<interw>1</interw>
<Optim>1</Optim>
<oTime>1</oTime>
<SplitLS>0</SplitLS>
<OneElfS>0</OneElfS>
<Strict>0</Strict>
<EnumInt>0</EnumInt>
<PlainCh>0</PlainCh>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<wLevel>0</wLevel>
<uThumb>0</uThumb>
<uSurpInc>0</uSurpInc>
<uC99>1</uC99>
<uGnu>0</uGnu>
<useXO>0</useXO>
<v6Lang>3</v6Lang>
<v6LangP>3</v6LangP>
<vShortEn>1</vShortEn>
<vShortWch>1</vShortWch>
<v6Lto>0</v6Lto>
<v6WtE>0</v6WtE>
<v6Rtti>0</v6Rtti>
<VariousControls>
<MiscControls></MiscControls>
<Define>CORTEX_M0</Define>
<Undefine></Undefine>
<IncludePath>..\..\common\CMSIS\Include;..\..\common\Device\ARM\CMSDK_CM0\Include;..\..\common\retarget;..\..\common\generic</IncludePath>
</VariousControls>
</Cads>
<Aads>
<interw>1</interw>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<thumb>0</thumb>
<SplitLS>0</SplitLS>
<SwStkChk>0</SwStkChk>
<NoWarn>0</NoWarn>
<uSurpInc>0</uSurpInc>
<useXO>0</useXO>
<ClangAsOpt>1</ClangAsOpt>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Aads>
<LDads>
<umfTarg>1</umfTarg>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<noStLib>0</noStLib>
<RepFail>1</RepFail>
<useFile>0</useFile>
<TextAddressRange>0x00000000</TextAddressRange>
<DataAddressRange>0x00000000</DataAddressRange>
<pXoBase></pXoBase>
<ScatterFile></ScatterFile>
<IncludeLibs></IncludeLibs>
<IncludeLibsPath></IncludeLibsPath>
<Misc></Misc>
<LinkerInputFile></LinkerInputFile>
<DisabledWarnings></DisabledWarnings>
</LDads>
</TargetArmAds>
</TargetOption>
<Groups>
<Group>
<GroupName>Startup</GroupName>
<Files>
<File>
<FileName>startup_CMSDK_CM0.s</FileName>
<FileType>2</FileType>
<FilePath>..\..\common\Device\ARM\CMSDK_CM0\Source\ARM\startup_CMSDK_CM0.s</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>Application</GroupName>
<Files>
<File>
<FileName>hell_fire_demo.c</FileName>
<FileType>1</FileType>
<FilePath>.\hell_fire_demo.c</FilePath>
</File>
<File>
<FileName>retarget.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\common\retarget\retarget.c</FilePath>
</File>
<File>
<FileName>uart_stdout.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\common\retarget\uart_stdout.c</FilePath>
</File>
<File>
<FileName>CMSDK_driver.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\common\Device\ARM\CMSDK_CM0\Source\CMSDK_driver.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>System</GroupName>
<Files>
<File>
<FileName>system_CMSDK_CM0.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\common\Device\ARM\CMSDK_CM0\Source\system_CMSDK_CM0.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>::CMSIS</GroupName>
</Group>
</Groups>
</Target>
</Targets>
<RTE>
<apis/>
<components>
<component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="6.0.0" condition="ARMv6_7_8-M Device">
<package name="CMSIS" schemaVersion="1.7.7" url="https://www.keil.com/pack/" vendor="ARM" version="6.0.0"/>
<targetInfos>
<targetInfo name="Debug"/>
</targetInfos>
</component>
</components>
<files/>
</RTE>
</Project>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment