Aziz be careful from german people




..
//-------- External Port Definitions ---------
#define EXTPORT_CTRL PORTD
#define EXTPORT_ALE 6 // pin #20/PD6/ICP1
#define EXTPORT_DLE 7 // pin #21/PD7/OC2
#define EXTPORT_PORT PORTC
..
// Op-code implementations
..
//CMD_PCH: Change external port and write data
// syntax: PCH <addr8> <data8>
// addr8: Port Address (byte: 0=PORTE, 1=PORTF, 2=PORTG, 3=PORTH, ..)
// data8: Port Data (byte: 0-255)
; clocks: 6+14 = 20 (16 MHz: 1250 ns, 20 MHz: 1000 ns)
Cmd_PCH:
ld PI_Param1, PI_PC+ ; (2) Get External Port Address
ld PI_Param2, PI_PC+ ; (2) Get External Port Data
; Port Address Access
cbi EXTPORT_CTRL, EXTPORT_DLE ; (2) Disable Data Transparent-Latch
out EXTPORT_PORT, PI_Param1 ; (1) Write External Port Address
sbi EXTPORT_CTRL, EXTPORT_ALE ; (2) Enable External Port Address Latch
cbi EXTPORT_CTRL, EXTPORT_ALE ; (2) Latch External Port Address
; Port Data Access
out EXTPORT_PORT, PI_Param2 ; (1) Write External Port Data
sbi EXTPORT_CTRL, EXTPORT_DLE ; (2) Enable Data Transparent-Latch
CMD_PREFETCH ; (4) Macro: Prefetch next op-code and decode
//CMD_PST: Store data into external port (parameter: port-data (byte) )
// direct op-code vector implementation
// syntax: PST <data8>
// data8: Port Data (byte: 0-255)
; cycles: (4) + 3 = 7 (16 MHz: 437.5 ns, 20 MHz: 350 ns)
.ORG Cmd_Vector+CMD_PST
ld PI_Port, PI_PC+ ; (2) Get External Port Data
out EXTPORT_PORT, PI_Port ; (1) Write External Port Data
CMD_PREFETCH ; (4) Macro: Prefetch next op-code and decode

//CMD_NOP3, NOP2, NOP1, NOP: no operation (direct implementation)
// NOP3 cycles: (4) + 3 = 7 (16 MHz: 437.5 ns, 20 MHz: 350 ns)
.ORG Cmd_Vector+CMD_NOP3 ; NOP+3 cpu-cycles
nop
// NOP2 cycles: (4) + 2 = 6 (16 MHz: 375 ns, 20 MHz: 300 ns)
.ORG Cmd_Vector+CMD_NOP2 ; NOP+2 cpu-cycles
nop
// NOP1 cycles: (4) + 1 = 5 (16 MHz: 312.5 ns, 20 MHz: 250 ns)
.ORG Cmd_Vector+CMD_NOP1 ; NOP+1 cpu-cycle
nop
// NOP cycles: (4) + 0 = 4 (16 MHz: 250 ns, 20 MHz: 200 ns)
.ORG Cmd_Vector+CMD_NOP ; NOP
CMD_PREFETCH ; (4) Macro: Prefetch next op-code and decode
//.. SWAIT decoding part (vector)
//CMD_SWAIT2: active short wait, parameter: 8-bit delay counter
.ORG Cmd_Vector+CMD_SWAIT2 ; SWAIT+2 cpu-cycles
nop
//CMD_SWAIT1: active short wait, parameter: 8-bit delay counter
.ORG Cmd_Vector+CMD_SWAIT1 ; SWAIT+1 cpu-cycle
nop
//CMD_SWAIT: active short wait, parameter: 8-bit delay counter
.ORG Cmd_Vector+CMD_SWAIT
rjmp Cmdexe_SWAIT ; (2)
//.. SWAIT implementation (execution code)
//.. somewhere above 0x0100 program code address
//CMD_SWAIT2: active short wait, parameter: 8-bit delay counter
; cycles: (6) + 2 + 1+n*3 = 9+n*3
//CMD_SWAIT1: active short wait, parameter: 8-bit delay counter
; cycles: (6) + 1 + 1+n*3 = 8+n*3
//CMD_SWAIT: active short wait, parameter: 8-bit delay counter
; cycles: (6) + 0 + 1+n*3 = 7+n*3,
;(16 MHz: 437.5 ns + n*187.5 ns, min: 625 ns, max: 48.4375 µs) (n=0 -> n=256)
;(20 MHz: 350 ns + n*150 ns, min: 500 ns, max: 38.750 µs) (n=0 -> n=256)
Cmdexe_SWAIT:
ld PI_Param, PI_PC+ ; (2) get delay counter
Cmdexe_SWAITLoop:
dec PI_Param ; (1) counter--
brne Cmdexe_SWAITLoop ; (2) for branch, (1) for loop end
CMD_PREFETCH ; (4) Macro: Prefetch next op-code and decode


Comment