mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-12-11 14:14:23 +00:00
131 lines
4.7 KiB
Plaintext
131 lines
4.7 KiB
Plaintext
|
|
1. MEC and ERC32 emulation
|
|
|
|
The file 'erc32.c' contains a model of the MEC, 512 K rom and 4 M ram.
|
|
|
|
The following paragraphs outline the implemented MEC functions.
|
|
|
|
1.1 UARTs
|
|
|
|
The UARTs are connected to two pseudo-devices, /dev/ttypc and /dev/ttypd.
|
|
The following registers are implemeted:
|
|
|
|
- UART A RX and TX register (0x01f800e0)
|
|
- UART B RX and TX register (0x01f800e4)
|
|
- UART status register (0x01f800e8)
|
|
|
|
To speed up simulation, the UARTs operate at approximately 115200 baud.
|
|
The UARTs generate interrupt 4 and 5 after each received or transmitted
|
|
character. The error interrupt is generated if overflow occurs - other
|
|
errors cannot occure.
|
|
|
|
1.2 Real-time clock and general pupose timer A
|
|
|
|
The following registers are implemeted:
|
|
|
|
- Real-time clock timer (0x01f80080, read-only)
|
|
- Real-time clock scaler program register (0x01f80084, write-only)
|
|
- Real-time clock counter program register (0x01f80080, write-only)
|
|
|
|
- Genearl pupose timer (0x01f80088, read-only)
|
|
- Real-time clock scaler program register (0x01f8008c, write-only)
|
|
- General purpose timer counter prog. register (0x01f80088, write-only)
|
|
|
|
- Timer control register (0x01f80098, write-only)
|
|
|
|
1.3 Interrupt controller
|
|
|
|
The interrupt controller is implemented as in the MEC specification with
|
|
the exception of the interrupt shape register. Since external interrupts
|
|
are not possible, the interrupt shape register is not implemented. The
|
|
only internal interrupts that are generated are the real-time clock,
|
|
the general purpose timer and UARTs. However, all 15 interrupts
|
|
can be tested via the interrupt force register.
|
|
|
|
The following registers are implemeted:
|
|
|
|
- Interrupt pending register (0x01f80048, read-only)
|
|
- Interrupt mask register (0x01f8004c, read-write)
|
|
- Interrupt clear register (0x01f80050, write-only)
|
|
- Interrupt force register (0x01f80054, read-write)
|
|
|
|
1.4 Breakpoint and watchpoint register
|
|
|
|
The breakpoint and watchpoint functions are implemented as in the MEC
|
|
specification. Traps are correctly generated, and the system fault status
|
|
register is updated accordingly. Implemeted registers are:
|
|
|
|
- Debug control register (0x01f800c0, read-write)
|
|
- Breakpoint register (0x01f800c4, write-only)
|
|
- Watchpoint register (0x01f800c8, write-only)
|
|
- System fault status register (0x01f800a0, read-write)
|
|
- Firts failing address register (0x01f800a4, read-write)
|
|
|
|
|
|
1.5 Memory interface
|
|
|
|
The following memory areas are valid for the ERC32 simulator:
|
|
|
|
0x00000000 - 0x00080000 ROM (512 Kbyte, loaded at start-up)
|
|
0x02000000 - 0x02400000 RAM (4 Mbyte, initialised to 0x0)
|
|
0x01f80000 - 0x01f800ff MEC registers
|
|
|
|
Access to unimplemented MEC registers or non-existing memory will result
|
|
in a memory exception trap. However, access to unimplemented MEC registers
|
|
in the area 0x01f80000 - 0x01f80100 will not cause a memory exception trap.
|
|
The written value will be stored in a register and can be read back. It
|
|
does however not affect the function in any way.
|
|
|
|
The memory configuartion register is used to define available memory
|
|
in the system. The fields RSIZ and PSIZ are used to set RAM and ROM
|
|
size, the remaining fields are not used. NOTE: after reset, the MEC
|
|
is set to decode 4 Kbyte of ROM and 256 Kbyte of RAM. The memory
|
|
configuration register has to be updated to reflect the available memory.
|
|
|
|
The waitstate configuration register is used to generate waitstates.
|
|
This register must also be updated with the correct configuration after
|
|
reset.
|
|
|
|
The memory protection scheme is implemented - it is enabled through bit 3
|
|
in the MEC control register.
|
|
|
|
The following registers are implemeted:
|
|
|
|
- MEC control register (bit 3 only) (0x01f80000, read-write)
|
|
- Memory control register (0x01f80010, read-write)
|
|
- Waitstate configuration register (0x01f80018, read-write)
|
|
- Memory access register 0 (0x01f80020, read-write)
|
|
- Memory access register 1 (0x01f80024, read-write)
|
|
|
|
1.6 Watchdog
|
|
|
|
The watchdog is implemented as in the specification. The input clock is
|
|
always the system clock regardsless of WDCS bit in mec configuration
|
|
register.
|
|
|
|
The following registers are implemeted:
|
|
|
|
- Watchdog program and acknowledge register (0x01f80060, write-only)
|
|
- Watchdog trap door set register (0x01f80064, write-only)
|
|
|
|
1.7 Software reset register
|
|
|
|
Implemented as in the specification (0x01f800004, write-only).
|
|
|
|
1.8 Power-down mode
|
|
|
|
The power-down register (0x01f800008) is implemented as in the specification.
|
|
However, if the simulator event queue is empty, power-down mode is not
|
|
entered since no interrupt would be generated to exit from the mode. A
|
|
Ctrl-C in the simulator window will exit the power-down mode.
|
|
|
|
1.9 MEC control register
|
|
|
|
The following bits are implemented in the MEC control register:
|
|
|
|
Bit Name Function
|
|
0 PRD Power-down mode enable
|
|
1 SWR Soft reset enable
|
|
3 APR Access protection enable
|
|
|