2 ; MSP430FR2355 minimal declarations for FastForth usage
3 DEVICE = "MSP430FR2355"
6 ; ----------------------------------------------
7 ; MSP430FR2355 MEMORY MAP
8 ; ----------------------------------------------
10 ; 0006-001F = tiny RAM
11 ; 0020-0FFF = peripherals (4 KB)
12 ; 1000-17FF = ROM bootstrap loader BSL1 (2k)
13 ; 1800-19FF = information memory (FRAM 512 B)
14 ; 1A00-1A31 = TLV device descriptor info (FRAM 128 B)
16 ; 2000-2FFF = RAM (4 KB)
18 ; 8000-FF7F = code memory (FRAM 15232 B)
19 ; FF80-FFFF = interrupt vectors (FRAM 128 B)
20 ; FFC00-FFFFF = BSL2 (2k)
21 ; ----------------------------------------------
22 ; MSP430FR2355 DEVICE ID
23 ; ----------------------------------------------
24 ; 1A04 = 0C, 1A05 = 83
25 ; ----------------------------------------------
26 PAGESIZE .equ 512 ; MPU unit
27 ; ----------------------------------------------
29 ; ----------------------------------------------
32 ; ----------------------------------------------
34 ; ----------------------------------------------
39 TLV_ORG .equ 01A00h ; Device Descriptor Info (Tag-Lenght-Value)
41 ; ----------------------------------------------
43 ; ----------------------------------------------
46 ; ----------------------------------------------
48 ; ----------------------------------------------
49 MAIN_ORG .equ 08000h ; Code space start
50 ; ----------------------------------------------
51 ; Interrupt Vectors and signatures - MSP430FR2355
52 ; ----------------------------------------------
53 SIGNATURES .equ 0FF80h ; JTAG/BSL signatures
54 JTAG_SIG1 .equ 0FF80h ; if 0 (electronic fuse=0) enable JTAG/SBW ; reset by wipe and by S1+<reset>
55 JTAG_SIG2 .equ 0FF82h ; if JTAG_SIG <> |0xFFFFFFFF, 0x00000000|, SBW and JTAG are locked
56 BSL_SIG1 .equ 0FF84h ;
57 BSL_SIG2 .equ 0FF86h ;
58 BSL_CONF_SIG .equ 0FF88h ;
59 BSL_CONF .equ 0FF8Ah ;
60 BSL_I2C_ADRE .equ 0FF8Ch ;
61 JTAG_PASSWORD .equ 0FF88h ; 256 bits
62 BSL_PASSWORD .equ 0FFE0h ; 256 bits
63 VECT_ORG .equ 0FFCEh ; FFCE-FFFF : 24 vectors + reset
65 ; ----------------------------------------------
67 ; .org INTVECT ; FFCE-FFFF 24 vectors + reset
69 ; .word reset ; FFCEh - P4
70 ; .word reset ; FFD0h - P3
71 ; .word reset ; FFD2h - P2
72 ; .word reset ; FFD4h - P1
73 ; .word reset ; FFD6h - SAC1-SAC3
74 ; .word reset ; FFD8h - SAC0-SAC2
75 ; .word reset ; FFDAh - eCOMPx
76 ; .word reset ; FFDCh - ADC10
77 ; .word reset ; FFDEh - eUSCI_B1
78 ; .word reset ; FFE0h - eUSCI_B0
79 ; .word reset ; FFE2h - eUSCI_A1
80 ; .word reset ; FFE4h - eUSCI_A0
81 ; .word reset ; FFE6h - WDT
82 ; .word reset ; FFE8h - RTC
83 ; .word reset ; FFEAh - TB3_x
84 ; .word reset ; FFECh - TB3_0
85 ; .word reset ; FFEEh - TB2_x
86 ; .word reset ; FFF0h - TB2_0
87 ; .word reset ; FFF2h - TB1_x
88 ; .word reset ; FFF4h - TB1_0
89 ; .word reset ; FFF6h - TB0_x
90 ; .word reset ; FFF8h - TB0_0
91 ; .word reset ; FFFAh - UserNMI
92 ; .word reset ; FFFCh - SysNMI
93 ; .word reset ; FFFEh - Reset
95 ; ----------------------------------------------------------------------
96 ; MSP430FR2355 Peripheral File Map
97 ; ----------------------------------------------------------------------
98 SFR_SFR .equ 0100h ; Special function
99 PMM_SFR .equ 0120h ; PMM
100 SYS_SFR .equ 0140h ; SYS
101 CS_SFR .equ 0180h ; Clock System
102 FRAM_SFR .equ 01A0h ; FRAM control
104 WDT_A_SFR .equ 01CCh ; Watchdog
105 PA_SFR .equ 0200h ; PORT1/2
106 PB_SFR .equ 0220h ; PORT3/4
107 PC_SFR .equ 0240h ; PORT5/6
114 eUSCI_A0_SFR .equ 0500h ; eUSCI_A0
115 eUSCI_B0_SFR .equ 0540h ; eUSCI_B0
116 eUSCI_A1_SFR .equ 0580h ; eUSCI_A1
117 eUSCI_B1_SFR .equ 05C0h ; eUSCI_B1
118 BACK_MEM_SFR .equ 0660h
120 ADC10_B_SFR .equ 0700h
121 eCOMP0_SFR .equ 08E0h
122 eCOMP1_SFR .equ 0900h
128 ; ----------------------------------------------------------------------
129 ; POWER ON RESET AND INITIALIZATION : LOCK PMM_LOCKLPM5
130 ; ----------------------------------------------------------------------
134 PM5CTL0 .equ PMM_SFR + 10h ; Power mode 5 control register 0
135 LOCKLPM5 .equ 1 ; bit position
137 ; ----------------------------------------------------------------------
138 ; POWER ON RESET SYS config
139 ; ----------------------------------------------------------------------
140 SYSCTL .equ SYS_SFR + 00h ; System control
141 SYSBSLC .equ SYS_SFR + 02h ; Bootstrap loader configuration area
142 SYSJMBC .equ SYS_SFR + 06h ; JTAG mailbox control
143 SYSJMBI0 .equ SYS_SFR + 08h ; JTAG mailbox input 0
144 SYSJMBI1 .equ SYS_SFR + 0Ah ; JTAG mailbox input 1
145 SYSJMBO0 .equ SYS_SFR + 0Ch ; JTAG mailbox output 0
146 SYSJMBO1 .equ SYS_SFR + 0Eh ; JTAG mailbox output 1
147 SYSBERRIV .equ SYS_SFR + 18h ; Bus Error vector generator
148 SYSUNIV .equ SYS_SFR + 1Ah ; User NMI vector generator
149 SYSSNIV .equ SYS_SFR + 1Ch ; System NMI vector generator
150 SYSRSTIV .equ SYS_SFR + 1Eh ; Reset vector generator
151 SYSCFG0 .equ SYS_SFR + 20h ; System configuration 0
152 SYSCFG1 .equ SYS_SFR + 22h ; System configuration 1
153 SYSCFG2 .equ SYS_SFR + 24h ; System configuration 2
154 SYSCFG3 .equ SYS_SFR + 26h ; System configuration 3
156 ; ----------------------------------------------------------------------
157 ; POWER ON RESET AND INITIALIZATION : WATCHDOG TIMER A
158 ; ----------------------------------------------------------------------
160 WDTCTL .equ WDT_A_SFR + 00h ; Watchdog Timer Control */
162 ; WDTCTL Control Bits
164 WDTHOLD .equ 0080h ; WDT - Timer hold
165 WDTCNTCL .equ 0008h ; WDT timer counter clear
168 ; ----------------------------------------------------------------------
170 ; ----------------------------------------------------------------------
172 FRCTL0 .equ FRAM_SFR + 00h ; FRAM Controller Control 0
173 FRCTL0_H .equ FRAM_SFR + 01h ; FRAM Controller Control 0 high byte
175 ; ----------------------------------------------------------------------
176 ; POWER ON RESET AND INITIALIZATION : CLOCK SYSTEM
177 ; ----------------------------------------------------------------------
179 CSCTL0 .equ CS_SFR + 00h ; Clock System Control Register 0
180 CSCTL1 .equ CS_SFR + 02h ; Clock System Control Register 1
181 CSCTL2 .equ CS_SFR + 04h ; Clock System Control Register 2
182 CSCTL3 .equ CS_SFR + 06h ; Clock System Control Register 3
183 CSCTL4 .equ CS_SFR + 08h ; Clock System Control Register 4
184 CSCTL5 .equ CS_SFR + 0Ah ; Clock System Control Register 5
185 CSCTL6 .equ CS_SFR + 0Ch ; Clock System Control Register 6
186 CSCTL7 .equ CS_SFR + 0Eh ; Clock System Control Register 7
187 CSCTL8 .equ CS_SFR + 10h ; Clock System Control Register 8
189 ; ----------------------------------------------------------------------
190 ; POWER ON RESET AND INITIALIZATION : PORT1/2
191 ; ----------------------------------------------------------------------
193 PAIN .equ PA_SFR + 00h ; Port A Input
194 PAOUT .equ PA_SFR + 02h ; Port A Output
195 PADIR .equ PA_SFR + 04h ; Port A Direction
196 PAREN .equ PA_SFR + 06h ; Port A Resistor Enable
197 PASEL0 .equ PA_SFR + 0Ah ; Port A Selection 0
198 PASEL1 .equ PA_SFR + 0Ch ; Port A Selection 1
199 PAIES .equ PA_SFR + 18h ; Port A Interrupt Edge Select
200 PAIE .equ PA_SFR + 1Ah ; Port A Interrupt Enable
201 PAIFG .equ PA_SFR + 1Ch ; Port A Interrupt Flag
203 P1IN .equ PA_SFR + 00h ; Port 1 Input
204 P1OUT .equ PA_SFR + 02h ; Port 1 Output
205 P1DIR .equ PA_SFR + 04h ; Port 1 Direction
206 P1REN .equ PA_SFR + 06h ; Port 1 Resistor Enable
207 P1SEL0 .equ PA_SFR + 0Ah ; Port 1 Selection 0
208 P1SEL1 .equ PA_SFR + 0Ch ; Port 1 Selection 1
209 P1IV .equ PA_SFR + 0Eh ; Port 1 Interrupt Vector word
210 P1IES .equ PA_SFR + 18h ; Port 1 Interrupt Edge Select
211 P1IE .equ PA_SFR + 1Ah ; Port 1 Interrupt Enable
212 P1IFG .equ PA_SFR + 1Ch ; Port 1 Interrupt Flag
214 P2IN .equ PA_SFR + 01h ; Port 2 Input
215 P2OUT .equ PA_SFR + 03h ; Port 2 Output
216 P2DIR .equ PA_SFR + 05h ; Port 2 Direction
217 P2REN .equ PA_SFR + 07h ; Port 2 Resistor Enable
218 P2SEL0 .equ PA_SFR + 0Bh ; Port 2 Selection 0
219 P2SEL1 .equ PA_SFR + 0Dh ; Port 2 Selection 1
220 P2IES .equ PA_SFR + 19h ; Port 2 Interrupt Edge Select
221 P2IE .equ PA_SFR + 1Bh ; Port 2 Interrupt Enable
222 P2IFG .equ PA_SFR + 1Dh ; Port 2 Interrupt Flag
223 P2IV .equ PA_SFR + 1Eh ; Port 2 Interrupt Vector word
225 ; ----------------------------------------------------------------------
226 ; POWER ON RESET AND INITIALIZATION : PORT3/4
227 ; ----------------------------------------------------------------------
229 PBIN .equ PB_SFR + 00h ; Port B Input
230 PBOUT .equ PB_SFR + 02h ; Port B Output
231 PBDIR .equ PB_SFR + 04h ; Port B Direction
232 PBREN .equ PB_SFR + 06h ; Port B Resistor Enable
233 PBSEL0 .equ PB_SFR + 0Ah ; Port B Selection 0
234 PBSEL1 .equ PB_SFR + 0Ch ; Port B Selection 1
235 PBIES .equ PB_SFR + 18h ; Port B Interrupt Edge Select
236 PBIE .equ PB_SFR + 1Ah ; Port B Interrupt Enable
237 PBIFG .equ PB_SFR + 1Ch ; Port B Interrupt Flag
239 P3IN .equ PB_SFR + 00h ; Port 3 Input
240 P3OUT .equ PB_SFR + 02h ; Port 3 Output
241 P3DIR .equ PB_SFR + 04h ; Port 3 Direction
242 P3REN .equ PB_SFR + 06h ; Port 3 Resistor Enable
243 P3SEL0 .equ PB_SFR + 0Ah ; Port 3 Selection 0
244 P3SEL1 .equ PB_SFR + 0Ch ; Port 3 Selection 1
245 P3IV .equ PB_SFR + 0Eh ; Port 3 Interrupt Vector word
246 P3IES .equ PB_SFR + 18h ; Port 3 Interrupt Edge Select
247 P3IE .equ PB_SFR + 1Ah ; Port 3 Interrupt Enable
248 P3IFG .equ PB_SFR + 1Ch ; Port 3 Interrupt Flag
250 P4IN .equ PB_SFR + 01h ; Port 4 Input
251 P4OUT .equ PB_SFR + 03h ; Port 4 Output
252 P4DIR .equ PB_SFR + 05h ; Port 4 Direction
253 P4REN .equ PB_SFR + 07h ; Port 4 Resistor Enable
254 P4SEL0 .equ PB_SFR + 0Bh ; Port 4 Selection 0
255 P4SEL1 .equ PB_SFR + 0Dh ; Port 4 Selection 1
256 P4IES .equ PB_SFR + 19h ; Port 4 Interrupt Edge Select
257 P4IE .equ PB_SFR + 1Bh ; Port 4 Interrupt Enable
258 P4IFG .equ PB_SFR + 1Dh ; Port 4 Interrupt Flag
259 P4IV .equ PB_SFR + 1Eh ; Port 4 Interrupt Vector word
261 ; ----------------------------------------------------------------------
262 ; POWER ON RESET AND INITIALIZATION : PORT5/6
263 ; ----------------------------------------------------------------------
266 PCIN .set PC_SFR + 00h ; Port C Input
267 PCOUT .set PC_SFR + 02h ; Port C Output 1/0 or pullup/pulldown resistor
268 PCDIR .set PC_SFR + 04h ; Port C Direction
269 PCREN .set PC_SFR + 06h ; Port C Resistor Enable
270 PCSEL0 .set PC_SFR + 0Ah ; Port C Selection 0
271 PCSEL1 .set PC_SFR + 0Ch ; Port C Selection 1
273 P5IN .set PC_SFR + 00h ; Port 5 Input */
274 P5OUT .set PC_SFR + 02h ; Port 5 Output
275 P5DIR .set PC_SFR + 04h ; Port 5 Direction
276 P5REN .set PC_SFR + 06h ; Port 5 Resistor Enable
277 P5SEL0 .set PC_SFR + 0Ah ; Port 5 Selection 0
278 P5SEL1 .set PC_SFR + 0Ch ; Port 5 Selection 1
280 P6IN .set PC_SFR + 01h ; Port 6 Input */
281 P6OUT .set PC_SFR + 03h ; Port 6 Output
282 P6DIR .set PC_SFR + 05h ; Port 6 Direction
283 P6REN .set PC_SFR + 07h ; Port 6 Resistor Enable
284 P6SEL0 .set PC_SFR + 0Bh ; Port 6 Selection 0
285 P6SEL1 .set PC_SFR + 0Dh ; Port 6 Selection 1
289 ; ----------------------------------------------------------------------
291 ; ----------------------------------------------------------------------
292 RTCCTL .equ RTC_SFR + 00h ; Real-Time Clock Control
293 RTCIV .equ RTC_SFR + 04h ; Real-Time Clock Interrupt Vector
294 RTCMOD .equ RTC_SFR + 08h ; Real-Timer Clock Modulo
295 RTCCNT .equ RTC_SFR + 0Ch ; Real-Time Clock Counter
297 ; ----------------------------------------------------------------------
299 ; ----------------------------------------------------------------------
301 MPY .equ MPY_SFR + 00h ; Multiply16 Unsigned/Operand 1 */
302 MPYS .equ MPY_SFR + 02h ; Multiply16 signed/Operand 1
303 MAC .equ MPY_SFR + 04h ; MultiplyAccumulate16 Unsigned/Operand 1 */
304 MACS .equ MPY_SFR + 06h ; MultiplyAccumulate16 signed/Operand 1
305 OP2 .equ MPY_SFR + 08h ; Operand2_16 */
306 RESLO .equ MPY_SFR + 0Ah ; 16x16-bit result low - least significant word */
307 RESHI .equ MPY_SFR + 0Ch ; 16x16-bit result high */
308 SUMEXT .equ MPY_SFR + 0Eh ; 16x16-bit sum extension register
309 MPY32L .equ MPY_SFR + 10h ; Multiply32 Unsigned/Operand 1
310 MPY32H .equ MPY_SFR + 12h ; Multiply32 Unsigned/Operand 1
311 MPYS32L .equ MPY_SFR + 14h ; Multiply32 signed/Operand 1
312 MPYS32H .equ MPY_SFR + 16h ; Multiply32 signed/Operand 1
313 MAC32L .equ MPY_SFR + 18h ; MultiplyAccumulate32 Unsigned/Operand 1
314 MAC32H .equ MPY_SFR + 1Ah ; MultiplyAccumulate32 Unsigned/Operand 1
315 MACS32L .equ MPY_SFR + 1Ch ; MultiplyAccumulate32 signed/Operand 1
316 MACS32H .equ MPY_SFR + 1Eh ; MultiplyAccumulate32 signed/Operand 1
317 OP2L .equ MPY_SFR + 20h ; Multiply32 Operand 2
318 OP2H .equ MPY_SFR + 22h ; Multiply32 Operand 2
319 RES0 .equ MPY_SFR + 24h ; 32x32-bit result 0 - least significant word */
320 RES1 .equ MPY_SFR + 26h ; 32x32-bit result 1 */
321 RES2 .equ MPY_SFR + 28h ; 32x32-bit result 2 */
322 RES3 .equ MPY_SFR + 2Ah ; 32x32-bit result 3 */
323 MPY32CTL0 .equ MPY_SFR + 2Ch ; MPY32 control register 0
329 UCSWRST .equ 1 ; eUSCI Software Reset
330 UCTXIE .equ 2 ; eUSCI Transmit Interrupt Enable
331 UCRXIE .equ 1 ; eUSCI Receive Interrupt Enable
332 UCTXIFG .equ 2 ; eUSCI Transmit Interrupt Flag
333 UCRXIFG .equ 1 ; eUSCI Receive Interrupt Flag
335 ; ----------------------------------------------------------------------
337 ; ----------------------------------------------------------------------
340 TERM_CTLW0 .equ eUSCI_A0_SFR + 00h ; eUSCI_A0 Control Word Register 0
341 TERM_BRW .equ eUSCI_A0_SFR + 06h ; eUSCI_A0 Baud Word Rate 0
342 TERM_MCTLW .equ eUSCI_A0_SFR + 08h ; eUSCI_A0 Modulation Control
343 TERM_STATW .equ eUSCI_A0_SFR + 0Ah ; eUSCI_A0 status Word Register
344 TERM_RXBUF .equ eUSCI_A0_SFR + 0Ch ; eUSCI_A0 Receive Buffer
345 TERM_TXBUF .equ eUSCI_A0_SFR + 0Eh ; eUSCI_A0 Transmit Buffer
346 TERM_IE .equ eUSCI_A0_SFR + 1Ah ; eUSCI_A0 Interrupt Enable Register
347 TERM_IFG .equ eUSCI_A0_SFR + 1Ch ; eUSCI_A0 Interrupt Flags Register
348 TERM_VEC .equ 0FFE4h ; int vector for eUSCI_A0
352 SD_CTLW0 .equ eUSCI_A0_SFR + 00h ; eUSCI_A0 Control Word Register 0
353 SD_BRW .equ eUSCI_A0_SFR + 06h ; eUSCI_A0 Baud Word Rate 0
354 SD_RXBUF .equ eUSCI_A0_SFR + 0Ch ; eUSCI_A0 Receive Buffer 8
355 SD_TXBUF .equ eUSCI_A0_SFR + 0Eh ; eUSCI_A0 Transmit Buffer 8
356 SD_IFG .equ eUSCI_A0_SFR + 1Ch ; eUSCI_A0 Interrupt Flags Register
360 ; ----------------------------------------------------------------------
362 ; ----------------------------------------------------------------------
364 TERM_CTLW0 .equ eUSCI_A1_SFR + 00h ; eUSCI_A1 Control Word Register 0
365 TERM_BRW .equ eUSCI_A1_SFR + 06h ; eUSCI_A1 Baud Word Rate 0
366 TERM_MCTLW .equ eUSCI_A1_SFR + 08h ; eUSCI_A1 Modulation Control
367 TERM_STATW .equ eUSCI_A1_SFR + 0Ah ; eUSCI_A1 status Word Register
368 TERM_RXBUF .equ eUSCI_A1_SFR + 0Ch ; eUSCI_A1 Receive Buffer
369 TERM_TXBUF .equ eUSCI_A1_SFR + 0Eh ; eUSCI_A1 Transmit Buffer
370 TERM_IE .equ eUSCI_A1_SFR + 1Ah ; eUSCI_A1 Interrupt Enable Register
371 TERM_IFG .equ eUSCI_A1_SFR + 1Ch ; eUSCI_A1 Interrupt Flags Register
372 TERM_VEC .equ 0FFE2h ; int vector for eUSCI_A1
376 SD_CTLW0 .equ eUSCI_A1_SFR + 00h ; eUSCI_A1 Control Word Register 0
377 SD_BRW .equ eUSCI_A1_SFR + 06h ; eUSCI_A1 Baud Word Rate 0
378 SD_RXBUF .equ eUSCI_A1_SFR + 0Ch ; eUSCI_A1 Receive Buffer 8
379 SD_TXBUF .equ eUSCI_A1_SFR + 0Eh ; eUSCI_A1 Transmit Buffer 8
380 SD_IFG .equ eUSCI_A1_SFR + 1Ch ; eUSCI_A1 Interrupt Flags Register
383 ; ----------------------------------------------------------------------
385 ; ----------------------------------------------------------------------
388 SD_CTLW0 .equ eUSCI_B0_SFR + 00h ; USCI_B0 Control Word Register 0
389 SD_BRW .equ eUSCI_B0_SFR + 06h ; USCI_B0 Baud Word Rate 0
390 SD_RXBUF .equ eUSCI_B0_SFR + 0Ch ; USCI_B0 Receive Buffer 8
391 SD_TXBUF .equ eUSCI_B0_SFR + 0Eh ; USCI_B0 Transmit Buffer 8
392 SD_IFG .equ eUSCI_B0_SFR + 2Ch ; USCI_B0 Interrupt Flags Register
395 ; ----------------------------------------------------------------------
397 ; ----------------------------------------------------------------------
399 SD_CTLW0 .equ eUSCI_B1_SFR + 00h ; USCI_B1 Control Word Register 0
400 SD_BRW .equ eUSCI_B1_SFR + 06h ; USCI_B1 Baud Word Rate 0
401 SD_RXBUF .equ eUSCI_B1_SFR + 0Ch ; USCI_B1 Receive Buffer 8
402 SD_TXBUF .equ eUSCI_B1_SFR + 0Eh ; USCI_B1 Transmit Buffer 8
403 SD_IFG .equ eUSCI_B1_SFR + 2Ch ; USCI_B1 Interrupt Flags Register