summaryrefslogtreecommitdiff
path: root/bsp/upd70f3454/drivers/uart.h
blob: 8c61bbd990402bb05010ee119222050c6e343171 (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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
#ifndef __UART_H__
#define __UART_H__

#define BAUD_RATE 9600

/*
	UARTAn control register 0 (UAnCTL0)
*/
#define	_10_UARTA_UAnCTL0_INITIALVALUE			0x10U
/* UARTAn operation control (UAnPWR) */
#define	_00_UARTA_OPERATION_DISABLE			0x00U	/* disable UARTAn operation (UARTAn reset asynchronously) */
#define	_80_UARTA_OPERATION_ENABLE			0x80U	/* enable UARTAn operation */
/* Transmission operation enable (UAnTXE) */
#define	_00_UARTA_TRANSMISSION_DISABLE			0x00U	/* disable transmission operation */
#define	_40_UARTA_TRANSMISSION_ENABLE			0x40U	/* enable transmission operation */
/* Reception operation enable (UAnRXE) */
#define	_00_UARTA_RECEPTION_DISABLE			0x00U	/* disable reception operation */
#define	_20_UARTA_RECEPTION_ENABLE			0x20U	/* enable reception operation */
/* Transfer direction selection (UAnDIR) */
#define	_00_UARTA_TRANSFDIR_MSB				0x00U	/* MSB-first transfer */
#define	_10_UARTA_TRANSFDIR_LSB				0x10U	/* LSB-first transfer */
/* Parity selection during transmission/reception (UAnPS1,UAnPS0) */
#define	_00_UARTA_PARITY_NONE				0x00U	/* no parity output/reception with no parity */
#define	_04_UARTA_PARITY_ZREO				0x04U	/* 0 parity output/reception with 0 parity */
#define	_08_UARTA_PARITY_ODD				0x08U	/* odd parity output/odd parity check */
#define	_0C_UARTA_PARITY_EVEN				0x0CU	/* even parity output/even parity check */
/* Specification of data character length of 1 frame of transmit/receive data (UAnCL) */
#define	_00_UARTA_DATALENGTH_7BIT			0x00U	/* 7 bits */
#define	_02_UARTA_DATALENGTH_8BIT			0x02U	/* 8 bits */
/* Specification of length of stop bit for transmit data (UAnSL) */
#define	_00_UARTA_STOPLENGTH_1BIT			0x00U	/* 1 bit */
#define	_01_UARTA_STOPLENGTH_2BIT			0x01U	/* 2 bits */

/*
	UARTAn base clock selects register (UAnCTL1)
*/
/* UAnCTL1 register (UAnCKS3 - UAnCKS0) */
#define	_00_UARTA_BASECLK_FXX_2				0x00U	/* fXX/2 */
#define	_01_UARTA_BASECLK_FXX_4				0x01U	/* fXX/2^2 */
#define	_02_UARTA_BASECLK_FXX_8				0x02U	/* fXX/2^3 */
#define	_03_UARTA_BASECLK_FXX_16			0x03U	/* fXX/2^4 */
#define	_04_UARTA_BASECLK_FXX_32			0x04U	/* fXX/2^5 */
#define	_05_UARTA_BASECLK_FXX_64			0x05U	/* fXX/2^6 */
#define	_06_UARTA_BASECLK_FXX_128			0x06U	/* fXX/2^7 */
#define	_07_UARTA_BASECLK_FXX_256			0x07U	/* fXX/2^8 */
#define	_08_UARTA_BASECLK_FXX_512			0x08U	/* fXX/2^9 */
#define	_09_UARTA_BASECLK_FXX_1024			0x09U	/* fXX/2^10 */
#define	_0A_UARTA_BASECLK_FXX_2048			0x0AU	/* fXX/2^11 */
#define	_0B_UARTA_BASECLK_FXX_4096			0x0BU	/* fXX/2^12 */

/*
	UARTAn option control register 0 (UAnOPT0)
*/
#define	_14_UARTA_UAnOPT0_INITIALVALUE			0x14U
/* Transmit data level bit(UAnTDL) */
#define	_00_UARTA_TRAN_DATALEVEL_NORMAL			0x00U	/* normal output of transfer data */
#define	_02_UARTA_TRAN_DATALEVEL_INVERTED		0x02U	/* inverted output of transfer data */
/* Receive data level bit(UAnRDL) */
#define	_00_UARTA_REC_DATALEVEL_NORMAL			0x00U	/* normal input of transfer data */
#define	_01_UARTA_REC_DATALEVEL_INVERTED		0x01U	/* inverted input of transfer data */

/*
	CSIBn control register 0 (CBnCTL0)
*/
/* Specification of CSIBn operation disable/enable (CBnPWR)*/
#define	_00_CSIB_OPERATION_DISABLE		0x00U	/* disable CSIBn operation and reset the CBnSTR register */
#define	_80_CSIB_OPERATION_ENABLE		0x80U	/* enable CSIBn operation */
/* Specification of transmit operation disable/enable (CBnTXE)*/
#define	_00_CSIB_TRANSMIT_DISABLE		0x00U	/* disable transmit operation */
#define	_40_CSIB_TRANSMIT_ENABLE		0x40U	/* enable transmit operation */
/* Specification of receive operation disable/enable (CBnRXE)*/
#define	_00_CSIB_RECEIVE_DISABLE		0x00U	/* disable receive operation */
#define	_20_CSIB_RECEIVE_ENABLE			0x20U	/* enable receive operation */
/* Specification of transfer direction mode (MSB/LSB) (CBnDIR) */
#define	_00_CSIB_DATA_MSB			0x00U	/* MSB first */ 
#define	_10_CSIB_DATA_LSB			0x10U	/* LSB first */
/* Transfer mode specification (CBnTMS) */
#define	_00_CSIB_MODE_SINGLE			0x00U	/* single transfer mode */
#define	_02_CSIB_MODE_CONTINUOUS		0x02U	/* continuous transfer mode */
/* Specification of start transfer disable/enable (CBnSCE) */
#define	_00_CSIB_STARTTRG_INVALID		0x00U	/* communication start trigger invalid */
#define	_01_CSIB_STARTTRG_VALID			0x01U	/* communication start trigger valid */

/*
	CSIBn control register 1 (CBnCTL1)
*/
/* Specification of data transmission/reception timing in relation to SCKBn (CBnCKP, CBnDAP) */
#define	_00_CSIB_DATA_TIMING1			0x00U	/* communication type 1 */
#define	_08_CSIB_DATA_TIMING2			0x08U	/* communication type 2 */
#define	_10_CSIB_DATA_TIMING3			0x10U	/* communication type 3 */
#define	_18_CSIB_DATA_TIMING4			0x18U	/* communication type 4 */
/* Specification of input clock (CBnCKS2 - CBnCKS0) */
#define	_00_CSIB_CLOCK_1			0x00U	/* fXX /2 */
#define	_01_CSIB_CLOCK_2			0x01U	/* fXX/4 */
#define	_02_CSIB_CLOCK_3			0x02U	/* fXX /8 */	
#define	_03_CSIB_CLOCK_4			0x03U	/* fXX /16 */
#define	_04_CSIB_CLOCK_5			0x04U	/* fXX /32 */
#define	_05_CSIB_CLOCK_6			0x05U	/* fXX /64 */
#define	_06_CSIB_CLOCK_7			0x06U	/* fBRGm */
#define	_07_CSIB_CLOCK_EXT			0x07U	/* external clock SCKBn */

/*
	CSIBn control register 2 (CBnCTL2)
*/
/* Serial register bit length (CBnCL3,CBnCL2,CBnCL1,CBnCL0) */
#define	_00_CSIB_DATA_LENGTH_8			0x00U	/* 8 bits */
#define	_01_CSIB_DATA_LENGTH_9			0x01U	/* 9 bits */
#define	_02_CSIB_DATA_LENGTH_10			0x02U	/* 10 bits */
#define	_03_CSIB_DATA_LENGTH_11			0x03U	/* 11 bits */
#define	_04_CSIB_DATA_LENGTH_12			0x04U	/* 12 bits */
#define	_05_CSIB_DATA_LENGTH_13			0x05U	/* 13 bits */
#define	_06_CSIB_DATA_LENGTH_14			0x06U	/* 14 bits */
#define	_07_CSIB_DATA_LENGTH_15			0x07U	/* 15 bits */
#define	_08_CSIB_DATA_LENGTH_16			0x08U	/* 16 bits */

/*
	CSIBn status register (CBnSTR)
*/
/* Communication status flag (CBnTSF) */
#define	_00_CSIB_COMMUNICATION_STOP		0x00U	/* communication stopped */
#define	_80_CSIB_COMMUNICATING			0x80U	/* communicating */
/* Overrun error flag (CBnOVE) */
#define	_00_CSIB_OVERRUN_NONE			0x00U	/* no overrun */
#define	_01_CSIB_OVERRUN			0x01U	/* overrun */

/*
	BRGm prescaler mode registers (PRSMm)
*/
/* Baud rate output(BGCEm) */
#define	_00_CSIB_FBRGM_DISABLE			0x00U	/* baudrate output disabled */
#define	_10_CSIB_FBRGM_ENABLE			0x10U	/* baudrate output enabled */
/* Input clock selection (BGCSm1,BGCSm0) */
#define	_00_CSIB_FBGCS_0			0x00U	/* fXX */	
#define	_01_CSIB_FBGCS_1			0x01U	/* fXX/2 */
#define	_02_CSIB_FBGCS_2			0x02U	/* fXX/4 */
#define	_03_CSIB_FBGCS_3			0x03U	/* fXX/8 */
#define	CB4RIC		UA0RIC
#define	CB4TIC		UA0TIC
#define	CB0RIC		IICIC1

/*
	IIC control register (IICCn)
*/
/* IIC operation enable	(IICEn)	*/
#define	_80_IIC_OPERATION			0x80U
#define	_00_IIC_OPERATION_DISABLE		0x00U	/* stop operation */
#define	_80_IIC_OPERATION_ENABLE		0x80U	/* enable operation */
/* Exit	from communications (LRELn)	*/
#define	_40_IIC_COMMUNICATION			0x40U
#define	_00_IIC_COMMUNICATION_NORMAL		0x00U	/* normal operation	*/
#define	_40_IIC_COMMUNICATION_EXIT		0x40U	/* exit	from current communication */
/* Wait	cancellation (WRELn) */
#define	_20_IIC_WAITCANCEL			0x20U
#define	_00_IIC_WAIT_NOTCANCEL			0x00U	/* do not cancel wait */
#define	_20_IIC_WAIT_CANCEL			0x20U	/* cancel wait */
/* Generation of interrupt when	stop condition (SPIEn) */
#define	_10_IIC_STOPINT				0x10U
#define	_00_IIC_STOPINT_DISABLE			0x00U	/* disable */
#define	_10_IIC_STOPINT_ENABLE			0x10U	/* enable */
/* Wait	and interrupt generation (WTIMn) */
#define	_08_IIC_WAITINT				0x08U
#define	_00_IIC_WAITINT_CLK8FALLING		0x00U	/* generate at the eighth clock falling edge */
#define	_08_IIC_WAITINT_CLK9FALLING		0x08U	/* generated at the ninth clock falling edge */
/* Acknowledgement control (ACKEn) */
#define	_04_IIC_ACK				0x04
#define	_00_IIC_ACK_DISABLE			0x00U	/* disable acknowledgement */
#define	_04_IIC_ACK_ENABLE			0x04U	/* enable acknowledgement */
/* Start condition trigger (STTn) */
#define	_02_IIC_STARTCONDITION			0x02U
#define	_00_IIC_START_NOTGENERATE		0x00U	/* do not generate start condition */
#define	_02_IIC_START_GENERATE			0x02U	/* generate start condition */
/* Stop	condition trigger (SPTn) */
#define	_01_IIC_STOPCONDITION			0x01U
#define	_00_IIC_STOP_NOTGENERATE		0x00U	/* do not generate stop condition */
#define	_01_IIC_STOP_GENERATE			0x01U	/* generate stop condition */

/*
	IIC Status Register (IICSn)
*/
/* Master device status (MSTSn) */
#define	_80_IIC_MASTERSTATUS			0x80U
#define	_00_IIC_STATUS_NOTMASTER		0x00U	/* slave device status or communication standby status */
#define	_80_IIC_STATUS_MASTER			0x80U	/* master device communication status */
/* Detection of arbitration loss (ALDn) */
#define	_40_IIC_ARBITRATION			0x40U
#define	_00_IIC_ARBITRATION_NO			0x00U	/* arbitration win or no arbitration */
#define	_40_IIC_ARBITRATION_LOSS		0x40U	/* arbitration loss */
/* Detection of extension code reception (EXCn) */
#define	_20_IIC_EXTENSIONCODE			0x20U
#define	_00_IIC_EXTCODE_NOT			0x00U	/* extension code not received */
#define	_20_IIC_EXTCODE_RECEIVED		0x20U	/* extension code received */
/* Detection of matching addresses (COIn) */
#define	_10_IIC_ADDRESSMATCH			0x10U
#define	_00_IIC_ADDRESS_NOTMATCH		0x00U	/* addresses do not match */
#define	_10_IIC_ADDRESS_MATCH			0x10U	/* addresses match */
/* Detection of transmit/receive status	(TRCn) */
#define	_08_IIC_STATUS				0x08U
#define	_00_IIC_STATUS_RECEIVE			0x00U	/* receive status */
#define	_08_IIC_STATUS_TRANSMIT			0x08U	/* transmit status */
/* Detection of acknowledge signal (ACKDn) */
#define	_04_IIC_ACKDETECTION			0x04U
#define	_00_IIC_ACK_NOTDETECTED			0x00U	/* ACK signal was not detected */
#define	_04_IIC_ACK_DETECTED			0x04U	/* ACK signal was detected */
/* Detection of start condition (STDn) */
#define	_02_IIC_STARTDETECTION			0x02U
#define	_00_IIC_START_NOTDETECTED		0x00U	/* start condition not detected */
#define	_02_IIC_START_DETECTED			0x02U	/* start condition detected */
/* Detection of stop condition (SPDn) */
#define	_01_IIC_STOPDETECTION			0x01U
#define	_00_IIC_STOP_NOTDETECTED		0x00U	/* stop	condition not detected */
#define	_01_IIC_STOP_DETECTED			0x01U	/* stop	condition detected */

/*
	IIC	Flag Register (IICFn)
*/
/* STTn	clear flag (STCFn) */
#define	_80_IIC_STARTFLAG			0x80U
#define	_00_IIC_STARTFLAG_GENERATE		0x00U	/* generate start condition */
#define	_80_IIC_STARTFLAG_UNSUCCESSFUL		0x80U	/* start condition generation unsuccessful */
/* IIC bus status flag (IICBSYn)	*/
#define	_40_IIC_BUSSTATUS			0x40U
#define	_00_IIC_BUS_RELEASE			0x00U	/* bus release status */
#define	_40_IIC_BUS_COMMUNICATION		0x40U	/* bus communication status */
/* Initial start enable trigger (STCENn)	*/
#define	_02_IIC_STARTWITHSTOP			0x02U
#define	_00_IIC_START_WITHSTOP			0x00U	/* generation of a start condition upon detection of a stop condition */
#define	_02_IIC_START_WITHOUTSTOP		0x02U	/* generation of a start condition without detecting a stop condition */
/* Communication reservation function disable bit (IICRSVn) */
#define	_01_IIC_RESERVATION			0x01U
#define	_00_IIC_RESERVATION_ENABLE		0x00U	/* enable communication reservation */
#define	_01_IIC_RESERVATION_DISABLE		0x01U	/* disable communication reservation */

/*
	IIC clock selection register (IICCLn)
*/
#define _00_IICCL_INITIALVALUE 				0x00U
/* Detection of SCL0n pin level (CLDn) */
#define	_20_IIC_SCLLEVEL				0x20U
#define	_00_IIC_SCL_LOW					0x00U	/* clock line at low level */
#define	_20_IIC_SCL_HIGH				0x20U	/* clock line at high level */
/* Detection of SDA0 pin level (DADn) */
#define	_10_IIC_SDALEVEL				0x10U
#define	_00_IIC_SDA_LOW					0x00U	/* data	line at low level */
#define	_10_IIC_SDA_HIGH				0x10U	/* data	line at high level */
/* Operation mode switching (SMCn) */
#define	_08_IIC_OPERATIONMODE				0x08U
#define	_00_IIC_MODE_STANDARD				0x00U	/* operates in standard mode */
#define	_08_IIC_MODE_HIGHSPEED				0x08U	/* operates in high-speed mode */
/* Digital filter operation control (DFCn) */
#define	_04_IIC_DIGITALFILTER				0x04U
#define	_00_IIC_FILTER_OFF				0x00U	/* digital filter off */
#define	_04_IIC_FILTER_ON				0x04U	/* digital filter on */
/* Operation mode switching (CLn1, CLn0) */
#define	_03_IIC_CLOCKSELECTION				0x03U
/*	Combine of (CLn1, CLn0)*/
#define	_00_IIC_CLOCK0					0x00U
#define	_01_IIC_CLOCK1					0x01U
#define	_02_IIC_CLOCK2					0x02U
#define	_03_IIC_CLOCK3					0x03U

/*
	IIC division clock select register (OCKSn)
*/
#define	_10_IIC_SELECTED0				0x10U
#define	_11_IIC_SELECTED1				0x11U
#define	_12_IIC_SELECTED2				0x12U
#define	_13_IIC_SELECTED3				0x13U
#define	_18_IIC_SELECTED4				0x18U

/*
	IIC function expansion register	0 (IICXn)
*/
/* IIC clock expension (CLXn) */
#define	_01_IIC_CLOCKEXPENSION				0x01U
#define	_00_IIC_EXPENSION0				0x00U
#define	_01_IIC_EXPENSION1				0x01U
#define	_80_ADDRESS_COMPLETE				0x80U
#define	_00_IIC_MASTER_FLAG_CLEAR			0x00U
#define	IICIC2		UA1RIC
#define	IICIC0		UA2RIC
/*
*******************************************************************************
**  Macro define
*******************************************************************************
*/
/* Selection of 8-bit counter output clock (UA1BRS7~UA1BRS0) */
#define	_D0_UARTA1_BASECLK_DIVISION		0xD0U	/* 4 ~ 255 */ //9600
#define	_11_UARTA1_BASECLK_DIVISION		0x11U	/* 4 ~ 255 */ //115200
enum TransferMode 
{
	SEND, RECEIVE
};

void rt_hw_uart_init(void);

#endif