文章目录
前言
Infineon处理器
AURIX™系列
TC399XX-256F300S
典型应用
开发工具
参考资料
前言
见《【综述】DSP处理器芯片》
Infineon处理器
AURIX™系列,基于TriCore内核,用于汽车和工业领域。
XMC™系列,基于ARM® Cortex®-M内核,用于功率转换、工厂自动化、楼宇自控、交通和家用电器等领域。
TRAVEO™ T2G系列,基于ARM® Cortex®内核,用于媒体和互联。
PSoC™系列,基于ARM® Cortex®内核,属于嵌入式功率IC(片上系统)。
传统产品 (C500-, C166-, XC166-, AUDO1 系列),多为8 bit和16 bit,用于细分的特定领域。
AURIX™系列
AURIX™系列是AUDO™MAX的延续,其TriCore™ 内核是32 位处理器,它的架构是将微控制器的实时功能、DSP的计算算力以及RISC读写存储的高性能/价格优势结合在一个核中,非常适合安全关键型应用。
TC2xx,第一代AURIX™,多达3个TriCore1.6,65nm工艺,最高频率300MHz。
TC3xx,第二代AURIX™,多达6个TriCore1.62,40nm工艺,频率300MHz。
TC4xx(未量产),第三代AURIX™,多达6个TriCore1.8,28nm工艺(猜测),频率500MHz。
TC399XX-256F300S
TC399XX-256F300S是第二代AURIX™中性能最强悍的一款芯片,名称中各个字段的含义如下:
该芯片采用40nm工艺,频率300MHz,32bit处理器,6核(4 lock-stepped cores and 2 non lock-stepped cores),RAM 6.9M,ROM 16M,1 Gbit Ethernet,12 CAN FD。它的内部架构如下图所示:
典型应用
TC399XX-256F300S拥有丰富的外设资源、强大的数据处理能力和很高的安全可靠性,在ADAS域控、传感器融合、自动驾驶和机器学习上面都可以应用,最能体现其各方面性能的应用是在多旋翼无人机上的应用,示例如下:
无人机的多传感器输入融合,多电机驱动,和安全冗余,使用TC399或TC37x的多核架构,单片解决自动飞行、电机控制、雷达传感器、BMS和功率转换等,BOM成本和性能绝佳。示例如下:
部分代码示例如下:
#include "Ifx_Types.h"
#include "IfxCpu.h"
#include "IfxAsclin_reg.h"
#include "IfxPort_reg.h"
#include "Scu/Std/IfxScuWdt.h"
#include "Port/Std/IfxPort.h"
#include "Test_Print.h"
#include "stdarg.h"#define USE_ASCLIN1 (STD_OFF)
#define ASCLIN0_BASE (0xF0000600U)
#define ASCLIN1_BASE (0xF0000700U)
#define ASCLIN_FLAGSCLEAR_MASK (0xFFFFFffFU)/* Macro for Unused parameters*/
#define UNUSED_PARAMETER(VariableName) {if((VariableName) != 0U)\{/* Do Nothing */}}
static volatile Ifx_ASCLIN *psASCLIN0;#ifdef _TASKING_C_TRICORE_
#if (_TASKING_C_TRICORE_ == 1U)
#pragma section farbss="Shared.DEFAULT_RAM_8BIT"
#endif /* #if (_TASKING_C_TRICORE_ == 1U) */
#elif defined _GNU_C_TRICORE_
#if (_GNU_C_TRICORE_ == 1U)
#pragma section ".data.Shared.DEFAULT_RAM_8BIT" aw 1
#endif /* #if (_GNU_C_TRICORE_ == 1U) */
#elif defined _DIABDATA_C_TRICORE_
#if (_DIABDATA_C_TRICORE_ == 1U)
#pragma section DATA ".data.Shared.DEFAULT_RAM_8BIT" ".bss.Shared.DEFAULT_RAM_8BIT" far-absolute RW
#endif /* #if (_DIABDATA_C_TRICORE_ == 1U) */
#endifchar recieve_data[6] = {0};void InitSCI(void);
void print_f(const char *p_frm, ...);
void getline(char *p_line, uint32 n_max);void erase_line(char *p_line, uint32 *pos)
{uint32 cnt;for(cnt=0;cnt<*pos;cnt++){*p_line = 0;p_line++;put_char(BACKSPACE);put_char(' ');put_char(BACKSPACE);}*pos = 0;
}inline void delay(void)
{ volatile int i; for (i=0;i<100;i++);
}void put_buffer(char *p_line, uint32 n_max,const char *p_str,uint32 *pos)
{
/* uint32 cnt;cnt = *pos; */while(*pos < n_max && *p_str !=0){*p_line = *p_str;put_char(*p_str);p_line++;p_str++;(*pos)++;}/* *pos = cnt; */
}int getlineWithPos(char *p_line, uint32 n_max, uint32 *pos)
{uint32 w_cnt;uint32 ret_val;int w_key;w_cnt = *pos;p_line += *pos;ret_val = 0;do{w_key = get_ch();if (w_key == -1){ret_val = 0;}else{if (w_key == CR || w_key == LF){*p_line = 0;ret_val = CR;}else{if (w_key == TAB){*p_line = 0; /* set the value to 0 so that the first part of the string can be analyzed */ret_val = TAB;}else{if (w_key == BACKSPACE || w_key == DEL){/* backspace or delete */if (w_cnt != 0){/* delete character */w_cnt--;p_line--;put_char(BACKSPACE);put_char(' '); put_char(BACKSPACE);}}else{if ((w_key != CNTLQ) && (w_key != CNTLS)){/* normal character*/{/* store/reflect character */*p_line = (char)w_key;put_char ((char)w_key);p_line++;w_cnt++;if (w_cnt == n_max) {/* limit reached */(void)beep();/* delete all characters */while (w_cnt != 0){w_cnt--;p_line--;put_char(BACKSPACE);put_char(' ');put_char(BACKSPACE);}}}}}}}}}while ((w_key != CR) && (w_key != LF) && (w_key != BACKSPACE) && \(w_key != DEL) && (w_key != TAB));*pos = w_cnt;return(ret_val);
}void buf_to_screen(char *text_buf)
/*~-*/
{/*~L*/while (*text_buf != 0)/*~-*/{/*~T*//* send character */put_char(*text_buf);text_buf++;/*~-*/}/*~E*/
/*~-*/
}int core0_main (void)
{IfxCpu_enableInterrupts();/** !!WATCHDOG0 AND SAFETY WATCHDOG ARE DISABLED HERE!!* Enable the watchdog in the demo if it is required and also service the watchdog periodically* */IfxScuWdt_disableCpuWatchdog (IfxScuWdt_getCpuWatchdogPassword ());IfxScuWdt_disableSafetyWatchdog (IfxScuWdt_getSafetyWatchdogPassword ());Test_InitPrint();IfxPort_setPinMode(&MODULE_P14, 0, IfxPort_Mode_outputPushPullAlt2);print_f("abcdef"); //--- for uart test//getline(recieve_data, 6); //--- for uart testwhile (1){}return (1);
}
开发工具
AURIX™系列芯片的软件架构、底层库、工具链,示例如下:
软件开发IDE HighTec示例如下:
参考资料
AURIX™ TC39x User Manual.pdf