From 67d25d837ac55f28a366c0a3b262e439a6e75fc3 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 19 Aug 2017 12:15:28 +0200 Subject: Add AmForth --- amforth-6.5/msp430/drivers/flash.inc | 16 +++++++++ amforth-6.5/msp430/drivers/flash/words/d-to-i.asm | 38 +++++++++++++++++++++ .../msp430/drivers/flash/words/flaligned.asm | 4 +++ amforth-6.5/msp430/drivers/flash/words/flerase.asm | 39 ++++++++++++++++++++++ amforth-6.5/msp430/drivers/flash/words/i-store.asm | 32 ++++++++++++++++++ .../msp430/drivers/flash/words/ic-store.asm | 29 ++++++++++++++++ .../msp430/drivers/flash/words/init-ram.asm | 16 +++++++++ amforth-6.5/msp430/drivers/flash/words/save.asm | 7 ++++ amforth-6.5/msp430/drivers/flash/words/scrub.asm | 6 ++++ amforth-6.5/msp430/drivers/fram.inc | 15 +++++++++ amforth-6.5/msp430/drivers/fram/words/d-to-i.asm | 37 ++++++++++++++++++++ .../msp430/drivers/fram/words/flaligned.asm | 4 +++ amforth-6.5/msp430/drivers/fram/words/i-store.asm | 10 ++++++ amforth-6.5/msp430/drivers/fram/words/ic-store.asm | 10 ++++++ amforth-6.5/msp430/drivers/fram/words/init-ram.asm | 16 +++++++++ amforth-6.5/msp430/drivers/fram/words/save.asm | 7 ++++ amforth-6.5/msp430/drivers/fram/words/scrub.asm | 6 ++++ amforth-6.5/msp430/drivers/usart_a0.inc | 19 +++++++++++ amforth-6.5/msp430/drivers/usart_a1.inc | 17 ++++++++++ amforth-6.5/msp430/drivers/usart_f-a0.inc | 19 +++++++++++ 20 files changed, 347 insertions(+) create mode 100644 amforth-6.5/msp430/drivers/flash.inc create mode 100644 amforth-6.5/msp430/drivers/flash/words/d-to-i.asm create mode 100644 amforth-6.5/msp430/drivers/flash/words/flaligned.asm create mode 100644 amforth-6.5/msp430/drivers/flash/words/flerase.asm create mode 100644 amforth-6.5/msp430/drivers/flash/words/i-store.asm create mode 100644 amforth-6.5/msp430/drivers/flash/words/ic-store.asm create mode 100644 amforth-6.5/msp430/drivers/flash/words/init-ram.asm create mode 100644 amforth-6.5/msp430/drivers/flash/words/save.asm create mode 100644 amforth-6.5/msp430/drivers/flash/words/scrub.asm create mode 100644 amforth-6.5/msp430/drivers/fram.inc create mode 100644 amforth-6.5/msp430/drivers/fram/words/d-to-i.asm create mode 100644 amforth-6.5/msp430/drivers/fram/words/flaligned.asm create mode 100644 amforth-6.5/msp430/drivers/fram/words/i-store.asm create mode 100644 amforth-6.5/msp430/drivers/fram/words/ic-store.asm create mode 100644 amforth-6.5/msp430/drivers/fram/words/init-ram.asm create mode 100644 amforth-6.5/msp430/drivers/fram/words/save.asm create mode 100644 amforth-6.5/msp430/drivers/fram/words/scrub.asm create mode 100644 amforth-6.5/msp430/drivers/usart_a0.inc create mode 100644 amforth-6.5/msp430/drivers/usart_a1.inc create mode 100644 amforth-6.5/msp430/drivers/usart_f-a0.inc (limited to 'amforth-6.5/msp430/drivers') diff --git a/amforth-6.5/msp430/drivers/flash.inc b/amforth-6.5/msp430/drivers/flash.inc new file mode 100644 index 0000000..1c13cde --- /dev/null +++ b/amforth-6.5/msp430/drivers/flash.inc @@ -0,0 +1,16 @@ +; FLASH MEMORY OPERATIONS +; Note that an I! or IC! to a RAM address >FLASHSTART will work -- it +; will enable the flash, write the RAM, and then disable the flash. +; An FLERASE to a RAM address will merely clear that one RAM cell. + +.include "drivers/flash/words/flerase.asm" + +; Program Space (Flash) operators + +.include "drivers/flash/words/i-store.asm" +.include "drivers/flash/words/ic-store.asm" +.include "drivers/flash/words/d-to-i.asm" + +.include "drivers/flash/words/flaligned.asm" +.include "drivers/flash/words/save.asm" +.include "drivers/flash/words/init-ram.asm" diff --git a/amforth-6.5/msp430/drivers/flash/words/d-to-i.asm b/amforth-6.5/msp430/drivers/flash/words/d-to-i.asm new file mode 100644 index 0000000..12081f0 --- /dev/null +++ b/amforth-6.5/msp430/drivers/flash/words/d-to-i.asm @@ -0,0 +1,38 @@ +;Z D->I c-addr1 c-addr2 u -- move Data->Code +; Block move from Data space to Code space. Flashable. +; For the MSP430, this uses a "smart" algorithm that uses word writes, +; rather than byte writes, whenever possible. Note that byte reads +; are used for the source, so it need not be aligned. + CODEHEADER(XT_DTOI,4,"d->i") + MOV @PSP+,W ; dest adrs + MOV @PSP+,X ; src adrs + CMP #0,TOS + JZ DTOI_X +DTOI_LOOP: ; Begin flash write sequence + DINT ; Disable interrupts + MOV #FWKEY,&FCTL3 ; Clear LOCK + MOV #FWKEY+WRT,&FCTL1 ; Enable write + ; If length is 1, or dest. address is odd, do a byte write. + ; Else, do a word write. + CMP #1,TOS + JZ DTOI_BYTE + BIT #1,W + JNZ DTOI_BYTE +DTOI_WORD: MOV.B @X+,Y ; get low byte of word + MOV.B @X+,Q ; get high byte of word + SWPB Q + BIS Q,Y ; merge bytes + MOV Y,0(W) ; write byte to dest + ADD #2,W + SUB #1,TOS ; another 1 will be subtracted below + JMP DTOI_END +DTOI_BYTE: MOV.B @X+,0(W) ; copy byte from src to dest + ADD #1,W +DTOI_END: ; End flash write sequence + MOV #FWKEY,&FCTL1 ; Done. Clear WRT. + MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK + EINT ; Enable interrupts + SUB #1,TOS + JNZ DTOI_LOOP +DTOI_X: MOV @PSP+,TOS ; pop new TOS + NEXT diff --git a/amforth-6.5/msp430/drivers/flash/words/flaligned.asm b/amforth-6.5/msp430/drivers/flash/words/flaligned.asm new file mode 100644 index 0000000..9271eba --- /dev/null +++ b/amforth-6.5/msp430/drivers/flash/words/flaligned.asm @@ -0,0 +1,4 @@ +;Z FLALIGNED a -- a' align IDP to flash boundary +; $200 OVER - $1FF AND + ; + HEADER(XT_FLALIGNED,9,"flaligned",DOCOLON) + DW XT_DOLITERAL,0200h,XT_OVER,XT_MINUS,XT_DOLITERAL,01FFh,XT_AND,XT_PLUS,XT_EXIT diff --git a/amforth-6.5/msp430/drivers/flash/words/flerase.asm b/amforth-6.5/msp430/drivers/flash/words/flerase.asm new file mode 100644 index 0000000..e8cf97e --- /dev/null +++ b/amforth-6.5/msp430/drivers/flash/words/flerase.asm @@ -0,0 +1,39 @@ +;Z FLERASE a-addr n -- + CODEHEADER(XT_FLERASE,7,"flerase") + MOV @PSP+,W ; get address in W + ADD W,TOS ; TOS=end adrs (first unerased adrs) +FLE_1: + CMP TOS,W ; adr-end + JC FLE_X ; if no borrow, adr>=end, do not erase + ; is it within Main flash? + CMP #FLASHSTART,W + JNC FLE_INFO ; if borrow, adrend, check if Info +FLE_INFO: ; is it within Info flash? + CMP #INFOSTART,W + JNC FLE_X ; if borrow, adrend, do not erase +FLE_OK: ; Address is either in Main flash, or in Info flash. + ; Segment Erase from flash. + ; Assumes ACCVIE = NMIIE = OFIE = 0, watchdog disabled. + ; Per section 5.3.2 of MSP430 Family User's Guide + DINT ; Disable interrupts + MOV #FWKEY,&FCTL3 ; Clear LOCK + MOV #FWKEY+ERASE,&FCTL1 ; Enable segment erase + MOV #-1,0(W) ; Dummy write in segment to erase + MOV #FWKEY,&FCTL1 ; Done. Clear erase command. + MOV #FWKEY+LOCK,&FCTL3 ; Done, set LOCK + EINT ; Enable interrupts + ; Advance flash pointer by 512 bytes or 128 bytes + ; is it within Main flash? + CMP #FLASHSTART,W + JNC FL_INFO ; if borrow, adrend, must be Info + ADD #(MAINSEG-INFOSEG),W +FL_INFO: ADD #INFOSEG,W + JMP FLE_1 ; continue till past end or outside limits +FLE_X: MOV @PSP+,TOS + NEXT diff --git a/amforth-6.5/msp430/drivers/flash/words/i-store.asm b/amforth-6.5/msp430/drivers/flash/words/i-store.asm new file mode 100644 index 0000000..5febc64 --- /dev/null +++ b/amforth-6.5/msp430/drivers/flash/words/i-store.asm @@ -0,0 +1,32 @@ +;Z I! x a-addr -- store cell in Instruction memory + CODEHEADER(XT_STOREI,2,"!i") + MOV @PSP+,W ; get data to write + BIT #1,TOS + JNZ IST_X ; if not even address, do not write + CMP @TOS,W + JZ IST_X ; if memory is desired value, do not write + ; is it within Main flash? + CMP #FLASHSTART,TOS + JNC IST_INFO ; if borrow, adrend, check if Info +IST_INFO: ; is it within Info flash? + CMP #INFOSTART,TOS + JNC IST_RAM ; if borrow, adrend, assume it's RAM +IST_OK: ; Address is either in Main flash, or in Info flash. + ; Byte/word write from flash. + ; Assumes location to write is already erased + ; Assumes ACCVIE = NMIIE = OFIE = 0, watchdog disabled. + ; Per section 5.3.3 of MSP430 Family User's Guide + DINT ; Disable interrupts + MOV #FWKEY,&FCTL3 ; Clear LOCK + MOV #FWKEY+WRT,&FCTL1 ; Enable write +IST_RAM: ; If RAM, jump here to write. FCTL1,FCTL3,EINT are superfluous + MOV W,0(TOS) ; Write word to flash location + MOV #FWKEY,&FCTL1 ; Done. Clear WRT. + MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK + EINT ; Enable interrupts +IST_X: MOV @PSP+,TOS ; pop new TOS + NEXT diff --git a/amforth-6.5/msp430/drivers/flash/words/ic-store.asm b/amforth-6.5/msp430/drivers/flash/words/ic-store.asm new file mode 100644 index 0000000..c8677ea --- /dev/null +++ b/amforth-6.5/msp430/drivers/flash/words/ic-store.asm @@ -0,0 +1,29 @@ +;Z IC! x a-addr -- store char in Instruction memory + CODEHEADER(XT_CSTOREI,3,"c!i") + MOV @PSP+,W ; get data to write + CMP.B @TOS,W + JZ IST_X ; if memory is desired value, do not write + ; is it within Main flash? + CMP #FLASHSTART,TOS + JNC ICST_INFO ; if borrow, adrend, check if Info +ICST_INFO: ; is it within Info flash? + CMP #INFOSTART,TOS + JNC ICST_RAM ; if borrow, adrend, assume it's RAM +ICST_OK: ; Address is either in Main flash, or in Info flash. + ; Byte/word write from flash. + ; Assumes location to write is already erased + ; Assumes ACCVIE = NMIIE = OFIE = 0, watchdog disabled. + ; Per section 5.3.3 of MSP430 Family User's Guide + DINT ; Disable interrupts + MOV #FWKEY,&FCTL3 ; Clear LOCK + MOV #FWKEY+WRT,&FCTL1 ; Enable write +ICST_RAM: ; If RAM, jump here to write. FCTL1,FCTL3,EINT are superfluous + MOV.B W,0(TOS) ; Write byte to flash location + MOV #FWKEY,&FCTL1 ; Done. Clear WRT. + MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK + EINT ; Enable interrupts + JMP IST_X diff --git a/amforth-6.5/msp430/drivers/flash/words/init-ram.asm b/amforth-6.5/msp430/drivers/flash/words/init-ram.asm new file mode 100644 index 0000000..30fab64 --- /dev/null +++ b/amforth-6.5/msp430/drivers/flash/words/init-ram.asm @@ -0,0 +1,16 @@ +;Z INIT_RAM -- initialize RAM +HEADER(XT_INIT_RAM,8,"init-ram",DOCOLON) +; the first cell is either FFFF or the recognizer stack depth, see ram.asm + DW XT_DOLITERAL, INFOSTART, XT_FETCH + DW XT_ZEROLESS + DW XT_DOCONDBRANCH + DEST(COLD1) +; there is no valid data in INFO flash + DW XT_UINIT,XT_DOBRANCH + DEST(COLD2) +COLD1: +; there is valid content in INFO, restore it + DW XT_DOLITERAL, INFOSTART +COLD2: + DW XT_DOLITERAL,RAMINFOAREA,XT_DOLITERAL,INFO_SIZE,XT_CMOVE + dw XT_EXIT diff --git a/amforth-6.5/msp430/drivers/flash/words/save.asm b/amforth-6.5/msp430/drivers/flash/words/save.asm new file mode 100644 index 0000000..2e0e9c4 --- /dev/null +++ b/amforth-6.5/msp430/drivers/flash/words/save.asm @@ -0,0 +1,7 @@ +; SAVE erases the first 128 bytes of Info Flash, then +; copies the User Area and subsequent RAM variables there. + HEADER(SAVE,4,"SAVE",DOCOLON) + DW XT_DOLITERAL,RAMINFOAREA + DW XT_DOLITERAL,INFOSTART + DW XT_DOLITERAL,INFO_SIZE + DW XT_2DUP,XT_FLERASE,XT_DTOI,XT_EXIT diff --git a/amforth-6.5/msp430/drivers/flash/words/scrub.asm b/amforth-6.5/msp430/drivers/flash/words/scrub.asm new file mode 100644 index 0000000..85fbe22 --- /dev/null +++ b/amforth-6.5/msp430/drivers/flash/words/scrub.asm @@ -0,0 +1,6 @@ +; SCRUB erases the application area of the Program Flash, +; and then does COLD to reset the User Variables. + HEADER(SCRUB,5,"SCRUB",DOCOLON) + DW XT_DOLITERAL,INFOSTART,XT_DOLITERAL,INFO_SIZE,FLERASE + DW XT_DOLITERAL,FLASHSTART,XT_DOLITERAL,(FLASHEND-FLASHSTART),FLERASE + DW XT_COLD,XT_EXIT diff --git a/amforth-6.5/msp430/drivers/fram.inc b/amforth-6.5/msp430/drivers/fram.inc new file mode 100644 index 0000000..92d7674 --- /dev/null +++ b/amforth-6.5/msp430/drivers/fram.inc @@ -0,0 +1,15 @@ +; FLASH MEMORY OPERATIONS +; Note that an I! or IC! to a RAM address >FLASHSTART will work -- it +; will enable the flash, write the RAM, and then disable the flash. +; An FLERASE to a RAM address will merely clear that one RAM cell. + +; Program Space (FRAM) operators + +.include "drivers/fram/words/i-store.asm" +.include "drivers/fram/words/ic-store.asm" +.include "drivers/fram/words/d-to-i.asm" + +.include "drivers/fram/words/flaligned.asm" +.include "drivers/fram/words/save.asm" +.include "drivers/fram/words/init-ram.asm" + diff --git a/amforth-6.5/msp430/drivers/fram/words/d-to-i.asm b/amforth-6.5/msp430/drivers/fram/words/d-to-i.asm new file mode 100644 index 0000000..fdc7ef7 --- /dev/null +++ b/amforth-6.5/msp430/drivers/fram/words/d-to-i.asm @@ -0,0 +1,37 @@ +;Z D->I c-addr1 c-addr2 u -- move Data->Code +; Block move from Data space to Code space. Flashable. +; For the MSP430, this uses a "smart" algorithm that uses word writes, +; rather than byte writes, whenever possible. Note that byte reads +; are used for the source, so it need not be aligned. + CODEHEADER(XT_DTOI,4,"d->i") + MOV @PSP+,W ; dest adrs + MOV @PSP+,X ; src adrs + CMP #0,TOS + JZ DTOI_X +DTOI_LOOP: ; Begin flash write sequence + DINT ; Disable interrupts + mov #0A500h, &MPUCTL0 ; Enable write access by disabling MPU + ; If length is 1, or dest. address is odd, do a byte write. + ; Else, do a word write. + CMP #1,TOS + JZ DTOI_BYTE + BIT #1,W + JNZ DTOI_BYTE +DTOI_WORD: MOV.B @X+,Y ; get low byte of word + MOV.B @X+,Q ; get high byte of word + SWPB Q + BIS Q,Y ; merge bytes + MOV Y,0(W) ; write byte to dest + ADD #2,W + SUB #1,TOS ; another 1 will be subtracted below + JMP DTOI_END +DTOI_BYTE: MOV.B @X+,0(W) ; copy byte from src to dest + ADD #1,W +DTOI_END: ; End flash write sequence + mov #0A501h, &MPUCTL0 ; Disable write access again + mov.b #0, &MPUCTL0+1 ; Disable MPU access + EINT ; Enable interrupts + SUB #1,TOS + JNZ DTOI_LOOP +DTOI_X: MOV @PSP+,TOS ; pop new TOS + NEXT diff --git a/amforth-6.5/msp430/drivers/fram/words/flaligned.asm b/amforth-6.5/msp430/drivers/fram/words/flaligned.asm new file mode 100644 index 0000000..9271eba --- /dev/null +++ b/amforth-6.5/msp430/drivers/fram/words/flaligned.asm @@ -0,0 +1,4 @@ +;Z FLALIGNED a -- a' align IDP to flash boundary +; $200 OVER - $1FF AND + ; + HEADER(XT_FLALIGNED,9,"flaligned",DOCOLON) + DW XT_DOLITERAL,0200h,XT_OVER,XT_MINUS,XT_DOLITERAL,01FFh,XT_AND,XT_PLUS,XT_EXIT diff --git a/amforth-6.5/msp430/drivers/fram/words/i-store.asm b/amforth-6.5/msp430/drivers/fram/words/i-store.asm new file mode 100644 index 0000000..c4de731 --- /dev/null +++ b/amforth-6.5/msp430/drivers/fram/words/i-store.asm @@ -0,0 +1,10 @@ +;Z I! x a-addr -- store cell in Instruction memory + CODEHEADER(XT_STOREI,2,"!i") + + mov #0A500h, &MPUCTL0 ; Enable write access by disabling MPU + MOV @PSP+,0(TOS) + MOV @PSP+,TOS + mov #0A501h, &MPUCTL0 ; Disable write access again + mov.b #0, &MPUCTL0+1 ; Disable MPU access + + NEXT diff --git a/amforth-6.5/msp430/drivers/fram/words/ic-store.asm b/amforth-6.5/msp430/drivers/fram/words/ic-store.asm new file mode 100644 index 0000000..dee4575 --- /dev/null +++ b/amforth-6.5/msp430/drivers/fram/words/ic-store.asm @@ -0,0 +1,10 @@ +;Z IC! x a-addr -- store char in Instruction memory + CODEHEADER(XT_CSTOREI,3,"c!i") + + mov #0A500h, &MPUCTL0 ; Enable write access by disabling MPU + MOV @PSP+,W + MOV.B W,0(TOS) + MOV @PSP+,TOS + + mov #0A501h, &MPUCTL0 ; Disable write access again + mov.b #0, &MPUCTL0+1 ; Disable MPU access diff --git a/amforth-6.5/msp430/drivers/fram/words/init-ram.asm b/amforth-6.5/msp430/drivers/fram/words/init-ram.asm new file mode 100644 index 0000000..30fab64 --- /dev/null +++ b/amforth-6.5/msp430/drivers/fram/words/init-ram.asm @@ -0,0 +1,16 @@ +;Z INIT_RAM -- initialize RAM +HEADER(XT_INIT_RAM,8,"init-ram",DOCOLON) +; the first cell is either FFFF or the recognizer stack depth, see ram.asm + DW XT_DOLITERAL, INFOSTART, XT_FETCH + DW XT_ZEROLESS + DW XT_DOCONDBRANCH + DEST(COLD1) +; there is no valid data in INFO flash + DW XT_UINIT,XT_DOBRANCH + DEST(COLD2) +COLD1: +; there is valid content in INFO, restore it + DW XT_DOLITERAL, INFOSTART +COLD2: + DW XT_DOLITERAL,RAMINFOAREA,XT_DOLITERAL,INFO_SIZE,XT_CMOVE + dw XT_EXIT diff --git a/amforth-6.5/msp430/drivers/fram/words/save.asm b/amforth-6.5/msp430/drivers/fram/words/save.asm new file mode 100644 index 0000000..96d2f0b --- /dev/null +++ b/amforth-6.5/msp430/drivers/fram/words/save.asm @@ -0,0 +1,7 @@ +; SAVE erases the first 128 bytes of Info Flash, then +; copies the User Area and subsequent RAM variables there. + HEADER(SAVE,4,"SAVE",DOCOLON) + DW XT_DOLITERAL,RAMINFOAREA + DW XT_DOLITERAL,INFOSTART + DW XT_DOLITERAL,INFO_SIZE + DW XT_DTOI,XT_EXIT diff --git a/amforth-6.5/msp430/drivers/fram/words/scrub.asm b/amforth-6.5/msp430/drivers/fram/words/scrub.asm new file mode 100644 index 0000000..85fbe22 --- /dev/null +++ b/amforth-6.5/msp430/drivers/fram/words/scrub.asm @@ -0,0 +1,6 @@ +; SCRUB erases the application area of the Program Flash, +; and then does COLD to reset the User Variables. + HEADER(SCRUB,5,"SCRUB",DOCOLON) + DW XT_DOLITERAL,INFOSTART,XT_DOLITERAL,INFO_SIZE,FLERASE + DW XT_DOLITERAL,FLASHSTART,XT_DOLITERAL,(FLASHEND-FLASHSTART),FLERASE + DW XT_COLD,XT_EXIT diff --git a/amforth-6.5/msp430/drivers/usart_a0.inc b/amforth-6.5/msp430/drivers/usart_a0.inc new file mode 100644 index 0000000..9ee8710 --- /dev/null +++ b/amforth-6.5/msp430/drivers/usart_a0.inc @@ -0,0 +1,19 @@ + +.set USART_TX_DATA=UCA0TXBUF +.set USART_RX_DATA=UCA0RXBUF +.set USART_TX_CFG=IFG2 +.set USART_RX_CFG=IFG2 + +; UCAxTXIFG is set if transmit is completed, i.e. ready for the next char +.set bm_USART_TXRD = UCA0TXIFG +; UCAxRXIFG is set if an unread character is in the input buffer +.set bm_USART_RXRD = UCA0RXIFG + +.include "words/usart-tx.asm" +.include "words/usart-txq.asm" +.include "words/usart-rx.asm" +.include "words/usart-rxq.asm" +;.include "words/usart-emit.asm" +;.include "words/usart-key.asm" +;.include "words/usart-keyq.asm" +.include "words/usart-init.asm" diff --git a/amforth-6.5/msp430/drivers/usart_a1.inc b/amforth-6.5/msp430/drivers/usart_a1.inc new file mode 100644 index 0000000..0b7feb9 --- /dev/null +++ b/amforth-6.5/msp430/drivers/usart_a1.inc @@ -0,0 +1,17 @@ + +.set USART_TX_DATA=UCA1TXBUF +.set USART_RX_DATA=UCA1RXBUF +.set USART_TX_CFG=UCA1IFG +.set USART_RX_CFG=UCA1IFG + +.set bm_USART_TXRD = UCTXIFG +.set bm_USART_RXRD = UCRXIFG + +.include "words/usart-tx.asm" +.include "words/usart-txq.asm" +.include "words/usart-rx.asm" +.include "words/usart-rxq.asm" +;.include "words/usart-emit.asm" +;.include "words/usart-key.asm" +;.include "words/usart-keyq.asm" +.include "words/usart-init.asm" diff --git a/amforth-6.5/msp430/drivers/usart_f-a0.inc b/amforth-6.5/msp430/drivers/usart_f-a0.inc new file mode 100644 index 0000000..da0a0d8 --- /dev/null +++ b/amforth-6.5/msp430/drivers/usart_f-a0.inc @@ -0,0 +1,19 @@ + +.set USART_TX_DATA=UCA0TXBUF +.set USART_RX_DATA=UCA0RXBUF +.set USART_TX_CFG=UCA0IFG +.set USART_RX_CFG=UCA0IFG + +; UCAxTXIFG is set if transmit is completed, i.e. ready for the next char +.set bm_USART_TXRD = UCTXIFG +; UCAxRXIFG is set if an unread character is in the input buffer +.set bm_USART_RXRD = UCRXIFG + +.include "words/usart-tx.asm" +.include "words/usart-txq.asm" +.include "words/usart-rx.asm" +.include "words/usart-rxq.asm" +;.include "words/usart-emit.asm" +;.include "words/usart-key.asm" +;.include "words/usart-keyq.asm" +.include "words/usart-init.asm" -- cgit v1.2.3