Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • dev
  • dm-updating-vcs-flow
  • feat_accel_decouple
  • feat_accel_hash_stream
  • feat_dma230_dataio
  • feat_dma350
  • feat_dmax4
  • feat_extio
  • feat_nanosoc_regions
  • feat_qspi_rom
  • main
  • nanosoc-2023
12 results

Target

Select target project
No results found
Select Git revision
  • dev
  • dm-updating-vcs-flow
  • feat_accel_decouple
  • feat_accel_hash_stream
  • feat_dma230_dataio
  • feat_dma350
  • feat_dmax4
  • feat_extio
  • feat_nanosoc_regions
  • feat_qspi_rom
  • main
  • nanosoc-2023
12 results
Show changes

Commits on Source 2

32 files
+ 5306
1503
Compare changes
  • Side-by-side
  • Inline

Files

Original line number Original line Diff line number Diff line
@@ -56,7 +56,7 @@ module nanosoc_system #(
    parameter INCLUDE_JTAG            = 0,   // Do not Include JTAG feature
    parameter INCLUDE_JTAG            = 0,   // Do not Include JTAG feature
      
      
    // DMA Parameters  
    // 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
    parameter    DMAC_1_CHANNEL_NUM   = 2,   // DMAC 1 Number of DMA Channels
      
      
    // SoCDebug Parameters  
    // SoCDebug Parameters  
@@ -907,7 +907,9 @@ wire EXT_DAT_TXD_TREADY ;
    // Expansion DRQ Wiring
    // Expansion DRQ Wiring
    //--------------------------
    //--------------------------
    assign EXP_DLAST [1:0] = 2'b00;
    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 & SYS_P1_OUT[2];
    assign DMAC_0_DMA_REQ[3]    = EXT_DAT_TXD_TVALID &  & SYS_P1_OUT[3];
    
    
    // Instantiate Subsystem
    // Instantiate Subsystem
    //--------------------------
    //--------------------------
