00001 #ifndef USARTSC16IS752_H
00002 #define USARTSC16IS752_H
00003
00004
00005 #include <sys/device.h>
00006 #include <dev/uart.h>
00007 #include <dev/usart.h>
00008 #include <dev/irqreg.h>
00009
00010 void Sc16is752UsartEnable(uint8_t dev, uint8_t ch);
00011 void Sc16is752UsartDisable(uint8_t dev, uint8_t ch);
00012 uint32_t Sc16is752UsartGetSpeed(uint8_t dev, uint8_t ch);
00013 int Sc16is752UsartSetSpeed(uint32_t rate, uint8_t dev, uint8_t ch);
00014 uint8_t Sc16is752UsartGetDataBits(uint8_t dev, uint8_t ch);
00015 int Sc16is752UsartSetDataBits(uint8_t bits, uint8_t dev, uint8_t ch);
00016 uint8_t Sc16is752UsartGetParity(uint8_t dev, uint8_t ch);
00017 int Sc16is752UsartSetParity(uint8_t mode, uint8_t dev, uint8_t ch);
00018 uint8_t Sc16is752UsartGetStopBits(uint8_t dev, uint8_t ch);
00019 int Sc16is752UsartSetStopBits(uint8_t bits, uint8_t dev, uint8_t ch);
00020 uint32_t Sc16is752UsartGetStatus(uint8_t dev, uint8_t ch);
00021 int Sc16is752UsartSetStatus(uint32_t flags, uint8_t dev, uint8_t ch);
00022 uint8_t Sc16is752UsartGetClockMode(uint8_t dev, uint8_t ch);
00023 int Sc16is752UsartSetClockMode(uint8_t mode, uint8_t dev, uint8_t ch);
00024 uint32_t Sc16is752UsartGetFlowControl(uint8_t dev, uint8_t ch);
00025 int Sc16is752UsartSetFlowControl(uint32_t flags, uint8_t dev, uint8_t ch);
00026 void Sc16is752UsartTxStart(uint8_t dev, uint8_t ch);
00027 void Sc16is752UsartRxStart(uint8_t dev, uint8_t ch);
00028 int Sc16is752UsartInit(uint8_t dev, uint8_t ch, NUTDEVICE *nutDev, IRQ_HANDLER *irq);
00029 int Sc16is752UsartDeinit(uint8_t dev, uint8_t ch, IRQ_HANDLER *irq);
00030
00031
00032
00033 enum {
00034 EEFBIT=0x01,
00035 TCRBIT=0x02,
00036 DEFSEL=0x00,
00037 TCRSEL=0x20,
00038 SRSSEL=0x40,
00039 ERSSEL=0x80,
00040 REGSEL_MASK=0xf0
00041 };
00042
00043 typedef struct
00044 {
00045 uint8_t state;
00046 uint8_t flags;
00047 } regselstate_t;
00048
00049 typedef enum {
00050 RHR=0,
00051 THR=0,
00052 IER=1,
00053 IIR=2,
00054 FCR=2,
00055 LCR=3,
00056 MCR=4,
00057 LSR=5,
00058 MSR=6,
00059 SPR=7,
00060 TCR=6
00061 | TCRSEL,
00062 TLR=7
00063 | TCRSEL,
00064 TXLVL=8,
00065 RXLVL=9,
00066 IODir=10,
00067 IOState=11,
00068 IOIntEna=12,
00069 IOControl=14,
00070 EFCR=15,
00071 DLL=0
00072 | SRSSEL,
00073 DLH=1
00074 | SRSSEL,
00075 EFR=2
00076 | ERSSEL,
00077 XON1=4
00078 | ERSSEL,
00079 XON2=5
00080 | ERSSEL,
00081 XOFF1=6
00082 | ERSSEL,
00083 XOFF2=7
00084 | ERSSEL
00085 } Sc16is752Regs_t;
00086
00087
00088 #define DEV_MAX 2
00089 #define CH_MAX 2
00090
00091 #define USART_DEVICE0_I2C_ADDR 0x48
00092 #define USART_DEVICE1_I2C_ADDR 0x49
00093
00094
00095
00096 #define REGADDR(regsel, ch) (((regsel)<<3)|(((ch)&1)<<1))
00097
00098
00099 #define XTAL 1843200
00100
00101 #define INIT_BAUDRATE 19200
00102
00103 #endif