-
Notifications
You must be signed in to change notification settings - Fork 66
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #329 from TG9541/release2.2.25
fixes #328: release 2.2.25 - bug-fix and INTRX
- Loading branch information
Showing
3 changed files
with
95 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
\ STM8 eForth buffered UART receive | ||
\ refer to github.com/TG9541/stm8ef/blob/master/LICENSE.md | ||
|
||
\ The code assumes target CPU resource definitions and that | ||
\ RX buffer length are defined prior to loading! | ||
\ More in the example at the end of the file | ||
|
||
#require WIPE | ||
#require :NVM | ||
#require ALIAS | ||
#require ]B! | ||
#require '?KEY | ||
|
||
5 CONSTANT #RIEN | ||
|
||
NVM | ||
VARIABLE rxbuf RBLEN 2- ALLOT | ||
VARIABLE rxp \ UART RX ISR buffer write pointer | ||
VARIABLE rrp \ ?RXB buffer read pointer | ||
|
||
\ increment buffer pointer w/ wrap around | ||
:NVM ( a -- ) | ||
DUP @ 1+ ( a ab1 ) [ rxbuf RBLEN + 1- ] LITERAL OVER < IF | ||
( a n1 ) DROP rxbuf ( a n0 ) | ||
THEN | ||
( a n ) SWAP ! | ||
;RAM ALIAS rpi | ||
|
||
\ RX ISR handler | ||
:NVM | ||
SAVEC | ||
UART1_DR C@ rxp @ C! rxp rpi | ||
IRET | ||
[ OVERT INT_UARTRX ! | ||
|
||
\ like ?RX only buffered | ||
: ?RXB ( -- c T | F ) | ||
rrp @ rxp @ = IF | ||
0 | ||
ELSE | ||
rrp @ C@ -1 rrp rpi | ||
THEN | ||
; | ||
|
||
\ Interrupt RX UART handler | ||
: INTRX ( -- ) | ||
[ ' ?RXB ] LITERAL '?KEY ! | ||
rxbuf DUP rxp ! rrp ! | ||
[ 1 UART1_CR2 #RIEN ]B! | ||
; | ||
|
||
WIPE RAM | ||
|
||
\\ Example | ||
|
||
\ select the generic STM8S controller first | ||
|
||
\ alternatively specify STM8S103, STM8S105 or STM8S207 | ||
\res MCU: STM8S103 | ||
|
||
\ load (or define) device independent constants | ||
\res export INT_UARTRX UART_DR UART_CR2 | ||
|
||
\ define the UART buffer length | ||
8 CONSTANT RBLEN | ||
|
||
\ then load the controller independent code | ||
#require INTRX | ||
|
||
\ put it to work | ||
#require WIPE | ||
#require :NVM | ||
#require OSCFREQ | ||
#require UART_DIV | ||
#require UARTBRR | ||
|
||
NVM | ||
'BOOT ( xt ) | ||
:NVM | ||
INTRX | ||
( xt ) LITERAL EXECUTE | ||
;NVM 'BOOT ! | ||
|
||
\ calculate UART_DIV settings for 3840*10 = 38400 baud @ CPU clock rate | ||
3840 OSCFREQ UART_DIV UARTBRR ! | ||
WIPE RAM | ||
|
||
\ make it survive a RESET command | ||
#require PERSIST | ||
PERSIST | ||
|
||
\ remember to set your terminal program (e.g. e4thcom) to 38400 baud! |