隨著能源日益短缺,科技的日趨智能化,復雜高效的多機控制,已日趨成為當今社會迅速發展的必然需求。昊芯順應時代要求,推出適用于高精度工業自動化運動控制的新版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中斷0
9.ECanaRegs.CANGIM.bit.I0EN=1;//使能中斷0
10.PieVectTable.ECAN0INTA=&eCanRxIsr;//CANA0接收中斷入口
11.EDIS;
12.PieCtrlRegs.PIEIER9.bit.INTx5=1;//使能ECAN1中斷
13.IER|=M_INT9;//EnableCPUINT9
14.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=1
21.P_ECanaRegs->CANMC.all=ECanaShadow.CANMC.all;
22.ECanaShadow.CANES.all=P_ECanaRegs->CANES.all;
23.do
24.{
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≥2
29.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=0
35.P_ECanaRegs->CANMC.all=ECanaShadow.CANMC.all;
36.ECanaShadow.CANES.all=P_ECanaRegs->CANES.all;
37.do
38.{
39.ECanaShadow.CANES.all=P_ECanaRegs->CANES.all;
40.}while(ECanaShadow.CANES.bit.CCE!=0);//WaitforCCEbittobecleared..
41.
42./*屏蔽所有信箱寄存器*/
43.//RequiredbeforewritingtheMSGIDs
44.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數據到MBOX0
9.}
CDK上開發CAN通信收發程序,其編譯結果為:
編譯通過后,就可以開始調試了,調試后,可通過USB_CAN網絡通信軟件,查看發送與接收到的數據如下圖:
-
通信
+關注
關注
18文章
6177瀏覽量
137381
發布評論請先 登錄
平頭哥鎮岳510芯片的QoS技術解析

加速高關稅下國產替代!昊芯攜全自研RISC-V DSP家族亮相上海慕尼黑電子展

智多晶LWIP網絡通信系統介紹

雷卯收集網絡通信開發板

中科昊芯DSP產品及公司信息
今日看點丨微芯科技宣布裁員 2000 人;海外媒體曝特斯拉Model S假想圖

平頭哥鎮岳510如何提升SSD響應速度

平頭哥半導體榮獲“中國芯”優秀技術創新產品獎
中科昊芯攜基于自研RISC-V DSP芯片的無人機解決方案完美收官2024慕尼黑華南電子展

邀請函|昊芯攜多款解決方案亮相慕尼黑華南展,深圳見!

芯新聞|昊芯攜搭載自研HaawkFoc算法的E-bike解決方案首次亮相RISC-V峰會

首發!昊芯攜最新F280013x及多款解決方案完美收官2024慕尼黑上海展

如何打造芯片國產化開源生態?Model系列HMI芯片:平頭哥內核,SDK開源貫徹到底!

評論