求助 Mspc56044P CAN底层怎么配置 使用的是SAFEPORT口,A14和A15

尊贵音乐会员,海量无损音乐
下载客户端,千万歌曲免费下
全部添加
282万次播放
77万次播放
请先安装flash!
&2018 Qianqian
粤网文[9号
微信扫一扫精选音乐每日推送!
扫描下载APP21ic官方微信-->
MPC5604B的CAN总线通信
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
/* main.c: FlexCAN program */
/* Description: Transmit one message from FlexCAN 0 buf. 0 to FlexCAN C buf. 1
(从 FlexCAN 0 buf. 0 传递一个消息到FlexCAN C buf. 1)*/&&
/* Rev 0.1 Jan 16, 2006 S.Mihalik, Copyright Freescale, 2006. All Rights Reserved */
/* Rev 0.2 Jun 6 2006 SM - changed Flexcan A to C & enabled 64 msg buffers */
/* Rev 0.3 Jun 15 2006 SM - 1. Made globals uninitialized */
/*& && && && && && && && &&&2. RecieveMsg function:&&read CANx_TIMER, removed setting buffer's CODE*/
/*& && && && && && && && &&&3. added idle loop code for smoother Nexus trace */
/*& && && && && && && && &&&4. modified for newer Freescale header files (r 16) */
/* Rev 0.4 Aug 11 2006 SM - Removed redundant CAN_A.MCR init */
/* Rev 0.5 Jan 31 2007 SM - Removed other redundant CAN_C.MCR init */
/* Rev 0.6 Mar 08 2007 SM - Corrected init of MBs- cleared 64 MBs, instead of 63 */
/* Rev 0.7 Jul 20 2007 SM - Changes for MPC5510 */
/* Rev 0.8 May 15 2008 SM - Changes for new header file symbols */
/* Rev 0.9 May 22 2009 SM - Changes for MPC56xxB/P/S */
/* Rev 1.0 Jul 10 2009 SM - Simplified, cleared CAN Msg Buf flag by writing to reg */复制代码
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
/*& &not bit, increased Tx pads slew rate(转换率), changed RxCODE, RxLENGTH, dummy data(虚拟数据) types*/
/*& && init receiving CAN first to allow CAN bus sync time before receiving 1st msg*/
/* Rev 1.1 Mar 14 2010 SM - modified initModesAndClock, updated header file */
/*&&NOTE!! structure canbuf_t in header file modified to allow byte addressing*/
/*Chapter 22*/
#include &MPC5604B_M27V.h& /* Use proper include file */
uint32_t&&RxCODE;& && && && &&&/* Received message buffer code */
uint32_t&&RxID;& && && && && &&&/* Received message ID */
uint32_t&&RxLENGTH;& && && && &/* Recieved message number of data bytes */
uint8_t& &RxDATA[8];& && && && &/* Received message data string*/
uint32_t&&RxTIMESTAMP;& && && & /* Received message time */& & 复制代码
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
void initModesAndClks(void)& &/*系统初始化*/
{
&&ME.MER.R = 0x0000001D;& && && & /* Enable DRUN, RUN0, SAFE, RESET modes */
& && && && && && && && && && && & /* Initialize PLL before turning it on: (初始化锁相环)*/
/* Use 1 of the next 2 lines depending on crystal frequency: */
//锁相环时钟没问题
&&CGM.FMPLL_CR.R = 0x;& &&&
&&//0x& && && && && && & /* 8 MHz xtal: Set PLL0 to 64 MHz */&&
&&/*CGM.FMPLL_CR.R = 0x;*/&&/* 40 MHz xtal: Set PLL0 to 64 MHz */& &
&&ME.RUN[0].R = 0x001F0074;& && & /* RUN0 cfg: 16MHzIRCON,OSC0ON,PLL0ON,syclk=PLL */
//&&ME.DRUN.R=0x001F0010;
// ME.RUNPC[0].R = 0x000000FE;& && && &&&/* Peri. Cfg. 1 settings: only run in RUN0 mode */
&&ME.RUNPC[0].R = 0x;复制代码
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
/*要什么功能就在PCTL中配置相应的序号*/
/*选择FlexCAN0和FlexCAN1控制*/
&&ME.PCTL[16].R = 0x01;& && && &&&/* P143& &MPC56xxB/P/S FlexCAN0: select ME.RUNPC[1] */& && &
&&//要和RUNPC保持一致
&&ME.PCTL[17].R = 0x01;& && && &&&/* MPC56xxB/S FlexCAN1:&&select ME.RUNPC[1] */& && &
/*选择SIUL控制*/
&&ME.PCTL[68].R = 0x01;& && && &&&/* MPC56xxB/S SIUL:&&select ME.RUNPC[1] */& && &
/*此处未进行端口引脚配置*/
//&&ME.PCTL[96].R=0x00;
& && && && && && && && && && && & /* Mode Transition to enter RUN0 mode: */
&&ME.MCTL.R = 0x40005AF0;& && && &/* Enter RUN0 Mode & Key */
&&ME.MCTL.R = 0x4000A50F;& && && &/* Enter RUN0 Mode & Inverted Key */&&
&&while (ME.GS.B.S_MTRANS) {}& &&&/* Wait for mode transition to complete */& &
& && && && && && && && && && && & /* Note: could wait here using timer and/or I_TC IRQ */
&&while(ME.GS.B.S_CURRENTMODE != 4) {} /* Verify RUN0 is the current mode */
}
复制代码
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
void initPeriClkGen(void)& & /*??*/
//??????????
{
&&CGM.SC_DC[1].R = 0x80;& &&&/* MPC56xxB/S: Enable peri set 2 sysclk divided by 1 */
&&CGM.OC_EN.R= 1;
&&CGM.OCDS_SC.R= 0x;
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
void disableWatchdog(void)
{
&&SWT.SR.R = 0x;& &&&/* Write keys to clear soft lock bit */
&&SWT.SR.R = 0x;
&&SWT.CR.R = 0x8000010A;& &&&/* Clear watchdog enable (WEN) */
}& && &&&
复制代码
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
void initCAN_1 (void)& && &/*初始化CAN_1*/
{
&&uint8_t& &i;
&&CAN_1.MCR.R = 0x5000003F;& && & /* Put in Freeze Mode & enable all 64 msg bufs *//*Module Configuration Register----MCR 模式配置寄存器*/
&&CAN_1.CR.R = 0x04DB2006;& && &&&/* Configure for 8MHz OSC, 100KHz bit time *//*Control Register---CR 控制寄存器*/
&&//0x04DB0006
&&for (i=0; i&64; i++)
&&{
& & CAN_1.BUF[i].CS.B.CODE = 0;& &/* Inactivate all message buffers */& &&&/*Message Buffer--64个信息缓冲寄存器*/
&&} 复制代码
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
&&CAN_1.IMRL.B.BUF04M=1;
&&CAN_1.BUF[4].CS.B.IDE = 0;& && &/* MB 4 will look for a standard ID */& && & /*IDE=0表示Frame format(帧格式) is standard*/
&&CAN_1.BUF[4].ID.B.STD_ID = 555; /* MB 4 will look for ID = 555 */& && && && &/*ID(帧标识符)*/
&&CAN_1.BUF[4].CS.B.CODE = 4;& &&&/* MB 4 set to RX EMPTY */& && && && && && & /*CODE=0x0100表示EMPTY: MB is active and empty.*/
//&&CAN_1.RXGMASK.R = 0x1FFFFF10;& &/* Global acceptance mask */& && && && && &&&/*Rx Global Mask Register---RXGMASK*/
&&SIU.PCR[42].R = 0x0624;& && && &/* MPC56xxB: Config port C10 as CAN1TX, open drain */
&&SIU.PCR[35].R = 0x0103;& && && &/* MPC56xxB: Configure port C3 as CAN1RX */& && &/*CAN_1的收发送*/
&&SIU.PSMI[0].R = 0x00;& && && &&&/* MPC56xxB: Select PCR 35 for CAN1RX Input */& &/*P346*//*因为可以作为CAN1Rx的引脚有三个(PC3 PC11 PF15)这里选择PC3以后,要注释 SIU.PSMI[0].R = 0x00;表明选择的是PC3*/
&&CAN_1.MCR.R = 0x0000003F;& && & /* Negate FlexCAN 1 halt state for&&64 MB */
}
复制代码
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
oid initCAN_0 (void)& &&&/*初始化CAN_0*/
{
&&uint8_t& &i;
&&CAN_0.MCR.R = 0x5000003F;& && & /* Put in Freeze Mode & enable all 64 msg bufs */& &/*Freeze Mode(It is enabled when the FRZ bit in the MCR is asserted.)*/
&&CAN_0.CR.R = 0x04DB0006;& && &&&/* Configure for 8MHz OSC, 100KHz bit time */
&&/*怎么配置波特率*/
&&for (i=0; i&64; i++)
&&{
& & CAN_0.BUF[i].CS.B.CODE = 0;& &/* Inactivate all message buffers */
&&} 复制代码
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
CAN_0.IMRL.B.BUF00M=1;
&&CAN_0.BUF[0].CS.B.IDE = 0;& && && &&&/* Use standard ID length */&&/*IDE=0表示Frame format(帧格式) is standard*/
&&CAN_0.BUF[0].ID.B.STD_ID = 555;& && &/* Transmit ID is 555 */& & /*ID(帧标识符)*/
&&CAN_0.BUF[0].CS.B.RTR = 0;& && && &&&/* Data frame, not remote Tx request frame */&&/*RTR=0表示Indicates the current MB has a Data Frame to be transmitted(表明当前信息缓冲寄存器将要发送)*/ /*RTR=Remote Transmission Request(远程发送请求)*/
//&&CAN_0.RXGMASK.R = 0x1FFFFFFF;&&
&&CAN_0.BUF[0].CS.B.CODE = 8;& &&&/* Message Buffer 0 set to TX INACTIVE */& & /*CODE=0x1000表示INACTIVE: MB does not participate in the arbitration process.*/
&&SIU.PCR[16].R = 0x0624;& && && &/* MPC56xxB: Config port B0 as CAN0TX, open drain */
&&SIU.PCR[17].R = 0x0103;& && &&&/* MPC56xxB: Configure port B1 as CAN0RX */& & /*CAN_0的收发送*/
&&CAN_0.MCR.R = 0x0000003F;& && & /* Negate FlexCAN 0 halt state for 64 MB */
}复制代码
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
/*发送端配置相对简单(或许在信息发送函数中进行了设置),只对TX设置为Inactive,而接收端设置比较复杂,比如帧和MB的设置*/
void TransmitMsg (void)& &&&/*发送信息函数*/
{
&&uint8_t& && &&&i;
& && && && && && && && && && && &&&/* Assumption:&&Message buffer CODE is INACTIVE */
&&const uint8_t TxData[] = {&Hello&};&&/* Transmit string*/&&
&&CAN_0.BUF[0].CS.B.IDE = 0;& && && &&&/* Use standard ID length */&&/*IDE=0表示Frame format(帧格式) is standard*/
&&CAN_0.BUF[0].ID.B.STD_ID = 555;& && &/* Transmit ID is 555 */& & /*ID(帧标识符)*/
&&CAN_0.BUF[0].CS.B.RTR = 0;& && && &&&/* Data frame, not remote Tx request frame */&&/*RTR=0表示Indicates the current MB has a Data Frame to be transmitted(表明当前信息缓冲寄存器将要发送)*/ /*RTR=Remote Transmission Request(远程发送请求)*/
&&CAN_0.BUF[0].CS.B.LENGTH = sizeof(TxData) -1 ; /* # bytes to transmit w/o null */
&&for (i=0; i&sizeof(TxData); i++)
&&{
& & CAN_0.BUF[0].DATA.B[i] = TxData[i];& && &/* Data to be transmitted */&&/*DATA表示数据段*/
&&}
&&CAN_0.BUF[0].CS.B.SRR = 1;& && && &&&/* Tx frame (not req'd for standard frame)*/&&/*SRR=1表示 Recessive value is compulsory for transmission in Extended Format frames(在扩展帧格式下隐形值被强制发送)*/
&&CAN_0.BUF[0].CS.B.CODE =0xC;& && && &/* Activate msg. buf. to transmit data frame */ /*RTR=0且CODE=1时Transmit data frame unconditionally once. After transmission, the
MB automatically returns to the INACTIVE state.(发送结束后,MB自动返回到非活跃状态)*/
}复制代码
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
/*发送CAN_0选择缓冲寄存器BUF[0],接收CAN_1选择缓冲寄存器BUF[1]*/
void RecieveMsg (void)& && &/*接收信息函数*/
{&&
&&uint8_
&&uint32_
&&while (CAN_1.IFRL.B.BUF04I == 0) {}; /* Wait for CAN 1 MB 4 flag */&&/*等待标志位*/
&&RxCODE& &= CAN_1.BUF[4].CS.B.CODE;& & /* Read CODE, ID, LENGTH, DATA, TIMESTAMP(读取CAN_1的CODE和ID以及Length,Data,Timestamp等参数) */
&&RxID& &&&= CAN_1.BUF[4].ID.B.STD_ID;
&&RxLENGTH = CAN_1.BUF[4].CS.B.LENGTH;
&&for (j=0; j&RxLENGTH; j++)
&&{
& & RxDATA[j] = CAN_1.BUF[4].DATA.B[j];
&&}
&&RxTIMESTAMP = CAN_1.BUF[4].CS.B.TIMESTAMP;
&&dummy = CAN_1.TIMER.R;& && && && && & /* Read TIMER to unlock message buffers */& &
&&CAN_1.IFRL.R = 0x;& && && && &/* Clear CAN 1 MB 4 flag */
}复制代码
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
//void delay_ms(int x)
//{
//& && &&&int a,b;
//& && &&&for(a=x;a&0;a--)
//& && && && && & for(b=16000;b&0;b--) ;
//}
void main(void)
{
&&volatile uint32_t IdleCtr = 0;
//&&delay_ms(1000);
&&initModesAndClks();& && &/* Initialize mode entries */
&&initPeriClkGen();& && &&&/* Initialize peripheral clock generation for DSPIs */
&&disableWatchdog();& && & /* Disable watchdog */
&&initCAN_1();& && && && & /* Initialize FLEXCAN 1 & one of its buffers for receive*/
&&initCAN_0();& && && && & /* Initialize FlexCAN 0 & one of its buffers for transmit*/
// TransmitMsg();& && && &&&/* Transmit one message from a FlexCAN 0 buffer */& &&&
//&&RecieveMsg();& && && && &/* Wait for the message to be recieved at FlexCAN 1 */
&&while (1)
&&{& && && && &
& && & IdleCtr++;& & /* Idle loop: increment counter */&&
& && & TransmitMsg();& && && &&&/* Transmit one message from a FlexCAN 0 buffer */& &&&
& && & RecieveMsg();& && && && &/* Wait for the message to be recieved at FlexCAN 1 */& && && &&&
&&}
}复制代码
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
初级工程师, 积分 2822, 距离下一级还需 178 积分
这个是在找的例程的基础上有部分我修改了,在网上看到帖子说配SBC,不明白什么意思,请前辈给予指点
CAN模块原理图
& && && && && && &&&
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖
热门推荐 /6专注汽车电子应用——TRK-USB-MPC5604B评测
我的图书馆
专注汽车电子应用——TRK-USB-MPC5604B评测
一、前言说到汽车电子,人们都会想到恩智浦(NXP)和飞思卡尔(Freescale),而去年恩智浦将飞思卡尔收购,组建了一个庞大的汽车电子供应商,提供了从车载联网、照明、媒体、电源以及门禁防盗等广泛的产品和解决方案。今天21 IC给大家带来了NXP的用于评估MPC5604B微控制器的StarterTrak USB套件——TRK-USB-MPC5604B。二、开箱拿到TRK-USB-MPC5604B套件采用纸盒包装,整体绿白色调,是不是很节能环保?上面印有汽车图案,然人一眼就可以认出此套件是针对汽车应用的评估工具,整体让人感觉一种很专业的气息。下面还印有Freescale的LOGO,很明显是两公司合并之前的产品。图1 TRK-USB-MPC5604B包装正面在包装的背面,有此款开发板的特点和支持的软件开发工具。图2 TRK-USB-MPC5604B包装背面翻开包装,就可以看到一个非常小巧的开发板嵌入到包装盒内,在包装的左面印有如何使用TRK-USB-MPC5604B的操作步骤说明。图3 TRK-USB-MPC5604B包装拿出TRK-USB-MPC5604B开发板,可以看到这款开发板非常小巧,黑白色调,板子正中间主芯片MPC5604B微控制器占据了很大的空间,左面板载了USB连接的OSBDM调试器,是用户获得开发板后,不需要再购买仿真调试器,节省了成本,同时可使用USB接口为开发板供电,除此之外,它还具有一个可与恩智浦塔式系统兼容的PCI卡边,可使用恩智浦提供的丰富而专业的塔式开发系统来完成自己的设计工作,同时使用户可以根据设计需要自己定制开发系统,这也是此款开发板的一大亮点。此外TRK-USB-MPC5604B开发板还未用户提供了2个用户按键、2个双色LED和一个唯独传感器等简单的外围资源,帮助用户单独使用TRK-USB-MPC5604B时实现一些简单的评估和入门工作。图4 TRK-USB-MPC5604B开发板正面图5 TRK-USB-MPC5604B开发板背面TRK-USB-MPC5604B开发板的主要软硬件资源及特点:“板载1颗LQFP-100封装的汽车级微控制器MPC5604B两个双色LED两个按钮温度传感器塔式系统主连接器通过USB连接的OSBDM调试器可支持恩智浦推出的集成开发环境CodeWarrior Development Studio(需授权)可支持恩智浦推出的图形化工具RAppID(需授权)三、硬件TRK-USB-MPC5604B开发板设计非常紧凑,双面都有元件,结构比较简单,可大致分成2部分,一个是具有USB接口的OSBDM仿真调试器,同时具有虚拟串口与主MCU相连,另一个MPC5604微控制器及其外围资源及接口部分。图6 TRK-USB-MPC5604B开发板布局1、核心微控制器TRK-USB-MPC5604B开发板板载了一颗恩智浦的汽车级微控制器MPC5604B(SPC5604CF2MLL6),LQFP100封装。图7 TRK-USB-MPC5604B开发板核心微控制器MPC5604B微控制器是基于恩智浦的Power Architecture处理器,该处理器产品可分为5大类,可支持网络、汽车、消费电子和工业控制等领域。图8 Power Architecture处理器家族其中MPC5xxx微控制器具有32位的e200或e300内核,适用于汽车应用和工业控制的高可靠性处理器,可面向汽车和工业动力总成、发动机管理、电机控制、车身控制、网关、底盘和安全、仪表板和显示屏管理应用,该系列MCU由单核到多核,高达55纳米技术符合ISO 26262等功能安全标准。又分成5类,其中MPC56xx子系列广泛应用于汽车应该用。图9 MPC5xxx微控制器家族按照恩智浦官方分类,MPC56xxx的分类和适用为:“ MPC560xB:超可靠的32位MCU,适用于汽车和工业通用应用MPC560xE:超可靠的32位MCU,适用于汽车ADAS和工业控制应用&MPC560xP:超可靠的MPC560xP MCU,适用于汽车和工业安全应用MPC560xS:超可靠的32位MCU,适用于仪表板和工业控制应用MPC563xM:超可靠的32位MCU,适用于动力总成和工业控制应用MPC564xA:超可靠的32位MCU,适用于动力总成、变速箱和工业控制应用[MPC564xB-C:超可靠的MPC564xB-C MCU,适用于汽车和工业控制应用MPC564xL:超可靠的32位MCU,适用于工业、底盘和安全应用MPC5668G:超可靠的双核32位MCU,适用于网关和工业控制应用&MPC5674F:超可靠的32位MCU,适用于动力总成和工业控制应用MPC5676R:超可靠的32位MCU,适用于动力总成和工业控制应用MPC567xK:超可靠的32位MCU,适用于ADAS和工业控制应用其中MPC560xB/C/D系列32位微控制器是面向汽车车身电子和工业控制应用的器件。图10 MPC560xB/C微控制器内部结构MPC560xB/C的主要特性:闪存:高达1.5 MBEEPROM:64 KB DataFlash?RAM:高达96 KB定时器:16位,多达64个通道ADC:10位,多达36通道;12位,多达16通道6个CAN6个SPI10个LINFlex其中LINFlex模块提供完全自动化局域互联网络(LIN)消息管理,从而减少CPU干预和消息延迟。eMIOS定时器在一个非常灵活的模块中结合了多个计数器源,如输入捕获、输出比较和PWM功能,PWM功能支持移相信号输出来提高电磁兼容性。交互触发单元CTU同步PWM输出信号与模数转换。FlexCAN模块同时支持FIFO,适合控制器区域网络(CAN)网关管理事件驱动的总线流量和周期性总线流量。而且恩智浦保证微控制器产品自自推出后至少保证15年供货。2、仿真调试器TRK-USB-MPC5604B开发板的设计者为用户提供了板载的仿真调试器OSBDM,OSBDM是一个开源的硬件/软件/固件设计,提供了不同的一种对恩智浦处理器的低速调试通信。是用户不需要额外购买调试器,从而降低成本。同时支持固件升级功能,可刷入不同的固件,实现对不同MCU的调试功能。图11 TRK-USB-MPC5604B板载OSBDM调试器3、跳线在TRK-USB-MPC5604B开发板上,为用户提供了3个跳线:J3、J6、J7。在使用开发板时,需要注意它们的设置功能,其中J3是用于升级OSBDM仿真调试器固件的,当需要升级固件时,需要将J3跳线短接,然后将开发板重新插入USB接口就可以进入升级固件模式。J6和J7是对MPC5604B主为控制的Flex LIN引脚功能的选择,当J6和J7跳线的1-2引脚短接,就将LIN接口连接到板载的仿真调试器的虚拟串口上,通过USB接口可连接电脑,对系统进行串口调试功能,如果使2-3引脚短接,就将LIN引脚连接到PCI接口,可与塔式系统连接,使用功能丰富的外设资源。图12 TRK-USB-MPC5604B开发板跳线位置图13 TRK-USB-MPC5604B开发板跳线功能这里要注意,跳线编号在电路板正面标出,但引脚编号在电路板的正面没有标出,不过设计者非常人性化的在电路板的背面标出了引脚编号,使用的时候要注意查看。图14 TRK-USB-MPC5604B开发板跳线编号4、PCI接口TRK-USB-MPC5604B开发板虽然小巧,板载资源不多,但是提供了PCI接口,可连接到恩智浦推出的塔式系统上。图15 TRK-USB-MPC5604B开发板PCI接口恩智浦的塔式系统是一个为恩智浦8位、16位和32位微控制器而设计的极为丰富的模块化开发平台,可使开发人员通过快速原型技术进行样机研制,具有可互换、可重复利用的开发板(模块),以及开源设计文件,让您轻松定制设计,减少底层设计工作,使用户拥有更多时间专注于开发与众不同的解决方案。图16 塔式系统结构塔式系统由三种基本类型的电路板组成:MCU与处理器模块,外设及插件和侧板模块。MCU与处理器模块(主电路板)作为开发平台的控制中心,提供了针对ColdFire/ColdFire+MCU模块、DSC模块、KinetisMCU模块、PowerQUICC和QorIQ处理器模块等几十种,可实现对不同的MCU产品进行评估。外设及插件提供了非常丰富的(例如模拟技术、音频、传感器、图形LCD、触摸板、传感器、无线电和其他插件等)外围模块和插件,可以快速接入各种塔式系统配置中,实现轻松、快速的原型设计。侧板模块是塔式系统的基本标准构件,侧板模块可连接MCU和外设模块,为所有配置的组装塔式系统提供所需的功率调节电路和结构完整性。塔式系统模块可以用作独立的调试工具,或者作为组装塔式系统的一部分,它具有集成调试接口,可以通过标准的USB线进行轻松编程和运行控制。四、开发了解了TRK-USB-MPC5604B开发板的硬件之后,下面来体验一下它开发环境以及开发过程。MPC5604B微控制器是恩智浦的32位MCU,面向汽车车身电子应用的集成器件,它有一个庞大的支持生态合作体系,其中包括软件驱动程序、操作系统和配置代码,以帮助快速实现用户的设计。1、准备(1)要使用TRK-USB-MPC5604B开发板,恩智浦为它提供了CodeWarrior Development Studio集成开发环境,官方提供了CodeWarrior Development Studio for MPC55xx/MPC56xx (Classic IDE) v2.10版本的IDE。不过目前CW开发环境有最新的CodeWarrior for Microcontrollers v10.6版本,该版本是在Eclipse开放开发平台上将面向ColdFire?、ColdFire+、DSC、Kinetis、MPC5xxx、RS08、S08和S12Z架构的开发工具集成为一个单一产品。下载地址:http://www.nxp.com/zh-Hans/products/software-and-tools/software-development-tools/codewarrior-development-tools/codewarrior-development-studios/codewarrior-for-microcontrollers/codewarrior-for-mcus-eclipse-ide-coldfire-56800-e-dsc-kinetis-freescale-56xx-rs08-s08-s12z-v10.6:CW-MCU10图17 CW10.6集成开发环境地址CodeWarrior for Microcontrollers v10.6支持恩智浦的多种产品开发,下载后安装时,记得勾选Qorivva选项以便对MPC5604B微控制器进行开发。&图18 CW10.6安装(2)恩智浦还为TRK-USB-MPC5604B开发板提供了图形化的配置工具RAppID,这是一款面向MPC5XXX系列Power Architecture?控制器的图形开发工具系列,可让用户快速轻松地配置控制器并生成完整的文档。RAppID不仅能够生成用于初始化寄存器的C语言代码,而且还提供一个系统初始化函数,有序地激活控制器。使用RAppID能帮助用户节省时间。下载地址:http://www.nxp.com/zh-Hans/products/software-and-tools/hardware-development-tools/startertrak-development-boards/rappid-initialization-for-power-architecture:RAPPID。不过该工具需要许可才可以使用,大家下载后可向恩智浦发申请邮件,获得1个月的试用许可。图19 RAppID图形配置工具地址(3)最后还要安装TRK-USB-MPC5604B开发板的驱动,以便使用仿真调试器OSBDM。驱动地址:http://www.pemicro.com/osbdm/。&图20 OSBDM调试器主页可以看到该网站不但有OSBDM调试器的驱动程序,还有调试器的最新固件版本和一些使用与塔式系统的工具等。在该网站下载驱动程序和固件时,需要注册用户才可以,需要使用有限才能注册,但要注意不能使用163等公共邮箱,否则无法完成注册下载。首先下载驱动程序和固件程序。图21 OSBDM调试器驱动与固件安装驱动程序后,如果在设备管理器中查看TRK-USB-MPC5604B开发板被识别出了仿真调试器和虚拟串口即为正确安装驱动程序。图22 TRK-USB-MPC5604B驱动安装接下来把固件也更新一下,已获得更好的调试性能。首先安装并打开固件更新程序,将TRK-USB-MPC5604B开发板插入电脑,就可以检测到开发板目前固件版本。图23 OSBDM调试器固件更新选项按照提示选择正确的固件版本,点击更新后,将开发板的USB接口从电脑上移除,然后将J3跳线短接后,重新插入电脑,点击确认按钮开始更新固件。图24 OSBDM调试器固件更新跳线设置图25 OSBDM调试器固件更新待固件更新完毕,将开发板从计算机移除,去掉J3的跳线帽,重新插入计算机,可以看到固件更新完成。图26 OSBDM调试器固件更新完毕2、测试工具准备好了,接下来对开发过程进行简单测试,体验一下开发过程。在TRK-USB-MPC5604B开发板上有2个红绿双色LED发光二极管D4和D5,写个程序来控制一下LED亮灭。图27 TRK-USB-MPC5604B开发板用户LED电路打开CW10.6软件,新建一个基于MPC5604B的空白工程。可以看到CW10.6给我们自动新建了一个工程,很多工程文件给大家准备好了。&图28 CW10.6新建工程根据要求写一下程序并编译。图29 编写程序完整测试代码如下:#include 'MPC5604B.h'void initModesAndClock(void) {ME.MER.R = 0x0000001D; /* Enable DRUN, RUN0, SAFE, RESET modes *//* Initialize PLL before turning it on: *//* Use 1 of the next 2 lines depending on crystal frequency: */CGM.FMPLL_CR.R = 0x; /* 8 MHz xtal: Set PLL0 to 64 MHz *//*CGM.FMPLL_CR.R = 0x;*/ /* 40 MHz xtal: Set PLL0 to 64 MHz */ME.RUN[0].R = 0x001F0074; /* RUN0 cfg: 16MHzIRCON,OSC0ON,PLL0ON,syclk=PLL0 */ME.RUNPC[1].R = 0x; /* Peri. Cfg. 1 settings: only run in RUN0 mode */ME.PCTL[68].R = 0x01; /* MPC56xxB/S: select ME.RUNPC[1] *//* Mode Transition to enter RUN0 mode: */ME.MCTL.R = 0x40005AF0; /* Enter RUN0 Mode & Key */ME.MCTL.R = 0x4000A50F; /* Enter RUN0 Mode & Inverted Key */while (ME.GS.B.S_MTRANS) {} /* Wait for mode transition to complete *//* Notes: *//* 1. I_TC IRQ could be used here instead of polling *//* to allow software to complete other init. *//* 2. A timer could be used to prevent waiting forever.*/while(ME.GS.B.S_CURRENTMODE != 4) {} /* Verify RUN0 is the current mode *//* Note: This verification ensures a SAFE mode *//* tranistion did not occur. SW could instead *//* enable the safe mode tranision interupt */}void disableWatchdog(void) {SWT.SR.R = 0x; /* Write keys to clear soft lock bit */SWT.SR.R = 0x;SWT.CR.R = 0x8000010A; /* Clear watchdog enable (WEN) */}void initLedGpio(void) {SIU.PCR[68].R = 0x0220;SIU.PCR[69].R = 0x0220;SIU.PCR[70].R = 0x0220;SIU.PCR[71].R = 0x0220;SIU.GPDO[68].B.PDO = 1;SIU.GPDO[69].B.PDO = 1;SIU.GPDO[70].B.PDO = 1;SIU.GPDO[71].B.PDO = 1;}void delay(void) {vuint32_for (i = 0; i }int main(void) {volatile int i = 0;initModesAndClock(); /* Initialize mode entries and system clock */disableWatchdog(); /* Disable watchdog */initLedGpio();/* Loop forever */for (;;) {SIU.GPDO[68].B.PDO = 0;SIU.GPDO[69].B.PDO = 0;SIU.GPDO[70].B.PDO = 0;SIU.GPDO[71].B.PDO = 0;delay();SIU.GPDO[68].B.PDO = 1;SIU.GPDO[69].B.PDO = 1;SIU.GPDO[70].B.PDO = 1;SIU.GPDO[71].B.PDO = 1;delay();}}接下来点击调试按钮,可以将程序装载到RAM或FLASH中运行,这里选择RAM。之后弹出了提示要求更新仿真调试器的固件。看来之前我们在官网上下载了最新固件并不是最新的,在CW10.6软件中还有更新的固件。(可能是由于PE被恩智浦(即之前的飞思卡尔)收购后,只在CW10.6中更新了固件,并没有在PE网站上进行更新),按照提示更新固件,就可以在CW10.6上面使用OSBDM仿真调试器了。注意,不更新是无法在新版本的CW10.6上面使用TRK-USB-MPC5604B开发板的!图30 CW10.6要求更新开发板固件在调试界面点击运行,即可运行查看效果,可以看出实现预期要求。图31 CW10.6调试界面图32 测试运行效果整个开发过程基本还算顺利。在使用TRK-USB-MPC5604B开发板的过程中,个人感觉基于Power Architecture?架构的MCU芯片使用有许多与其它系列MCU(比如ARM)有较大差异,资源相对比较少,因此入门有些门槛,当然,这样更需要一块合适的入门级开发板。现在恩智浦也推出了基于ARM架构的Kinetis系列MCU,其中KEA系列同样是面向汽车及的微控制器。五、总结总之,StarterTrak USB套件(TRK-USB-MPC5604B)是一款恩智浦的低成本开发板,板载一颗汽车级的微控制器MPC5604B,带有USB接口的OSBDM仿真调试器,同时兼做虚拟串口功能,可方便用户调试使用,开发板还具有一个可与恩智浦塔式系统兼容的PCI卡边,可以与恩智浦的塔式系统无缝连接,使用即为丰富的塔式系统资源,可帮助工程师快速的对汽车车身电子和工业控制等应用进行设计实现。六、参考1、TRK-USB-MPC5604B: MPC5604B StarterTRAK USB 开发系统2、MPC560xB: 超可靠的MPC56xB MCU,适用于汽车和工业通用LIN应用3、EMBEDDED OSBDM4、CodeWarrior for MCUs (Eclipse IDE)点击
[转]&[转]&
喜欢该文的人也喜欢}

我要回帖

更多关于 mpc5604b 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信