twim.h 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. #include <ioavr.h>
  18. #include <intrinsics.h>
  19. #include <stdint.h>
  20. /****************************************************************************
  21. Настройки модуля
  22. ****************************************************************************/
  23. /*если не определена тактовая
  24. частота, определяем ее здесь*/
  25. #ifndef F_CPU
  26. #error F_CPU!!!
  27. #endif
  28. /*размер буфера TWI модуля*/
  29. #define TWI_BUFFER_SIZE 8
  30. /****************************************************************************
  31. Статусные коды TWI модуля
  32. ****************************************************************************/
  33. /*Общие статусные коды */
  34. #define TWI_START 0x08 // состояние START сформировано
  35. #define TWI_REP_START 0x10 // состояние повторный START сформировано
  36. #define TWI_ARB_LOST 0x38 // был потерян приоритет
  37. /*Статусные коды ведущего передатчика*/
  38. #define TWI_MTX_ADR_ACK 0x18 // был передан пакет SLA+W и получено подтверждение
  39. #define TWI_MTX_ADR_NACK 0x20 // был передан пает SLA+W и не получено подтверждение
  40. #define TWI_MTX_DATA_ACK 0x28 // был передан байт данных и получено подтверждение
  41. #define TWI_MTX_DATA_NACK 0x30 // был передан байт данных и не получено подтверждение
  42. /*Статусные коды ведущего приемника*/
  43. #define TWI_MRX_ADR_ACK 0x40 // был передан пакет SLA+R и получено подтвеждение
  44. #define TWI_MRX_ADR_NACK 0x48 // был передан пакет SLA+R и не получено подтверждение
  45. #define TWI_MRX_DATA_ACK 0x50 // байт данных принят и передано подтверждение
  46. #define TWI_MRX_DATA_NACK 0x58 // был принят байт данных без подтверждения
  47. /*Другие статусные коды*/
  48. #define TWI_NO_STATE 0xF8 // неопределенное состояние; TWINT = “0”
  49. #define TWI_BUS_ERROR 0x00 // ошибка на шине из-за некоректных состояний СТАРТ или СТОП
  50. /*Пользовательские коды*/
  51. #define TWI_SUCCESS 0xff
  52. /****************************************************************************
  53. Определения констант
  54. ****************************************************************************/
  55. #define TWI_READ_BIT 0 // позиция R/W бита в адресном пакете
  56. #define TWI_ADR_BITS 1 // позиция адреса в адресном пакете
  57. #define TRUE 1
  58. #define FALSE 0
  59. /****************************************************************************
  60. Пользовательские функции
  61. ****************************************************************************/
  62. /*Инициализация и установка частоты SCL сигнала*/
  63. uint8_t TWI_MasterInit(uint16_t fr);
  64. /*Передать данные*/
  65. void TWI_SendData(uint8_t *msg, uint8_t msgSize);
  66. /*Получить принятые данные*/
  67. uint8_t TWI_GetData(uint8_t *msg, uint8_t msgSize);
  68. /*Взять статус TWI модуля*/
  69. uint8_t TWI_GetState(void);
  70. #endif //TWIM_H