1 ; -*- coding: utf-8 -*-
3 ; ======================================================================
4 ; INIT MSP-EXP430FR5972 virtual board
5 ; ======================================================================
8 ; http://www.ebay.fr/itm/CP2102-USB-UART-Board-mini-Data-Transfer-Convertor-Module-Development-Board-/251433941479
10 ; for sd card socket be carefull : pin CD must be present !
11 ; http://www.ebay.com/itm/2-PCS-SD-Card-Module-Slot-Socket-Reader-For-Arduino-MCU-/181211954262?pt=LH_DefaultDomain_0&hash=item2a3112fc56
14 ; J101 eZ-FET <-> target
15 ; -----------------------
17 ; P3 <-> P4 - TEST - TEST
18 ; P5 <-> P6 - RST - RST
19 ; P7 <-> P8 - TX1 - P3.4 UCA1 TXD ---> RX UARTtoUSB module
20 ; P9 <->P10 - RX1 - P3.5 UCA1 RXD <--- TX UARTtoUSB module
21 ; P11<->P12 - CTS - P3.1
22 ; P13<->P14 - RTS - P3.0
23 ; P15<->P16 - VCC - 3V3
25 ; P19<->P20 - GND - VSS
27 ; Launchpad Header Left J1
28 ; ------------------------
40 ; Launchpad Header Left J3
41 ; ------------------------
53 ; Launchpad Header Right J2
54 ; -------------------------
57 ; P18- P1.5 TA0.0 UCA0 CLK
64 ; P11- P4.7 TA1.2 UCB1 SOMI/SCL
66 ; Launchpad Header Right J4
67 ; -------------------------
76 ; P32- P3.1 UCB1 SIMO/SDA
96 ; ===================================================================================
97 ; in case of 3.3V powered by UARTtoUSB bridge, open J13 straps {RST,TST,V+,5V} BEFORE
98 ; then wire VCC and GND of bridge onto J13 connector
99 ; ===================================================================================
101 ; ---------------------------------------------------
102 ; MSP - MSP-EXP430FR5972 virtual LAUNCHPAD <--> OUTPUT WORLD
103 ; ---------------------------------------------------
107 ; P1.1 - Switch S1 <--- LCD contrast + (finger :-)
108 ; P1.2 - Switch S2 <--- LCD contrast - (finger ;-)
110 ; GND <-------+---0V0----------> 1 LCD_Vss
111 ; VCC >------ | --3V3-----+----> 2 LCD_Vdd
118 ; P3.6 - UCA1 CLK TB0.2 >---||--+--^/\/\/v--+----> 3 LCD_Vo (=0V6 without modulation)
119 ; P7.0/ <------------------------> 11 LCD_DB4
120 ; P7.1/ <------------------------> 12 LCD_DB5
121 ; P7.2/ <------------------------> 13 LCD_DB5
122 ; P7.3/ <------------------------> 14 LCD_DB7
123 ; P9.4/A12/C12 -------------------------> 4 LCD_RS
124 ; P9.5/A13/C13 -------------------------> 5 LCD_R/W
125 ; P9.6/A14/C14 -------------------------> 6 LCD_EN
127 ; +--4k7-< DeepRST <-- GND
129 ; P3.4 - UCA1 TXD <-+-> RX UARTtoUSB bridge
130 ; P3.5 - UCA1 RXD <---- TX UARTtoUSB bridge
131 ; P3.0 - RTS ----> CTS UARTtoUSB bridge (optional hardware control flow)
132 ; VCC - <---- VCC (optional supply from UARTtoUSB bridge - WARNING ! 3.3V !)
133 ; GND - <---> GND (optional supply from UARTtoUSB bridge)
135 ; VCC - ----> VCC SD_CardAdapter
136 ; GND - <---> GND SD_CardAdapter
137 ; P2.2 - UCA0 CLK ----> CLK SD_CardAdapter (SCK)
138 ; P2.6 - ----> CS SD_CardAdapter (Card Select)
139 ; P2.0 - UCA0 TXD/SIMO ----> SDI SD_CardAdapter (MOSI)
140 ; P2.1 - UCA0 RXD/SOMI <---- SDO SD_CardAdapter (MISO)
141 ; P2.7 - <---- CD SD_CardAdapter (Card Detect)
143 ; P4.0 - <---- OUT IR_Receiver (1 TSOP32236)
144 ; VCC - ----> VCC IR_Receiver (2 TSOP32236)
145 ; GND - <---> GND IR_Receiver (3 TSOP32236)
147 ; P1.3 - <---> SDA software I2C Master
148 ; P1.5 - ----> SCL software I2C Master
150 ; P1.4 -UCB0 CLK TA1.0 <---> free
152 ; P1.6 -UCB0 SDA/SIMO <---> SDA hardware I2C Master or Slave
153 ; P1.7 -UCB0 SCL/SOMI ----> SCL hardware I2C Master or Slave
155 ; P3.0 -UCB1 CLK ----> free (if UARTtoUSB with software control flow)
156 ; P3.1 -UCB1 SDA/SIMO <---> free
157 ; P3.2 -UCB1 SCL/SOMI ----> free
158 ; P3.3 - TA1.1 <---> free
160 ; PJ.4 - LFXI 32768Hz quartz
161 ; PJ.5 - LFXO 32768Hz quartz
166 ; ----------------------------------------------------------------------
167 ; POWER ON RESET AND INITIALIZATION : I/O
168 ; ----------------------------------------------------------------------
170 ; ----------------------------------------------------------------------
171 ; POWER ON RESET AND INITIALIZATION : PORT1/2
172 ; ----------------------------------------------------------------------
174 ; reset state : Px{DIR,REN,SEL0,SEL1,SELC,IE,IFG,IV} = 0 ; Px{IN,OUT,IES} = ?
178 SD_SEL .equ PASEL0 ; to configure UCB0
179 SD_REN .equ PAREN ; to configure pullup resistors
180 BUS_SD .equ 0700h ; pins P2.2 as UCA0CLK, P2.0 as UCA0SIMO & P2.1 as UCA0SOMI
184 ; P1.0 - LED1 red output low
187 LED1 .equ 1 ; P1.0 LED1 red
190 SW1_IN .set P1IN ; port
191 SW1 .set 2 ; P1.1 = S1
194 IO_WIPE .equ 2 ; P1.1 = S1 = FORTH Deep_RST pin
197 SW2_IN .set P1IN ; port
198 SW2 .set 4 ; P1.2 = S2
200 ; P1.6 -UCB0 SDA/SIMO J2.15 <---> SDA hardware I2C Master or Slave
201 ; P1.7 -UCB0 SCL/SOMI J2.14 ----> SCL hardware I2C Master or Slave
206 SDA .equ 40h ; P1.6 = SDA
207 SCL .equ 80h ; P1.7 = SCL
218 CS_SD .equ 40h ; P2.6 Chip Select
219 CD_SD .equ 80h ; P2.7 Card Detect
221 ; PORTx default wanted state : pins as input with pullup resistor
223 BIS #-1,&PAREN ; all pins with pull up/down resistor
224 MOV #-2,&PAOUT ; all pins with pullup resistors else P1.0
226 ; ----------------------------------------------------------------------
227 ; POWER ON RESET AND INITIALIZATION : PORT3/4
228 ; ----------------------------------------------------------------------
230 ; reset state : Px{DIR,REN,SEL0,SEL1,SELC,IE,IFG,IV} = 0 ; Px{IN,OUT,IES} = ?
231 ; PORTx default wanted state : pins as input with pullup resistor
239 HANDSHAKOUT .equ P3OUT
248 TXD .equ 10h ; P3.4 = TXD
249 RXD .equ 20h ; P3.4 = RXD
250 BUS_TERM .equ 30h ; P3.5 = RX
255 MOV #-1,&PBREN ; all pins as input with resistor
256 MOV #-1,&PBOUT ; all pins as input with resistor
258 .IFDEF TERMINAL4WIRES
259 ; RTS output is wired to the CTS input of UART2USB bridge
260 ; configure RTS as output high to disable RX TERM during start FORTH
261 BIS.B #RTS,&P3DIR ; RTS as output high
262 .IFDEF TERMINAL5WIRES
263 ; CTS input must be wired to the RTS output of UART2USB bridge
264 ; configure CTS as input low (true) to avoid lock when CTS is not wired
265 BIC.B #CTS,&P3OUT ; CTS input pulled down
266 .ENDIF ; TERMINAL5WIRES
267 .ENDIF ; TERMINAL4WIRES
269 ; ----------------------------------------------------------------------
270 ; POWER ON RESET AND INITIALIZATION : PORT5/6
271 ; ----------------------------------------------------------------------
273 ; reset state : Px{DIR,REN,SEL0,SEL1,SELC,IE,IFG,IV} = 0 ; Px{IN,OUT,IES} = ?
279 ; PORTx default wanted state : pins as input with pullup resistor
281 MOV #-1,&PCREN ; all pins with pull resistors
282 MOV #-1,&PCOUT ; all pins 1
285 ; ----------------------------------------------------------------------
286 ; POWER ON RESET AND INITIALIZATION : PORT7
287 ; ----------------------------------------------------------------------
289 ; reset state : Px{DIR,REN,SEL0,SEL1,SELC,IE,IFG,IV} = 0 ; Px{IN,OUT,IES} = ?
295 ; PORTx default wanted state : pins as input with pullup resistor
297 MOV.B #-1,&P7REN ; all pins with pull resistors
298 MOV.B #-1,&P7OUT ; all pins 1
302 ; ----------------------------------------------------------------------
303 ; POWER ON RESET AND INITIALIZATION : PORT9
304 ; ----------------------------------------------------------------------
306 ; reset state : Px{DIR,REN,SEL0,SEL1,SELC,IE,IFG,IV} = 0 ; Px{IN,OUT,IES} = ?
309 ; P9.7 Green LED2 as output low
312 LED2 .equ 80h ; P9.7 LED2 green
317 ; PORTx default wanted state : pins as input with pullup resistor
319 MOV.B #-1,&P9REN ; all pins with pull resistors else P9.7
320 MOV.B #7Fh,&P9OUT ; all pins high else P9.7
322 ; ----------------------------------------------------------------------
323 ; POWER ON RESET AND INITIALIZATION : PORTJ
324 ; ----------------------------------------------------------------------
326 ; reset state : Px{DIR,REN,SEL0,SEL1,SELC,IE,IFG,IV} = 0 ; Px{IN,OUT,IES} = ?
330 ; PORTx default wanted state : pins as input with pullup resistor
332 MOV.B #-1,&PJREN ; enable pullup/pulldown resistors
333 MOV.B #-1,&PJOUT ; pullup resistors
335 ; ----------------------------------------------------------------------
337 ; ----------------------------------------------------------------------
340 MOV.B #0A5h, &FRCTL0_H ; enable FRCTL0 access
341 MOV.B #10h, &FRCTL0 ; 1 waitstate @ 16 MHz
342 MOV.B #01h, &FRCTL0_H ; disable FRCTL0 access
345 ; ----------------------------------------------------------------------
346 ; POWER ON RESET AND INITIALIZATION : CLOCK SYSTEM
347 ; ----------------------------------------------------------------------
349 ; DCOCLK: Internal digitally controlled oscillator (DCO).
351 MOV.B #CSKEY,&CSCTL0_H ; Unlock CS registers
353 ; MOV #DCOFSEL1+DCOFSEL0,&CSCTL1 ; Set 8MHZ DCO setting (default value)
354 MOV #DIVA_0 + DIVS_32 + DIVM_32,&CSCTL3
356 .ELSEIF FREQUENCY = 0.5
357 MOV #0,&CSCTL1 ; Set 1MHZ DCO setting
358 MOV #DIVA_2 + DIVS_2 + DIVM_2,&CSCTL3 ; set all dividers as 2
360 .ELSEIF FREQUENCY = 1
361 MOV #0,&CSCTL1 ; Set 1MHZ DCO setting
362 MOV #DIVA_0 + DIVS_0 + DIVM_0,&CSCTL3 ; set all dividers as 0
364 .ELSEIF FREQUENCY = 2
365 MOV #DCOFSEL1+DCOFSEL0,&CSCTL1 ; Set 4MHZ DCO setting
366 MOV #DIVA_0 + DIVS_2 + DIVM_2,&CSCTL3
368 .ELSEIF FREQUENCY = 4
369 MOV #DCOFSEL1+DCOFSEL0,&CSCTL1 ; Set 4MHZ DCO setting
370 MOV #DIVA_0 + DIVS_0 + DIVM_0,&CSCTL3 ; set all dividers as 0
372 .ELSEIF FREQUENCY = 8
373 ; MOV #DCOFSEL2+DCOFSEL1,&CSCTL1 ; Set 8MHZ DCO setting (default value)
374 MOV #DIVA_0 + DIVS_0 + DIVM_0,&CSCTL3 ; set all dividers as 0
376 .ELSEIF FREQUENCY = 12
377 MOV #DCORSEL+DCOFSEL2+DCOFSEL1,&CSCTL1 ; Set 24MHZ DCO setting
378 MOV #DIVA_0 + DIVS_2 + DIVM_2,&CSCTL3 ;
380 .ELSEIF FREQUENCY = 16
381 MOV #DCORSEL+DCOFSEL2,&CSCTL1 ; Set 16MHZ DCO setting
382 MOV #DIVA_0 + DIVS_0 + DIVM_0,&CSCTL3 ; set all dividers as 0
385 .error "bad frequency setting, only 0.5,1,2,4,8,12,16 MHz"
389 MOV #SELA_LFXCLK+SELS_DCOCLK+SELM_DCOCLK,&CSCTL2
391 MOV #SELA_VLOCLK+SELS_DCOCLK+SELM_DCOCLK,&CSCTL2
393 MOV.B #01h, &CSCTL0_H ; Lock CS Registers
395 MOV #64,X ; 64* 3 ms = 192 ms delay (by default of specification)
396 ClockWaitX MOV &FREQ_KHZ,Y ;
397 ClockWaitY SUB #1,Y ;1
398 JNZ ClockWaitY ;2 FREQ_KHZ x 3~ ==> 3ms
402 ; ----------------------------------------------------------------------
403 ; POWER ON RESET AND INITIALIZATION : REF
404 ; ----------------------------------------------------------------------
406 MOV #REFTCOFF, &REFCTL
408 ; ----------------------------------------------------------------------
409 ; POWER ON RESET AND INITIALIZATION : RTC_C REGISTERS
410 ; ----------------------------------------------------------------------
413 ; LFXIN : PJ.4, LFXOUT : PJ.5
414 BIS.B #010h,&PJSEL0 ; SEL0 for only LXIN
415 BIC.B #RTCHOLD,&RTCCTL1 ; Clear RTCHOLD = start RTC_B