ST10F269-T3
5.5.3 - Programming Examples
Most of the microcontroller programs are written in the C language where the data page pointers are
automatically set by the compiler. But because the C compiler may use the not allowed direct addressing
mode for Flash write addresses, it is necessary to program the organizational Flash accesses (command
sequences) with assembler in-line routines which use indirect addressing.
Example 1 Performing the command Read/Reset
We assume that in the initialization phase the lowest 32K Bytes of Flash memory (sector 0) have been
mapped to segment 1.
According to the usual way of ST10 data addressing with data page pointers, address bit A15 and A14 of
a 16-bit command write address select the data page pointer (DPP) which contains the upper 10-bit for
building the 24-bit physical data address. Address bit A13...A0 represent the address offset. As the bit
A14...A17 are "don’t care" when written a Flash command in the Command Interface (CI), we can choose
the most convenient DPPx register for address handling.
The following examples are making usage of DPP0. We just have to make sure, that DPP0 points to
active Flash memory space.
To be independent of mapping of sector 0 we choose for all DPPs which are used for Flash address
handling, to point to segment 2.
For this reason we load DPP0 with value 08h (00 0000 l000b).
MOV R5, #01554h
MOV R6, #02AA8h
SCXT DPPO, #08h
MOV R7, #0A8h
MOV [R5], R7
MOV R7, #054h
MOV [R6], R7
MOV R7, #0F0h
MOV [R5], R7
POP DPP0
;load auxilary register R5 with command address
;(used in command cycle 1)
;load auxilary register R6 with command address
;(used in command cycle 2)
;push data page pointer 0 and load it to point to
;segment 2
;load register R7 with 1st CI enable command
;command cycle 1
;load register R7 with 2cd CI enable command
;command cycle 2
;load register R7 with Read/Reset command
;command cycle 3. Address is don’t care
;restore DPP0 value
In the example above the 16-bit registers R5 and R6 are used as auxiliary registers for indirect
addressing.
Example 2 Performing a Program Word command
We assume that in the initialization phase the lowest 32K Bytes of Flash memory (sector 0) have been
mapped to segment 1.The data to be written is loaded in register R13, the address to be programmed is
loaded in register R11/R12 (segment number in R11, segment offset in R12).
MOV R5, #01554h
MOV R6, #02AA8h
SXCT DPPO, #08h
MOV R7, #0A8h
MOV [R5], R7
MOV R7, #054h
MOV [R6], R7
MOV R7, #0A0h
MOV [R5], R7
POP DPP0
;load auxilary register R5 with command address
;(used in command cycle 1)
;load auxilary register R6 with command address
;(used in command cycle 2)
;push data page pointer 0 and load it to point to
;segment 2
;load register R7 with 1st CI enable command
;command cycle 1
;load register R7 with 2cd CI enable command
;command cycle 2
;load register R7 with Program Word command
;command cycle 3
;restore DPP0: following addressing to the Flash
;will use EXTended instructions
;R11 contains the segment to be programmed
27/160