summaryrefslogtreecommitdiff
path: root/bsp/stm32f20x/Drivers/i2c.h
blob: 3d2c9d871f38a203f5941938dd44f6f0ead806d8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#ifndef I2C_H
#define I2C_H

#include "stm32f2xx.h"

/* Exported constants --------------------------------------------------------*/

#define	SR1_AF_Set				((uint16_t)0x0400)
#define	SR1_ARLO_Set			((uint16_t)0x0200)
#define	SR1_BERR_Set			((uint16_t)0x0100)
#define	SR1_ADDR_Set			((uint16_t)0x0002)
#define	SR1_SB_Set				((uint16_t)0x0001)


#define SR2_BUSY				((uint16_t)0x0002)
#define SR2_MSL					((uint16_t)0x0001)

#define CR1_SWRST_Set			((uint16_t)0x8000)
/* I2C SPE mask */
#define CR1_PE_Set              ((uint16_t)0x0001)
#define CR1_PE_Reset            ((uint16_t)0xFFFE)

/* I2C START mask */
#define CR1_START_Set           ((uint16_t)0x0100)
#define CR1_START_Reset         ((uint16_t)0xFEFF)

#define CR1_POS_Set           ((uint16_t)0x0800)
#define CR1_POS_Reset         ((uint16_t)0xF7FF)

/* I2C STOP mask */
#define CR1_STOP_Set            ((uint16_t)0x0200)
#define CR1_STOP_Reset          ((uint16_t)0xFDFF)

/* I2C ACK mask */
#define CR1_ACK_Set             ((uint16_t)0x0400)
#define CR1_ACK_Reset           ((uint16_t)0xFBFF)

/* I2C ENARP mask */
#define CR1_ENARP_Set           ((uint16_t)0x0010)
#define CR1_ENARP_Reset         ((uint16_t)0xFFEF)

/* I2C NOSTRETCH mask */
#define CR1_NOSTRETCH_Set       ((uint16_t)0x0080)
#define CR1_NOSTRETCH_Reset     ((uint16_t)0xFF7F)

/* I2C registers Masks */
#define CR1_CLEAR_Mask          ((uint16_t)0xFBF5)

/* I2C DMAEN mask */
#define CR2_DMAEN_Set           ((uint16_t)0x0800)
#define CR2_DMAEN_Reset         ((uint16_t)0xF7FF)

/* I2C LAST mask */
#define CR2_LAST_Set            ((uint16_t)0x1000)
#define CR2_LAST_Reset          ((uint16_t)0xEFFF)

/* I2C FREQ mask */
#define CR2_FREQ_Reset          ((uint16_t)0xFFC0)

/* I2C ADD0 mask */
#define OAR1_ADD0_Set           ((uint16_t)0x0001)
#define OAR1_ADD0_Reset         ((uint16_t)0xFFFE)

/* I2C ENDUAL mask */
#define OAR2_ENDUAL_Set         ((uint16_t)0x0001)
#define OAR2_ENDUAL_Reset       ((uint16_t)0xFFFE)

/* I2C ADD2 mask */
#define OAR2_ADD2_Reset         ((uint16_t)0xFF01)

/* I2C F/S mask */
#define CCR_FS_Set              ((uint16_t)0x8000)

/* I2C CCR mask */
#define CCR_CCR_Set             ((uint16_t)0x0FFF)

/* I2C FLAG mask */
#define FLAG_Mask               ((uint32_t)0x00FFFFFF)

/* I2C Interrupt Enable mask */
#define ITEN_Mask               ((uint32_t)0x07000000)


#define I2C_IT_BUF                      ((uint16_t)0x0400)
#define I2C_IT_EVT                      ((uint16_t)0x0200)
#define I2C_IT_ERR                      ((uint16_t)0x0100)


#define  ClockSpeed            400000

#define I2C_DIRECTION_TX 0
#define I2C_DIRECTION_RX 1

#define OwnAddress1 0x28
#define OwnAddress2 0x30


#define I2C1_DMA_CHANNEL_TX           DMA1_Stream6
#define I2C1_DMA_CHANNEL_RX           DMA1_Stream0
#define I2C1_DMA_TX_IRQn	          DMA1_Stream6_IRQn
#define I2C1_DMA_RX_IRQn              DMA1_Stream0_IRQn
								  
#define I2C2_DMA_CHANNEL_TX           DMA1_Stream2
#define I2C2_DMA_CHANNEL_RX           DMA1_Stream7
#define I2C2_DMA_TX_IRQn	          DMA1_Stream2_IRQn
#define I2C2_DMA_RX_IRQn              DMA1_Stream7_IRQn

#define I2C1_DR_Address              0x40005410
#define I2C2_DR_Address              0x40005810

#define I2C1_SDA_PIN                  GPIO_Pin_7
#define I2C1_SCL_PIN                  GPIO_Pin_6
#define I2C1_SDA_SOURCE               GPIO_PinSource7
#define I2C1_SCL_SOURCE               GPIO_PinSource6
#define I2C1_GPIO_PORT          	  GPIOB 
#define I2C1_GPIO_CLK          		  RCC_AHB1Periph_GPIOB
#define I2C1_CLK                      RCC_APB1Periph_I2C1

#define I2C2_SDA_PIN                  GPIO_Pin_11
#define I2C2_SCL_PIN                  GPIO_Pin_10
#define I2C2_SDA_SOURCE               GPIO_PinSource11
#define I2C2_SCL_SOURCE               GPIO_PinSource10
#define I2C2_GPIO_PORT          	  GPIOB 
#define I2C2_GPIO_CLK          		  RCC_AHB1Periph_GPIOB
#define I2C2_CLK                      RCC_APB1Periph_I2C1

#define I2C_MEM_1Byte			      1
#define I2C_MEM_2Bytes				  2

typedef enum
{
    Error = 0,
    Success = !Error
}Status;

typedef enum
{
    Polling = 0x00,
    Interrupt = 0x01,
    DMA = 0x02
} I2C_ProgrammingModel;

void I2C1_INIT();
Status I2C_AcknowledgePolling(I2C_TypeDef* I2Cx ,uint8_t Addr);
Status I2C_IORW(I2C_TypeDef* I2Cx, uint8_t* pBuffer, uint32_t NumByteToRead, uint16_t memAddr, uint8_t SlaveAddress , uint8_t MemType );

#endif