123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- /*-------------------------------------------------------------------------
- time.h
- Copyright (C) 2001, Johan Knol <johan.knol AT iduna.nl>
- This library is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to the
- Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
- MA 02110-1301, USA.
- As a special exception, if you link this library with other files,
- some of which are compiled with SDCC, to produce an executable,
- this library does not by itself cause the resulting executable to
- be covered by the GNU General Public License. This exception does
- not however invalidate any other reasons why the executable file
- might be covered by the GNU General Public License.
- -------------------------------------------------------------------------*/
- #ifndef TINIBIOS_H
- #define TINIBIOS_H
- #include <ds80c390.h>
- #include <time.h>
- void Serial0Init (unsigned long baud, unsigned char buffered);
- char Serial0GetChar(void);
- void Serial0PutChar(char);
- char Serial0CharArrived(void);
- void Serial0Baud(unsigned long baud);
- void Serial0SendBreak(void);
- void Serial0Flush(void);
- void Serial0SwitchToBuffered(void); /* ds400 only. */
- void Serial1Init (unsigned long baud, unsigned char buffered);
- char Serial1GetChar(void);
- void Serial1PutChar(char);
- char Serial1CharArrived(void);
- void Serial1Baud(unsigned long baud);
- void Serial1SendBreak(void);
- void Serial1Flush(void);
- unsigned long ClockTicks();
- void ClockMilliSecondsDelay(unsigned long ms);
- void ClockMicroSecondsDelay(unsigned int us);
- #define SERIAL_0_BAUD 115200L
- #define SERIAL_1_BAUD 9600L
- /* these need to be binary numbers */
- #define SERIAL_0_RECEIVE_BUFFER_SIZE 1024
- #define SERIAL_1_RECEIVE_BUFFER_SIZE 64
- /* I know someone is fooling with the crystals */
- #if defined(__SDCC_ds400)
- # define OSCILLATOR 14745600L
- #else
- # define OSCILLATOR 18432000L
- #endif
- /* Set the cpu speed in clocks per machine cycle, valid values are:
- 1024: Divide-by-1024 (power management) mode (screws ALL timers and serial)
- 4: Standard 8051 divide-by-4 mode
- 2: Use 2x xtal multiplier
- 1: Use 4x xtal multiplier (Don't do this with a TINI at 18.432MHz)
- */
- #define CPU_SPEED 2
- void CpuSpeed(unsigned int speed);
- /* The MOVX stretch cycles, see datasheet */
- #define CPU_MOVX_STRETCH 0x01
- /* from rtc390.c */
- #define HAVE_RTC
- unsigned char RtcRead(struct tm *rtcDate);
- void RtcWrite(struct tm *rtcDate);
- /* from lcd390.c */
- extern void LcdInit(void);
- extern void LcdOn(void);
- extern void LcdOff(void);
- extern void LcdClear(void);
- extern void LcdHome(void);
- extern void LcdGoto(unsigned int collumnRow);
- extern void LcdPutChar(char c);
- extern void LcdPutString(char *string);
- extern void LcdLPutString(unsigned int collumnRow, char *string);
- extern void LcdPrintf(const char *format, ...) __reentrant;
- extern void LcdLPrintf(unsigned int collumnRow, const char *format, ...) __reentrant;
- /* from i2c390.c */
- #define I2C_BUFSIZE 128
- extern char I2CReset(void);
- extern char I2CStart(void);
- extern char I2CStop(void);
- extern char I2CSendStop(char addr, char count,
- char send_stop);
- extern char I2CReceive(char addr, char count);
- extern char I2CSendReceive(char addr, char tx_count,
- char rx_count);
- /*extern char I2CByteOut(char);*/
- /*extern void I2CDumpError(char);*/
- /* global transfer buffers */
- extern char i2cTransmitBuffer[I2C_BUFSIZE];
- extern char i2cReceiveBuffer[I2C_BUFSIZE];
- /* Macro for normal send transfer ending with a stop condition */
- #define I2CSend(addr, count) I2CSendStop(addr, count, 1)
- /* internal functions used by tinibios.c */
- unsigned char _sdcc_external_startup(void);
- void Serial0IrqHandler (void) __interrupt 4;
- void Serial1IrqHandler (void) __interrupt 7;
- #if !defined(__SDCC_ds400)
- void ClockInit();
- void ClockIrqHandler (void) __interrupt 1 __naked;
- #endif
- #if defined(__SDCC_ds400)
- /* functions for dealing with the ds400 ROM firmware. */
- /* A wrapper which calls rom_init allocating all available RAM in CE0
- to the heap, sets the serial port to SERIAL_0_BAUD, sets up the
- millisecond timer, and diddles the clock multiplier. */
- /* Values for the romInit "speed" parameter. */
- #define SPEED_1X 0 /* no clock multiplier, normal speed. */
- #define SPEED_2X 1 /* 2x clock multiplier. */
- #define SPEED_4X 2 /* 4x clock, DOESN'T WORK ON TINIm400! */
- unsigned char romInit(unsigned char noisy,
- char speed);
- /* Install an interrupt handler. */
- void installInterrupt(void (*isrPtr)(void), unsigned char offset);
- #endif
- #endif /* TINIBIOS_H */
|