Original line number Original line Diff line number Diff line
Subproject commit 0f0bf3dee094e9e6801210c1d5f190dea912395d
Subproject commit 7105d696b8d67e4b70c9c54cb14c807a311a24b3
Original line number Original line Diff line number Diff line
@@ -8,7 +8,7 @@ extern "C" {


#define DMA_PL230_BASE        (CMSDK_APB_BASE + 0xF000UL)
#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) --------------------------------------*/
/*------------- PL230 uDMA (PL230) --------------------------------------*/
/** @addtogroup DMA_PL230 CMSDK uDMA controller
/** @addtogroup DMA_PL230 CMSDK uDMA controller
Original line number Original line Diff line number Diff line
@@ -250,11 +250,11 @@ AB
43
43
18
18
47
47
E8
EC
0C
0C
00
00
00
00
08
0C
0D
0D
00
00
00
00
@@ -322,7 +322,7 @@ B5
D1
D1
00
00
F0
F0
1D
1F
FD
FD
10
10
BD
BD
@@ -340,7 +340,7 @@ B5
BD
BD
00
00
F0
F0
DE
E0
FD
FD
11
11
46
46
@@ -354,7 +354,7 @@ F0
F9
F9
00
00
F0
F0
F6
F8
FD
FD
03
03
B4
B4
@@ -466,7 +466,7 @@ C4
A0
A0
00
00
F0
F0
01
03
FD
FD
03
03
20
20
@@ -526,7 +526,7 @@ C0
A0
A0
00
00
F0
F0
73
75
FC
FC
05
05
98
98
@@ -554,7 +554,7 @@ C5
A0
A0
00
00
F0
F0
D5
D7
FC
FC
01
01
20
20
@@ -574,7 +574,7 @@ CB
A0
A0
00
00
F0
F0
CB
CD
FC
FC
02
02
20
20
@@ -586,7 +586,7 @@ D4
A0
A0
00
00
F0
F0
C5
C7
FC
FC
00
00
20
20
@@ -866,7 +866,7 @@ DD
A0
A0
00
00
F0
F0
39
3B
FC
FC
01
01
20
20
@@ -880,7 +880,7 @@ A4
A0
A0
00
00
F0
F0
32
34
FC
FC
01
01
20
20
@@ -890,7 +890,7 @@ AA
A0
A0
00
00
F0
F0
2D
2F
FC
FC
00
00
20
20
@@ -908,19 +908,19 @@ AE
A0
A0
00
00
F0
F0
24
26
FC
FC
B7
B7
A0
A0
00
00
F0
F0
21
23
FC
FC
C4
C4
A0
A0
00
00
F0
F0
1E
20
FC
FC
50
50
49
49
@@ -936,7 +936,7 @@ CE
A0
A0
00
00
F0
F0
16
18
FC
FC
01
01
21
21
@@ -958,7 +958,7 @@ CC
A0
A0
00
00
F0
F0
0B
0D
FC
FC
CE
CE
49
49
@@ -980,7 +980,7 @@ CB
A0
A0
00
00
F0
F0
00
02
FC
FC
CD
CD
49
49
@@ -1002,7 +1002,7 @@ CB
A0
A0
00
00
F0
F0
F5
F7
FB
FB
D7
D7
49
49
@@ -1024,7 +1024,7 @@ D5
A0
A0
00
00
F0
F0
EA
EC
FB
FB
DA
DA
49
49
@@ -1046,7 +1046,7 @@ D8
A0
A0
00
00
F0
F0
DF
E1
FB
FB
DE
DE
49
49
@@ -1068,7 +1068,7 @@ DB
A0
A0
00
00
F0
F0
D4
D6
FB
FB
DC
DC
49
49
@@ -1090,7 +1090,7 @@ D9
A0
A0
00
00
F0
F0
C9
CB
FB
FB
E5
E5
49
49
@@ -1112,7 +1112,7 @@ E2
A0
A0
00
00
F0
F0
BE
C0
FB
FB
E3
E3
49
49
@@ -1134,7 +1134,7 @@ E1
A0
A0
00
00
F0
F0
B3
B5
FB
FB
ED
ED
49
49
@@ -1156,7 +1156,7 @@ EA
A0
A0
00
00
F0
F0
A8
AA
FB
FB
F5
F5
49
49
@@ -1178,7 +1178,7 @@ F2
A0
A0
00
00
F0
F0
9D
9F
FB
FB
F6
F6
48
48
@@ -1198,7 +1198,7 @@ F3
A0
A0
00
00
F0
F0
93
95
FB
FB
F6
F6
49
49
@@ -1226,11 +1226,11 @@ F1
A0
A0
00
00
F0
F0
15
17
FB
FB
00
00
F0
F0
F2
F3
FA
FA
00
00
20
20
@@ -1240,7 +1240,7 @@ F9
A0
A0
00
00
F0
F0
0E
10
FB
FB
F7
F7
E7
E7
@@ -1770,7 +1770,7 @@ C5
30
30
00
00
00
00
7C
80
0D
0D
00
00
00
00
@@ -1810,7 +1810,7 @@ C5
20
20
00
00
40
40
8C
90
0D
0D
00
00
00
00
@@ -1870,7 +1870,7 @@ C5
30
30
00
00
40
40
AC
B0
0D
0D
00
00
00
00
@@ -1906,7 +1906,7 @@ AC
40
40
00
00
40
40
6C
70
0D
0D
00
00
00
00
@@ -2030,7 +2030,7 @@ AC
80
80
00
00
40
40
9C
A0
0D
0D
00
00
00
00
@@ -2276,7 +2276,7 @@ D0
A0
A0
00
00
F0
F0
78
7A
F9
F9
A0
A0
68
68
@@ -2298,7 +2298,7 @@ D0
A0
A0
00
00
F0
F0
FD
FF
F8
F8
20
20
68
68
@@ -2312,7 +2312,7 @@ D0
A0
A0
00
00
F0
F0
F6
F8
F8
F8
17
17
48
48
@@ -2324,11 +2324,11 @@ BD
A0
A0
00
00
F0
F0
60
62
F9
F9
00
00
F0
F0
CD
CE
F8
F8
FE
FE
E7
E7
@@ -2552,7 +2552,7 @@ C0
B2
B2
00
00
F0
F0
36
37
F8
F8
10
10
BD
BD
@@ -2560,11 +2560,11 @@ BD
B5
B5
00
00
F0
F0
42
43
F8
F8
00
00
F0
F0
30
31
F8
F8
10
10
BD
BD
@@ -2580,19 +2580,19 @@ C0
B2
B2
00
00
F0
F0
28
29
F8
F8
10
10
BD
BD
FE
FE
E7
E7
2E
2F
48
48
00
00
21
21
81
81
60
60
2E
2F
49
49
01
01
61
61
@@ -2600,12 +2600,14 @@ E7
21
21
81
81
60
60
2D
2E
48
48
03
F0
21
21
01
01
61
61
03
21
81
81
60
60
2C
2C
@@ -2618,11 +2620,11 @@ E7
47
47
2C
2C
48
48
2A
2B
49
49
01
01
60
60
2B
2C
49
49
81
81
61
61
@@ -2646,13 +2648,13 @@ D0
20
20
88
88
61
61
21
22
48
48
00
00
21
21
81
81
60
60
30
F0
21
21
01
01
61
61
@@ -2662,7 +2664,7 @@ D0
60
60
70
70
47
47
1D
1E
49
49
8A
8A
68
68
@@ -2694,7 +2696,7 @@ D1
60
60
70
70
47
47
13
14
4B
4B
15
15
48
48
@@ -2775,6 +2777,8 @@ D1
F7
F7
E7
E7
00
00
00
00
60
60
00
00
40
40
@@ -2900,7 +2904,7 @@ FF
46
46
FF
FF
F7
F7
F2
F0
FA
FA
00
00
28
28
@@ -3038,7 +3042,7 @@ B5
E0
E0
FF
FF
F7
F7
09
07
FF
FF
40
40
1C
1C
@@ -3058,7 +3062,7 @@ D1
20
20
FF
FF
F7
F7
FF
FD
FE
FE
10
10
BD
BD
@@ -3276,7 +3280,7 @@ F8
46
46
FF
FF
F7
F7
9D
9B
FE
FE
00
00
28
28
@@ -3294,7 +3298,7 @@ BD
BD
BD
00
00
00
00
2F
2B
FD
FD
FF
FF
FF
FF
@@ -3372,7 +3376,7 @@ B0
B5
B5
FF
FF
F7
F7
50
4E
FE
FE
60
60
BC
BC
@@ -3420,7 +3424,7 @@ C0
46
46
FF
FF
F7
F7
03
01
FA
FA
10
10
BD
BD
@@ -3554,7 +3558,7 @@ B1
30
30
78
78
00
00
04
08
0E
0E
00
00
00
00
@@ -3570,7 +3574,7 @@ B1
01
01
00
00
00
00
1C
20
0E
0E
00
00
00
00
Original line number Original line Diff line number Diff line
@@ -2,15 +2,15 @@
04
04
00
00
30
30
C9
CD
02
02
00
00
10
10
D1
D5
02
02
00
00
10
10
D3
D7
02
02
00
00
10
10
@@ -42,7 +42,7 @@ D3
00
00
00
00
00
00
D5
D9
02
02
00
00
10
10
@@ -54,139 +54,139 @@ D5
00
00
00
00
00
00
D7
DB
02
02
00
00
10
10
D9
DD
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
DB
DF
02
02
00
00
10
10
@@ -250,11 +250,11 @@ AB
43
43
18
18
47
47
70
74
02
02
00
00
00
00
90
94
02
02
00
00
00
00
@@ -324,7 +324,7 @@ B5
BD
BD
00
00
F0
F0
DF
E1
F8
F8
11
11
46
46
@@ -334,11 +334,11 @@ F7
FF
FF
00
00
F0
F0
59
5B
F8
F8
00
00
F0
F0
F7
F9
F8
F8
03
03
B4
B4
@@ -350,7 +350,7 @@ FF
BC
BC
00
00
F0
F0
FD
FF
F8
F8
00
00
00
00
@@ -366,7 +366,7 @@ F8
47
47
00
00
00
00
30
31
4A
4A
10
10
68
68
@@ -378,11 +378,11 @@ F8
28
28
0D
0D
DA
DA
2E
2F
48
48
81
81
60
60
2E
2F
4B
4B
03
03
61
61
@@ -406,11 +406,11 @@ D1
60
60
01
01
E0
E0
29
2A
48
48
81
81
60
60
29
2A
48
48
81
81
60
60
@@ -418,6 +418,10 @@ E0
21
21
81
81
60
60
F0
21
01
61
41
41
68
68
C9
C9
@@ -496,7 +500,7 @@ F3
8F
8F
FF
FF
F7
F7
B8
B6
FF
FF
10
10
BD
BD
@@ -518,7 +522,7 @@ E7
B5
B5
FF
FF
F7
F7
B3
B1
FF
FF
17
17
A0
A0
@@ -632,7 +636,7 @@ F0
43
43
27
27
32
32
34
35
20
20
41
41
52
52
@@ -742,7 +746,7 @@ E7
47
47
00
00
00
00
B9
BD
02
02
00
00
10
10
@@ -846,7 +850,7 @@ C0
46
46
FF
FF
F7
F7
02
00
FF
FF
10
10
BD
BD
@@ -874,7 +878,7 @@ E7
47
47
00
00
00
00
8C
90
03
03
00
00
10
10
@@ -890,7 +894,7 @@ E7
01
01
00
00
10
10
90
94
03
03
00
00
10
10
Original line number Original line Diff line number Diff line
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
Original line number Original line Diff line number Diff line
#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();
  CMSDK_GPIO1->DATAOUT |= 0x0c; // enable DRQ signals
  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;

}
Original line number Original line Diff line number Diff line
20
06
00
30
A5
05
00
00
AD
05
00
00
AF
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
B1
05
00
00
00
00
00
00
00
00
00
00
B3
05
00
00
B5
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
05
00
00
B7
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
3C
0B
00
00
5C
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
4F
FB
10
BD
78
29
02
D1
00
F0
80
FB
10
BD
00
20
10
BD
1F
B5
1F
BD
10
B5
10
BD
00
F0
F7
FC
11
46
FF
F7
F7
FF
00
F0
18
F9
00
F0
0F
FD
03
B4
FF
F7
F2
FF
03
BC
00
F0
43
FA
10
B5
B8
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
AF
48
00
68
C0
02
C0
0E
40
1C
42
01
10
28
01
DD
AC
48
10
E0
08
28
01
DD
AB
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
9D
4C
A1
A0
61
60
00
F0
AF
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
9E
A0
00
F0
E1
FB
91
4C
25
68
E8
02
C1
0E
A0
A0
49
1C
00
F0
91
FA
28
06
01
0F
A5
A0
00
F0
8C
FA
E9
07
C9
0F
AA
A0
00
F0
87
FA
20
68
00
06
00
0F
14
D0
08
28
12
D0
09
28
10
D0
AD
A0
00
F0
C4
FB
20
68
00
06
05
0F
28
06
01
0F
99
A0
00
F0
74
FA
00
2D
03
D0
08
2D
01
D0
09
2D
F1
D1
00
20
60
60
79
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
71
4D
06
46
28
68
00
28
01
D1
FF
F7
6A
FF
6E
4C
02
E0
96
A0
00
F0
97
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
5F
49
89
6A
00
07
00
0F
08
40
70
47
70
B5
8F
4A
8D
4B
13
60
09
18
49
1E
51
60
40
1E
80
05
8C
49
80
0C
40
18
90
60
55
48
11
46
40
68
0C
31
01
63
01
46
7C
31
41
63
87
49
81
63
51
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
79
49
20
31
52
1E
0A
60
76
4A
4A
60
40
1E
80
05
78
4A
80
0C
80
18
88
60
3F
48
0C
31
40
68
01
62
01
46
6C
31
41
62
71
49
81
62
3B
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
30
F9
66
48
00
F0
D3
F9
FF
F7
E7
FE
00
F0
89
F9
64
48
41
68
0C
22
11
43
41
60
00
27
10
26
05
25
05
A9
30
46
FF
F7
93
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
49
A0
00
F0
94
F9
22
46
48
A1
68
46
00
F0
9D
F9
00
20
69
46
08
72
07
20
FF
F7
84
FF
00
2F
BF
D0
44
A0
00
F0
84
F9
00
F0
29
F9
00
20
0B
B0
F0
BD
4B
A0
00
F0
7C
F9
22
46
4A
A1
E6
E7
00
00
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
F0
0B
00
00
00
10
01
40
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
95
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
37
F8
10
BD
10
B5
00
F0
42
F8
00
F0
31
F8
10
BD
00
20
C0
43
70
47
10
B5
C0
B2
00
F0
29
F8
10
BD
FE
E7
28
48
00
21
81
60
28
49
01
61
01
21
81
60
27
48
F0
21
01
61
03
21
81
60
25
49
20
20
88
61
70
47
25
48
24
49
01
60
25
49
81
61
01
21
C1
60
C3
21
81
60
01
69
C9
07
FC
D0
1D
49
20
20
88
61
1B
48
00
21
81
60
F0
21
01
61
03
21
81
60
70
47
17
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
0F
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
00
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
C9
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
F9
FD
40
1C
08
D0
20
78
05
49
64
1C
00
28
F6
D1
0A
20
FF
F7
EF
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
6F
FD
00
28
02
D0
00
20
C0
43
70
BD
20
46
70
BD
00
00
D3
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
26
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
EA
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
58
0C
00
00
00
00
00
30
10
00
00
00
04
01
00
00
68
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
Original line number Original line Diff line number Diff line
//-----------------------------------------------------------------------------
// 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);
}
Original line number Original line Diff line number Diff line
//-----------------------------------------------------------------------------
// 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>]);
      }

*/

+259 −0
Original line number Original line Diff line number Diff line
#-----------------------------------------------------------------------------
# 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
Original line number Original line Diff line number Diff line
@@ -24,7 +24,7 @@




unsigned int DataIO_enable(void) {
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
  DATA_UART->CTRL    = UART_CTRL_TXRXEN; // enble TX and RX
  return(0);
  return(0);
}
}
Original line number Original line Diff line number Diff line
@@ -520,7 +520,7 @@ F0
F9
F9
00
00
F0
F0
D2
D3
F8
F8
00
00
20
20
@@ -756,7 +756,7 @@ C0
B2
B2
00
00
F0
F0
36
37
F8
F8
10
10
BD
BD
@@ -764,11 +764,11 @@ BD
B5
B5
00
00
F0
F0
41
42
F8
F8
00
00
F0
F0
30
31
F8
F8
10
10
BD
BD
@@ -784,19 +784,19 @@ C0
B2
B2
00
00
F0
F0
28
29
F8
F8
10
10
BD
BD
FE
FE
E7
E7
27
28
48
48
00
00
21
21
81
81
60
60
27
28
49
49
01
01
61
61
@@ -804,12 +804,14 @@ E7
21
21
81
81
60
60
26
27
48
48
03
F0
21
21
01
01
61
61
03
21
81
81
60
60
25
25
@@ -822,11 +824,11 @@ E7
47
47
25
25
48
48
23
24
49
49
01
01
60
60
24
25
49
49
81
81
61
61
@@ -850,13 +852,13 @@ D0
20
20
88
88
61
61
1A
1B
48
48
00
00
21
21
81
81
60
60
30
F0
21
21
01
01
61
61
@@ -866,7 +868,7 @@ D0
60
60
70
70
47
47
16
17
49
49
8A
8A
68
68
@@ -898,7 +900,7 @@ F7
E7
E7
0D
0D
48
48
0E
0F
49
49
42
42
68
68
@@ -951,6 +953,8 @@ FF
FE
FE
E7
E7
00
00
00
00
60
60
00
00
40
40
@@ -978,15 +982,11 @@ E0
F4
F4
00
00
00
00
21
20
48
49
00
21
81
60
03
03
21
20
81
88
60
60
00
00
20
20
Original line number Original line Diff line number Diff line
@@ -2492,7 +2492,7 @@ FA
20
20
00
00
F0
F0
BC
BD
F9
F9
00
00
20
20
@@ -3272,7 +3272,7 @@ C0
B2
B2
00
00
F0
F0
36
37
F8
F8
10
10
BD
BD
@@ -3280,11 +3280,11 @@ BD
B5
B5
00
00
F0
F0
42
43
F8
F8
00
00
F0
F0
30
31
F8
F8
10
10
BD
BD
@@ -3300,7 +3300,7 @@ C0
B2
B2
00
00
F0
F0
28
29
F8
F8
10
10
BD
BD
@@ -3322,13 +3322,15 @@ E7
60
60
27
27
48
48
03
F0
21
21
01
01
61
61
03
21
81
81
60
60
26
25
49
49
20
20
20
20
@@ -3336,7 +3338,7 @@ E7
61
61
70
70
47
47
26
25
48
48
24
24
49
49
@@ -3360,7 +3362,7 @@ C9
07
07
FC
FC
D0
D0
1E
1D
49
49
20
20
20
20
@@ -3372,7 +3374,7 @@ D0
21
21
81
81
60
60
30
F0
21
21
01
01
61
61
@@ -3400,7 +3402,7 @@ D1
60
60
70
70
47
47
11
10
4A
4A
53
53
68
68
@@ -3416,7 +3418,7 @@ D1
47
47
0D
0D
4B
4B
0F
0E
48
48
59
59
68
68
@@ -3469,8 +3471,6 @@ FF
FE
FE
E7
E7
00
00
00
00
60
60
00
00
40
40
Original line number Original line Diff line number Diff line
@@ -18,3 +18,4 @@ memory_tests
romtable_tests
romtable_tests
interrupt_demo
interrupt_demo
dataio_tests
dataio_tests
dataio_dma230_tests
Original line number Original line Diff line number Diff line
@@ -209,8 +209,8 @@ initial begin
  pullup(P1[ 4]);
  pullup(P1[ 4]);
  pullup(P1[ 5]);
  pullup(P1[ 5]);
  pullup(P1[ 6]);
  pullup(P1[ 6]);
