TACHYON
[~
FORGET CE1372.fth
pub CE1372.fth ." CE1372 WIDGET HARDWARE DEFINITIONS 140918.2200 " ;
( CE1372 PCB )
IFDEF &SDCS
--- redefine WIZnet and SD card I/O constants ---
#P12 |< ' &WNDO 1+ ! '' MISO from WIZNET
#P13 |< ' &WNCS 1+ ! '' WIZNET CS
#P14 |< ' &WNCK 1+ ! '' WIZNET SPI CLOCK
#P15 |< ' &WNDI 1+ ! '' MOSI to WIZNET
#P26 |< ' &SDCS 1+ ! '' SDCARD CS
#P27 |< ' &SDDO 1+ ! '' Data out from SDCARD
#P28 |< ' &SDCK 1+ ! '' SDCARD clocks (Shared with SCL)
#P29 |< ' &SDDI 1+ ! '' Data to SDCARD (Shared with SDA)
}
( P8X32A PINOUTS )
#P0 |< == &TR1 '' RS485 CH1 tx + rx #P1 |< == &TE1 '' RS485 CH1 Transmit enable #P2 |< == &TR2 '' RS485 CH2 tx + rx #P3 |< == &TE2 '' RS485 CH2 Transmit enable #P4 == DTR232 '' RS232 DTR #P5 == TXD232 '' RS232 TXD == BUSY (pin low -> 232 HI = busy) #P6 == RTS232 '' RS232 RTS == PAPER GOOD (pin low -> 232 HI) #P7 == RI232 '' RS232 RI #P8 == CTS232 '' RS232 CTS #P9 == RXD232 '' RS232 RXD #P10 == DSR232 '' RS232 DSR #P11 == DCD232 '' RS232 DCD [PRIVATE #P12 |< == &WNDO '' MISO from WIZNET #P13 |< == &WNCS '' WIZNET CS #P14 |< == &WNCK '' WIZNET SPI CLOCK #P15 |< == &WNDI '' MOSI to WIZNET \ #P16 |< == &P16 '' I/O MODULE or VGA \ #P17 |< == &P17 \ #P18 |< == &P18 \ #P19 |< == &P19 \ #P20 |< == &P20 \ #P21 |< == &P21 \ #P22 |< == &P22 \ #P23 |< == &P23 #P24 |< == &IOCS '' I/O MODULE CS (PUPPY FORMAT) #P25 |< == &SFCS '' Serial flash CS (WINBOND W25Q80 8Mbit Flash) #P26 |< == &SDCS '' SDCARD CS #P27 |< == &SDDO '' Data out from SDCARD #P28 |< == &SDCK '' SDCARD clocks (Shared with SCL) #P29 |< == &SDDI '' Data to SDCARD (Shared with SDA) \ 0 == &WNRST PRIVATE] |
( I2C PORTS )
BYTE leds
\ exectime = 12us
pub LED ( state led -- )
MASK SWAP NOT leds SWAP IF SET EXIT THEN CLR
;
pub LEDS
leds C@ 1
pub LEDREG!
I2CSTART $40 I2C! I2C! I2C! I2CSTOP
;
\ exectime = 144us
pub !LEDS
$7C leds C! 1 3 LEDREG! $81 3 LEDREG!
LEDS
;
pub ERRORLED 1 LED ;
pub RS232LED 2 LED ;
pub LANLED
pub RS485LED 3 LED ;
pub SDERRLED 4 LED LEDS ;
pub SDBSYLED 5 LED LEDS ;
pub READYLED 6 LED LEDS ;
pub WRESET ( on/off -- ) 7 LED LEDS ;
pub WPWRDN ( on/off ) NOT 0 LED LEDS ;
--- select MCP79410 RTC if driver is already loaded
IFDEF MCP79410 MCP79410 }
IFNDEF MCP79410
$DE == @rtc \ RTC I2C ADDRESS
8 BYTES rtcbuf PRIVATE
\ Read first 8 timekeeping bytes of RTC into rtcbuf
pri RDRTC ( reg cnt -- )
I2CSTART @rtc I2C! OVER I2C! I2CSTART @rtc 1+ I2C! // address RTC and register
rtcbuf ROT + SWAP ADO 0 I2C@ I C! LOOP 1 I2C@ DROP // read in cnt bytes into buffer+reg
I2CSTOP
;
\ Write first 8 timekeeping bytes of RTC from rtcbuf
pri WRRTC
I2CSTART @rtc I2C! 0 I2C!
rtcbuf 8 ADO I C@ I2C! LOOP
I2CSTOP
;
pri BCD>DEC ( bcd -- dec )
DUP >N SWAP 4 SHR #10 * +
;
pri DEC>BCD ( dec -- bcd )
#10 U/MOD 4 SHL +
;
pub TIME@ ( -- #hhmmss ) \ read time in decimal format
0 3 RDRTC
rtcbuf 2+ C@ $3F AND BCD>DEC #10000 *
rtcbuf 1+ C@ BCD>DEC #100 * +
rtcbuf C@ $7F AND BCD>DEC +
;
pub TIME! ( #hh.mm.ss -- ) \ write time in decimal format
0
pri TD! ( #nn.nn.nn n -- )
SWAP OVER 3 RDRTC
#100 U/MOD SWAP DEC>BCD $80 OR 4TH rtcbuf C!
#100 U/MOD SWAP DEC>BCD rtcbuf 1+ C!
DEC>BCD rtcbuf 2+ C!
WRRTC
;
pub DATE@ ( -- #yymmdd ) \ read international date in decimal format
4 3 RDRTC
rtcbuf 6 + C@ BCD>DEC #10000 *
rtcbuf 5 + C@ $3F AND BCD>DEC #100 * +
rtcbuf 4 + C@ $3F AND BCD>DEC +
;
\ Usage: #130630 DATE! \ set the date to the 30th June 2013
pub DATE! ( #yy.mm.dd -- )
4 3 RDRTC
#100 U/MOD SWAP DEC>BCD rtcbuf 4 + C!
#100 U/MOD SWAP DEC>BCD rtcbuf 5 + C!
DEC>BCD rtcbuf 6 + C!
WRRTC
;
pub DAY@ ( -- day ) --- read the day of the week as 0-6
3 1 RDRTC rtcbuf 3 + C@ 7 AND
;
pub DAY! ( day -- )
rtcbuf 3 + C@ 7 ANDN + rtcbuf 3 + C! WRRTC
;
pri .DTFMT ( value sep -- )
SWAP #10 >RADIX <# # # OVER HOLD # # SWAP HOLD # # #> PRINT$ RADIX>
;
pub .TIME TIME@ ":" .DTFMT ;
\ Print date in international format YYYY/MM/DD (otherwise 1/12/2013 could be 1st of December or 12th of January)
pub .DATE DATE@ "/" .DTFMT ;
pub .DAY DAY@ 1- 3 * " MONTUEWEDTHUFRISATSUN" + 3 CTYPE ;
pri .ASMONTH ( index -- )
>N 1- 3 *
" JanFebMarAprMayJunJulAugSepOctNovDec" + 3 CTYPE
;
pub .DT .DATE SPACE .DAY SPACE .TIME ;
}
( PCB DEFINITIONS )
\ Do what we need to do to init the hardware on this pcb
pub !PCB
!LEDS ON READYLED
;
" CE1372 WIDGET" 0 STRING PCB$
#1372 == PCB
]~
END