Initial commit: TC264 smart car project with IPS200 menu system

- IPS200 display menu with real-time status and parameter settings
- Camera image processing and line tracking
- IMU attitude solution and PID control
- WiFi SPI oscilloscope data transmission
This commit is contained in:
32343 committed 2026-05-10 21:38:49 +08:00
commit 843447835d
660 files changed
+443632

No files matched your search

@@ -0,0 +1,184 @@
/**
* \file Ifx_Cf32.h
* \brief Floating point signal, vector, and matrix library
*
*
* \version disabled
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
*
*
* IMPORTANT NOTICE
*
*
* Use of this file is subject to the terms of use agreed between (i) you or
* the company in which ordinary course of business you are acting and (ii)
* Infineon Technologies AG or its licensees. If and as long as no such
* terms of use are agreed, use of this file is subject to following:
* Boost Software License - Version 1.0 - August 17th, 2003
* Permission is hereby granted, free of charge, to any person or
* organization obtaining a copy of the software and accompanying
* documentation covered by this license (the "Software") to use, reproduce,
* display, distribute, execute, and transmit the Software, and to prepare
* derivative works of the Software, and to permit third-parties to whom the
* Software is furnished to do so, all subject to the following:
* The copyright notices in the Software and this entire statement, including
* the above license grant, this restriction and the following disclaimer, must
* be included in all copies of the Software, in whole or in part, and all
* derivative works of the Software, unless such copies or derivative works are
* solely in the form of machine-executable object code generated by a source
* language processor.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
* \defgroup library_srvsw_sysse_math_cf32 Floating point signal, vector, and matrix library
* \ingroup library_srvsw_sysse_math_f32
*/
#ifndef IFX_CF32_H
#define IFX_CF32_H
#include "Cpu/Std/IfxCpu_Intrinsics.h"
#include <math.h>
#define _DATAF(val) ((float32)(val))
/* Complex Arithmetic --------------------------------------------------------*/
IFX_INLINE cfloat32 IFX_Cf32_exp(const cfloat32 *c)
{
float32 f = (float32)expf(c->real);
cfloat32 R;
R.real = f * (float32)cosf(c->imag);
R.imag = f * (float32)sinf(c->imag);
return R;
}
IFX_INLINE cfloat32 IFX_Cf32_mul(const cfloat32 *a, const cfloat32 *b)
{
cfloat32 R;
R.real = (a->real * b->real) - (a->imag * b->imag);
R.imag = (a->imag * b->real) + (a->real * b->imag);
return R;
}
IFX_INLINE cfloat32 IFX_Cf32_amp(const cfloat32 *a, float32 gain)
{
cfloat32 R;
R.real = a->real * gain;
R.imag = a->imag * gain;
return R;
}
IFX_INLINE float32 IFX_Cf32_dot(const cfloat32 *b)
{
return (b->real * b->real) + (b->imag * b->imag);
}
IFX_INLINE float32 IFX_Cf32_mag(const cfloat32 *c)
{
return (float32)sqrtf(IFX_Cf32_dot(c));
}
IFX_INLINE cfloat32 IFX_Cf32_div(const cfloat32 *a, const cfloat32 *b)
{
float32 denom = IFX_Cf32_dot(b);
cfloat32 R;
R.real = ((a->real * b->real) + (a->imag * b->imag)) / denom;
R.imag = ((a->imag * b->real) - (a->real * b->imag)) / denom;
return R;
}
IFX_INLINE cfloat32 IFX_Cf32_add(const cfloat32 *a, const cfloat32 *b)
{
cfloat32 R;
R.real = (a->real + b->real);
R.imag = (a->imag + b->imag);
return R;
}
IFX_INLINE cfloat32 IFX_Cf32_sub(const cfloat32 *a, const cfloat32 *b)
{
cfloat32 R;
R.real = (a->real - b->real);
R.imag = (a->imag - b->imag);
return R;
}
IFX_INLINE void IFX_Cf32_set(cfloat32 *a, float32 re, float32 im)
{
a->real = re;
a->imag = im;
}
IFX_INLINE void IFX_Cf32_reset(cfloat32 *a)
{
IFX_Cf32_set(a, 0.0, 0.0);
}
IFX_INLINE cfloat32 IFX_Cf32_saturate(cfloat32 *a, float32 *ampl, float32 limit)
{
cfloat32 R = *a;
*ampl = IFX_Cf32_mag(a);
if (*ampl > limit)
{
float32 scale = limit / *ampl;
R.imag = R.imag * scale;
R.real = R.real * scale;
}
return R;
}
IFX_EXTERN void CplxVecCpy_f32S(cfloat32 *X, short *S, short nS, short incrS);
IFX_EXTERN void CplxVecRst_f32(cfloat32 *X, short nX);
IFX_EXTERN void CplxVecCpy_f32(cfloat32 *X, cfloat32 *S, short nS);
IFX_EXTERN float32 *CplxVecPwr_f32(cfloat32 *X, short nX);
IFX_EXTERN float32 *CplxVecMag_f32(cfloat32 *X, short nX);
IFX_EXTERN void CplxVecMul_f32(cfloat32 *X, const cfloat32 *mul, short nX);
/* Vector Operation ----------------------------------------------------------*/
IFX_EXTERN void VecWin_f32(float32 *X, const float32 *W, short nX, short nW, short incrX, short symW);
IFX_EXTERN void VecPwrdB_f32(float32 *X, short nX);
IFX_EXTERN void VecPwrdB_SF(sint16 *R, float32 *X, short nX);
IFX_EXTERN void VecGain_f32(float32 *X, float32 gain, short nX);
IFX_EXTERN void VecOfs_f32(float32 *X, float32 offset, short nX);
IFX_EXTERN float32 VecSum_f32(float32 *X, short nX);
IFX_EXTERN float32 VecAvg_f32(float32 *X, short nX);
IFX_EXTERN float32 VecMax_f32(float32 *X, short nX);
IFX_EXTERN float32 VecMin_f32(float32 *X, short nX);
IFX_EXTERN float32 VecMinIdx_f32(float32 *X, short nX, sint16 *minIdx, sint16 *maxIdx);
IFX_EXTERN float32 VecMaxIdx_f32(float32 *X, short nX, sint16 *minIdx, sint16 *maxIdx);
IFX_EXTERN void VecHalfSwap_f32(float32 *X, short nX);
/* Helper functions ----------------------------------------------------------*/
#ifdef __WIN32__
#include <stdio.h>
void Cplx_f32_printf(FILE *fp, pchar fileName, cfloat32 *data, long nX, int encloseData);
#else
#define Cplx_f32_printf(...)
#endif
#endif /* IFX_CF32_H */