twim.h 4.2 KB

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