12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- //***************************************************************************
- //
- // Author(s)...: Павел Бобков http://ChipEnable.Ru
- //
- // Target(s)...: mega16
- //
- // Compiler....: IAR
- //
- // Description.: Драйвер ведущего TWI устройства.
- // Код основан на Atmel`овских доках - AVR315.
- //
- // Data........: 13.11.13
- //
- //***************************************************************************
- #ifndef TWIM_H
- #define TWIM_H
- #include <ioavr.h>
- #include <intrinsics.h>
- #include <stdint.h>
- /****************************************************************************
- Настройки модуля
- ****************************************************************************/
- /*если не определена тактовая
- частота, определяем ее здесь*/
- #ifndef F_CPU
- #error F_CPU!!!
- #endif
- /*размер буфера TWI модуля*/
- #define TWI_BUFFER_SIZE 8
- /****************************************************************************
- Статусные коды TWI модуля
- ****************************************************************************/
- /*Общие статусные коды */
- #define TWI_START 0x08 // состояние START сформировано
- #define TWI_REP_START 0x10 // состояние повторный START сформировано
- #define TWI_ARB_LOST 0x38 // был потерян приоритет
- /*Статусные коды ведущего передатчика*/
- #define TWI_MTX_ADR_ACK 0x18 // был передан пакет SLA+W и получено подтверждение
- #define TWI_MTX_ADR_NACK 0x20 // был передан пает SLA+W и не получено подтверждение
- #define TWI_MTX_DATA_ACK 0x28 // был передан байт данных и получено подтверждение
- #define TWI_MTX_DATA_NACK 0x30 // был передан байт данных и не получено подтверждение
- /*Статусные коды ведущего приемника*/
- #define TWI_MRX_ADR_ACK 0x40 // был передан пакет SLA+R и получено подтвеждение
- #define TWI_MRX_ADR_NACK 0x48 // был передан пакет SLA+R и не получено подтверждение
- #define TWI_MRX_DATA_ACK 0x50 // байт данных принят и передано подтверждение
- #define TWI_MRX_DATA_NACK 0x58 // был принят байт данных без подтверждения
- /*Другие статусные коды*/
- #define TWI_NO_STATE 0xF8 // неопределенное состояние; TWINT = “0”
- #define TWI_BUS_ERROR 0x00 // ошибка на шине из-за некоректных состояний СТАРТ или СТОП
- /*Пользовательские коды*/
- #define TWI_SUCCESS 0xff
- /****************************************************************************
- Определения констант
- ****************************************************************************/
- #define TWI_READ_BIT 0 // позиция R/W бита в адресном пакете
- #define TWI_ADR_BITS 1 // позиция адреса в адресном пакете
- #define TRUE 1
- #define FALSE 0
- /****************************************************************************
- Пользовательские функции
- ****************************************************************************/
- /*Инициализация и установка частоты SCL сигнала*/
- uint8_t TWI_MasterInit(uint16_t fr);
- /*Передать данные*/
- void TWI_SendData(uint8_t *msg, uint8_t msgSize);
- /*Получить принятые данные*/
- uint8_t TWI_GetData(uint8_t *msg, uint8_t msgSize);
- /*Взять статус TWI модуля*/
- uint8_t TWI_GetState(void);
- #endif //TWIM_H
|