//  pullup(P1[ 7]);
//  pullup(P1[ 7]); // FT1248 mode
  pulldown(P1[ 7]);
  pulldown(P1[ 7]); // EXTIO mode
  pullup(P1[ 8]);
  pullup(P1[ 8]);
  pullup(P1[ 9]);
  pullup(P1[ 9]);
  pullup(P1[10]);
  pullup(P1[10]);
@@ -789,7 +789,7 @@ nanosoc_ft1248x1_track
`define DMAC_TRACK_PATH u_track_pl230_udma
`define DMAC_TRACK_PATH u_track_pl230_udma


`ifndef COCOTB_SIM
`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 (
    u_nanosoc_dma_log_to_file (
    .hclk          (`DMAC_TRACK_PATH.hclk),
    .hclk          (`DMAC_TRACK_PATH.hclk),
    .hresetn       (`DMAC_TRACK_PATH.hresetn),
    .hresetn       (`DMAC_TRACK_PATH.hresetn),
Original line number Original line Diff line number Diff line
@@ -11,8 +11,8 @@


module nanosoc_dma_log_to_file
module nanosoc_dma_log_to_file
  #(parameter FILENAME = "dma.log",
  #(parameter FILENAME = "dma.log",
    parameter NUM_CHNLS = 2,
    parameter NUM_CHNLS = 4,
    parameter NUM_CHNL_BITS = 1,
    parameter NUM_CHNL_BITS = 2,
    parameter TIMESTAMP = 1)
    parameter TIMESTAMP = 1)
  (
  (
  input  wire        hclk,
  input  wire        hclk,
@@ -166,7 +166,7 @@ wire hsel = 1'b1;
   initial
   initial
     begin
     begin
       fd= $fopen(FILENAME,"w");
       fd= $fopen(FILENAME,"w");
       dma_req_last <= 2'b00;
       dma_req_last <= {NUM_CHNLS{1'b0}};
       cyc_count <= 0;
       cyc_count <= 0;
       if (fd == 0)
       if (fd == 0)
          $write("** %m : output log file failed to open **\n");
          $write("** %m : output log file failed to open **\n");