MPC837xE-RDB参考设计原理图Rev2.1详细解析

需积分: 9 13 下载量 131 浏览量 更新于2024-08-01 收藏 569KB PDF 举报
"MPC837xE-RDB_Schematic_Rev2.1 是一份关于PowerPC MPC837系列CPU的硬件参考设计的详细原理图,涵盖了从电源管理到接口通信等多个方面的内容。该文档共包含15页,分别详细阐述了各个关键组件和模块的布局与连接。" 在MPC837xE-RDB的设计中,重点涉及以下知识点: 1. **PowerPC MPC837 CPU**:MPC837是PowerPC架构的一个型号,由Freescale Semiconductor(现NXP)生产,适用于嵌入式系统,具有高性能和低功耗的特点。它集成了多种处理器核心,如e200z3,支持多任务处理和高效能运算。 2. **硬件设计**:该参考设计包括了完整的硬件实施方案,例如DDR2内存、本地总线、NOR/NAND闪存、PCI接口、eTSEC(以太网媒体访问控制器)、SATA、PCI-E、miniPCI-E、SD卡接口、USB PHY/HUB、UART、电源去耦合电路、以太网PHY、L2交换机、MCU、I2C、LCD显示和电源供应等。 3. **内存系统**:DDR2内存芯片用于高速数据存储,提供了高带宽的数据传输。本地总线连接CPU与其他主要组件,确保快速数据交换。 4. **存储接口**:NOR/NAND闪存提供非易失性存储,用于系统启动和其他重要数据的存储。PCI接口则用于扩展板卡,提供额外功能。 5. **网络接口**:eTSEC模块负责千兆以太网连接,通过RTL8211B和VSC7385芯片实现。这些接口提供了高速网络通信能力。 6. **串行接口**:UART(通用异步收发传输器)用于标准串行通信,如调试和设备控制。 7. **电源管理**:设计中详细列出了不同电压等级的电源,如12V(V1200)、5V(V500)、3.3V(V330)、2.5V(V250)、1.8V(V180)、1.5V(V150)和1.2V(V120),以及核心电压VCORE,这些都是确保系统正常运行的关键。 8. **中断系统**:中断(IRQ)系统是硬件与操作系统通信的重要方式,如IRQ0至IRQ5,分别对应MCU(如有RTC和热管理)、eTSEC1PHY、eTSEC2GbE、USB、SD写保护和PCI INTA等事件。 9. **其他接口**:SATA用于高速硬盘连接,PCI-E和miniPCI-E接口支持高速扩展设备。USB PHY/HUB模块处理USB设备的接入和管理。LCD接口用于连接显示器,提供图形界面。 10. **MCU、I2C及其他**:MCU(微控制器)可能包含了RTC(实时时钟)和温度传感器功能,I2C总线用于连接各种低速外设,如传感器和配置芯片。 这个原理图详尽地展示了MPC837xE-RDB平台的硬件结构,为开发者和工程师提供了构建基于PowerPC MPC837处理器系统的详细指南。通过理解和分析这份资料,可以有效地进行系统设计、故障排查和性能优化。

