1 |
24 |
jeremybenn |
|
2 |
|
|
1. MEC and ERC32 emulation
|
3 |
|
|
|
4 |
|
|
The file 'erc32.c' contains a model of the MEC, 512 K rom and 4 M ram.
|
5 |
|
|
|
6 |
|
|
The following paragraphs outline the implemented MEC functions.
|
7 |
|
|
|
8 |
|
|
1.1 UARTs
|
9 |
|
|
|
10 |
|
|
The UARTs are connected to two pseudo-devices, /dev/ttypc and /dev/ttypd.
|
11 |
|
|
The following registers are implemeted:
|
12 |
|
|
|
13 |
|
|
- UART A RX and TX register (0x01f800e0)
|
14 |
|
|
- UART B RX and TX register (0x01f800e4)
|
15 |
|
|
- UART status register (0x01f800e8)
|
16 |
|
|
|
17 |
|
|
To speed up simulation, the UARTs operate at approximately 115200 baud.
|
18 |
|
|
The UARTs generate interrupt 4 and 5 after each received or transmitted
|
19 |
|
|
character. The error interrupt is generated if overflow occurs - other
|
20 |
|
|
errors cannot occure.
|
21 |
|
|
|
22 |
|
|
1.2 Real-time clock and general pupose timer A
|
23 |
|
|
|
24 |
|
|
The following registers are implemeted:
|
25 |
|
|
|
26 |
|
|
- Real-time clock timer (0x01f80080, read-only)
|
27 |
|
|
- Real-time clock scaler program register (0x01f80084, write-only)
|
28 |
|
|
- Real-time clock counter program register (0x01f80080, write-only)
|
29 |
|
|
|
30 |
|
|
- Genearl pupose timer (0x01f80088, read-only)
|
31 |
|
|
- Real-time clock scaler program register (0x01f8008c, write-only)
|
32 |
|
|
- General purpose timer counter prog. register (0x01f80088, write-only)
|
33 |
|
|
|
34 |
|
|
- Timer control register (0x01f80098, write-only)
|
35 |
|
|
|
36 |
|
|
1.3 Interrupt controller
|
37 |
|
|
|
38 |
|
|
The interrupt controller is implemented as in the MEC specification with
|
39 |
|
|
the exception of the interrupt shape register. Since external interrupts
|
40 |
|
|
are not possible, the interrupt shape register is not implemented. The
|
41 |
|
|
only internal interrupts that are generated are the real-time clock,
|
42 |
|
|
the general purpose timer and UARTs. However, all 15 interrupts
|
43 |
|
|
can be tested via the interrupt force register.
|
44 |
|
|
|
45 |
|
|
The following registers are implemeted:
|
46 |
|
|
|
47 |
|
|
- Interrupt pending register (0x01f80048, read-only)
|
48 |
|
|
- Interrupt mask register (0x01f8004c, read-write)
|
49 |
|
|
- Interrupt clear register (0x01f80050, write-only)
|
50 |
|
|
- Interrupt force register (0x01f80054, read-write)
|
51 |
|
|
|
52 |
|
|
1.4 Breakpoint and watchpoint register
|
53 |
|
|
|
54 |
|
|
The breakpoint and watchpoint functions are implemented as in the MEC
|
55 |
|
|
specification. Traps are correctly generated, and the system fault status
|
56 |
|
|
register is updated accordingly. Implemeted registers are:
|
57 |
|
|
|
58 |
|
|
- Debug control register (0x01f800c0, read-write)
|
59 |
|
|
- Breakpoint register (0x01f800c4, write-only)
|
60 |
|
|
- Watchpoint register (0x01f800c8, write-only)
|
61 |
|
|
- System fault status register (0x01f800a0, read-write)
|
62 |
|
|
- Firts failing address register (0x01f800a4, read-write)
|
63 |
|
|
|
64 |
|
|
|
65 |
|
|
1.5 Memory interface
|
66 |
|
|
|
67 |
|
|
The following memory areas are valid for the ERC32 simulator:
|
68 |
|
|
|
69 |
|
|
0x00000000 - 0x00080000 ROM (512 Kbyte, loaded at start-up)
|
70 |
|
|
0x02000000 - 0x02400000 RAM (4 Mbyte, initialised to 0x0)
|
71 |
|
|
0x01f80000 - 0x01f800ff MEC registers
|
72 |
|
|
|
73 |
|
|
Access to unimplemented MEC registers or non-existing memory will result
|
74 |
|
|
in a memory exception trap. However, access to unimplemented MEC registers
|
75 |
|
|
in the area 0x01f80000 - 0x01f80100 will not cause a memory exception trap.
|
76 |
|
|
The written value will be stored in a register and can be read back. It
|
77 |
|
|
does however not affect the function in any way.
|
78 |
|
|
|
79 |
|
|
The memory configuartion register is used to define available memory
|
80 |
|
|
in the system. The fields RSIZ and PSIZ are used to set RAM and ROM
|
81 |
|
|
size, the remaining fields are not used. NOTE: after reset, the MEC
|
82 |
|
|
is set to decode 4 Kbyte of ROM and 256 Kbyte of RAM. The memory
|
83 |
|
|
configuration register has to be updated to reflect the available memory.
|
84 |
|
|
|
85 |
|
|
The waitstate configuration register is used to generate waitstates.
|
86 |
|
|
This register must also be updated with the correct configuration after
|
87 |
|
|
reset.
|
88 |
|
|
|
89 |
|
|
The memory protection scheme is implemented - it is enabled through bit 3
|
90 |
|
|
in the MEC control register.
|
91 |
|
|
|
92 |
|
|
The following registers are implemeted:
|
93 |
|
|
|
94 |
|
|
- MEC control register (bit 3 only) (0x01f80000, read-write)
|
95 |
|
|
- Memory control register (0x01f80010, read-write)
|
96 |
|
|
- Waitstate configuration register (0x01f80018, read-write)
|
97 |
|
|
- Memory access register 0 (0x01f80020, read-write)
|
98 |
|
|
- Memory access register 1 (0x01f80024, read-write)
|
99 |
|
|
|
100 |
|
|
1.6 Watchdog
|
101 |
|
|
|
102 |
|
|
The watchdog is implemented as in the specification. The input clock is
|
103 |
|
|
always the system clock regardsless of WDCS bit in mec configuration
|
104 |
|
|
register.
|
105 |
|
|
|
106 |
|
|
The following registers are implemeted:
|
107 |
|
|
|
108 |
|
|
- Watchdog program and acknowledge register (0x01f80060, write-only)
|
109 |
|
|
- Watchdog trap door set register (0x01f80064, write-only)
|
110 |
|
|
|
111 |
|
|
1.7 Software reset register
|
112 |
|
|
|
113 |
|
|
Implemented as in the specification (0x01f800004, write-only).
|
114 |
|
|
|
115 |
|
|
1.8 Power-down mode
|
116 |
|
|
|
117 |
|
|
The power-down register (0x01f800008) is implemented as in the specification.
|
118 |
|
|
However, if the simulator event queue is empty, power-down mode is not
|
119 |
|
|
entered since no interrupt would be generated to exit from the mode. A
|
120 |
|
|
Ctrl-C in the simulator window will exit the power-down mode.
|
121 |
|
|
|
122 |
|
|
1.9 MEC control register
|
123 |
|
|
|
124 |
|
|
The following bits are implemented in the MEC control register:
|
125 |
|
|
|
126 |
|
|
Bit Name Function
|
127 |
|
|
|
128 |
|
|
1 SWR Soft reset enable
|
129 |
|
|
3 APR Access protection enable
|
130 |
|
|
|