Skip to content

Commit 1b3718b

Browse files
committed
update asserts
1 parent 6746c66 commit 1b3718b

File tree

103 files changed

+6390
-5051
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

103 files changed

+6390
-5051
lines changed

.idea/codeStyles/Project.xml

+23-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/inspectionProfiles/Project_Default.xml

+10
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

AbstractHardware/Pin/pin.hpp

+3-10
Original file line numberDiff line numberDiff line change
@@ -31,32 +31,29 @@ struct PinAlmighty : PinReadableConfigurable, PinWriteableConfigurable
3131
{
3232
};
3333

34-
template<typename Port, uint8_t pinNum, typename Interface>
34+
template<typename Port, uint8_t pinNum, typename Interface,
35+
class = typename std::enable_if_t<(pinNum <= 15U)>>
3536
struct Pin
3637
{
3738
using PortType = Port;
3839
static constexpr std::uint32_t pin = pinNum;
39-
40-
constexpr Pin() = default;
40+
static_assert(pinNum <= 15U, "There are only 16 pins on port");
4141

4242
__forceinline template<typename T = Interface, class = typename std::enable_if_t<std::is_base_of<PinWriteable, T>::value>>
4343
static void Set()
4444
{
45-
static_assert(pinNum <= 15U, "There are only 16 pins on port");
4645
Port::Set(uint8_t(1U) << pinNum);
4746
}
4847

4948
__forceinline template<typename T = Interface, class = typename std::enable_if_t<std::is_base_of<PinWriteable, T>::value>>
5049
static void Reset()
5150
{
52-
static_assert(pinNum <= 15U, "There are only 16 pins on port");
5351
Port::Reset((uint8_t(1U) << (pinNum)));
5452
}
5553

5654
__forceinline template<typename T = Interface, class = typename std::enable_if_t<std::is_base_of<PinWriteable, T>::value>>
5755
static void Toggle()
5856
{
59-
static_assert(pinNum <= 15U, "There are only 16 pins on port");
6057
Port::Toggle(uint8_t(1U) << pinNum);
6158
}
6259

@@ -76,28 +73,24 @@ struct Pin
7673
__forceinline template<typename T = Interface, class = typename std::enable_if_t<std::is_same<PinConfigurable, T>::value>>
7774
static void SetAnalog()
7875
{
79-
static_assert(pinNum <= 15U, "There are only 16 pins on port");
8076
Port::SetAnalog(pinNum);
8177
}
8278

8379
__forceinline template<typename T = Interface, class = typename std::enable_if_t<std::is_base_of<PinReadableConfigurable, T>::value>>
8480
static void SetInput()
8581
{
86-
static_assert(pinNum <= 15U, "There are only 16 pins on port");
8782
Port::SetInput(pinNum);
8883
}
8984

9085
__forceinline template<typename T = Interface, class = typename std::enable_if_t<std::is_base_of<PinWriteableConfigurable, T>::value>>
9186
static void SetOutput()
9287
{
93-
static_assert(pinNum <= 15U, "There are only 16 pins on port");
9488
Port::SetOutput(pinNum);
9589
}
9690

9791
__forceinline template<typename T = Interface, class = typename std::enable_if_t<std::is_same<PinConfigurable, T>::value>>
9892
static void SetAlternate()
9993
{
100-
static_assert(pinNum <= 15U, "There are only 16 pins on port");
10194
Port::SetAlternate(pinNum);
10295
}
10396
};

AbstractHardware/Port/port.hpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@ struct Port
5858
T::MODER::FieldValues::Input::Value,
5959
static_cast<ModerType>(pinNum * uint8_t{2U})
6060
) ;
61-
// volatile auto value = T::MODER::Get() ;
62-
// value &= ~(3 << (pinNum * 2U)) ;
63-
// value |= (T::MODER::FieldValues::Input::Value << (pinNum * 2U)) ;
64-
// T::MODER::Write(value);
61+
volatile auto value = T::MODER::Get() ;
62+
value &= ~(3 << (pinNum * 2U)) ;
63+
value |= (T::MODER::FieldValues::Input::Value << (pinNum * 2U)) ;
64+
T::MODER::Write(value);
6565
}
6666

6767
__forceinline static void SetOutput(std::uint32_t pinNum)

AbstractHardware/Registers/GD32VF103/FieldValues/eclicfieldvalues.hpp

