//*************************************************************************** // // 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 #include #include /**************************************************************************** Настройки модуля ****************************************************************************/ /*если не определена тактовая частота, определяем ее здесь*/ #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