#include "msp430xG46x.h" RST equ 02h; P8.1 is Chip Select, PIN 1 => address 02h in P8OUT/P8DIR RSEG CSTACK ; Define stack segment RSEG CODE ; Assemble to Flash memory ;----------------------------------------------------------------------------- RESET mov.w #SFE(CSTACK),SP ;#02100h,SP; Initialize stackpointer main nop StopWDT mov.w #WDTPW+WDTHOLD+WDTNMI+WDTTMSEL+WDTSSEL,&WDTCTL ; Stop WDT setupSVS mov.b #018h,&SVSCTL ;Vth = 1.9V setupRTC mov.b #30h,&RTCCTL bis.b #RTCBCD,&RTCCTL ;---------------------------------------------------------------- ;CONFIGURE PORT8 FOR CHIP SELECT(as GPIO-active low) ;---------------------------------------------------------------- SetupP8 mov.b #00h,&P8SEL ;CONFIGURE AS GPIO mov.b #00000010b,&P8DIR ;CONFIGURE P8.1 as OUTPUT for CS of FLASH ;---------------------------------------------------------------- ;Configure port 7 for SPI ;---------------------------------------------------------------- SetupP7 bis.b #0Eh,&P7SEL ; P7.3,2,1 option select as USCI_A0 ;---------------------------------------------------------------- ;SETUP MSP430 FOR RTC INTERFACE on SPI ;---------------------------------------------------------------- SetupSPI bis.b #UCSWRST,&UCA0CTL1 ;Initialize all USCI registers with UCSWRST=1 bis.b #UCMST+UCSYNC+UCMSB,&UCA0CTL0;3-pin, 8-bit SPI master,MSB first bis.b #UCSSEL_2,&UCA0CTL1 ; SMCLK=1 MHz mov.b #255,&UCA0BR0 ; SMCLK/255 clr.b &UCA0BR1 ; clr.b &UCA0MCTL ; No modulation ;Clear UCSWRST bic.b #UCSWRST,&UCA0CTL1 ; Initialize USCI state machine ;---------------------------------------------------------------------------- ;WRITE INCREMENTED DATA TO PAGE 001000 IN FLASH => WRITE ENABLE+BULK ERASE then Write Enable +PAGE PROGRAM , THEN READ ;---------------------------------------------------------------------------- ; WRITE ENABLE INSTRUCTION CODE bic.b #RST,&P8OUT ;MAKE CS LOW BY SETTING P8.1 LOW, SELECT SLAVE - RST = 00h mov.b #00000110b,&UCA0TXBUF ; WRITE ENABLE INSTRUCTION CODE TX bit.b #UCA0TXIFG,&IFG2 ;TX Buffer ready jz TX mov.b #11011000b,&UCA0TXBUF ; SECTOR INSTRUCTION CODE1101 1000 ;mov.b #11000111b,&UCA0TXBUF ; BULK ERASE INSTRUCTION CODE ;3 byte Address for Sector Erase- 00 00 01 - Sector 1 any address inside the sector mov.b #00h,&UCA0TXBUF ; SE1 bit.b #UCA0TXIFG,&IFG2 ;TX Buffer ready jz SE1 mov.b #00h,&UCA0TXBUF ; SE11 bit.b #UCA0TXIFG,&IFG2 ;TX Buffer ready jz SE11 mov.b #01h,&UCA0TXBUF ; WRITE ENABLE INSTRUCTION CODE SE111 bit.b #UCA0TXIFG,&IFG2 ;TX Buffer ready jz SE111 bis.b #RST,&P8OUT ;MAKE CS HI ; WAIT for Bulk erase(nop/monitor write in progress bit of status register) mov.w #100h,R11 ; Add time between transmissions to Delay dec.w R11 ; make sure slave can keep up jnz Delay ; PAGE PROGRAM INSTRUCTION CODE bic.b #RST,&P8OUT ;MAKE CS LOW mov.b #00000110b,&UCA0TXBUF ; WRITE ENABLE INSTRUCTION CODE mov.b #00000010b,&UCA0TXBUF ; PAGE PROGRAM INSTRUCTION CODE TR bit.b #UCA0TXIFG,&IFG2 ;TX Buffer ready jz TR ;3 byte Address for Page Address- 00 10 00 mov.b #00h,&UCA0TXBUF ; TX1 bit.b #UCA0TXIFG,&IFG2 ;TX Buffer ready jz TX1 mov.b #10h,&UCA0TXBUF ; TX11 bit.b #UCA0TXIFG,&IFG2 ;TX Buffer ready jz TX11 mov.b #00h,&UCA0TXBUF ; WRITE ENABLE INSTRUCTION CODE TX111 bit.b #UCA0TXIFG,&IFG2 ;TX Buffer ready jz TX111 ; Txn of data mov.b #05h,NO_OF_BYTES ; down counter NO_OF_BYTES_WRITE mov.b #00h,R5; Incremented Data to be txd Mainloop mov.b R5,&UCA0TXBUF TX2 bit.b #UCA0TXIFG,&IFG2 ;TX Buffer ready jz TX2 inc.b R5; dec.b NO_OF_BYTES ;Tx 256 characters jnz Mainloop STOP bis.b #RST,&P8OUT ; CS high to terminate transmission ;---------------------------------------------------------------------------- ;READ FROM FLASH - PAGE 001000 SAY 1ST BYTE ;---------------------------------------------------------------------------- bic.b #RST,&P8OUT ; CS Low to start transmission ; READ DATA BYTE INSTRUCTION CODE mov.b #03h,&UCA0TXBUF ; READ DATA BYTE INSTRUCTION CODE loop bit.b #UCA0TXIFG,&IFG2 ;TX Buffer ready jz loop ;3 byte Address for location(000000) to be read mov.b #00h,&UCA0TXBUF ; WRITE ENABLE INSTRUCTION CODE RX1 bit.b #UCA0TXIFG,&IFG2 ;TX Buffer ready jz RX1 mov.b #10h,&UCA0TXBUF ; WRITE ENABLE INSTRUCTION CODE RX11 bit.b #UCA0TXIFG,&IFG2 ;TX Buffer ready jz RX11 mov.b #00h,&UCA0TXBUF ; WRITE ENABLE INSTRUCTION CODE RX111 bit.b #UCA0TXIFG,&IFG2 ;TX Buffer ready jz RX111 ; START READING DATA mov.b #05h,NO_OF_BYTES ; down counter Mainloop1 mov.b #01h,&UCA0TXBUF ;dummy byte for reception ;TX_2 bit.b #UCA0TXIFG,&IFG2 ;TX Buffer ready ;jz TX_2 RX2 bit.b #UCA0RXIFG,&IFG2 ;RX Buffer ready jz RX2 mov.b &UCA0RXBUF,R9 dec.b NO_OF_BYTES ;Tx 256 characters jnz Mainloop1 bis.b #RST,&P8OUT ; CS high to terminate transmission ;------------------------------------------------------------------------------ COMMON INTVEC ; Interrupt Vectors ;------------------------------------------------------------------------------ ORG RESET_VECTOR ; MSP430 RESET Vector DW RESET ; END