1 ; -*- coding: utf-8 -*-
4 ; ======================================================================
5 ; INIT MSP-EXP430FR5969 board
6 ; ======================================================================
9 ; J21 : external target
10 ; ---------------------
37 ; J13 eZ-FET <-> target
38 ; -----------------------
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
48 ; P19<->P20 - GND - VSS
50 ; Launchpad Header Left J4
51 ; ------------------------
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
63 ; Launchpad Header Right J5
64 ; -------------------------
68 ; P14- P1.6 UCB0 SIMO/SDA
69 ; P15- P1.7 UCB0 SOMI/SCL
99 ; ===================================================================================
100 ; in case of 3.3V powered by UARTtoUSB bridge, open J13 straps {RST,TST,V+,5V} BEFORE
101 ; ===================================================================================
103 ; -----------------------------------------------
104 ; MSP430FR5969 LAUNCHPAD <--> OUTPUT WORLD
105 ; -----------------------------------------------
106 ; P4.6 - J6 - LED1 red
109 ; P4.5 - Switch S1 <--- LCD contrast + (finger :-)
110 ; P1.1 - Switch S2 <--- LCD contrast - (finger ;-)
112 ; GND - J1.2 <-------+---0V0----------> 1 LCD_Vss
113 ; VCC - J1.3 >------ | --3V6-----+----> 2 LCD_Vdd
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
129 ; +--4k7-< DeepRST <-- GND
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)
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)
145 ; P4.0 use is not compatible with core option "TERMINAL5WIRES"
146 ; P4.0 - J3.10 <---- OUT IR_Receiver (1 TSOP32236) ───┐
148 ; VCC - J3.2 ----> VCC IR_Receiver (2 TSOP32236) ────| O |
150 ; GND - J3.9 <---> GND IR_Receiver (3 TSOP32236) ───┘
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
160 ; PJ.4 - LFXI 32768Hz quartz
161 ; PJ.5 - LFXO 32768Hz quartz
176 ; ----------------------------------------------------------------------
177 ; POWER ON RESET AND INITIALIZATION : I/O
178 ; ----------------------------------------------------------------------
179 ; ----------------------------------------------------------------------
180 ; POWER ON RESET AND INITIALIZATION : PORT1/2
181 ; ----------------------------------------------------------------------
183 ; reset state : Px{DIR,REN,SEL0,SEL1,SELC,IE,IFG,IV} = 0 ; Px{IN,OUT,IES} = ?
187 ; P1.0 - LED2 green output low
190 LED2 .equ 1 ; P1.0 LED2 green
192 ; P1.1 - Switch S2 input with pullup resistor
194 SW2 .equ 2 ; P1.1 = S2
197 ; PORTx default wanted state : pins as input with pullup resistor
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)
206 SDA .equ 40h ; P1.6 = SDA
207 SCL .equ 80h ; P1.7 = SCL
212 ; P2.0 UCA0-TXD --> USB2UART RXD
213 ; P2.1 UCA0-RXD <-- USB2UART TXD
217 TXD .equ 1 ; P2.0 = TX
218 RXD .equ 2 ; P2.1 = RX
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
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} = ?
239 HANDSHAKOUT .equ P4OUT
247 CD_SD .equ 4 ; P4.2 as Card Detect
248 CS_SD .equ 8 ; P4.3 as Chip Select
251 SW1 .equ 20h ; P4.5 = S1
254 IO_WIPE .equ 20h ; P4.5 = S1 = FORTH Deep_RST pin
258 LED1 .equ 40h ; P4.6 LED1 red
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
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
274 ; ----------------------------------------------------------------------
275 ; POWER ON RESET AND INITIALIZATION : PORTJ
276 ; ----------------------------------------------------------------------
278 ; reset state : Px{DIR,REN,SEL0,SEL1,SELC,IE,IFG,IV} = 0 ; Px{IN,OUT,IES} = ?
280 ; PORTx default wanted state : pins as input with pullup resistor
282 MOV.B #-1,&PJOUT ; pullup resistors
283 BIS.B #-1,&PJREN ; enable pullup/pulldown resistors
285 ; ----------------------------------------------------------------------
287 ; ----------------------------------------------------------------------
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
295 ; ----------------------------------------------------------------------
296 ; POWER ON RESET AND INITIALIZATION : CLOCK SYSTEM
297 ; ----------------------------------------------------------------------
299 ; DCOCLK: Internal digitally controlled oscillator (DCO).
302 ; CS code for MSP430FR5948
303 MOV.B #CSKEY,&CSCTL0_H ; Unlock CS registers
306 ; MOV #DCOFSEL1+DCOFSEL0,&CSCTL1 ; Set 8MHZ DCO setting (default value)
307 MOV #DIVA_0 + DIVS_32 + DIVM_32,&CSCTL3
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
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
320 .ELSEIF FREQUENCY = 2
321 MOV #DCOFSEL1+DCOFSEL0,&CSCTL1 ; Set 4MHZ DCO setting
322 MOV #DIVA_0 + DIVS_2 + DIVM_2,&CSCTL3
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
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
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
341 .error "bad frequency setting, only 0.5,1,2,4,8,16 MHz"
345 MOV #SELA_LFXCLK+SELS_DCOCLK+SELM_DCOCLK,&CSCTL2
347 MOV #SELA_VLOCLK+SELS_DCOCLK+SELM_DCOCLK,&CSCTL2
349 MOV.B #01h, &CSCTL0_H ; Lock CS Registers
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 )
362 ; ----------------------------------------------------------------------
363 ; POWER ON RESET AND INITIALIZATION : REF
364 ; ----------------------------------------------------------------------
368 ; ----------------------------------------------------------------------
369 ; POWER ON RESET AND INITIALIZATION : RTC REGISTERS
370 ; ----------------------------------------------------------------------
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