OSDN Git Service

034bd7ddeb763e3d258e9fdb44ca022229eed229
[fast-forth/master.git] / inc / MSP_EXP430FR2355.asm
1 ; -*- coding: utf-8 -*-
2
3 ; ======================================================================
4 ; INIT MSP-EXP430FR2355 board
5 ; ======================================================================
6
7 ; J101 (7xjumper)
8 ; "SBWTCK"   ---> TEST
9 ; "SBWTDIO"  ---> RST
10 ; "TXD"      <--- P4.3  == UCA0TXD <-- UCA0TXDBUf
11 ; "RXD"      ---> P4.2  == UCA0RXD --> UCA0RXDBUF
12 ; "3V3"      <--> 3V3
13 ; "5V0"      <--> 5V0
14 ; "GND"      <--> GND
15
16
17 ; SW1 -- P4.1
18 ; SW2 -- P2.3
19
20 ; LED1 - P1.0   (red)
21 ; LED2 - P6.6   (green)
22
23 ; I/O pins on J1:
24 ; J1.1  - 3V3
25 ; J1.2  - P1.5
26 ; J1.3  - P1.6
27 ; J1.4  - P1.7
28 ; J1.5  - P3.6
29 ; J1.6  - P5.2
30 ; J1.7  - P4.5
31 ; J1.8  - P3.4
32 ; J1.9  - P1.3
33 ; J1.10 - P1.2
34
35 ; I/O pins on J3:
36 ; J3.21 - 5V0
37 ; J3.22 - GND
38 ; J3.23 - P1.4 A4 SEED
39 ; J3.24 - P5.3 A11
40 ; J3.25 - P5.1 A9
41 ; J3.26 - P5.0 A8
42 ; J3.27 - P5.4
43 ; J3.28 - P1.1 A1 SEED
44 ; J3.29 - P3.5 OA3O
45 ; J3.30 - P3.1 OA2O
46
47
48 ; I/O pins on J2:
49 ; J2.11 - P3.0
50 ; J2.12 - P2.5
51 ; J2.13 - P4.4
52 ; J2.14 - P4.7
53 ; J2.15 - P4.6
54 ; J2.16 - RST
55 ; J2.17 - P4.0
56 ; J2.18 - P2.2
57 ; J2.19 - P2.0
58 ; J2.20 - GND
59
60 ; I/O pins on J4:
61 ; J2.31 - P3.2
62 ; J2.32 - P3.3
63 ; J2.33 - P2.4
64 ; J2.34 - P3.7
65 ; J2.35 - P6.4
66 ; J2.36 - P6.3
67 ; J2.37 - P6.2
68 ; J2.38 - P6.1
69 ; J2.39 - P6.0
70 ; J2.40 - 2.1
71
72 ; LFXTAL XOUT- P2.6
73 ; LFXTAL XIN - P2.7
74
75 ; ======================================================================
76 ; MSP-EXP430FR2355 LAUNCHPAD    <--> OUTPUT WORLD
77 ; ======================================================================
78
79 ;                                 +--4k7-< DeepRST switch <-- GND
80 ;                                 |
81 ; P4.3  - UCA1 TXD    J101.6 -  <-+-> RX  UARTtoUSB bridge
82 ; P4.2  - UCA1 RXD    J101.8 -  <---- TX  UARTtoUSB bridge
83 ; P2.0  - RTS         J2.19  -  ----> CTS UARTtoUSB bridge (TERMINAL4WIRES)
84 ; P2.1  - CTS         J4.40  -  <---- RTS UARTtoUSB bridge (TERMINAL5WIRES)
85
86 ; P1.2  - UCB0 SDA    J1.10  -  <---> SDA I2C Master_Slave
87 ; P1.3  - UCB0 SCL    J1.9   -  ----> SCL I2C Master_Slave
88
89 ; P2.2  -             J2.18  -  <---- TSSOP32236 (IR RC5)
90
91 ; P2.5  -             J2.13  -  <---- SD_CD (Card Detect)
92 ; P4.4  -             J2.12  -  ----> SD_CS (Card Select)
93 ; P4.5  - UCB1 CLK    J1.7   -  ----> SD_CLK
94 ; P4.6  - UCB1 SIMO   J2.15  -  ----> SD_SDI
95 ; P4.7  - UCB1 SOMI   J2.14  -  <---- SD_SDO
96
97 ; P6.0  -             J4.39  -  ----> SCL I2C Soft_Master
98 ; P6.1  -             J4.38  -  <---> SDA I2C Soft_Master
99
100 ; ----------------------------------------------------------------------
101 ; POWER ON RESET AND INITIALIZATION : I/O
102 ; ----------------------------------------------------------------------
103
104 ; ----------------------------------------------------------------------
105 ; POWER ON RESET AND INITIALIZATION : PORT1/2
106 ; ----------------------------------------------------------------------
107
108 ; reset state : Px{DIR,REN,SEL0,SEL1,SELC,IE,IFG,IV} = 0 ; Px{IN,OUT,IES} = ?
109
110 ; PORTA usage
111
112 LED1_OUT    .equ    P1OUT
113 LED1_DIR    .equ    P1DIR
114 LED1        .equ    1           ;  P1.0 LED1 red
115
116     .IFDEF UCB0_TERM            ;
117 TERM_SEL    .equ    P1SEL0
118 TERM_REN    .equ    P1REN
119 TERM_OUT    .equ    P1OUT
120 BUS_TERM    .equ    0Ch         ; P1.2=SDA, P1.3=SCL
121     .ENDIF
122
123 ;               P1.0  -   LED1 red
124 ; UART RTS      P2.0  -   J2.19     ---->   CTS UARTtoUSB bridge (TERMINAL4WIRES)
125 ; UART CTS      P2.1  -   J4.40     <----   RTS UARTtoUSB bridge (TERMINAL5WIRES)
126 ;               P2.3  -   SW2
127 ;               P2.5  -   J2.10     <----   SD_CD (Card Detect)
128
129             BIS #-1,&PAREN      ; all inputs with pull up/down resistors
130             MOV #0FFFEh,&PAOUT  ; all pins with pullup resistors else LED1
131
132     .IFDEF TERMINAL4WIRES
133 ; RTS output is wired to the CTS input of UART2USB bridge
134 ; configure RTS as output high (false) to disable RX TERM during start FORTH
135 HANDSHAKOUT .equ    P2OUT
136 HANDSHAKIN  .equ    P2IN
137 RTS         .equ    1           ; P2.0
138             BIS.B #RTS,&P2DIR   ; RTS as output high
139         .IFDEF TERMINAL5WIRES
140 ; CTS input must be wired to the RTS output of UART2USB bridge
141 ; configure CTS as input low (true) to avoid lock when CTS is not wired
142 CTS         .equ    2           ; P2.1
143             BIC.B #CTS,&P2OUT   ; CTS input resistor is pulled down
144         .ENDIF  ; TERMINAL5WIRES
145     .ENDIF  ; TERMINAL4WIRES
146
147
148 SW2_IN      .equ P2IN
149 SW2         .equ 8              ; P2.3 = S2
150
151 SD_CDIN     .equ  P2IN
152 CD_SD       .equ  20h           ; P2.5
153
154 ; ----------------------------------------------------------------------
155 ; POWER ON RESET AND INITIALIZATION : PORT3-4
156 ; ----------------------------------------------------------------------
157
158 ; reset state : Px{DIR,REN,SEL0,SEL1,SELC,IE,IFG,IV} = 0 ; Px{IN,OUT,IES} = ?
159
160 ; PORTB usage
161
162 ;               P4.1    -   SW1
163 ; UCA1 RXD      P4.2    -   J101.8  <----   TX  UARTtoUSB bridge
164 ; UCA1 TXD      P4.3    -   J101.6  ---->   RX  UARTtoUSB bridge
165 ;               P4.4    -   J2.9    ---->   SD_CS(Card Select)
166 ; UCB1 CLK      P4.5    -   J1.7    ---->   SD_CLK
167 ; UCB1 SIMO     P4.6    -   J2.15   ---->   SD_SDI
168 ; UCB1 SOMI     P4.7    -   J2.14   <----   SD_SDO
169
170             BIS #-1,&PBREN  ; all pins with pull resistors
171             MOV #-1,&PBOUT  ; pullup resistors for all pins
172
173 SW1_IN      .equ P4IN
174 SW1         .equ 2      ; P4.1 = S1
175
176     .IFDEF UCA1_TERM
177 ; UCA1 RXD      P4.2    -   J101.8  <----   TX  UARTtoUSB bridge
178 ; UCA1 TXD      P4.3    -   J101.6  ---->   RX  UARTtoUSB bridge
179 TERM_IN     .equ P4IN
180 TERM_REN    .equ P4REN
181 TERM_SEL    .equ P4SEL0
182 RXD         .equ 4      ; P4.2 = RXD
183 TXD         .equ 8      ; P4.3 = TXD
184 BUS_TERM    .equ 0Ch
185     .ENDIF
186
187     .IFDEF UCB1_SD
188 SD_CSOUT    .equ P4OUT
189 SD_CSDIR    .equ P4DIR
190 CS_SD       .equ 10h    ; P4.4
191
192 SD_SEL      .equ PBSEL0 ; to configure UCB1
193 SD_REN      .equ PBREN  ; to configure pullup resistors
194 BUS_SD      .equ 0E000h ; pins P4.5 as UCA1CLK, P4.6 as UCA1SIMO & P4.7 as UCA1SOMI
195     .ENDIF
196 ; ----------------------------------------------------------------------
197 ; POWER ON RESET AND INITIALIZATION : PORT5-6
198 ; ----------------------------------------------------------------------
199
200 ; reset state : Px{DIR,REN,SEL0,SEL1,SELC,IE,IFG,IV} = 0 ; Px{IN,OUT,IES} = ?
201
202 ; PORT6 usage
203 LED2_OUT    .equ    P6OUT
204 LED2_DIR    .equ    P6DIR
205 LED2        .equ    40h         ;  P6.6 LED2 green
206
207             BIS.B #-1,&P6REN    ; all pins with pull up/down resistors
208             MOV.B #0BFh,&P6OUT  ; all pins with pull up resistors else P6.6
209
210 ; ----------------------------------------------------------------------
211 ; FRAM config
212 ; ----------------------------------------------------------------------
213
214     .IF (FREQUENCY >8 ) && ( FREQUENCY <= 16)
215             MOV.B   #0A5h, &FRCTL0_H     ; enable FRCTL0 access
216             MOV.B   #10h, &FRCTL0         ; 1 waitstate @ 16 MHz
217             MOV.B   #01h, &FRCTL0_H       ; disable FRCTL0 access
218     .ELSEIF FREQUENCY > 16
219             MOV.B   #0A5h, &FRCTL0_H     ; enable FRCTL0 access
220             MOV.B   #20h, &FRCTL0         ; 2 waitstate @ 24 MHz
221             MOV.B   #01h, &FRCTL0_H       ; disable FRCTL0 access
222     .ENDIF
223
224 ; ----------------------------------------------------------------------
225 ; POWER ON RESET SYS config
226 ; ----------------------------------------------------------------------
227
228     MOV #0A500h,&SYSCFG0    ; enable write MAIN + INFO
229
230 ; ----------------------------------------------------------------------
231 ; POWER ON RESET AND INITIALIZATION : CLOCK SYSTEM
232 ; ----------------------------------------------------------------------
233
234 ; CS code for MSP430FR2355
235
236 ; to measure SMCLK frequency, wires SMCLK on P1.0:
237 ;    BIS.B #1,&P1SEL1
238 ;    BIS.B #1,&P1DIR
239
240 ; to measure REFO frequency, wires ACLK on P1.1:
241 ;    BIS.B #2,&P1SEL1
242 ;    BIS.B #2,&P1DIR
243
244     .IFDEF LF_XTAL
245 ; because LOCKLPM5 is ON, XT1 is replaced by REFO automaticaly until WARM clears LOCKLPM5
246 ;           MOV     #0000h,&CSCTL3  ; FLL select XT1, FLLREFDIV=0 (default value)
247             MOV     #0000h,&CSCTL4  ; ACLOCK select XT1, MCLK & SMCLK select DCOCLKDIV
248             BIS.B   #0C0h,&P2SEL1   ; P2.6 as XOUT, P2.7 as XIN
249     .ELSE
250             BIS     #0010h,&CSCTL3  ; FLL select REFCLOCK
251 ;            MOV     #0100h,&CSCTL4  ; ACLOCK select REFOCLK, MCLK & SMCLK select DCOCLKDIV (default value)
252     .ENDIF
253             BIC.B   #-1,&CSCTL1     ; clear DCORSEL (Set 1MHZ DCORSEL), DCOFTRIM=0, ENable MODulation to reduce EMI
254     .IF FREQUENCY = 1               ; nothing else to do
255     .ELSEIF FREQUENCY = 2
256             BIS.B   #2,&CSCTL1      ; Set 2MHZ DCORSEL
257     .ELSEIF FREQUENCY = 4
258             BIS.B   #4,&CSCTL1      ; Set 4MHZ DCORSEL
259     .ELSEIF FREQUENCY = 8
260             BIS.B   #6,&CSCTL1      ; Set 8MHZ DCORSEL
261     .ELSEIF FREQUENCY = 12
262             BIS.B   #8,&CSCTL1      ; Set 12MHZ DCORSEL
263     .ELSEIF FREQUENCY = 16
264             BIS.B   #10,&CSCTL1     ; Set 16MHZ DCORSEL
265     .ELSEIF FREQUENCY = 20
266             BIS.B   #12,&CSCTL1     ; Set 20MHZ DCORSEL
267     .ELSEIF FREQUENCY = 24
268             BIS.B   #14,&CSCTL1     ; Set 24MHZ DCORSEL
269     .ELSEIF
270     .error "bad frequency setting, only 1,2,4,8,12,16,20,24 MHz"
271     .ENDIF
272 ;            MOV #INT(FREQUENCY*1000000/32768)-1,&CSCTL2; set FLLD=0 (DCOCLKCDIV=DCO),set FLLN for frequency slight lower
273             MOV #INT(FREQUENCY*1000000/32768),&CSCTL2; set FLLD=0 (DCOCLKCDIV=DCO),set FLLN for frequency slight upper
274             MOV     #92,X           ; 96* 3 ms = 288 ms delay, because FLL lock time = 200 ms
275 ClockWaitX  MOV     &FREQ_KHZ,Y     ;
276 ClockWaitY  SUB     #1,Y            ;1
277             JNZ     ClockWaitY      ;2 FREQ_KHZ x 3 ==> 3ms
278             SUB     #1,X            ;
279             JNZ     ClockWaitX      ;