twim.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. //***************************************************************************
  2. //
  3. // Author(s)...: Павел Бобков http://ChipEnable.Ru
  4. //
  5. // Target(s)...: mega16
  6. //
  7. // Compiler....: IAR
  8. //
  9. // Description.: Драйвер ведущего TWI устройства.
  10. // Код основан на Atmel`овских доках - AVR315.
  11. //
  12. // Data........: 13.11.13
  13. //
  14. //***************************************************************************
  15. #ifndef TWIM_H
  16. #define TWIM_H
  17. #ifdef __ICCAVR__
  18. #include <ioavr.h>
  19. #include <intrinsics.h>
  20. #else // __GNUC__
  21. #include <avr/io.h>
  22. #include <avr/interrupt.h>
  23. #endif
  24. #include <stdint.h>
  25. /****************************************************************************
  26. Настройки модуля
  27. ****************************************************************************/
  28. /*если не определена тактовая
  29. частота, определяем ее здесь*/
  30. #ifndef F_CPU
  31. #error F_CPU!!!
  32. #endif
  33. /*размер буфера TWI модуля*/
  34. #define TWI_BUFFER_SIZE 8
  35. /****************************************************************************
  36. Статусные коды TWI модуля
  37. ****************************************************************************/
  38. /*Общие статусные коды */
  39. #define TWI_START 0x08 // состояние START сформировано
  40. #define TWI_REP_START 0x10 // состояние повторный START сформировано
  41. #define TWI_ARB_LOST 0x38 // был потерян приоритет
  42. /*Статусные коды ведущего передатчика*/
  43. #define TWI_MTX_ADR_ACK 0x18 // был передан пакет SLA+W и получено подтверждение
  44. #define TWI_MTX_ADR_NACK 0x20 // был передан пает SLA+W и не получено подтверждение
  45. #define TWI_MTX_DATA_ACK 0x28 // был передан байт данных и получено подтверждение
  46. #define TWI_MTX_DATA_NACK 0x30 // был передан байт данных и не получено подтверждение
  47. /*Статусные коды ведущего приемника*/
  48. #define TWI_MRX_ADR_ACK 0x40 // был передан пакет SLA+R и получено подтвеждение
  49. #define TWI_MRX_ADR_NACK 0x48 // был передан пакет SLA+R и не получено подтверждение
  50. #define TWI_MRX_DATA_ACK 0x50 // байт данных принят и передано подтверждение
  51. #define TWI_MRX_DATA_NACK 0x58 // был принят байт данных без подтверждения
  52. /*Другие статусные коды*/
  53. #define TWI_NO_STATE 0xF8 // неопределенное состояние; TWINT = “0”
  54. #define TWI_BUS_ERROR 0x00 // ошибка на шине из-за некоректных состояний СТАРТ или СТОП
  55. /*Пользовательские коды*/
  56. #define TWI_SUCCESS 0xff
  57. /****************************************************************************
  58. Определения констант
  59. ****************************************************************************/
  60. #define TWI_READ_BIT 0 // позиция R/W бита в адресном пакете
  61. #define TWI_ADR_BITS 1 // позиция адреса в адресном пакете
  62. #define TRUE 1
  63. #define FALSE 0
  64. /****************************************************************************
  65. Пользовательские функции
  66. ****************************************************************************/
  67. /*Инициализация и установка частоты SCL сигнала*/
  68. uint8_t TWI_MasterInit(uint16_t fr);
  69. /*Передать данные*/
  70. void TWI_SendData(uint8_t *msg, uint8_t msgSize);
  71. /*Получить принятые данные*/
  72. uint8_t TWI_GetData(uint8_t *msg, uint8_t msgSize);
  73. /*Взять статус TWI модуля*/
  74. uint8_t TWI_GetState(void);
  75. #endif //TWIM_H