Nut/OS  4.10.3
API Reference
usartsc16is752.h
Go to the documentation of this file.
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,        // Enhanced Functions enabled
00035     TCRBIT=0x02,        // TCR, TLR regs enables
00036     DEFSEL=0x00,        // Default Selection
00037     TCRSEL=0x20,        // Select TCR, TLR regs
00038     SRSSEL=0x40,        // Select Special Register Set (DLL, DLH)
00039     ERSSEL=0x80,        // Select enhanced register set (EFR, ...XOFF2)
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,      // Receive Holding Register (RHR)
00051     THR=0,      // Transmit Holding Register (THR)
00052     IER=1,      // Interrupt Enable Register (IER)
00053     IIR=2,      // Interrupt Identification Register (IIR)
00054     FCR=2,      // FIFO Control Register (FCR)
00055     LCR=3,      // Line Control Register (LCR)
00056     MCR=4,      // Modem Control Register (MCR)
00057     LSR=5,      // Line Status Register (LSR)
00058     MSR=6,      // Modem Status Register (MSR)
00059     SPR=7,      // Scratchpad Register (SPR)
00060     TCR=6       // Transmission Control Register (TCR)
00061         | TCRSEL,
00062     TLR=7       // Trigger Level Register (TLR)
00063         | TCRSEL,
00064     TXLVL=8,    // Transmit FIFO Level register
00065     RXLVL=9,    // Receive FIFO Level register
00066     IODir=10,   // I/O pin Direction register
00067     IOState=11, // I/O pins State register
00068     IOIntEna=12, // I/O Interrupt Enable register
00069     IOControl=14, // I/O pins Control register
00070     EFCR=15,    // Extra Features Control Register Extra Features Control Register
00071     DLL=0       // Divisor Latch LSB (DLL)
00072         | SRSSEL,
00073     DLH=1       // Divisor Latch MSB (DLH)
00074         | SRSSEL,
00075     EFR=2       // Enhanced Features Register (EFR)
00076         | ERSSEL,
00077     XON1=4      // Xon1 word
00078         | ERSSEL,
00079     XON2=5      // Xon2 word
00080         | ERSSEL,
00081     XOFF1=6     // Xoff1 word
00082         | ERSSEL,
00083     XOFF2=7     // Xoff2 word
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 // Bit 3..6 is register number
00095 // Bit 1..2 is channel number (only 00 and 01 are valid)
00096 #define REGADDR(regsel, ch)  (((regsel)<<3)|(((ch)&1)<<1))
00097 
00098 // XTAL Clock Frequency, base for baudrate calculation
00099 #define XTAL 1843200
00100 
00101 #define INIT_BAUDRATE 19200
00102 
00103 #endif