Maxq610 user’s guide – Maxim Integrated MAXQ610 User Manual
Page 52

3-17
MAXQ610 User’s Guide
the internal high-order bit that is used only for word-mode data-pointer access) . Switching from byte- to word-access
mode or vice versa does not alter the data pointer contents . Therefore, it is important to maintain the consistency of
data-pointer address value within the given access mode .
move DPC, #0
; DP[0] in byte mode
move DP[0], #2345h ; DP[0]=2345h (byte mode)
; internal bits 15:0 loaded
move DPC, #4
; DP[0] in word mode
move DP[0], #2345h ; DP[0]=2345h (word mode)
; internal bits 16:1 loaded
move DPC, #0
; DP[0] in byte mode
move GR, DP[0]
; GR = 468Bh (looking at bits 15:0)
The three pointers share a single read/write port on the data memory and, thus, the user must knowingly activate
a desired pointer before using it for data memory read operations . This can be done explicitly using the data-
pointer select bits (SDPS[1:]0; DPC[1:0]) or implicitly by writing to the DP[n], BP, or OFFS register, as shown below .
Additionally, any write operation sets the SDPS bits, thereby activating the write pointer as the active source pointer .
move DPC, #2
; (explicit) selection of FP as the pointer
move DP[0], src
; (implicit) selection of DP[0]; set SDPS1:0=00b
move DP[1], DP[1]
; (implicit) selection of DP[1]; set SDPS1:0=01b
move OFFS, src
; (implicit) selection of FP; set SDPS1=1
Once the pointer selection has been made, it remains in effect until:
• The source data-pointer select bits are changed through the explicit or implicit methods described above (i.e.,
another data pointer is selected for use)
• The memory to which the active source data pointer is addressing is enabled for code fetching using the instruction
pointer, or
• A data-memory write operation sets the SDPS and activates the pointer used for writing as the active source pointer.
move DP[1], DP[1]
; select DP[1] as the active pointer
move dst, @DP[1]
; read from pointer
move @DP[1], src
; write using a data pointer
; DP[0] is needed
move DP[0], DP[0]
; select DP[0] as the active pointer
To simplify data pointer increment/decrement operations without disturbing register data, a virtual NUL destination has
been assigned to system module 6, subindex 7 to serve as a “bit bucket .” Data-pointer increment/decrement opera-
tions can be done as follows without altering the contents of any other register:
move NUL, @DP[0]++ ; increment DP[0]
move NUL, @DP[0]-- ; decrement DP[0]
The following data-pointer-related instructions are invalid:
move @++DP[0], @DP[0]++
move @++DP[1], @DP[1]++
move @BP[++Offs], @BP[Offs++]
move @--DP[0], @DP[0]--
move @--DP[1], @DP[1]--
move @BP[--Offs], @BP[Offs--]
move @++DP[0], @DP[0]--