Consolidating M4-specific saturation flag code.

This commit is contained in:
Jared Boone 2016-01-04 12:00:52 -08:00
parent b42d3cc9d5
commit a27489eb21
3 changed files with 18 additions and 12 deletions

View File

@ -21,7 +21,7 @@
#include "baseband_stats_collector.hpp" #include "baseband_stats_collector.hpp"
#include "utility_m4.hpp" #include "lpc43xx_cpp.hpp"
bool BasebandStatsCollector::process(const buffer_c8_t& buffer) { bool BasebandStatsCollector::process(const buffer_c8_t& buffer) {
samples += buffer.count; samples += buffer.count;
@ -50,8 +50,8 @@ BasebandStatistics BasebandStatsCollector::capture_statistics() {
statistics.baseband_ticks = (baseband_ticks - last_baseband_ticks); statistics.baseband_ticks = (baseband_ticks - last_baseband_ticks);
last_baseband_ticks = baseband_ticks; last_baseband_ticks = baseband_ticks;
statistics.saturation = m4_flag_saturation(); statistics.saturation = lpc43xx::m4::flag_saturation();
clear_m4_flag_saturation(); lpc43xx::m4::clear_flag_saturation();
samples_last_report = samples; samples_last_report = samples;

View File

@ -30,6 +30,21 @@
namespace lpc43xx { namespace lpc43xx {
#if defined(LPC43XX_M4)
namespace m4 {
static inline bool flag_saturation() {
return __get_APSR() & (1U << 27);
}
static inline void clear_flag_saturation() {
uint32_t flags = 1;
__asm volatile ("MSR APSR_nzcvqg, %0" : : "r" (flags));
}
} /* namespace m4 */
#endif
namespace creg { namespace creg {
static_assert(offsetof(LPC_CREG_Type, CREG0) == 0x004, "CREG0 offset wrong"); static_assert(offsetof(LPC_CREG_Type, CREG0) == 0x004, "CREG0 offset wrong");

View File

@ -26,15 +26,6 @@
#include <hal.h> #include <hal.h>
static inline bool m4_flag_saturation() {
return __get_APSR() & (1U << 27);
}
static inline void clear_m4_flag_saturation() {
uint32_t flags = 1;
__asm volatile ("MSR APSR_nzcvqg, %0" : : "r" (flags));
}
static inline complex32_t multiply_conjugate_s16_s32(const complex16_t::rep_type a, const complex16_t::rep_type b) { static inline complex32_t multiply_conjugate_s16_s32(const complex16_t::rep_type a, const complex16_t::rep_type b) {
// conjugate: conj(a + bj) = a - bj // conjugate: conj(a + bj) = a - bj
// multiply: (a + bj) * (c + dj) = (ac - bd) + (bc + ad)j // multiply: (a + bj) * (c + dj) = (ac - bd) + (bc + ad)j