随着能源日益短缺,科技的日趋智能化,复杂高效的多机控制,已日趋成为当今社会迅速发展的必然需求。昊芯顺应时代要求,推出适用于高精度工业自动化运动控制的新版HXS320F28034数字信号处理器DSP,其CAN模块以Mailbox信箱MBOXn控制与传输数据,实现DSP之间的控制指令高效收发,可更有效助力于工程师实现高效的多DSP控制指令收发,广泛应用于电动汽车、风力发电、轨道交通、机器人等高复杂度控制领域。

自平头哥半导体有限公司的剑池集成开发环境(简称“CDK”)支持HX2000系列芯片调试以来,本期以USB_CAN通信收发实例讲解CAN网络通信功能。
HX2000系列CAN模块原理如下图,通过CANMC[CCR]使能进入初始化配置模式,等待CANMC[CCE]置高写入CANBTC位配置波特率;等待CANMC[CCE]拉低,完成初始化;
通过Mailbox邮箱MBOXn.MSGCTRL的RTR位配置远程传输请求,TPL位配置MBOXn传输优先级,DLC位配置传输0~8个字节,传输过程如下:
1.CAN总线通过CAN传输芯片向CAN发送数据,使能CANRIOC[RXFUNC]打开接收线,接收来自GPIOMUX所定义CANRX接收引脚上的数据,装载到缓冲区Receive Buffer;
2.通过CANMD[MDn]配置Mailbox邮箱MBOXn为接收,使能CANME[MEn]打开邮箱MBOXn,接收来自缓冲区中的数据;
3.全局中断标志的设置取决于CANGIM寄存器中GIL位的设置。如果设置了该位,则全局中断在CANGIF1寄存器中设置位;否则,在CANGIF0寄存器中设置。通过CANMIM[MIMn]配置接收掩码中断使能;通过CANMIL[MILn]配置,将MBOXn接收中断,映射到中断ECAN0INTA或ECAN1INTA;使能CANGIM[I0EN/I1EN]打开中断信号,MBOXn接收到数据时,将产生一个接收中断,使CANGIF0/1[MIV0/1]中相应接收邮箱MBOXn的邮箱号置位;通过PIE响应CPU执行接收中断程序:
(1)置位CANRMP[RMPn]挂起MBOXn邮箱,以防止瞬间接收到多组数据;
(2)通过CANGIF0/1[MIV0/1],确认接收到数据邮箱为MBOXn,并读取接收的数据;
(3)置位CANRMP[RMPn]清除邮箱MBOXn挂起状态,准备接收下一组数据。


4.通过CANMD[MDn]配置另一Mailbox邮箱MBOXn为发送,使能CANME[MEn]打开发送邮箱,使能CANTRS[TRSn]启动发送邮箱,发送数据到缓冲区 Transmit Buffer;
5.使能CANTIOC[TXFUNC]打开发送线,通过GPIOMUX所定义CANTX发送引脚将缓冲区Transmit Buffer数据发送到CAN总线。
由此设计通过USB_CAN分析仪将昊芯HXS320F28034芯片与上位机软件通讯实例:采用昊芯HXS320F28034芯片、CAN收发器与USB_CAN分析仪,通过USB_CAN网络调试上位机软件,向CPU发送任意一组数据,CPU接收所发送的数据,硬件连接如下图所示:

