OSDN Git Service

V3.5 ABORT messages display I2C address
[fast-forth/master.git] / inc / MSP_EXP430FR5969.asm
1 ; -*- coding: utf-8 -*-
2 ; MSP-EXP430FR5969.inc
3
4 ; ======================================================================
5 ; INIT MSP-EXP430FR5969 board
6 ; ======================================================================
7
8 ;
9 ; J21 : external target
10 ; ---------------------
11 ; P1 - RX0  - P2.1
12 ; P2 - VCC
13 ; P3 - TEST - TEST
14 ; P4 - RST  - RST
15 ; P5 - GND
16 ; P6 - TX0  - P2.0
17
18
19 ; J3: JTAG
20 ; --------
21 ; P1 - TDO  - PJ.0
22 ; P2 - V_debug
23 ; P3 - TDI  - PJ.1
24 ; P4 - V_ext
25 ; P5 - TMS  - PJ.2
26 ; P6 - NC
27 ; P7 - TCK  - PJ.3
28 ; P8 - TEST - TEST
29 ; P9 - GND
30 ; P10- CTS  - P4.0
31 ; P11- RST  - RESET
32 ; P12- TX0  - P2.0
33 ; P13- RTS  - P4.1
34 ; P14- RX0  - P2.1
35
36
37 ; J13   eZ-FET <-> target
38 ; -----------------------
39 ; P1 <-> P2 - NC
40 ; P3 <-> P4 - TEST  - TEST
41 ; P5 <-> P6 - RST   - RST
42 ; P7 <-> P8 - TX0   - P2.0 ---> RX UARTtoUSB
43 ; P9 <->P10 - RX0   - P2.1 <--- TX UARTtoUSB
44 ; P11<->P12 - CTS   - P4.0
45 ; P13<->P14 - RTS   - P4.1
46 ; P15<->P16 - VCC   - VDD
47 ; P17<->P18 - 5V
48 ; P19<->P20 - GND   - VSS
49
50 ; Launchpad Header Left J4
51 ; ------------------------
52 ; P1 - VCC
53 ; P2 - P4.2
54 ; P3 - P2.6 UCA1 RX/SOMI ---> SD_SDO
55 ; P4 - P2.5 UCA1 TX/SIMO <--- SD_SDI
56 ; P5 - P4.3              ---> SD_SS
57 ; P6 - P2.4 UCA1     CLK ---> SD_CLK
58 ; P7 - P2.2 TB0.2 UCB0CLK
59 ; P8 - P3.4
60 ; P9 - P3.5
61 ; P10- P3.6
62
63 ; Launchpad Header Right J5
64 ; -------------------------
65 ; P11- P1.3
66 ; P12- P1.4
67 ; P13- P1.5
68 ; P14- P1.6  UCB0 SIMO/SDA
69 ; P15- P1.7  UCB0 SOMI/SCL
70 ; P16- RST
71 ; P17- NC
72 ; P18- P3.0
73 ; P19- P1.2
74 ; P20- GND
75
76
77 ; switch-keys:
78 ; S1 - P4.5
79 ; S2 - P1.1
80 ; S3 - RST
81
82 ; LEDS:
83 ; LED1 - J6 - P4.6
84 ; LED2 -      P1.0
85
86 ; XTAL LF 32768 Hz
87 ; Y4 - PJ.4
88 ; Y4 - PJ.5
89
90 ; XTAL HF
91 ; Y1 - PJ.6
92 ; Y1 - PJ.7
93
94 ; Clocks:
95 ; 8 MHz DCO intern
96
97
98
99 ; ===================================================================================
100 ; in case of 3.3V powered by UARTtoUSB bridge, open J13 straps {RST,TST,V+,5V} BEFORE
101 ; ===================================================================================
102
103 ; -----------------------------------------------
104 ; MSP430FR5969        LAUNCHPAD <--> OUTPUT WORLD
105 ; -----------------------------------------------
106 ; P4.6 - J6 - LED1 red
107 ; P1.0 - LED2 green
108
109 ; P4.5 - Switch S1              <--- LCD contrast + (finger :-)
110 ; P1.1 - Switch S2              <--- LCD contrast - (finger ;-)
111                                     
112 ;  GND -                 J1.2   <-------+---0V0---------->  1 LCD_Vss
113 ;  VCC -                 J1.3   >------ | --3V6-----+---->  2 LCD_Vdd
114 ;                                       |           |
115 ;                                     |___    470n ---
116 ;                                       ^ |        ---
117 ;                                      / \ BAT54    |
118 ;                                      ---          |
119 ;                                  100n |    2k2    |
120 ; P2.2 - UCB0 CLK TB0.2  J4.7   >---||--+--^/\/\/v--+---->  3 LCD_Vo (=0V6 without modulation)
121 ; P3.4 -                 J4.8   ----------orange--------->  4 LCD_RS
122 ; P3.5 -                 J4.9   ----------blue----------->  5 LCD_R/W
123 ; P3.6 -                 J4.10  ----------black---------->  6 LCD_EN0
124 ; PJ.0 -                 J3.1   <---------brown----------> 11 LCD_DB4
125 ; PJ.1 -                 J3.3   <---------red------------> 12 LCD_DB5
126 ; PJ.2 -                 J3.5   <---------orange---------> 13 LCD_DB5
127 ; PJ.3 -                 J3.7   <---------yellow---------> 14 LCD_DB7
128          
129 ;                                 +--4k7-< DeepRST <-- GND 
130 ;                                 |
131 ; P2.0 - UCA0 TXD        J13.8  <-+->white--> RX   UARTtoUSB bridge
132 ; P2.1 - UCA0 RXD        J13.10 <----green--- TX   UARTtoUSB bridge
133 ; P4.1 - RTS             J13.14 -----blue---> CTS  UARTtoUSB bridge (optional hardware control flow)
134 ;  VCC -                 J13.16 <---- VCC  (optional supply from UARTtoUSB bridge - WARNING ! 3.3V !)
135 ;  GND -                 J13.20 <---> GND  (optional supply from UARTtoUSB bridge)
136          
137 ;  VCC -                 J11.1  ----> VCC  SD_CardAdapter
138 ;  GND -                 J12.3  <---> GND  SD_CardAdapter
139 ; P2.4 - UCA1 CLK        J4.6   ----> CLK  SD_CardAdapter (SCK)  
140 ; P2.5 - UCA1 TXD/SIMO   J4.4   ----> SDI  SD_CardAdapter (MOSI)
141 ; P2.6 - UCA1 RXD/SOMI   J4.3   <---- SDO  SD_CardAdapter (MISO)
142 ; P4.3 -                 J4.5   ----> CS   SD_CardAdapter (Card Select)
143 ; P4.2 -                 J4.2   <---- CD   SD_CardAdapter (Card Detect)
144 ;                                                                    
145 ; P4.0 use is not compatible with core option "TERMINAL5WIRES"
146 ; P4.0 -                 J3.10  <---- OUT  IR_Receiver (1 TSOP32236) ───┐
147 ;                                                                       └┌───┐
148 ;  VCC -                 J3.2   ----> VCC  IR_Receiver (2 TSOP32236) ────| O |
149 ;                                                                       ┌└───┘
150 ;  GND -                 J3.9   <---> GND  IR_Receiver (3 TSOP32236) ───┘
151
152 ; P1.2 -                 J5.19  <---> SDA  I2C SOFTWARE MASTER
153 ; P1.3 -                 J5.11  <---> SCL  I2C SOFTWARE MASTER
154 ; P1.4 -           TB0.1 J5.12  <---> free
155 ; P1.5 - UCA0 CLK  TB0.2 J5.13  <---> free
156 ; P1.7 - UCB0 SCL/SOMI   J5.14  ----> SCL  I2C MASTER/SLAVE
157 ; P1.6 - UCB0 SDA/SIMO   J5.15  <---> SDA  I2C MASTER/SLAVE
158 ; P3.0 -                 J5.7   <---- free
159
160 ; PJ.4 - LFXI 32768Hz quartz  
161 ; PJ.5 - LFXO 32768Hz quartz  
162 ; PJ.6 - HFXI 
163 ; PJ.7 - HFXO 
164   
165 ; P2.3 - NC
166 ; P2.7 - NC
167 ; P3.1 - NC
168 ; P3.2 - NC
169 ; P3.3 - NC
170 ; P3.7 - NC
171 ; P4.4 - NC
172 ; P4.7 - NC
173
174
175
176 ; ----------------------------------------------------------------------
177 ; POWER ON RESET AND INITIALIZATION : I/O
178 ; ----------------------------------------------------------------------
179 ; ----------------------------------------------------------------------
180 ; POWER ON RESET AND INITIALIZATION : PORT1/2
181 ; ----------------------------------------------------------------------
182
183 ; reset state : Px{DIR,REN,SEL0,SEL1,SELC,IE,IFG,IV} = 0 ; Px{IN,OUT,IES} = ?
184
185
186 ; PORT1 usage
187 ; P1.0 - LED2 green   output low
188 LED2_OUT    .equ    202h
189 LED2_DIR    .equ    204h
190 LED2        .equ    1           ;  P1.0 LED2 green
191
192 ; P1.1 - Switch S2    input with pullup resistor
193 SW2_IN      .equ    P1IN
194 SW2         .equ    2     ; P1.1 = S2
195
196
197 ; PORTx default wanted state : pins as input with pullup resistor
198
199             MOV     #0FFFEh,&PAOUT  ; all pins high  else P1.0 (LED2)
200             BIS     #-1,&PAREN  ; all pins 1 with pull resistors else P1.0 (LED2)
201
202     .IFDEF UCB0_TERM
203 TERM_IN     .equ    P1IN
204 TERM_SEL    .equ    P1SEL1
205 TERM_REN    .equ    P1REN
206 SDA         .equ    40h        ; P1.6 = SDA
207 SCL         .equ    80h        ; P1.7 = SCL
208 BUS_TERM    .equ    0C0h
209     .ENDIF
210
211     .IFDEF UCA0_TERM
212 ; P2.0  UCA0-TXD    --> USB2UART RXD    
213 ; P2.1  UCA0-RXD    <-- USB2UART TXD 
214 TERM_IN     .equ P2IN
215 TERM_SEL    .equ P2SEL1
216 TERM_REN    .equ P2REN
217 TXD         .equ 1      ; P2.0 = TX
218 RXD         .equ 2      ; P2.1 = RX
219 BUS_TERM    .equ 3
220     .ENDIF
221
222     .IFDEF UCA1_SD
223 SD_SEL      .equ PASEL1 ; to configure UCA1
224 SD_REN      .equ PAREN  ; to configure pullup resistors
225 BUS_SD      .equ 7000h  ; pins P2.4 as UCB0CLK, P2.5 as UCB0SIMO & P2.6 as UCB0SOMI
226     .ENDIF
227
228 ; ----------------------------------------------------------------------
229 ; POWER ON RESET AND INITIALIZATION : PORT3/4
230 ; ----------------------------------------------------------------------
231 ; reset state : Px{DIR,REN,SEL0,SEL1,SELC,IE,IFG,IV} = 0 ; Px{IN,OUT,IES} = ?
232
233 ; PORT3 usage
234
235 ; PORT4 usage
236 ; P4.5 - switch S1
237 ; P4.6 - LED1 red
238
239 HANDSHAKOUT .equ    P4OUT
240 HANDSHAKIN  .equ    P4IN
241 CTS         .equ    1       ; P4.0
242 RTS         .equ    2       ; P4.1
243
244 SD_CDIN     .equ    P4IN
245 SD_CSOUT    .equ    P4OUT
246 SD_CSDIR    .equ    P4DIR
247 CD_SD       .equ    4       ; P4.2 as Card Detect
248 CS_SD       .equ    8       ; P4.3 as Chip Select    
249
250 SW1_IN      .equ    P4IN
251 SW1         .equ    20h     ; P4.5 = S1
252
253 WIPE_IN     .equ    P4IN
254 IO_WIPE     .equ    20h     ; P4.5 = S1 = FORTH Deep_RST pin
255
256 LED1_OUT    .equ    P4OUT
257 LED1_DIR    .equ    P4DIR
258 LED1        .equ    40h     ;  P4.6 LED1 red
259
260             BIS #-1,&PBREN  ; all pins as input with resistor
261             MOV #0BFFFh,&PBOUT  ; all pins as input with pull up resistor else P4.6
262
263     .IFDEF TERMINAL4WIRES
264 ; RTS output is wired to the CTS input of UART2USB bridge 
265 ; configure RTS as output high to disable RX TERM during start FORTH
266             BIS.B #RTS,&P4DIR   ; RTS as output high
267         .IFDEF TERMINAL5WIRES
268 ; CTS input must be wired to the RTS output of UART2USB bridge 
269 ; configure CTS as input low (true) to avoid lock when CTS is not wired
270             BIC.B #CTS,&P4OUT   ; CTS input pulled down
271         .ENDIF  ; TERMINAL5WIRES
272     .ENDIF  ; TERMINAL4WIRES
273
274 ; ----------------------------------------------------------------------
275 ; POWER ON RESET AND INITIALIZATION : PORTJ
276 ; ----------------------------------------------------------------------
277
278 ; reset state : Px{DIR,REN,SEL0,SEL1,SELC,IE,IFG,IV} = 0 ; Px{IN,OUT,IES} = ?
279
280 ; PORTx default wanted state : pins as input with pullup resistor
281
282             MOV.B #-1,&PJOUT    ; pullup resistors
283             BIS.B #-1,&PJREN    ; enable pullup/pulldown resistors
284
285 ; ----------------------------------------------------------------------
286 ; FRAM config
287 ; ----------------------------------------------------------------------
288
289     .IF  FREQUENCY > 8
290             MOV.B   #0A5h, &FRCTL0_H     ; enable FRCTL0 access
291             MOV.B   #10h, &FRCTL0         ; 1 waitstate @ 16 MHz
292             MOV.B   #01h, &FRCTL0_H       ; disable FRCTL0 access
293     .ENDIF
294
295 ; ----------------------------------------------------------------------
296 ; POWER ON RESET AND INITIALIZATION : CLOCK SYSTEM
297 ; ----------------------------------------------------------------------
298
299 ; DCOCLK: Internal digitally controlled oscillator (DCO).
300
301
302 ; CS code for MSP430FR5948
303             MOV.B   #CSKEY,&CSCTL0_H ;  Unlock CS registers
304
305     .IF FREQUENCY = 0.25
306 ;            MOV     #DCOFSEL1+DCOFSEL0,&CSCTL1      ; Set 8MHZ DCO setting (default value)
307             MOV     #DIVA_0 + DIVS_32 + DIVM_32,&CSCTL3
308             MOV     #4,X
309
310     .ELSEIF FREQUENCY = 0.5
311             MOV     #0,&CSCTL1                  ; Set 1MHZ DCO setting
312             MOV     #DIVA_2 + DIVS_2 + DIVM_2,&CSCTL3             ; set all dividers as 2
313             MOV     #8,X
314
315     .ELSEIF FREQUENCY = 1
316             MOV     #0,&CSCTL1                  ; Set 1MHZ DCO setting
317             MOV     #DIVA_0 + DIVS_0 + DIVM_0,&CSCTL3             ; set all dividers as 0
318             MOV     #16,X
319
320     .ELSEIF FREQUENCY = 2
321             MOV     #DCOFSEL1+DCOFSEL0,&CSCTL1  ; Set 4MHZ DCO setting
322             MOV     #DIVA_0 + DIVS_2 + DIVM_2,&CSCTL3
323             MOV     #32,X
324
325     .ELSEIF FREQUENCY = 4
326             MOV     #DCOFSEL1+DCOFSEL0,&CSCTL1  ; Set 4MHZ DCO setting
327             MOV     #DIVA_0 + DIVS_0 + DIVM_0,&CSCTL3             ; set all dividers as 0
328             MOV     #64,X
329
330     .ELSEIF FREQUENCY = 8
331 ;            MOV     #DCOFSEL2+DCOFSEL1,&CSCTL1  ; Set 8MHZ DCO setting (default value)
332             MOV     #DIVA_0 + DIVS_0 + DIVM_0,&CSCTL3             ; set all dividers as 0
333             MOV     #128,X
334
335     .ELSEIF FREQUENCY = 16
336             MOV     #DCORSEL+DCOFSEL2,&CSCTL1   ; Set 16MHZ DCO setting
337             MOV     #DIVA_0 + DIVS_0 + DIVM_0,&CSCTL3             ; set all dividers as 0
338             MOV     #256,X
339
340     .ELSEIF
341     .error "bad frequency setting, only 0.5,1,2,4,8,16 MHz"
342     .ENDIF
343
344     .IFDEF LF_XTAL
345             MOV     #SELA_LFXCLK+SELS_DCOCLK+SELM_DCOCLK,&CSCTL2
346     .ELSE
347             MOV     #SELA_VLOCLK+SELS_DCOCLK+SELM_DCOCLK,&CSCTL2
348     .ENDIF
349             MOV.B   #01h, &CSCTL0_H                               ; Lock CS Registers
350
351             BIS &SYSRSTIV,&SAVE_SYSRSTIV    ; store volatile SYSRSTIV preserving a pending request for DEEP_RST
352 ;            MOV &SAVE_SYSRSTIV,TOS  ;
353 ;            CMP #2,TOS              ; POWER ON ?
354 ;            JZ      ClockWaitX      ; yes
355 ;            RRUM    #2,X            ; wait only 125 ms
356 ClockWaitX  MOV     #5209,Y         ; wait 0.5s before starting after POWER ON
357 ClockWaitY  SUB     #1,Y            ;1
358             JNZ     ClockWaitY      ;2 5209x3 = 15625 cycles delay = 15.625ms @ 1MHz
359             SUB     #1,X            ; x 32 @ 1 MHZ = 500ms
360             JNZ     ClockWaitX      ; time to stabilize power source ( 500ms )
361
362 ; ----------------------------------------------------------------------
363 ; POWER ON RESET AND INITIALIZATION : REF
364 ; ----------------------------------------------------------------------
365
366             BIS   #8, &REFCTL
367
368 ; ----------------------------------------------------------------------
369 ; POWER ON RESET AND INITIALIZATION : RTC REGISTERS
370 ; ----------------------------------------------------------------------
371
372     .IFDEF LF_XTAL
373 ; LFXIN : PJ.4, LFXOUT : PJ.5
374     BIS.B   #010h,&PJSEL0   ; SEL0 for only LFXIN
375     BIC.B   #RTCHOLD,&RTCCTL1 ; Clear RTCHOLD = start RTC_B
376     .ENDIF
377