diff --git a/nanosoc/nanosoc_system/verilog/nanosoc_system.v b/nanosoc/nanosoc_system/verilog/nanosoc_system.v index 4e4b3c1edca353754c7723f7d48e1765125a3daf..05bbd3003b69949cb8a2bc26f8fe2db571e92989 100644 --- a/nanosoc/nanosoc_system/verilog/nanosoc_system.v +++ b/nanosoc/nanosoc_system/verilog/nanosoc_system.v @@ -56,7 +56,7 @@ module nanosoc_system #( parameter INCLUDE_JTAG = 0, // Do not Include JTAG feature // DMA Parameters - parameter DMAC_0_CHANNEL_NUM = 2, // DMAC 0 Number of DMA Channels + parameter DMAC_0_CHANNEL_NUM = 4, // DMAC 0 Number of DMA Channels : Add EXTDATA TX, RX parameter DMAC_1_CHANNEL_NUM = 2, // DMAC 1 Number of DMA Channels // SoCDebug Parameters @@ -907,7 +907,9 @@ wire EXT_DAT_TXD_TREADY ; // Expansion DRQ Wiring //-------------------------- assign EXP_DLAST [1:0] = 2'b00; - assign DMAC_0_DMA_REQ = EXP_DRQ; + assign DMAC_0_DMA_REQ[1:0] = EXP_DRQ; + assign DMAC_0_DMA_REQ[2] = EXT_DAT_RXD_TREADY; + assign DMAC_0_DMA_REQ[3] = EXT_DAT_TXD_TVALID; // Instantiate Subsystem //-------------------------- diff --git a/nanosoc/sldma230_tech b/nanosoc/sldma230_tech index 0f0bf3dee094e9e6801210c1d5f190dea912395d..7105d696b8d67e4b70c9c54cb14c807a311a24b3 160000 --- a/nanosoc/sldma230_tech +++ b/nanosoc/sldma230_tech @@ -1 +1 @@ -Subproject commit 0f0bf3dee094e9e6801210c1d5f190dea912395d +Subproject commit 7105d696b8d67e4b70c9c54cb14c807a311a24b3 diff --git a/software/drivers/dma_pl230_driver.h b/software/drivers/dma_pl230_driver.h index 082b196ab13b993867815b4ff5f91ff5cf1588a0..7116f998852e71c1521f72e2aee35be8167eac21 100644 --- a/software/drivers/dma_pl230_driver.h +++ b/software/drivers/dma_pl230_driver.h @@ -8,7 +8,7 @@ extern "C" { #define DMA_PL230_BASE (CMSDK_APB_BASE + 0xF000UL) -#define MAX_NUM_OF_DMA_CHANNELS 2 +#define MAX_NUM_OF_DMA_CHANNELS 4 /*------------- PL230 uDMA (PL230) --------------------------------------*/ /** @addtogroup DMA_PL230 CMSDK uDMA controller diff --git a/testcodes/dataio_dma230_tests/data_in.csv b/testcodes/dataio_dma230_tests/data_in.csv new file mode 100644 index 0000000000000000000000000000000000000000..bcc1e4425ed3a795097bdf1627046f1a91dbe268 --- /dev/null +++ b/testcodes/dataio_dma230_tests/data_in.csv @@ -0,0 +1,6 @@ +0000100101000110,0000110001000110,0000110001000110,0000100101000110,0000011001000110,0000011001000110,0000010101000110,0000100001000110,0000110101000110,0000101101000110,0000100001000110,0000010001000110,0000001101000110,0000100001000110,0000100101000110,0000101001000110,0000100101000111,0000010101000111,0000010101000111,0000010101000111,0000011101000111,0000100101000111,0000101001000111,0000100001000111,0000010001000111,0000001001000111,0000010001000111,0000100001000111,0000101101000111,0000100101000111,0000011001000111,0000010001000111,0000010001000111,0000011001000111,0000100101000111,0000101001000111,0000100101000111,0000010101000111,0000001001000111,0000010101000111 +0000010100101010,1111110100101010,0000010100101010,0000000100101001,1111111000101010,0000011000101001,0000000100101001,0000010100101000,0000010100101000,0000000100101000,0000101100101000,0000101000101000,0000011100100111,0000101000101000,0000101100100111,0000110100100111,0000101100100111,0000100100100111,0000111000100111,0000101000100111,0000001100100111,0000101000100111,0000011100100110,0000001000100110,0000011100100110,0000011100100110,0000100100100110,0000101000100110,0000001100100101,0000101000100101,0000010100100101,0000000000100101,0000011000100101,0000010000100101,0000001000100100,0000010000100100,1111111100100101,0000011000100100,0000001000100100,1111110000100100 +0000000000000000,0000000000000001,0000000000000011,0000000000000111,0000000000001111,0000000000011111,0000000000111111,0000000001111111,0000000011111111,0000000111111111,0000001111111111,0000011111111111,0000111111111111,0001111111111111,0011111111111111,0111111111111111,1111111111111111 +1111111111111111,1111111111111110,1111111111111100,1111111111111000,1111111111110000,1111111111100000,1111111111000000,1111111110000000,1111111100000000,1111111000000000,1111110000000000,1111100000000000,1111000000000000,1110000000000000,1100000000000000,1000000000000000,0000000000000000 +0000000000000000,0000000000000001,0000000000000010,0000000000000100,0000000000001000,0000000000010000,0000000000100000,0000000001000000,0000000010000000,0000000100000000,0000001000000000,0000010000000000,0000100000000000,0001000000000000,0010000000000000,0100000000000000,1000000000000000 + diff --git a/testcodes/dataio_dma230_tests/dataio_dma230_tests.c b/testcodes/dataio_dma230_tests/dataio_dma230_tests.c new file mode 100644 index 0000000000000000000000000000000000000000..dfa0d3c83075390b9de31fab08aa02c72c8530de --- /dev/null +++ b/testcodes/dataio_dma230_tests/dataio_dma230_tests.c @@ -0,0 +1,142 @@ +#include "CMSDK_CM0.h" +#include <string.h> +#include "uart_stdout.h" +#include <stdio.h> + +#include "dataio_functions.h" + +#include "dma_pl230_driver.h" +#include "dma_pl230_driver.c" + +#define CSV_RECORD_LEN (16+1) +#define CSV_RECORD_COUNT (5) + +static volatile dma_pl230_channel_data dataio_ip_chain[2]; +static volatile dma_pl230_channel_data dataio_op_chain[2]; + +int pl230_dma_detect(void); +int ID_Check(const unsigned int id_array[], unsigned int offset); + +// associate DMA channel numbers +#define DMA_CHAN_DATAIO_IP (3) +#define DMA_CHAN_DATAIO_OP (2) +#define DATA_UART ((CMSDK_UART_TypeDef *) CMSDK_UART1_BASE ) + +void dataio_ip_driver_dma8( uint32_t nbytes, uint8_t *input) +{ + int c = DMA_CHAN_DATAIO_IP; + +// program DMA transfers as single chains + + dataio_ip_chain[0].SrcEndPointer = DMA_PL230_PTR_END(&(DATA_UART->DATA),PL230_XFER_B,1); + dataio_ip_chain[0].DstEndPointer = DMA_PL230_PTR_END(input,PL230_XFER_B,nbytes); + dataio_ip_chain[0].Control = DMA_PL230_CTRL_SRCFIX(PL230_CTRL_CYCLE_BASIC,PL230_XFER_B,nbytes,PL230_CTRL_RPWR_1); + + dma_pl230_table->Primary[c].SrcEndPointer = DMA_PL230_PTR_END(&(dataio_ip_chain[0].SrcEndPointer), PL230_XFER_W, (1*4)); + dma_pl230_table->Primary[c].DstEndPointer = DMA_PL230_PTR_END(&(dma_pl230_table->Alternate[c]), PL230_XFER_W, (1*4)); + dma_pl230_table->Primary[c].Control = DMA_PL230_CTRL_DSTFIX(PL230_CTRL_CYCLE_DEV_CHAIN_PRI,PL230_XFER_W,(1*4),PL230_CTRL_RPWR_4); + + // enable DMA controller channels + DMA_PL230_DMAC->DMA_CFG = 0; /* Disable DMA controller for initialization */ + dma_pl230_init(1<<DMA_CHAN_DATAIO_IP); + + // test to ensure output DMA has started + while (!(dma_pl230_channel_active(1<<DMA_CHAN_DATAIO_IP))) + ; + while (dma_pl230_channel_active(1<<DMA_CHAN_DATAIO_IP)) + ; + DMA_PL230_DMAC->DMA_CFG = 0; /* Disable DMA controller for initialization */ + dma_pl230_init(0); // none active + return; +} + +void dataio_op_driver_dma8( uint32_t nbytes, uint8_t *result) +{ + int c = DMA_CHAN_DATAIO_OP; +// program DMA transfers as single chains + + dataio_op_chain[0].SrcEndPointer = DMA_PL230_PTR_END(result,PL230_XFER_B,nbytes); + dataio_op_chain[0].DstEndPointer = DMA_PL230_PTR_END(&(DATA_UART->DATA),PL230_XFER_B,1); + dataio_op_chain[0].Control = DMA_PL230_CTRL_DSTFIX(PL230_CTRL_CYCLE_BASIC,PL230_XFER_B,nbytes,PL230_CTRL_RPWR_1); + + dma_pl230_table->Primary[c].SrcEndPointer = DMA_PL230_PTR_END(&(dataio_op_chain[0].SrcEndPointer), PL230_XFER_W,(1*4)); + dma_pl230_table->Primary[c].DstEndPointer = DMA_PL230_PTR_END(&(dma_pl230_table->Alternate[c]), PL230_XFER_W,(1*4)); + dma_pl230_table->Primary[c].Control = DMA_PL230_CTRL_DSTFIX(PL230_CTRL_CYCLE_DEV_CHAIN_PRI,PL230_XFER_W,(1*4),PL230_CTRL_RPWR_4); + + // enable DMA controller channels + DMA_PL230_DMAC->DMA_CFG = 0; /* Disable DMA controller for initialization */ + dma_pl230_init(1<<DMA_CHAN_DATAIO_OP); + + // test to ensure output DMA has started + while (!(dma_pl230_channel_active(1<<DMA_CHAN_DATAIO_OP))) + ; + while (dma_pl230_channel_active(1<<DMA_CHAN_DATAIO_OP)) + ; + DMA_PL230_DMAC->DMA_CFG = 0; /* Disable DMA controller for initialization */ + dma_pl230_init(0); // none active + return; +} + + +int main(void) { + unsigned char ch; + char rx_buf[20]; + char tx_buf[20]; + char * p; + unsigned int rx_record_len; + unsigned int rx_record_count; + unsigned int rx_count; + unsigned int value; + unsigned int end_of_record ; + unsigned int end_of_data ; + + UartStdOutInit(); + printf("Data Channel CSV Reader/Writer using DMA230 (ASC binary -> Hex) tests\n"); + +// Reset DMA table structures + dma_pl230_data_struct_init(); // initialize + + DataIO_enable(); + + end_of_data = 0; + rx_record_len = CSV_RECORD_LEN - 1; // due to soft reset in testbench! + rx_record_count = CSV_RECORD_COUNT; // due to soft reset in testbench! + + do { // record at a time + dataio_ip_driver_dma8(rx_record_len, (uint8_t *)rx_buf); + rx_count = 0; + value = 0; + end_of_record = 0; + rx_record_len = CSV_RECORD_LEN; + p = rx_buf; + do { // parse process CSV entry + ch = *p++; + if (ch == '0') { value = (value << 1); rx_count++; } + if (ch == '1') { value = (value << 1) + 1; rx_count++; } + if (ch == ',') end_of_record = 1; + if ((ch == '\n') || (ch == '\r')) end_of_record = 1; +// if ((ch == '\n') || (ch == '\r')) end_of_data = (rx_count == 0) ? 1 : 0; + } while ((rx_count <= 16) && (end_of_record == 0) ); + if (ch == '\n') end_of_data = (rx_record_count-- > 1) ? 0 : 1 ; + if (rx_count > 0) { + if (ch == ',') + printf(","); // ',' per CSV record + else + printf(".\n"); // newline delimiter + + if (ch == ',') + sprintf(tx_buf,"0x%04x,", value); + else + sprintf(tx_buf,"0x%04x\n", value); + + tx_buf[8]=0; // string zero terminate + dataio_op_driver_dma8(7, (uint8_t *)tx_buf); + } + } while (end_of_data == 0); // outer record loop + + printf("** DATA FILE PROCESSING ** TEST PASSED **\n"); + + UartEndSimulation(); + return 0; + +} diff --git a/testcodes/dataio_dma230_tests/dataio_dma230_tests.hex b/testcodes/dataio_dma230_tests/dataio_dma230_tests.hex new file mode 100644 index 0000000000000000000000000000000000000000..909e9b59319a830997d934e67d4ee3ca2ca9349a --- /dev/null +++ b/testcodes/dataio_dma230_tests/dataio_dma230_tests.hex @@ -0,0 +1,3156 @@ +20 +06 +00 +30 +95 +05 +00 +00 +9D +05 +00 +00 +9F +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +A1 +05 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +A3 +05 +00 +00 +A5 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +A7 +05 +00 +00 +00 +F0 +02 +F8 +00 +F0 +4B +F8 +0C +A0 +30 +C8 +08 +38 +24 +18 +2D +18 +A2 +46 +67 +1E +AB +46 +54 +46 +5D +46 +AC +42 +01 +D1 +00 +F0 +3D +F8 +7E +46 +0F +3E +0F +CC +B6 +46 +01 +26 +33 +42 +00 +D0 +FB +1A +A2 +46 +AB +46 +33 +43 +18 +47 +28 +0B +00 +00 +48 +0B +00 +00 +10 +3A +02 +D3 +78 +C8 +78 +C1 +FA +D8 +52 +07 +01 +D3 +30 +C8 +30 +C1 +01 +D5 +04 +68 +0C +60 +70 +47 +00 +00 +00 +23 +00 +24 +00 +25 +00 +26 +10 +3A +01 +D3 +78 +C1 +FB +D8 +52 +07 +00 +D3 +30 +C1 +00 +D5 +0B +60 +70 +47 +10 +B5 +64 +29 +02 +D1 +00 +F0 +45 +FB +10 +BD +78 +29 +02 +D1 +00 +F0 +76 +FB +10 +BD +00 +20 +10 +BD +1F +B5 +1F +BD +10 +B5 +10 +BD +00 +F0 +ED +FC +11 +46 +FF +F7 +F7 +FF +00 +F0 +18 +F9 +00 +F0 +05 +FD +03 +B4 +FF +F7 +F2 +FF +03 +BC +00 +F0 +3B +FA +10 +B5 +B5 +4C +00 +21 +63 +68 +08 +46 +0A +01 +98 +50 +D2 +18 +50 +60 +90 +60 +10 +64 +50 +64 +90 +64 +49 +1C +04 +29 +F4 +DB +01 +20 +20 +60 +10 +BD +10 +B5 +AC +48 +00 +68 +C0 +02 +C0 +0E +40 +1C +42 +01 +10 +28 +01 +DD +A9 +48 +10 +E0 +08 +28 +01 +DD +A8 +48 +0C +E0 +04 +28 +01 +DD +FF +20 +08 +E0 +02 +28 +01 +DD +7F +20 +04 +E0 +01 +28 +01 +DD +3F +20 +00 +E0 +1F +20 +01 +21 +C9 +07 +00 +23 +00 +2B +01 +D0 +89 +18 +81 +43 +9A +4C +9E +A0 +61 +60 +00 +F0 +A5 +FA +00 +21 +63 +68 +08 +46 +0A +01 +98 +50 +D2 +18 +50 +60 +90 +60 +10 +64 +50 +64 +90 +64 +49 +1C +04 +29 +F4 +DB +01 +20 +20 +60 +10 +BD +70 +B5 +06 +46 +9B +A0 +00 +F0 +D7 +FB +8E +4C +25 +68 +E8 +02 +C1 +0E +9D +A0 +49 +1C +00 +F0 +87 +FA +28 +06 +01 +0F +A2 +A0 +00 +F0 +82 +FA +E9 +07 +C9 +0F +A7 +A0 +00 +F0 +7D +FA +20 +68 +00 +06 +00 +0F +14 +D0 +08 +28 +12 +D0 +09 +28 +10 +D0 +AA +A0 +00 +F0 +BA +FB +20 +68 +00 +06 +05 +0F +28 +06 +01 +0F +96 +A0 +00 +F0 +6A +FA +00 +2D +03 +D0 +08 +2D +01 +D0 +09 +2D +F1 +D1 +00 +20 +60 +60 +76 +48 +40 +68 +A0 +60 +00 +20 +C0 +43 +E0 +62 +0F +20 +60 +63 +30 +40 +A0 +62 +A0 +61 +00 +2E +01 +D0 +01 +20 +60 +60 +70 +BD +70 +B5 +6E +4D +06 +46 +28 +68 +00 +28 +01 +D1 +FF +F7 +6A +FF +6B +4C +02 +E0 +93 +A0 +00 +F0 +8D +FB +20 +68 +00 +06 +01 +0F +03 +D0 +08 +29 +01 +D0 +09 +29 +F4 +D1 +00 +20 +60 +60 +68 +68 +A0 +60 +0F +20 +E0 +62 +60 +63 +30 +40 +A0 +62 +A0 +61 +02 +20 +28 +60 +00 +2E +01 +D0 +01 +20 +60 +60 +70 +BD +5C +49 +89 +6A +00 +07 +00 +0F +08 +40 +70 +47 +70 +B5 +8C +4A +8A +4B +13 +60 +09 +18 +49 +1E +51 +60 +40 +1E +80 +05 +89 +49 +80 +0C +40 +18 +90 +60 +52 +48 +11 +46 +40 +68 +0C +31 +01 +63 +01 +46 +7C +31 +41 +63 +84 +49 +81 +63 +4E +4D +00 +24 +6C +60 +08 +20 +FF +F7 +B7 +FF +08 +20 +FF +F7 +DA +FF +00 +28 +FA +D0 +08 +20 +FF +F7 +D5 +FF +00 +28 +FA +D1 +6C +60 +FF +F7 +AA +FF +70 +BD +0A +18 +70 +B5 +76 +49 +20 +31 +52 +1E +0A +60 +73 +4A +4A +60 +40 +1E +80 +05 +75 +4A +80 +0C +80 +18 +88 +60 +3C +48 +0C +31 +40 +68 +01 +62 +01 +46 +6C +31 +41 +62 +6E +49 +81 +62 +38 +4D +00 +24 +6C +60 +04 +20 +FF +F7 +8C +FF +04 +20 +FF +F7 +AF +FF +00 +28 +FA +D0 +04 +20 +FF +F7 +AA +FF +00 +28 +FA +D1 +6C +60 +FF +F7 +7F +FF +70 +BD +F0 +B5 +8B +B0 +00 +F0 +28 +F9 +63 +48 +00 +F0 +C9 +F9 +FF +F7 +E7 +FE +00 +F0 +7F +F9 +00 +27 +10 +26 +05 +25 +05 +A9 +30 +46 +FF +F7 +98 +FF +00 +21 +0C +46 +0B +46 +11 +26 +05 +AA +10 +78 +52 +1C +30 +28 +0E +D0 +31 +28 +0F +D0 +2C +28 +11 +D0 +0A +28 +0F +D0 +0D +28 +0D +D0 +10 +29 +01 +D8 +00 +2B +EF +D0 +0A +28 +09 +D0 +0F +E0 +64 +00 +49 +1C +F5 +E7 +64 +00 +49 +1C +64 +1C +F1 +E7 +01 +23 +EF +E7 +2A +46 +6D +1E +01 +2A +01 +D8 +01 +27 +00 +E0 +00 +27 +00 +29 +0F +D0 +2C +28 +17 +D0 +47 +A0 +00 +F0 +8F +F9 +22 +46 +46 +A1 +68 +46 +00 +F0 +98 +F9 +00 +20 +69 +46 +08 +72 +07 +20 +FF +F7 +89 +FF +00 +2F +BF +D0 +42 +A0 +00 +F0 +7F +F9 +00 +F0 +25 +F9 +00 +20 +0B +B0 +F0 +BD +49 +A0 +00 +F0 +77 +F9 +22 +46 +48 +A1 +E6 +E7 +00 +00 +00 +30 +00 +F0 +00 +40 +FF +03 +00 +00 +FF +01 +00 +00 +64 +6D +61 +20 +73 +74 +72 +75 +63 +74 +75 +72 +65 +20 +62 +6C +6F +63 +6B +20 +61 +64 +64 +72 +65 +73 +73 +20 +3D +20 +25 +78 +0A +00 +00 +00 +49 +6E +69 +74 +69 +61 +6C +69 +7A +65 +20 +50 +4C +32 +33 +30 +00 +00 +00 +00 +2D +20 +23 +20 +6F +66 +20 +63 +68 +61 +6E +6E +65 +6C +73 +20 +61 +6C +6C +6F +77 +65 +64 +20 +3A +20 +25 +64 +0A +00 +00 +00 +2D +20 +43 +75 +72 +72 +65 +6E +74 +20 +73 +74 +61 +74 +75 +73 +20 +20 +20 +20 +20 +20 +20 +20 +3A +20 +25 +78 +0A +00 +00 +00 +2D +20 +43 +75 +72 +72 +65 +6E +74 +20 +6D +61 +73 +74 +65 +72 +20 +65 +6E +61 +62 +6C +65 +20 +3A +20 +25 +78 +0A +00 +00 +00 +2D +20 +77 +61 +69 +74 +20 +66 +6F +72 +20 +44 +4D +41 +20 +49 +44 +4C +45 +2F +53 +54 +41 +4C +4C +45 +44 +2F +44 +4F +4E +45 +00 +00 +00 +00 +00 +50 +00 +40 +80 +01 +00 +30 +09 +00 +24 +0C +3E +80 +24 +EA +09 +00 +24 +C0 +DC +0B +00 +00 +2E +0A +00 +00 +30 +78 +25 +30 +34 +78 +0A +00 +2A +2A +20 +44 +41 +54 +41 +20 +46 +49 +4C +45 +20 +50 +52 +4F +43 +45 +53 +53 +49 +4E +47 +20 +2A +2A +20 +54 +45 +53 +54 +20 +50 +41 +53 +53 +45 +44 +20 +2A +2A +0A +00 +00 +2C +00 +00 +00 +30 +78 +25 +30 +34 +78 +2C +00 +04 +49 +03 +48 +08 +60 +70 +47 +02 +49 +01 +48 +08 +60 +70 +47 +00 +1C +4E +0E +08 +00 +00 +30 +07 +48 +80 +47 +07 +48 +00 +47 +FE +E7 +FE +E7 +FE +E7 +FE +E7 +FE +E7 +FE +E7 +04 +48 +05 +49 +05 +4A +06 +4B +70 +47 +00 +00 +85 +05 +00 +00 +C1 +00 +00 +00 +20 +02 +00 +30 +20 +06 +00 +30 +20 +04 +00 +30 +20 +04 +00 +30 +10 +B5 +C0 +B2 +00 +F0 +36 +F8 +10 +BD +10 +B5 +00 +F0 +41 +F8 +00 +F0 +30 +F8 +10 +BD +00 +20 +C0 +43 +70 +47 +10 +B5 +C0 +B2 +00 +F0 +28 +F8 +10 +BD +FE +E7 +27 +48 +00 +21 +81 +60 +27 +49 +01 +61 +01 +21 +81 +60 +26 +48 +03 +21 +01 +61 +81 +60 +25 +49 +20 +20 +88 +61 +70 +47 +25 +48 +23 +49 +01 +60 +24 +49 +81 +61 +01 +21 +C1 +60 +C3 +21 +81 +60 +01 +69 +C9 +07 +FC +D0 +1D +49 +20 +20 +88 +61 +1A +48 +00 +21 +81 +60 +30 +21 +01 +61 +03 +21 +81 +60 +70 +47 +16 +49 +8A +68 +D2 +07 +04 +D0 +4A +68 +D2 +07 +FC +D1 +08 +60 +70 +47 +10 +4A +53 +68 +DB +07 +FC +D1 +10 +60 +F7 +E7 +0D +48 +0E +49 +42 +68 +4B +68 +92 +07 +D2 +17 +9B +07 +DB +17 +52 +1C +5B +1C +1A +42 +F5 +D1 +42 +68 +92 +07 +01 +D5 +00 +68 +03 +E0 +48 +68 +80 +07 +01 +D5 +08 +68 +C0 +B2 +70 +47 +04 +20 +FF +F7 +D7 +FF +FE +E7 +00 +60 +00 +40 +6A +18 +00 +00 +00 +E0 +00 +40 +00 +10 +01 +40 +8E +0C +01 +00 +00 +20 +00 +40 +24 +F4 +00 +00 +20 +49 +03 +20 +88 +60 +00 +20 +70 +47 +1E +48 +00 +21 +81 +60 +03 +21 +81 +60 +00 +20 +70 +47 +1A +48 +40 +68 +C0 +07 +C0 +17 +40 +1C +70 +47 +17 +48 +40 +68 +C0 +07 +C0 +0F +70 +47 +00 +B5 +01 +46 +FF +F7 +F7 +FF +00 +28 +FB +D1 +12 +48 +01 +60 +08 +46 +00 +BD +00 +B5 +02 +46 +13 +78 +00 +2B +02 +D0 +18 +46 +FF +F7 +EE +FF +52 +1C +00 +2B +F6 +D1 +00 +BD +0A +48 +40 +68 +80 +07 +C0 +0F +70 +47 +07 +48 +40 +68 +80 +07 +C0 +17 +40 +1C +70 +47 +00 +B5 +FF +F7 +F7 +FF +00 +28 +FB +D1 +02 +48 +00 +68 +C0 +B2 +00 +BD +00 +00 +00 +50 +00 +40 +70 +47 +00 +00 +0F +B4 +05 +49 +10 +B5 +03 +AA +02 +98 +00 +F0 +D1 +F9 +10 +BC +08 +BC +04 +B0 +18 +47 +00 +00 +0C +00 +00 +30 +0F +B4 +1C +B5 +07 +4B +06 +AA +7B +44 +69 +46 +00 +90 +05 +98 +00 +F0 +A7 +F9 +00 +20 +69 +46 +00 +F0 +B6 +F9 +1C +BC +08 +BC +04 +B0 +18 +47 +7D +03 +00 +00 +70 +B5 +04 +46 +85 +69 +00 +68 +C1 +06 +01 +D5 +30 +26 +00 +E0 +20 +26 +C0 +07 +07 +D0 +70 +BD +62 +68 +30 +46 +A1 +68 +90 +47 +20 +6A +40 +1C +20 +62 +6D +1E +F6 +D5 +70 +BD +70 +B5 +04 +46 +85 +69 +00 +78 +C0 +07 +07 +D1 +70 +BD +62 +68 +A1 +68 +20 +20 +90 +47 +20 +6A +40 +1C +20 +62 +6D +1E +F6 +D5 +70 +BD +00 +00 +F7 +B5 +00 +25 +75 +29 +10 +68 +00 +99 +14 +A6 +11 +D0 +C0 +46 +C0 +46 +00 +28 +02 +DA +40 +42 +11 +A6 +08 +E0 +00 +99 +09 +68 +8A +07 +01 +D5 +0F +A6 +02 +E0 +49 +07 +04 +D5 +0E +A6 +01 +25 +01 +E0 +C0 +46 +C0 +46 +00 +9F +00 +24 +24 +37 +04 +E0 +00 +F0 +81 +F9 +30 +31 +39 +55 +64 +1C +00 +28 +F8 +D1 +2B +46 +32 +46 +21 +46 +00 +98 +00 +F0 +EB +F8 +FE +BD +00 +00 +00 +00 +00 +00 +2D +00 +00 +00 +2B +00 +00 +00 +20 +00 +00 +00 +70 +B5 +04 +46 +0D +46 +21 +46 +10 +68 +C0 +46 +C0 +46 +21 +88 +09 +05 +02 +D5 +0F +4A +7A +44 +02 +E0 +0E +4A +7A +44 +0E +32 +23 +46 +00 +21 +24 +33 +05 +E0 +06 +07 +00 +09 +36 +0F +96 +5D +5E +54 +49 +1C +00 +28 +F7 +D1 +20 +78 +00 +23 +00 +07 +05 +D5 +70 +2D +03 +D0 +00 +29 +01 +D0 +02 +23 +11 +32 +20 +46 +00 +F0 +B8 +F8 +70 +BD +4C +03 +00 +00 +F3 +B5 +04 +46 +00 +20 +81 +B0 +20 +62 +20 +46 +E1 +68 +88 +47 +00 +28 +7D +D0 +25 +28 +02 +D0 +62 +68 +A1 +68 +83 +E0 +45 +4F +00 +25 +7F +44 +20 +46 +E1 +68 +88 +47 +20 +28 +06 +46 +08 +DB +31 +2E +06 +D2 +B8 +19 +20 +38 +00 +78 +00 +28 +01 +D0 +05 +43 +F0 +E7 +A8 +07 +01 +D5 +04 +20 +85 +43 +00 +20 +E0 +61 +07 +46 +A0 +61 +2A +2E +0A +D0 +30 +46 +00 +F0 +52 +F9 +00 +28 +27 +D0 +B8 +00 +00 +19 +30 +3E +00 +90 +86 +61 +19 +E0 +02 +98 +BA +00 +12 +19 +02 +C8 +91 +61 +02 +90 +20 +46 +E1 +68 +88 +47 +01 +2F +06 +46 +17 +D1 +E0 +69 +00 +28 +1F +DA +20 +20 +85 +43 +1C +E0 +00 +98 +0A +21 +80 +69 +48 +43 +00 +99 +80 +19 +30 +38 +88 +61 +20 +46 +E1 +68 +88 +47 +06 +46 +00 +F0 +2A +F9 +00 +28 +EF +D1 +01 +2F +0A +D0 +2E +2E +08 +D1 +20 +46 +E1 +68 +88 +47 +06 +46 +20 +20 +05 +43 +7F +1C +02 +2F +C3 +DB +A0 +69 +00 +28 +03 +DA +40 +42 +A0 +61 +01 +20 +05 +43 +E8 +07 +01 +D0 +10 +20 +85 +43 +00 +2E +24 +D0 +30 +46 +41 +38 +19 +28 +03 +D8 +01 +20 +C0 +02 +05 +43 +20 +36 +20 +46 +25 +60 +31 +46 +02 +9A +15 +46 +FF +F7 +D3 +FB +00 +28 +0C +D0 +01 +28 +07 +D0 +ED +1D +E8 +08 +00 +E0 +0D +E0 +C0 +00 +08 +30 +02 +90 +77 +E7 +2D +1D +02 +95 +74 +E7 +62 +68 +30 +46 +A1 +68 +90 +47 +20 +6A +40 +1C +6C +E7 +20 +6A +FE +BD +00 +00 +10 +03 +00 +00 +10 +B5 +04 +46 +03 +E0 +FF +F7 +FB +FD +40 +1C +08 +D0 +20 +78 +05 +49 +64 +1C +00 +28 +F6 +D1 +0A +20 +FF +F7 +F1 +FD +10 +BD +00 +20 +C0 +43 +10 +BD +00 +00 +0C +00 +00 +30 +70 +47 +70 +47 +70 +47 +FF +B5 +04 +46 +0D +46 +81 +B0 +24 +30 +00 +90 +21 +68 +88 +06 +04 +D5 +10 +22 +E0 +69 +91 +43 +21 +60 +00 +E0 +01 +20 +A8 +42 +01 +DD +47 +1B +00 +E0 +00 +27 +04 +98 +A1 +69 +7A +19 +10 +18 +08 +1A +A0 +61 +20 +78 +C0 +06 +02 +D4 +20 +46 +FF +F7 +A1 +FE +00 +26 +08 +E0 +03 +98 +62 +68 +A1 +68 +80 +5D +90 +47 +20 +6A +40 +1C +76 +1C +20 +62 +04 +98 +86 +42 +F3 +DB +20 +78 +C0 +06 +0A +D5 +20 +46 +FF +F7 +8D +FE +06 +E0 +62 +68 +A1 +68 +30 +20 +90 +47 +20 +6A +40 +1C +20 +62 +38 +46 +7F +1E +00 +28 +F4 +DC +07 +E0 +00 +98 +62 +68 +A1 +68 +40 +5D +90 +47 +20 +6A +40 +1C +20 +62 +28 +46 +6D +1E +00 +28 +F3 +DC +20 +46 +FF +F7 +87 +FE +20 +78 +00 +06 +02 +D5 +02 +20 +05 +B0 +F0 +BD +01 +20 +FB +E7 +00 +00 +01 +69 +4A +1C +02 +61 +08 +78 +70 +47 +00 +B5 +8F +B0 +02 +91 +00 +21 +05 +91 +05 +49 +01 +93 +79 +44 +03 +91 +11 +46 +04 +90 +68 +46 +FF +F7 +DF +FE +0F +B0 +00 +BD +00 +00 +E5 +FF +FF +FF +0A +68 +10 +70 +52 +1C +0A +60 +70 +47 +00 +00 +08 +4B +70 +B5 +0D +46 +7B +44 +FF +F7 +E1 +FF +04 +46 +28 +46 +FF +F7 +71 +FD +00 +28 +02 +D0 +00 +20 +C0 +43 +70 +BD +20 +46 +70 +BD +00 +00 +D7 +FA +FF +FF +01 +46 +80 +08 +08 +1A +02 +09 +10 +18 +02 +0A +10 +18 +02 +0C +10 +18 +C0 +08 +82 +00 +12 +18 +52 +00 +89 +1A +01 +E0 +40 +1C +0A +39 +0A +29 +FB +D2 +70 +47 +75 +46 +00 +F0 +25 +F8 +AE +46 +05 +00 +69 +46 +53 +46 +C0 +08 +C0 +00 +85 +46 +18 +B0 +20 +B5 +FF +F7 +28 +FD +60 +BC +00 +27 +49 +08 +B6 +46 +00 +26 +C0 +C5 +C0 +C5 +C0 +C5 +C0 +C5 +C0 +C5 +C0 +C5 +C0 +C5 +C0 +C5 +40 +3D +49 +00 +8D +46 +70 +47 +10 +B5 +04 +46 +C0 +46 +C0 +46 +20 +46 +FF +F7 +F4 +FA +10 +BD +00 +00 +00 +48 +70 +47 +C0 +01 +00 +30 +30 +38 +0A +28 +01 +D2 +01 +20 +70 +47 +00 +20 +70 +47 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +41 +42 +43 +44 +45 +46 +40 +30 +58 +00 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +61 +62 +63 +64 +65 +66 +40 +30 +78 +00 +04 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +02 +00 +01 +00 +00 +10 +00 +44 +61 +74 +61 +20 +43 +68 +61 +6E +6E +65 +6C +20 +43 +53 +56 +20 +52 +65 +61 +64 +65 +72 +2F +57 +72 +69 +74 +65 +72 +20 +75 +73 +69 +6E +67 +20 +44 +4D +41 +32 +33 +30 +20 +28 +41 +53 +43 +20 +62 +69 +6E +61 +72 +79 +20 +2D +3E +20 +48 +65 +78 +29 +20 +74 +65 +73 +74 +73 +0A +00 +00 +44 +0C +00 +00 +00 +00 +00 +30 +10 +00 +00 +00 +04 +01 +00 +00 +54 +0C +00 +00 +10 +00 +00 +30 +10 +06 +00 +00 +20 +01 +00 +00 +00 +00 +00 +00 +00 +01 +00 +30 +00 +1C +4E +0E +00 +00 +00 +00 diff --git a/testcodes/dataio_dma230_tests/dataio_functions.c b/testcodes/dataio_dma230_tests/dataio_functions.c new file mode 100644 index 0000000000000000000000000000000000000000..716f091b952b56edeaa76ea1d2c347bc00231fe3 --- /dev/null +++ b/testcodes/dataio_dma230_tests/dataio_functions.c @@ -0,0 +1,84 @@ +//----------------------------------------------------------------------------- +// customised Cortex-M0 'nanosoc' controller +// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. +// +// Contributors +// +// David Flynn (d.w.flynn@soton.ac.uk) +// +// Copyright (c) 2025 SoC Labs (www.soclabs.org) +//----------------------------------------------------------------------------- + +#include "CMSDK_CM0.h" + +#define DATA_UART ((CMSDK_UART_TypeDef *) CMSDK_UART1_BASE ) + +#define UART_STATE_TXFULL CMSDK_UART_STATE_TXBF_Msk +#define UART_STATE_RXFULL CMSDK_UART_STATE_RXBF_Msk + +#define UART_CTRL_TXEN CMSDK_UART_CTRL_TXEN_Msk +#define UART_CTRL_RXEN CMSDK_UART_CTRL_RXEN_Msk +#define UART_CTRL_TXRXEN (CMSDK_UART_CTRL_TXEN_Msk + CMSDK_UART_CTRL_RXEN_Msk) +#define UART_CTRL_TXIRQEN (CMSDK_UART_CTRL_TXIRQEN_Msk + UART_CTRL_TXRXEN) +#define UART_CTRL_RXIRQEN (CMSDK_UART_CTRL_RXIRQEN_Msk + UART_CTRL_TXRXEN) + + +unsigned int DataIO_enable(void) { +// DATA_UART->CTRL = 0x00; // re-initialise/flush + DATA_UART->CTRL = UART_CTRL_TXRXEN; // enble TX and RX + return(0); +} + +unsigned int DataIO_init(void) { + DATA_UART->CTRL = 0x00; // re-initialise/flush + DATA_UART->CTRL = UART_CTRL_TXRXEN; // enble TX and RX + return(0); +} + +// Output ready check +unsigned int DataIO_putc_ready(void) { + return((DATA_UART->STATE & UART_STATE_TXFULL) == 0); // ready if TXBUF empty +} + +// Output Busy check +unsigned int DataIO_putc_busy(void) { + return((DATA_UART->STATE & UART_STATE_TXFULL) != 0); // busy if TXBUF full +} + +// Output a character +unsigned char DataIO_putc(unsigned char my_ch) { + while (DataIO_putc_busy()) ; // busy wait + DATA_UART->DATA = my_ch; // output the character + return (my_ch); +} + + +// Output a (zero-terminated) string +void DataIO_puts(unsigned char * mytext) { + unsigned char string_ch; + do { + string_ch = *mytext; + if (string_ch != (char) 0x0) { + DataIO_putc(string_ch); // Normal data + } + *mytext++; + } while (string_ch != 0); + return; +} + +// Input ready check +unsigned int DataIO_getc_ready(void) { + return((DATA_UART->STATE & UART_STATE_RXFULL) != 0); // ready if RXBUF set +} + + +// Input Busy check +unsigned int DataIO_getc_busy(void) { + return((DATA_UART->STATE & UART_STATE_RXFULL) == 0); // busy if RXBUF not set +} + +// Input a character +unsigned char DataIO_getc(void) { + while (DataIO_getc_busy()) ; // busy wait + return (DATA_UART->DATA); +} diff --git a/testcodes/dataio_dma230_tests/dataio_functions.h b/testcodes/dataio_dma230_tests/dataio_functions.h new file mode 100644 index 0000000000000000000000000000000000000000..9d49f950a8e6f3202abd54f6623ff1ae17be3460 --- /dev/null +++ b/testcodes/dataio_dma230_tests/dataio_functions.h @@ -0,0 +1,69 @@ +//----------------------------------------------------------------------------- +// customised Cortex-M0 'nanosoc' controller +// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. +// +// Contributors +// +// David Flynn (d.w.flynn@soton.ac.uk) +// +// Copyright (c) 2025 SoC Labs (www.soclabs.org) +//----------------------------------------------------------------------------- + +// IO enable +extern unsigned int DataIO_enable(void); +extern unsigned int DataIO_init(void); + +// Output ready check +extern unsigned char DataIO_putc_ready(void); + +// Output busy check +extern unsigned int DataIO_putc_busy(void); + +// Output a character +extern unsigned char DataIO_putc(unsigned char my_ch); + +// DataIO string output +extern void DataIO_puts(unsigned char * mytext); + +// Input ready check +extern unsigned int DataIO_getc_ready(void); + +// Input busy check +extern unsigned int DataIO_getc_busy(void); + +// Input a character +extern unsigned char DataIO_getc(void); + +/* example usage + +#include "CMSDK_CM0.h" +#include <string.h> +#include "uart_stdout.h" +#include <stdio.h> + +#include "DataIO_functions.h" + +int main(void) { + unsigned char ch; + char tx_buf[32]; + + + UartStdOutInit(); // console channel init + printf("Data Channel CSV Reader/Writer (ASC binary -> Hex) tests\n"); + DataIO_init(); // datachannel init + do { // rx process CSV entry + if (DataIO_getc_ready()) { + ch = DataIO_Getc(); + // ... + } + + DataIO_puts((unsigned char*) tx_buf); + + do { // tx process + if (DataIO_putc_ready()) { + DataIO_putc(tx_buf[<i>]); + } + +*/ + + diff --git a/testcodes/dataio_dma230_tests/makefile b/testcodes/dataio_dma230_tests/makefile new file mode 100644 index 0000000000000000000000000000000000000000..3f00c77513120faa17e2301e390d061bfe2dff2d --- /dev/null +++ b/testcodes/dataio_dma230_tests/makefile @@ -0,0 +1,259 @@ +#----------------------------------------------------------------------------- +# The confidential and proprietary information contained in this file may +# only be used by a person authorised under and to the extent permitted +# by a subsisting licensing agreement from Arm Limited or its affiliates. +# +# (C) COPYRIGHT 2010-2013 Arm Limited or its affiliates. +# ALL RIGHTS RESERVED +# +# This entire notice must be reproduced on all copies of this file +# and copies of this file may only be made by a person if such person is +# permitted to do so under the terms of a subsisting license agreement +# from Arm Limited or its affiliates. +# +# SVN Information +# +# Checked In : $Date: 2017-10-10 15:55:38 +0100 (Tue, 10 Oct 2017) $ +# +# Revision : $Revision: 371321 $ +# +# Release Information : Cortex-M System Design Kit-r1p1-00rel0 +#----------------------------------------------------------------------------- +# +# Cortex-M System Design Kit software compilation make file +# +#----------------------------------------------------------------------------- +# +# Configurations +# +# Choose the core instantiated, can be +# - CORTEX_M0 +# - CORTEX_M0PLUS +CPU_PRODUCT = CORTEX_M0 + +# Shared software directory +SOFTWARE_DIR = $(SOCLABS_NANOSOC_TECH_DIR)/software +CMSIS_DIR = $(SOFTWARE_DIR)/cmsis +CORE_DIR = $(CMSIS_DIR)/CMSIS/Include + +ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS) + DEVICE_DIR = $(CMSIS_DIR)/Device/ARM/CMSDK_CM0plus +else + DEVICE_DIR = $(CMSIS_DIR)/Device/ARM/CMSDK_CM0 +endif + +# Program file +TESTNAME = dataio_dma230_tests + +# Endian Option +COMPILE_BIGEND = 0 + +# Configuration +ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS) + USER_DEFINE = -DCORTEX_M0PLUS +else + USER_DEFINE = -DCORTEX_M0 +endif + +DEPS_LIST = makefile + +# Tool chain : ds5 / gcc / keil +TOOL_CHAIN = ds5 + +ifeq ($(TOOL_CHAIN),ds5) + ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS) + CPU_TYPE = --cpu Cortex-M0plus + else + CPU_TYPE = --cpu Cortex-M0 + endif +endif + +ifeq ($(TOOL_CHAIN),gcc) + ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS) + CPU_TYPE = -mcpu=cortex-m0plus + else + CPU_TYPE = -mcpu=cortex-m0 + endif +endif + +# Startup code directory for DS-5 +ifeq ($(TOOL_CHAIN),ds5) + STARTUP_DIR = $(DEVICE_DIR)/Source/ARM +endif + +# Startup code directory for gcc +ifeq ($(TOOL_CHAIN),gcc) + STARTUP_DIR = $(DEVICE_DIR)/Source/GCC +endif + +ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS) + STARTUP_FILE = startup_CMSDK_CM0plus + SYSTEM_FILE = system_CMSDK_CM0plus +else + STARTUP_FILE = startup_CMSDK_CM0 + SYSTEM_FILE = system_CMSDK_CM0 +endif + +# --------------------------------------------------------------------------------------- +# DS-5 options + +# MicroLIB option +COMPILE_MICROLIB = 0 + +# Small Multiply (Cortex-M0/M0+ has small multiplier option) +COMPILE_SMALLMUL = 0 + +ARM_CC_OPTIONS = -c -O3 -Ospace -I $(DEVICE_DIR)/Include -I $(CORE_DIR) \ + -I $(SOFTWARE_DIR)/common/retarget -I $(SOFTWARE_DIR)/drivers $(USER_DEFINE) +ARM_ASM_OPTIONS = +ARM_LINK_OPTIONS = "--keep=$(STARTUP_FILE).o(RESET)" "--first=$(STARTUP_FILE).o(RESET)" \ + --no_debug --rw_base 0x30000000 --ro_base 0x00000000 --map --info sizes + +ifeq ($(COMPILE_BIGEND),1) + # Big Endian + ARM_CC_OPTIONS += --bigend + ARM_ASM_OPTIONS += --bigend + ARM_LINK_OPTIONS += --be8 +endif + +ifeq ($(COMPILE_MICROLIB),1) + # MicroLIB + ARM_CC_OPTIONS += --library_type=microlib + ARM_ASM_OPTIONS += --library_type=microlib --pd "__MICROLIB SETA 1" + ARM_LINK_OPTIONS += --library_type=microlib +endif + +ifeq ($(COMPILE_SMALLMUL),1) + # In Cortex-M0, small multiply takes 32 cycles + ARM_CC_OPTIONS += --multiply_latency=32 +endif + +# --------------------------------------------------------------------------------------- +# gcc options + +GNG_CC = arm-none-eabi-gcc +GNU_OBJDUMP = arm-none-eabi-objdump +GNU_OBJCOPY = arm-none-eabi-objcopy + +LINKER_SCRIPT_PATH = $(SOFTWARE_DIR)/common/scripts +LINKER_SCRIPT = $(LINKER_SCRIPT_PATH)/cmsdk_cm0.ld + +GNU_CC_FLAGS = -g -O3 -mthumb $(CPU_TYPE) + +ifeq ($(COMPILE_BIGEND),1) + # Big Endian + GNU_CC_FLAGS += -mbig-endian +endif + +# --------------------------------------------------------------------------------------- +all: all_$(TOOL_CHAIN) + +# --------------------------------------------------------------------------------------- +# DS-5 +all_ds5 : $(TESTNAME).hex $(TESTNAME).lst $(TESTNAME).bin + +$(TESTNAME).o : $(TESTNAME).c $(DEPS_LIST) + armcc $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@ + +dma_pl230_driver.o : $(SOFTWARE_DIR)/drivers/dma_pl230_driver.c $(DEPS_LIST) + armcc $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@ + +dataio_functions.o : dataio_functions.c dataio_functions.h $(DEPS_LIST) + armcc $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@ + +$(SYSTEM_FILE).o : $(DEVICE_DIR)/Source/$(SYSTEM_FILE).c $(DEPS_LIST) + armcc $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@ + +retarget.o : $(SOFTWARE_DIR)/common/retarget/retarget.c $(DEPS_LIST) + armcc $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@ + +uart_stdout.o : $(SOFTWARE_DIR)/common/retarget/uart_stdout.c $(DEPS_LIST) + armcc $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@ + +$(STARTUP_FILE).o : $(STARTUP_DIR)/$(STARTUP_FILE).s $(DEPS_LIST) + armasm $(ARM_ASM_OPTIONS) $(CPU_TYPE) $< -o $@ + +$(TESTNAME).ELF : $(TESTNAME).o $(SYSTEM_FILE).o $(STARTUP_FILE).o dataio_functions.o retarget.o uart_stdout.o + armlink $(ARM_LINK_OPTIONS) -o $@ $(TESTNAME).o $(SYSTEM_FILE).o $(STARTUP_FILE).o retarget.o uart_stdout.o dataio_functions.o + +$(TESTNAME).hex : $(TESTNAME).ELF + fromelf --vhx --8x1 $< --output $@ + +$(TESTNAME).bin : $(TESTNAME).ELF + fromelf --bin $< --output $@ + +$(TESTNAME).lst : $(TESTNAME).ELF + fromelf -c -d -e -s -z -v $< --output $@ + +# --------------------------------------------------------------------------------------- +# gcc +all_gcc: + $(GNG_CC) $(GNU_CC_FLAGS) $(STARTUP_DIR)/$(STARTUP_FILE).s \ + $(TESTNAME).c \ + $(SOFTWARE_DIR)/common/retarget/retarget.c \ + $(SOFTWARE_DIR)/common/retarget/uart_stdout.c \ + $(DEVICE_DIR)/Source/$(SYSTEM_FILE).c \ + -I $(DEVICE_DIR)/Include -I $(CORE_DIR) \ + -I $(SOFTWARE_DIR)/common/retarget \ + -I $(SOFTWARE_DIR)/drivers \ + -L $(LINKER_SCRIPT_PATH) \ + -D__STACK_SIZE=0x200 \ + -D__HEAP_SIZE=0x1000 \ + $(USER_DEFINE) -T $(LINKER_SCRIPT) -o $(TESTNAME).o + # Generate disassembly code + $(GNU_OBJDUMP) -S $(TESTNAME).o > $(TESTNAME).lst + # Generate binary file + $(GNU_OBJCOPY) -S $(TESTNAME).o -O binary $(TESTNAME).bin + # Generate hex file + $(GNU_OBJCOPY) -S $(TESTNAME).o -O verilog $(TESTNAME).hex + +# Note: +# If the version of object copy you are using does not support verilog hex file output, +# you can generate the hex file from binary file using the following command +# od -v -A n -t x1 --width=1 $(TESTNAME).bin > $(TESTNAME).hex + + +# --------------------------------------------------------------------------------------- +# Keil MDK + +all_keil: + @echo "Please compile your project code and press ENTER when ready" + @read dummy + +# --------------------------------------------------------------------------------------- +# Binary + +all_bin: $(TESTNAME).bin + # Generate hex file from binary + od -v -A n -t x1 --width=1 $(TESTNAME).bin > $(TESTNAME).hex + +# --------------------------------------------------------------------------------------- +# Clean +clean : + @rm -rf *.o + @if [ -e $(TESTNAME).hex ] ; then \ + rm -rf $(TESTNAME).hex ; \ + fi + @if [ -e $(TESTNAME).lst ] ; then \ + rm -rf $(TESTNAME).lst ; \ + fi + @if [ -e $(TESTNAME).ELF ] ; then \ + rm -rf $(TESTNAME).ELF ; \ + fi + @if [ -e $(TESTNAME).bin ] ; then \ + rm -rf $(TESTNAME).bin ; \ + fi + @rm -rf *.crf + @rm -rf *.plg + @rm -rf *.tra + @rm -rf *.htm + @rm -rf *.map + @rm -rf *.dep + @rm -rf *.d + @rm -rf *.lnp + @rm -rf *.bak + @rm -rf *.lst + @rm -rf *.axf + @rm -rf *.sct + @rm -rf *.__i + @rm -rf *._ia diff --git a/testcodes/dataio_tests/dataio_functions.c b/testcodes/dataio_tests/dataio_functions.c index ade2e12ee35c2b9902be93a731f886a0aae7b89f..716f091b952b56edeaa76ea1d2c347bc00231fe3 100644 --- a/testcodes/dataio_tests/dataio_functions.c +++ b/testcodes/dataio_tests/dataio_functions.c @@ -24,7 +24,7 @@ unsigned int DataIO_enable(void) { - DATA_UART->CTRL = 0x00; // re-initialise/flush +// DATA_UART->CTRL = 0x00; // re-initialise/flush DATA_UART->CTRL = UART_CTRL_TXRXEN; // enble TX and RX return(0); } diff --git a/testcodes/dataio_tests/dataio_tests.hex b/testcodes/dataio_tests/dataio_tests.hex index 68a237a52d1c19c1703ffb4f6697313c5917db6f..85dd1772dc4bfc7466953a45420cc6b3e2e88bff 100644 --- a/testcodes/dataio_tests/dataio_tests.hex +++ b/testcodes/dataio_tests/dataio_tests.hex @@ -250,11 +250,11 @@ AB 43 18 47 -48 +44 07 00 00 -68 +64 07 00 00 @@ -322,7 +322,7 @@ B5 D1 00 F0 -D9 +D7 F9 10 BD @@ -340,7 +340,7 @@ B5 BD 00 F0 -26 +24 FB 11 46 @@ -354,7 +354,7 @@ F0 F8 00 F0 -3E +3C FB 03 B4 @@ -382,11 +382,11 @@ F8 A0 00 F0 -71 +6F F9 00 F0 -2E +2C F9 00 20 @@ -400,7 +400,7 @@ F9 46 00 F0 -4F +4D F9 00 28 @@ -408,7 +408,7 @@ F9 D0 00 F0 -56 +54 F9 05 46 @@ -482,7 +482,7 @@ D0 A0 00 F0 -3F +3D F9 32 46 @@ -492,7 +492,7 @@ A1 46 00 F0 -48 +46 F9 00 20 @@ -504,7 +504,7 @@ F9 46 00 F0 -0F +0D F9 05 98 @@ -516,7 +516,7 @@ D0 A0 00 F0 -2E +2C F9 00 F0 @@ -532,7 +532,7 @@ BD A0 00 F0 -26 +24 F9 32 46 @@ -978,15 +978,11 @@ E0 F4 00 00 -21 -48 -00 -21 -81 -60 +20 +49 03 -21 -81 +20 +88 60 00 20 @@ -1614,7 +1610,7 @@ C0 46 FF F7 -75 +77 FD 00 28 @@ -1932,7 +1928,7 @@ FF 46 FF F7 -BB +BD FD 00 28 @@ -1950,7 +1946,7 @@ BD BD 00 00 -6B +6F FB FF FF @@ -1980,7 +1976,7 @@ B0 B5 FF F7 -86 +88 FD 60 BC @@ -2028,7 +2024,7 @@ C0 46 FF F7 -BB +BD FC 10 BD @@ -2114,7 +2110,7 @@ D2 00 10 00 -64 +60 08 00 00 @@ -2130,7 +2126,7 @@ D2 01 00 00 -6C +68 08 00 00 diff --git a/testcodes/software_list.txt b/testcodes/software_list.txt index ebe811048e0ae468b6f0ccb3911cab45b6338594..b8d329a8f7b11bdf11a06cba861e1f96be706682 100644 --- a/testcodes/software_list.txt +++ b/testcodes/software_list.txt @@ -18,3 +18,4 @@ memory_tests romtable_tests interrupt_demo dataio_tests +dataio_dma230_tests diff --git a/verif/tb/verilog/nanosoc_tb.v b/verif/tb/verilog/nanosoc_tb.v index 3ab628e10101c8afd73be3e997ee34036b2277ab..f8f9d31061e25f5c0938122009ce8df0c9737518 100644 --- a/verif/tb/verilog/nanosoc_tb.v +++ b/verif/tb/verilog/nanosoc_tb.v @@ -209,8 +209,8 @@ initial begin pullup(P1[ 4]); pullup(P1[ 5]); pullup(P1[ 6]); -// pullup(P1[ 7]); - pulldown(P1[ 7]); +// pullup(P1[ 7]); // FT1248 mode + pulldown(P1[ 7]); // EXTIO mode pullup(P1[ 8]); pullup(P1[ 9]); pullup(P1[10]); @@ -789,7 +789,7 @@ nanosoc_ft1248x1_track `define DMAC_TRACK_PATH u_track_pl230_udma `ifndef COCOTB_SIM - nanosoc_dma_log_to_file #(.FILENAME("logs/dma230.log"),.NUM_CHNLS(2),.NUM_CHNL_BITS(1),.TIMESTAMP(1)) + nanosoc_dma_log_to_file #(.FILENAME("logs/dma230.log"),.NUM_CHNLS(4),.NUM_CHNL_BITS(2),.TIMESTAMP(1)) u_nanosoc_dma_log_to_file ( .hclk (`DMAC_TRACK_PATH.hclk), .hresetn (`DMAC_TRACK_PATH.hresetn), diff --git a/verif/trace/verilog/nanosoc_dma_log_to_file.v b/verif/trace/verilog/nanosoc_dma_log_to_file.v index 68f61eb4a29ee9a53046621be0209cf20a36797c..306cc23327d88de408002c7905db7af7c8a547ca 100644 --- a/verif/trace/verilog/nanosoc_dma_log_to_file.v +++ b/verif/trace/verilog/nanosoc_dma_log_to_file.v @@ -11,8 +11,8 @@ module nanosoc_dma_log_to_file #(parameter FILENAME = "dma.log", - parameter NUM_CHNLS = 2, - parameter NUM_CHNL_BITS = 1, + parameter NUM_CHNLS = 4, + parameter NUM_CHNL_BITS = 2, parameter TIMESTAMP = 1) ( input wire hclk, @@ -166,7 +166,7 @@ wire hsel = 1'b1; initial begin fd= $fopen(FILENAME,"w"); - dma_req_last <= 2'b00; + dma_req_last <= {NUM_CHNLS{1'b0}}; cyc_count <= 0; if (fd == 0) $write("** %m : output log file failed to open **\n");