twi_master_drv._h

来自「at90can128底层驱动 有SPI,TWI,总线,CAN接口等」· _H 代码 · 共 80 行

_H
80
字号

#ifndef _TWI_MASTER_DRV_H_
#define _TWI_MASTER_DRV_H_

/*头文件*/
#include "config.h"

/*宏定义*/
#define MSK_TWCR_TWINT   0x80
#define MSK_TWCR_TWEA    0x40
#define MSK_TWCR_TWSTA   0x20
#define MSK_TWCR_TWSTO   0x10
#define MSK_TWCR_TWEN    0x04
#define MSK_TWCR_TWIE    0x01

#define Twi_set_address(address) (TWAR = address)
#define Twi_get_address()        (TWAR)
#define Twi_set_data(data)       (TWDR = data)
#define Twi_set_aa()             (TWCR |= MSK_TWCR_TWEA&(~MSK_TWCR_TWINT))
#define Twi_clear_aa()           (TWCR &= (~MSK_TWCR_TWEA)&(~MSK_TWCR_TWINT))
#define Twi_get_status()         (TWSR)
#define Twi_set_status(twps)         (TWSR = twps)       //by zmq
#define Twi_clear_start()        (TWCR &= (~MSK_TWCR_TWSTA)&(~MSK_TWCR_TWINT) )
#define Twi_set_start()          (TWCR |= MSK_TWCR_TWSTA)
#define Twi_set_stop()           (TWCR |= MSK_TWCR_TWSTO)
#define Twi_clear_stop()         (TWCR &= ~MSK_TWCR_TWSTO)
#define Twi_get_data()           (TWDR)
#define Twi_clear_si()           (TWCR |= MSK_TWCR_TWINT)
#define Twi_set_baudrate(baudrate)(TWBR = baudrate)
#define Twi_wait_hw_stop()       while((TWCR & MSK_TWCR_TWSTO)==MSK_TWCR_TWSTO)
#define Twi_wait_event()         while(((TWCR & MSK_TWCR_TWINT))!= MSK_TWCR_TWINT)
#define Disable_twi_interrupt()  (TWCR &= ~MSK_TWCR_TWIE)
#define Enable_twi_interrupt()   (TWCR |= MSK_TWCR_TWIE)
#define Twi_init_hw(arg)         (TWCR = arg)


#define TWI_TRANSFER_OK         0
#define TWI_RECEIVE_OK          1
#define TWI_BUS_ERROR           2
#define TWI_HOST_ADR_NACK       3
#define TWI_HOST_DATA_NACK      4
#define TWI_ARBITRATION_LOST    5
#define TWI_UNKNOWN             6
#define TWI_NOT_FREE            7
#define TWI_OK					8
#define TWI_FREE				9


#define TWI_READ  0x01
#define TWI_WRITE 0x00

/*寄存器配置*/
#define TWI_CONFIG  0x04  
//master TWEN=1

/*结构定义*/
typedef struct{
		uchar  address,rw,nbbytes;
		uchar*  buf;
}TWI_MSG;

/*外部变量定义*/
extern TWI_MSG    twi_message;        // The TWI message to be sent in Master Mode
extern uchar	  twi_busy;
extern uchar	  twi_err;


/*函数定义*/
uchar twi_send_message_polling  ( uchar slave_addr, uchar rw, uchar nbytes, uchar *info );
uchar twi_send_message_interrupt( uchar slave_addr,uchar rw, uchar nbytes, uchar *info);


/*外部函数定义*/
extern void twi_lib_init (void);
extern void TWI_MW(uchar slave_addr,uchar nbbytes,uchar *info);
extern void TWI_MR(uchar slave_addr,uchar nbbytes,uchar *info);

#endif /* _TWI_H_ */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?