1 ; -*- coding: utf-8 -*-
3 ; ======================================================================
4 ; INIT MSP-EXP430FR2355 board
5 ; ======================================================================
10 ; "TXD" <--- P4.3 == UCA0TXD <-- UCA0TXDBUf
11 ; "RXD" ---> P4.2 == UCA0RXD --> UCA0RXDBUF
38 ; J3.23 - P1.4 A4 SEED
43 ; J3.28 - P1.1 A1 SEED
75 ; ======================================================================
76 ; MSP-EXP430FR2355 LAUNCHPAD <--> OUTPUT WORLD
77 ; ======================================================================
79 ; +--4k7-< DeepRST switch <-- GND
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)
86 ; P1.2 - UCB0 SDA J1.10 - <---> SDA I2C Master_Slave
87 ; P1.3 - UCB0 SCL J1.9 - ----> SCL I2C Master_Slave
89 ; P2.2 - J2.18 - <---- TSSOP32236 (IR RC5)
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
97 ; P6.0 - J4.39 - ----> SCL I2C Soft_Master
98 ; P6.1 - J4.38 - <---> SDA I2C Soft_Master
100 ; ----------------------------------------------------------------------
101 ; POWER ON RESET AND INITIALIZATION : I/O
102 ; ----------------------------------------------------------------------
104 ; ----------------------------------------------------------------------
105 ; POWER ON RESET AND INITIALIZATION : PORT1/2
106 ; ----------------------------------------------------------------------
108 ; reset state : Px{DIR,REN,SEL0,SEL1,SELC,IE,IFG,IV} = 0 ; Px{IN,OUT,IES} = ?
114 LED1 .equ 1 ; P1.0 LED1 red
120 BUS_TERM .equ 0Ch ; P1.2=SDA, P1.3=SCL
124 ; UART RTS P2.0 - J2.19 ----> CTS UARTtoUSB bridge (TERMINAL4WIRES)
125 ; UART CTS P2.1 - J4.40 <---- RTS UARTtoUSB bridge (TERMINAL5WIRES)
127 ; P2.5 - J2.10 <---- SD_CD (Card Detect)
129 BIS #-1,&PAREN ; all inputs with pull up/down resistors
130 MOV #0FFFEh,&PAOUT ; all pins with pullup resistors else LED1
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
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
143 BIC.B #CTS,&P2OUT ; CTS input resistor is pulled down
144 .ENDIF ; TERMINAL5WIRES
145 .ENDIF ; TERMINAL4WIRES
149 SW2 .equ 8 ; P2.3 = S2
152 CD_SD .equ 20h ; P2.5
154 ; ----------------------------------------------------------------------
155 ; POWER ON RESET AND INITIALIZATION : PORT3-4
156 ; ----------------------------------------------------------------------
158 ; reset state : Px{DIR,REN,SEL0,SEL1,SELC,IE,IFG,IV} = 0 ; Px{IN,OUT,IES} = ?
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
170 BIS #-1,&PBREN ; all pins with pull resistors
171 MOV #-1,&PBOUT ; pullup resistors for all pins
174 SW1 .equ 2 ; P4.1 = S1
177 ; UCA1 RXD P4.2 - J101.8 <---- TX UARTtoUSB bridge
178 ; UCA1 TXD P4.3 - J101.6 ----> RX UARTtoUSB bridge
182 RXD .equ 4 ; P4.2 = RXD
183 TXD .equ 8 ; P4.3 = TXD
190 CS_SD .equ 10h ; P4.4
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
196 ; ----------------------------------------------------------------------
197 ; POWER ON RESET AND INITIALIZATION : PORT5-6
198 ; ----------------------------------------------------------------------
200 ; reset state : Px{DIR,REN,SEL0,SEL1,SELC,IE,IFG,IV} = 0 ; Px{IN,OUT,IES} = ?
205 LED2 .equ 40h ; P6.6 LED2 green
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
210 ; ----------------------------------------------------------------------
212 ; ----------------------------------------------------------------------
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
224 ; ----------------------------------------------------------------------
225 ; POWER ON RESET SYS config
226 ; ----------------------------------------------------------------------
228 MOV #0A500h,&SYSCFG0 ; enable write MAIN + INFO
230 ; ----------------------------------------------------------------------
231 ; POWER ON RESET AND INITIALIZATION : CLOCK SYSTEM
232 ; ----------------------------------------------------------------------
234 ; CS code for MSP430FR2355
236 ; to measure SMCLK frequency, wires SMCLK on P1.0:
240 ; to measure REFO frequency, wires ACLK on P1.1:
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
250 BIS #0010h,&CSCTL3 ; FLL select REFCLOCK
251 ; MOV #0100h,&CSCTL4 ; ACLOCK select REFOCLK, MCLK & SMCLK select DCOCLKDIV (default value)
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
270 .error "bad frequency setting, only 1,2,4,8,12,16,20,24 MHz"
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