usartsc16is752.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #ifndef USARTSC16IS752_H
  2. #define USARTSC16IS752_H
  3. #include <sys/device.h>
  4. #include <dev/uart.h>
  5. #include <dev/usart.h>
  6. #include <dev/irqreg.h>
  7. void Sc16is752UsartEnable(uint8_t dev, uint8_t ch);
  8. void Sc16is752UsartDisable(uint8_t dev, uint8_t ch);
  9. uint32_t Sc16is752UsartGetSpeed(uint8_t dev, uint8_t ch);
  10. int Sc16is752UsartSetSpeed(uint32_t rate, uint8_t dev, uint8_t ch);
  11. uint8_t Sc16is752UsartGetDataBits(uint8_t dev, uint8_t ch);
  12. int Sc16is752UsartSetDataBits(uint8_t bits, uint8_t dev, uint8_t ch);
  13. uint8_t Sc16is752UsartGetParity(uint8_t dev, uint8_t ch);
  14. int Sc16is752UsartSetParity(uint8_t mode, uint8_t dev, uint8_t ch);
  15. uint8_t Sc16is752UsartGetStopBits(uint8_t dev, uint8_t ch);
  16. int Sc16is752UsartSetStopBits(uint8_t bits, uint8_t dev, uint8_t ch);
  17. uint32_t Sc16is752UsartGetStatus(uint8_t dev, uint8_t ch);
  18. int Sc16is752UsartSetStatus(uint32_t flags, uint8_t dev, uint8_t ch);
  19. uint8_t Sc16is752UsartGetClockMode(uint8_t dev, uint8_t ch);
  20. int Sc16is752UsartSetClockMode(uint8_t mode, uint8_t dev, uint8_t ch);
  21. uint32_t Sc16is752UsartGetFlowControl(uint8_t dev, uint8_t ch);
  22. int Sc16is752UsartSetFlowControl(uint32_t flags, uint8_t dev, uint8_t ch);
  23. void Sc16is752UsartTxStart(uint8_t dev, uint8_t ch);
  24. void Sc16is752UsartRxStart(uint8_t dev, uint8_t ch);
  25. int Sc16is752UsartInit(uint8_t dev, uint8_t ch, NUTDEVICE *nutDev, IRQ_HANDLER *irq);
  26. int Sc16is752UsartDeinit(uint8_t dev, uint8_t ch, IRQ_HANDLER *irq);
  27. enum {
  28. EEFBIT=0x01, // Enhanced Functions enabled
  29. TCRBIT=0x02, // TCR, TLR regs enables
  30. DEFSEL=0x00, // Default Selection
  31. TCRSEL=0x20, // Select TCR, TLR regs
  32. SRSSEL=0x40, // Select Special Register Set (DLL, DLH)
  33. ERSSEL=0x80, // Select enhanced register set (EFR, ...XOFF2)
  34. REGSEL_MASK=0xf0
  35. };
  36. typedef struct
  37. {
  38. uint8_t state;
  39. uint8_t flags;
  40. } regselstate_t;
  41. typedef enum {
  42. RHR=0, // Receive Holding Register (RHR)
  43. THR=0, // Transmit Holding Register (THR)
  44. IER=1, // Interrupt Enable Register (IER)
  45. IIR=2, // Interrupt Identification Register (IIR)
  46. FCR=2, // FIFO Control Register (FCR)
  47. LCR=3, // Line Control Register (LCR)
  48. MCR=4, // Modem Control Register (MCR)
  49. LSR=5, // Line Status Register (LSR)
  50. MSR=6, // Modem Status Register (MSR)
  51. SPR=7, // Scratchpad Register (SPR)
  52. TCR=6 // Transmission Control Register (TCR)
  53. | TCRSEL,
  54. TLR=7 // Trigger Level Register (TLR)
  55. | TCRSEL,
  56. TXLVL=8, // Transmit FIFO Level register
  57. RXLVL=9, // Receive FIFO Level register
  58. IODir=10, // I/O pin Direction register
  59. IOState=11, // I/O pins State register
  60. IOIntEna=12, // I/O Interrupt Enable register
  61. IOControl=14, // I/O pins Control register
  62. EFCR=15, // Extra Features Control Register Extra Features Control Register
  63. DLL=0 // Divisor Latch LSB (DLL)
  64. | SRSSEL,
  65. DLH=1 // Divisor Latch MSB (DLH)
  66. | SRSSEL,
  67. EFR=2 // Enhanced Features Register (EFR)
  68. | ERSSEL,
  69. XON1=4 // Xon1 word
  70. | ERSSEL,
  71. XON2=5 // Xon2 word
  72. | ERSSEL,
  73. XOFF1=6 // Xoff1 word
  74. | ERSSEL,
  75. XOFF2=7 // Xoff2 word
  76. | ERSSEL
  77. } Sc16is752Regs_t;
  78. #define DEV_MAX 2
  79. #define CH_MAX 2
  80. #define USART_DEVICE0_I2C_ADDR 0x48
  81. #define USART_DEVICE1_I2C_ADDR 0x49
  82. // Bit 3..6 is register number
  83. // Bit 1..2 is channel number (only 00 and 01 are valid)
  84. #define REGADDR(regsel, ch) (((regsel)<<3)|(((ch)&1)<<1))
  85. // XTAL Clock Frequency, base for baudrate calculation
  86. #define XTAL 1843200
  87. #define INIT_BAUDRATE 19200
  88. #endif