-
Notifications
You must be signed in to change notification settings - Fork 0
/
S35190.c
112 lines (104 loc) · 2.38 KB
/
S35190.c
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
#include "S35190.h"
/*
This is a fork of Faithsws RTC library.
https://github.com/faithsws
*/
extern unsigned char data_RX[7];
extern unsigned char data_TX[7];
void init_S35190(void)
{
//GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_FAST)
GPIO_Init(S35190_DATA_PORT, (GPIO_Pin_TypeDef)S35190_DATA, GPIO_MODE_OUT_OD_LOW_FAST);
GPIO_Init(S35190_RST_PORT, (GPIO_Pin_TypeDef)S35190_RST, GPIO_MODE_OUT_PP_HIGH_FAST);
GPIO_Init(S35190_SCLK_PORT, (GPIO_Pin_TypeDef)S35190_SCLK, GPIO_MODE_OUT_PP_HIGH_FAST);
}
void sclk(char state)
{
if(state)
GPIO_WriteHigh(S35190_SCLK_PORT,S35190_SCLK);
else
GPIO_WriteLow(S35190_SCLK_PORT,S35190_SCLK);
}
void data_out(char state)
{
GPIO_Init(S35190_DATA_PORT, (GPIO_Pin_TypeDef)S35190_DATA, GPIO_MODE_OUT_OD_LOW_FAST);
if(state)
GPIO_WriteHigh(S35190_DATA_PORT,S35190_DATA);
else
GPIO_WriteLow(S35190_DATA_PORT,S35190_DATA);
}
BitStatus data_in(void)
{
GPIO_Init(S35190_DATA_PORT, (GPIO_Pin_TypeDef)(S35190_DATA ), GPIO_MODE_IN_FL_NO_IT);
return GPIO_ReadInputPin(S35190_DATA_PORT,(GPIO_Pin_TypeDef)(S35190_DATA ));
}
void rst(char state)
{
if(state)
GPIO_WriteHigh(S35190_RST_PORT,S35190_RST);
else
GPIO_WriteLow(S35190_RST_PORT,S35190_RST);
}
void write_byte(unsigned char data)
{
unsigned char i;
for(i = 0;i<8;i++)
{
sclk(0);
if(data & 0x01)
data_out(1);
else
data_out(0);
data = data>>1;
sclk(1);
}
}
// Write address and number of bytes
void write_timer(unsigned char Addr, unsigned char Nbyte)
{
unsigned char i;
rst(0);
sclk(1);
rst(1);
write_byte(0|Addr|S35190_FCODE);// 0110 - fcode, C2C1C0-command, R/W FFFFCCCR
for(i = 0;i<Nbyte;i++)
{
write_byte(data_TX[i]);
}
sclk(1);
rst(0);
data_out(1);
}
unsigned char read_byte(void)
{
unsigned char i,temp = 0;
BitStatus bit;
for(i = 0;i<8;i++)
{
sclk(0);
temp = temp>>1;
bit = data_in();
if(bit != RESET)
{
temp = temp | 0x80;
}
sclk(1);
}
return temp;
}
// Read address and number of bytes
void read_timer(unsigned char Addr, unsigned char Nbyte)
{
unsigned char i;
rst(0);
sclk(1);
rst(1);
write_byte(0x80|Addr|S35190_FCODE); // 1 Read
for(i = 0;i<Nbyte;i++)
{
data_RX[i] = read_byte();
}
sclk(1);
rst(0);
data_out(1);
}