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