LPCOpen Platform for LPC112X microcontrollers
112X
LPCOpen Platform for the NXP LPC112X family of Microcontrollers
Main Page
Modules
Data Structures
Files
File List
Globals
software
lpc_core
lpc_chip
chip_common
ring_buffer.h
Go to the documentation of this file.
1
/*
2
* @brief Common ring buffer support functions
3
*
4
* @note
5
* Copyright(C) NXP Semiconductors, 2012
6
* All rights reserved.
7
*
8
* @par
9
* Software that is described herein is for illustrative purposes only
10
* which provides customers with programming information regarding the
11
* LPC products. This software is supplied "AS IS" without any warranties of
12
* any kind, and NXP Semiconductors and its licensor disclaim any and
13
* all warranties, express or implied, including all implied warranties of
14
* merchantability, fitness for a particular purpose and non-infringement of
15
* intellectual property rights. NXP Semiconductors assumes no responsibility
16
* or liability for the use of the software, conveys no license or rights under any
17
* patent, copyright, mask work right, or any other intellectual property rights in
18
* or to any products. NXP Semiconductors reserves the right to make changes
19
* in the software without notification. NXP Semiconductors also makes no
20
* representation or warranty that such application will be suitable for the
21
* specified use without further testing or modification.
22
*
23
* @par
24
* Permission to use, copy, modify, and distribute this software and its
25
* documentation is hereby granted, under NXP Semiconductors' and its
26
* licensor's relevant copyrights in the software, without fee, provided that it
27
* is used in conjunction with NXP Semiconductors microcontrollers. This
28
* copyright, permission, and disclaimer notice must appear in all copies of
29
* this code.
30
*/
31
32
#ifndef __RING_BUFFER_H_
33
#define __RING_BUFFER_H_
34
35
#include "
lpc_types.h
"
36
45
typedef
struct
{
46
void
*
data
;
47
int
count
;
48
int
itemSz
;
49
uint32_t
head
;
50
uint32_t
tail
;
51
}
RINGBUFF_T
;
52
57
#define RB_VHEAD(rb) (*(volatile uint32_t *) &(rb)->head)
58
63
#define RB_VTAIL(rb) (*(volatile uint32_t *) &(rb)->tail)
64
76
int
RingBuffer_Init
(
RINGBUFF_T
*RingBuff,
void
*buffer,
int
itemSize,
int
count);
77
83
STATIC
INLINE
void
RingBuffer_Flush
(
RINGBUFF_T
*RingBuff)
84
{
85
RingBuff->
head
= RingBuff->
tail
= 0;
86
}
87
93
STATIC
INLINE
int
RingBuffer_GetSize
(
RINGBUFF_T
*RingBuff)
94
{
95
return
RingBuff->
count
;
96
}
97
103
STATIC
INLINE
int
RingBuffer_GetCount
(
RINGBUFF_T
*RingBuff)
104
{
105
return
RB_VHEAD
(RingBuff) -
RB_VTAIL
(RingBuff);
106
}
107
113
STATIC
INLINE
int
RingBuffer_GetFree
(
RINGBUFF_T
*RingBuff)
114
{
115
return
RingBuff->
count
-
RingBuffer_GetCount
(RingBuff);
116
}
117
123
STATIC
INLINE
int
RingBuffer_IsFull
(
RINGBUFF_T
*RingBuff)
124
{
125
return
(
RingBuffer_GetCount
(RingBuff) >= RingBuff->
count
);
126
}
127
133
STATIC
INLINE
int
RingBuffer_IsEmpty
(
RINGBUFF_T
*RingBuff)
134
{
135
return
RB_VHEAD
(RingBuff) ==
RB_VTAIL
(RingBuff);
136
}
137
147
int
RingBuffer_Insert
(
RINGBUFF_T
*RingBuff,
const
void
*data);
148
159
int
RingBuffer_InsertMult
(
RINGBUFF_T
*RingBuff,
const
void
*data,
int
num);
160
170
int
RingBuffer_Pop
(
RINGBUFF_T
*RingBuff,
void
*data);
171
181
int
RingBuffer_PopMult
(
RINGBUFF_T
*RingBuff,
void
*data,
int
num);
182
183
188
#endif
/* __RING_BUFFER_H_ */
Generated on Fri Feb 20 2015 22:12:06 for LPCOpen Platform for LPC112X microcontrollers by
1.8.3.1