1 /******************************************************************************
2  *  Filename:       chipinfo.h
3  *
4  *  Description:    Collection of functions returning chip information.
5  *
6  *  Copyright (c) 2022-2023 Texas Instruments Incorporated
7  *
8  *  Redistribution and use in source and binary forms, with or without
9  *  modification, are permitted provided that the following conditions are met:
10  *
11  *  1) Redistributions of source code must retain the above copyright notice,
12  *     this list of conditions and the following disclaimer.
13  *
14  *  2) Redistributions in binary form must reproduce the above copyright notice,
15  *     this list of conditions and the following disclaimer in the documentation
16  *     and/or other materials provided with the distribution.
17  *
18  *  3) Neither the name of the copyright holder nor the names of its
19  *     contributors may be used to endorse or promote products derived from this
20  *     software without specific prior written permission.
21  *
22  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25  *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
26  *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29  *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31  *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  *  POSSIBILITY OF SUCH DAMAGE.
33  *
34  ******************************************************************************/
35 
36 #ifndef __CHIP_INFO_H__
37 #define __CHIP_INFO_H__
38 
39 //*****************************************************************************
40 //
41 //! \addtogroup system_control_group
42 //! @{
43 //! \addtogroup chipinfo_api
44 //! @{
45 //
46 //*****************************************************************************
47 
48 //*****************************************************************************
49 //
50 // If building with a C++ compiler, make all of the definitions in this header
51 // have a C binding.
52 //
53 //*****************************************************************************
54 #ifdef __cplusplus
55 extern "C" {
56 #endif
57 
58 #include "../inc/hw_types.h"
59 #include "../inc/hw_memmap.h"
60 #include "../inc/hw_fcfg.h"
61 #include "../inc/hw_sys0.h"
62 
63 //*****************************************************************************
64 //
65 //! \brief Returns hardware version number
66 //!
67 //! The version number is set to 0 for the first market released chip
68 //! and thereafter incremented by 1 for each minor hardware change.
69 //!
70 //! \return Returns the hardware version number
71 //
72 //*****************************************************************************
ChipInfoGetVersion(void)73 __STATIC_INLINE uint32_t ChipInfoGetVersion(void)
74 {
75     return (HWREG(SYS0_BASE + SYS0_O_DEVICEID) & SYS0_DEVICEID_VERSION_M) >> SYS0_DEVICEID_VERSION_S;
76 }
77 
78 //*****************************************************************************
79 //
80 //! \brief Chip type enumeration
81 //
82 //*****************************************************************************
83 typedef enum
84 {
85     CHIP_TYPE_CC2340R = 0x2DDAU, //!< Chip type is CC2340R
86 } ChipType;
87 
88 //*****************************************************************************
89 //
90 //! \brief Returns chip type.
91 //!
92 //! \return
93 //! Returns \ref ChipType
94 //
95 //*****************************************************************************
ChipInfoGetChipType(void)96 __STATIC_INLINE ChipType ChipInfoGetChipType(void)
97 {
98     return (ChipType)(fcfg->deviceInfo.partId.part);
99 }
100 
101 //*****************************************************************************
102 //
103 //! \brief Chip part ID enumeration
104 //
105 //*****************************************************************************
106 typedef enum
107 {
108     CC2340R52E0RGER    = 0x012DDAU, //!< Part ID is CC2340R52E0RGER
109     CC2340R52E0RKPR    = 0x3B2DDAU, //!< Part ID is CC2340R52E0RKPR
110     CC2340R52E0WRHBRQ1 = 0x0F2DDAU, //!< Part ID is CC2340R52E0WRHBRQ1
111 } ChipPartId;
112 
113 //*****************************************************************************
114 //
115 //! \brief Returns part ID.
116 //!
117 //! \return
118 //! Returns \ref ChipPartId
119 //
120 //*****************************************************************************
ChipInfoGetPartId(void)121 __STATIC_INLINE ChipPartId ChipInfoGetPartId(void)
122 {
123     return (ChipPartId)(fcfg->deviceInfo.partId.val32 & 0x00FFFFFFU);
124 }
125 
126 //*****************************************************************************
127 //
128 // Mark the end of the C bindings section for C++ compilers.
129 //
130 //*****************************************************************************
131 #ifdef __cplusplus
132 }
133 #endif
134 
135 //*****************************************************************************
136 //
137 //! Close the Doxygen group.
138 //! @}
139 //! @}
140 //
141 //*****************************************************************************
142 
143 #endif // __CHIP_INFO_H__
144