+16-16
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,22 @@
1515
template <typename Reg, size_t offset, size_t size, typename AccessMode, typename BaseType>
1616
struct ECLIC_CLICCFG_NLBITS_Values: public RegisterField<Reg, offset, size, AccessMode>
1717
{
18-
using MaxBitsPriorityLevel0 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 0U> ; // FIXME
19-
using MaxPriorityLevelBits1 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 1U> ;
20-
using MaxPriorityLevelBits2 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 2U> ;
21-
using MaxPriorityLevelBits3 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 3U> ;
22-
using MaxPriorityLevelBits4 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 4U> ;
23-
using MaxPriorityLevelBits5 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 5U> ;
24-
using MaxPriorityLevelBits6 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 6U> ;
25-
using MaxPriorityLevelBits7 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 7U> ;
26-
using MaxPriorityLevelBits8 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 8U> ;
27-
using MaxPriorityLevelBits9 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 9U> ;
28-
using MaxPriorityLevelBits10 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 10U> ;
29-
using MaxPriorityLevelBits11 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 11U> ;
30-
using MaxPriorityLevelBits12 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 12U> ;
31-
using MaxPriorityLevelBits13 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 13U> ;
32-
using MaxPriorityLevelBits14 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 14U> ;
33-
using MaxPriorityLevelBits15 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 15U> ;
18+
using MaxBitsForLevel0 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 0U> ; // FIXME
19+
using MaxBitsForLevel1 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 1U> ;
20+
using MaxBitsForLevel2 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 2U> ;
21+
using MaxBitsForLevel3 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 3U> ;
22+
using MaxBitsForLevel4 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 4U> ;
23+
using MaxBitsForLevel5 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 5U> ;
24+
using MaxBitsForLevel6 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 6U> ;
25+
using MaxBitsForLevel7 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 7U> ;
26+
using MaxBitsForLevel8 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 8U> ;
27+
using MaxBitsForLevel9 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 9U> ;
28+
using MaxBitsForLevel10 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 10U> ;
29+
using MaxBitsForLevel11 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 11U> ;
30+
using MaxBitsForLevel12 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 12U> ;
31+
using MaxBitsForLevel13 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 13U> ;
32+
using MaxBitsForLevel14 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 14U> ;
33+
using MaxBitsForLevel15 = FieldValue<ECLIC_CLICCFG_NLBITS_Values, BaseType, 15U> ;
3434
} ;
3535

3636
template <typename Reg, size_t offset, size_t size, typename AccessMode, typename BaseType>
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
// Filename: machinetimerfieldvalues.hpp
22
// Created by by Sergey Kolody on 15.06.2020.
33

4-
#if !defined(MACHINETIMERENUMS_HPP)
5-
#define MACHINETIMERENUMS_HPP
4+
#pragma once
65

76
#include "fieldvalue.hpp" //for FieldValues
87

98
template <typename Reg, size_t offset, size_t size, typename AccessMode, typename BaseType>
109
struct MACHINETIMER_MTIME_MTIME_Values: public RegisterField<Reg, offset, size, AccessMode>
1110
{
12-
11+
template<typename Reg::Type val,
12+
class = typename std::enable_if_t<(size >= sizeof(Reg::Type) * 8U) || (val < (1U << size))>>
13+
using Value = FieldValue<MACHINETIMER_MTIME_MTIME_Values, BaseType, val>;
1314
};
1415

1516
template <typename Reg, size_t offset, size_t size, typename AccessMode, typename BaseType>
@@ -20,7 +21,9 @@ struct MACHINETIMER_MTIMECMP_MTIMECMP_Values: public RegisterField<Reg, offset,
2021
using Value = FieldValue<MACHINETIMER_MTIMECMP_MTIMECMP_Values, BaseType, val>;
2122
};
2223

23-
#endif // MACHINETIMERENUMS_HPP
24-
25-
26-
24+
template <typename Reg, size_t offset, size_t size, typename AccessMode, typename BaseType>
25+
struct MACHINETIMER_MSIP_MSIP_Values: public RegisterField<Reg, offset, size, AccessMode>
26+
{
27+
using GenerateSwInterrupt = FieldValue<MACHINETIMER_MSIP_MSIP_Values, BaseType, 1U>;
28+
using ClearSwInterrupt = FieldValue<MACHINETIMER_MSIP_MSIP_Values, BaseType, 0U>;
29+
};

AbstractHardware/Registers/GD32VF103/machinetimerregisters.hpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,16 @@ struct MACHINETIMER
2828

2929
struct MTIMECMP : public RegisterBase<0xd1000008, 64, ReadWriteMode>
3030
{
31-
using MTIMEField = MACHINETIMER_MTIMECMP_MTIMECMP_Values<MACHINETIMER::MTIMECMP, 0, 64, ReadWriteMode, MACHINETIMERBase> ;
31+
using MTIMECMPField = MACHINETIMER_MTIMECMP_MTIMECMP_Values<MACHINETIMER::MTIMECMP, 0, 64, ReadWriteMode, MACHINETIMERBase> ;
3232
using FieldValues = MACHINETIMER_MTIMECMP_MTIMECMP_Values<MACHINETIMER::MTIMECMP, 0, 0, NoAccess, NoAccess> ;
3333
};
3434