基于以上分析,在CDK上开发CAN通信程序,代码包括:CAN的GPIO配置、初始化参数配置、CAN发送程序与接收中断服务程序,主程序调用执行。主要代码如下:
1.intmain(void)2.{3.InitSysCtrl();//系统时钟初始化4.CAN_Init();//CAN的初始化参数配置5.InitECanaGpio();//CAN的Gpio引脚配置6.EALLOW;7.ECanaRegs.CANMIM.bit.MIM0=1;//打开接收掩码,接收到数据触发中断8.ECanaRegs.CANMIL.bit.MIL0=0;//选择EcanA中断09.ECanaRegs.CANGIM.bit.I0EN=1;//使能中断010.PieVectTable.ECAN0INTA=&eCanRxIsr;//CANA0接收中断入口11.EDIS;12.PieCtrlRegs.PIEIER9.bit.INTx5=1;//使能ECAN1中断13.IER|=M_INT9;//EnableCPUINT914.EINT;15.while(1){16.CAN_Tx();//发送数据17.}18.return0;19.}其中,CAN的初始化参数配置代码为:
1.voidCAN_Init()2.{3.volatilestructECAN_REGSECanaShadow;4.EALLOW;5./*配置RX与TX引脚*/6.ECanaShadow.CANTIOC.all=P_ECanaRegs->CANTIOC.all;7.ECanaShadow.CANTIOC.bit.TXFUNC=1;8.P_ECanaRegs->CANTIOC.all=ECanaShadow.CANTIOC.all;9.ECanaShadow.CANRIOC.all=P_ECanaRegs->CANRIOC.all;10.ECanaShadow.CANRIOC.bit.RXFUNC=1;11.P_ECanaRegs->CANRIOC.all=ECanaShadow.CANRIOC.all;12./*清RMPn,GIFn位*/13.P_ECanaRegs->CANRMP.all=0xFFFFFFFF;14./*清中断标志*/15.P_ECanaRegs->CANGIF0.all=0xFFFFFFFF;16.P_ECanaRegs->CANGIF1.all=0xFFFFFFFF;17.18./*初始化配置,写入CAN波特率*/19.ECanaShadow.CANMC.all=P_ECanaRegs->CANMC.all;20.ECanaShadow.CANMC.bit.CCR=1;//SetCCR=121.P_ECanaRegs->CANMC.all=ECanaShadow.CANMC.all;22.ECanaShadow.CANES.all=P_ECanaRegs->CANES.all;23.do24.{25.ECanaShadow.CANES.all=P_ECanaRegs->CANES.all;26.}while(ECanaShadow.CANES.bit.CCE!=1);//WaitforCCEbittobeset..27.//Bitrate=SYSCLKOUT/2/{(BRP+1)*[(TSEG1+1)+(TSEG2+1)+1,28.//TSEG1≥3,TSEG2≥229.ECanaShadow.CANBTC.bit.BRPREG=2;30.ECanaShadow.CANBTC.bit.TSEG2REG=4;31.ECanaShadow.CANBTC.bit.TSEG1REG=13;32.P_ECanaRegs->CANBTC.all=ECanaShadow.CANBTC.all;33.ECanaShadow.CANMC.all=P_ECanaRegs->CANMC.all;34.ECanaShadow.CANMC.bit.CCR=0;//SetCCR=035.P_ECanaRegs->CANMC.all=ECanaShadow.CANMC.all;36.ECanaShadow.CANES.all=P_ECanaRegs->CANES.all;37.do38.{39.ECanaShadow.CANES.all=P_ECanaRegs->CANES.all;40.}while(ECanaShadow.CANES.bit.CCE!=0);//WaitforCCEbittobecleared..41.42./*屏蔽所有信箱寄存器*/43.//RequiredbeforewritingtheMSGIDs44.P_ECanaRegs->CANME.all=0;45./*配置MBOX1的MSGID*/46.P_ECanaMboxes->MBOX1.MSGID.all=0x00040000;47.P_ECanaMboxes->MBOX0.MSGID.all=0x00040000;48./*配置MBOX1/MBOX0的传输字节为2*/49.ECanaMboxes.MBOX1.MSGCTRL.bit.DLC=0x2;50.ECanaMboxes.MBOX0.MSGCTRL.bit.DLC=0x2;51./*配置MBOX0为接收,MBOX1为发送*/52.ECanaRegs.CANMD.bit.MD0=1;53.ECanaRegs.CANMD.bit.MD1=0;54./*使能MBOX0andMBOX1*/55.ECanaRegs.CANME.bit.ME0=1;56.ECanaRegs.CANME.bit.ME1=1;57.//挂起接收邮箱,以触发接收中断58.if(ECanaRegs.CANRMP.bit.RMP0==0)59.{60.ECanaRegs.CANRMP.bit.RMP0=1;61.}62.EDIS;63.return;64.}CAN的发送程序代码为:
1.voidCAN_Tx(void)2.{3.//等待MBOX0接收成功,读取消息4.while(ECanaRegs.CANRMP.bit.RMP0!=1){}5.ECanaMboxes.MBOX1.MDL.byte.BYTE0=(receive_data&0xff);6.ECanaMboxes.MBOX1.MDL.byte.BYTE1=((receive_data>>8)&0xff);7.8.ECanaRegs.CANTRS.bit.TRS1=1;//发送MBOX1数据到MBOX09.}CDK上开发CAN通信收发程序,其编译结果为:

编译通过后,就可以开始调试了,调试后,可通过USB_CAN网络通信软件,查看发送与接收到的数据如下图:

-
通信
+关注
关注
18文章
6318浏览量
139570
发布评论请先 登录
瑞芯微双芯片助力广汽昊铂GT攀登版正式下线
喜讯|昊芯RISC-V DSP荣获“中国芯”RISC-V生态推广奖
【作品合集】中科昊芯Core_DSC280025C开发板测评
纳芯微推出NSR926X系列车规级SBC系统基础芯片
【中科昊芯Core_DSC280025C开发板试用体验】---LED闪烁灯
芯新闻|昊芯亮相第五届RISC-V中国峰会,共绘开源芯片新纪元
【中科昊芯Core_DSC280025C开发板试用体验】+3.DSP基础外设调试(含源码)
【中科昊芯Core_DSC280025C开发板试用体验】+1.开箱之浮点计算对比
平头哥镇岳510芯片的QoS技术解析
加速高关税下国产替代!昊芯携全自研RISC-V DSP家族亮相上海慕尼黑电子展
智多晶LWIP网络通信系统介绍

芯教程丨平头哥助力昊芯HX2000系列芯片CAN网络通信
评论