#pragma once #include "viRDBIcd.h" //激励信号 typedef struct { RDB_MSG_HDR_t hdr; RDB_MSG_ENTRY_HDR_t entrytigger; RDB_TRIGGER_t rdbtrigger; RDB_MSG_ENTRY_HDR_t entryEOF; } USER_RDB_MSG_TRIGGER_t; //主车状态 typedef struct { RDB_MSG_HDR_t hdr; RDB_MSG_ENTRY_HDR_t entrySOF; //Trigger RDB_MSG_ENTRY_HDR_t entrytigger; RDB_TRIGGER_t rdbtrigger; //Ego RDB_MSG_ENTRY_HDR_t entryObjectState; RDB_OBJECT_STATE_t objectState; RDB_MSG_ENTRY_HDR_t entryWheelState; RDB_WHEEL_t WheelState_FL; RDB_WHEEL_t WheelState_FR; RDB_WHEEL_t WheelState_RR; RDB_WHEEL_t WheelState_RL; RDB_MSG_ENTRY_HDR_t entryEOF; } USER_RDB_MSG_Trigger_EGO_t; //ego control typedef struct { RDB_MSG_HDR_t hdr; RDB_MSG_ENTRY_HDR_t entrySOF; //Trigger RDB_MSG_ENTRY_HDR_t entrytigger; RDB_TRIGGER_t rdbtrigger; //Ego RDB_MSG_ENTRY_HDR_t entryObjectState; RDB_OBJECT_STATE_t objectState; RDB_MSG_ENTRY_HDR_t entryWheelState; RDB_WHEEL_t WheelState_FL; RDB_WHEEL_t WheelState_FR; RDB_WHEEL_t WheelState_RR; RDB_WHEEL_t WheelState_RL; //Driver RDB_MSG_ENTRY_HDR_t entryDriverCtl; RDB_DRIVER_CTRL_t driver; RDB_MSG_ENTRY_HDR_t entryEOF; } USER_RDB_MSG_Trigger_EGO_Ctl_t; //Trigger and 主车状态 typedef struct { RDB_MSG_HDR_t hdr; RDB_MSG_ENTRY_HDR_t entrySOF; //Ego RDB_MSG_ENTRY_HDR_t entryObjectState; RDB_OBJECT_STATE_t objectState; RDB_MSG_ENTRY_HDR_t entryWheelState; RDB_WHEEL_t WheelState_FL; RDB_WHEEL_t WheelState_FR; RDB_WHEEL_t WheelState_RR; RDB_WHEEL_t WheelState_RL; RDB_MSG_ENTRY_HDR_t entryEOF; } USER_RDB_MSG_EGO_t; //接地点查询 typedef struct { RDB_MSG_HDR_t hdr; RDB_MSG_ENTRY_HDR_t entrySOF; RDB_MSG_ENTRY_HDR_t entryRoadQuery; RDB_ROAD_QUERY_t Road_Query_1; RDB_ROAD_QUERY_t Road_Query_2; RDB_ROAD_QUERY_t Road_Query_3; RDB_ROAD_QUERY_t Road_Query_4; RDB_MSG_ENTRY_HDR_t entryEOF; } USER_RDB_MSG_ROADQUERY_t; //激励信号 typedef struct { RDB_MSG_HDR_t hdr; RDB_MSG_ENTRY_HDR_t entrySCP; RDB_SCP_t scpHeader; } USER_SCP_MSG_t;

2023-07-15 上传

void sendDriverCtrl( int & sendSocket, const double & simTime, const unsigned int & simFrame ) { Framework::RDBHandler myHandler; myHandler.initMsg(); RDB_DRIVER_CTRL_t *myDriver = ( RDB_DRIVER_CTRL_t* ) myHandler.addPackage( simTime, simFrame, RDB_PKG_ID_DRIVER_CTRL ); if ( !myDriver ) return; // do we have a valid nearest object? bool haveSensorObject = ( mNearestObject.base.id > 0 ); // sensor object must not be older than 1.0s double ownSpeed = sqrt( mOwnObject.ext.speed.x * mOwnObject.ext.speed.x + mOwnObject.ext.speed.y * mOwnObject.ext.speed.y ); double accelTgtDist = 0.0; double accelTgtSpeed = ( 30.0 - ownSpeed ) / 5.0; // default speed should be own preferred speed if ( haveSensorObject ) { // let's go for the same speed as preceding vehicle: if ( mNearestObject.ext.speed.x < -1.0e-3 ) accelTgtSpeed = 2.0 * mNearestObject.ext.speed.x / 5.0; else accelTgtSpeed = 0.0; // let's go for a 2s distance double tgtDist = ownSpeed * 2.0; if ( tgtDist < 10.0 ) // minimum distance to keep tgtDist = 10.0; accelTgtDist = ( mNearestObject.base.pos.x - tgtDist ) / 10.0; } fprintf( stderr, "sendDriverCtrl: accelDist = %.5lf, accelSpeed = %.5lf\n", accelTgtDist, accelTgtSpeed ); myDriver->playerId = 1; myDriver->accelTgt = accelTgtDist + accelTgtSpeed; myDriver->validityFlags = RDB_DRIVER_INPUT_VALIDITY_TGT_ACCEL | RDB_DRIVER_INPUT_VALIDITY_ADD_ON; int retVal = send( sendSocket, ( const char* ) ( myHandler.getMsg() ), myHandler.getMsgTotalSize(), 0 ); if ( !retVal ) fprintf( stderr, "sendDriverCtrl: could not send driver control\n" ); else fprintf( stderr, "sentDriverCtrl\n" ); }

2023-07-15 上传