35+
struct MSIP : public RegisterBase<0xd1000ffc, 64, ReadWriteMode>
36+
{
37+
using SIP = MACHINETIMER_MSIP_MSIP_Values<MACHINETIMER::MTIMECMP, 0, 1, ReadWriteMode, MACHINETIMERBase> ;
38+
using FieldValues = MACHINETIMER_MSIP_MSIP_Values<MACHINETIMER::MTIMECMP, 0, 0, NoAccess, NoAccess> ;
39+
};
40+
3541
} ;
3642

3743

AbstractHardware/Registers/STM32F411/rccregisters.hpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ struct RCC
4747
using PLLSRC = RCC_PLLCFGR_PLLSRC_Values<RCC::PLLCFGR, 22, 1, ReadWriteMode, RCCPLLCFGRBase> ;
4848
using PLLP0 = RCC_PLLCFGR_PLLP_Values<RCC::PLLCFGR, 16, 2, ReadWriteMode, RCCPLLCFGRBase> ;
4949
using PLLN0 = RCC_PLLCFGR_PLLN_Values<RCC::PLLCFGR, 6, 9, ReadWriteMode, RCCPLLCFGRBase> ;
50-
using FieldValues = RCC_PLLCFGR_PLLM_Values<RCC::PLLCFGR, 0, 5, NoAccess, NoAccess> ;
50+
using PLLM0 = RCC_PLLCFGR_PLLM_Values<RCC::PLLCFGR, 0, 5, ReadWriteMode, RCCPLLCFGRBase> ;
51+
using FieldValues = RCC_PLLCFGR_PLLM_Values<RCC::PLLCFGR, 0, 0, NoAccess, NoAccess> ;
5152
} ;
5253

5354
template<typename... T>

AbstractHardware/Registers/register.hpp

-15
Original file line numberDiff line numberDiff line change
@@ -28,31 +28,16 @@ class Register
2828
*reinterpret_cast<volatile Type*>(address) = newRegValue; //Записываем в регистра новое значение
2929
}
3030

31-
// //Метод устанавливает значение битового поля, только в случае, если оно достпуно для записи
32-
// __forceinline template<typename T = AccessMode,
33-
// class = typename std::enable_if_t<std::is_base_of<ReadWriteMode, T>::value>>
34-
// static void SetAtomic()
35-
// {
36-
// AtomicUtils<Type>::Set(
37-
// address,
38-
// GetMask(),
39-
// GetValue,
40-
// 0U
41-
// ) ;
42-
// }
43-
4431
//Метод Write устанавливает битовые поля, только если регистр может использоваться для записи
4532
__forceinline template<typename T = AccessMode,
4633
class = typename std::enable_if_t<std::is_base_of<WriteMode, T>::value||
4734
std::is_base_of<ReadWriteMode, T>::value>>
4835
static void Write()
4936
{
5037
static constexpr auto value = GetValue();
51-
5238
*reinterpret_cast<volatile Type*>(address) = value; //Записываем в регистра новое значение
5339
}
5440

55-
5641
//Метод IsSet проверяет что все битовые поля из переданного набора установлены
5742
__forceinline template<typename T = AccessMode,
5843
class = typename std::enable_if_t<std::is_base_of<ReadMode, T>::value ||

AbstractHardware/Registers/registerbase.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ struct RegisterBase
1818

1919
//Метод Write будет работать только для регистров, в которые можно записать значение
2020
__forceinline template<typename T = AccessMode,
21-
class = typename std::enable_if_t<std::is_base_of<WriteMode, T>::value || std::is_base_of<ReadWriteMode, T>::value >>
21+
typename = typename std::enable_if_t<std::is_base_of<WriteMode, T>::value || std::is_base_of<ReadWriteMode, T>::value >>
2222
inline static void Write(Type value)
2323
{
2424
*reinterpret_cast<volatile Type *>(address) = value ;

AbstractHardware/Registers/registerfield.hpp

-17
Original file line numberDiff line numberDiff line change
@@ -52,23 +52,6 @@ struct RegisterField
5252
*reinterpret_cast<volatile RegType*>(Reg::Address) = newRegValue; //И записать новое значение в регистр
5353
}
5454

55-
56-
57-
// //Метод устанавливает значение битового поля, только в случае, если оно достпуно для записи
58-
// __forceinline template<typename T = AccessMode,
59-
// class = typename std::enable_if_t<std::is_base_of<ReadWriteMode, T>::value>>
60-
// static void SetAtomic(RegType value)
61-
// {
62-
// assert(value < (1U << (size - 1))) ;
63-
//
64-
// AtomicUtils<RegType>::Set(
65-
// Reg::Address,
66-
// Mask,
67-
// value,
68-
// offset
69-
// ) ;
70-
// }
71-
7255
//Метод устанавливает значение битового поля, только в случае, если оно достпуно для записи
7356
__forceinline template<typename T = AccessMode, class = typename std::enable_if_t<std::is_base_of<WriteMode, T>::value>>
7457
static void Write(RegType value)

0 commit comments

Comments
 (0)