<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        TMS320F2812外設例程系列之ECan

        作者:佚名   來源:不詳   點擊數:  更新時間:2014年08月16日   【字體:

         /#####################################################################

        //文件:  Example_281xECanBack2Back.c
        //功能:  eCAN內部功能自測程序
        //#####################################################################
        #include "DSP281x_Device.h"     //頭文件
        #include "DSP281x_Examples.h"   
        //函數聲明
        void mailbox_check(int32 T1, int32 T2, int32 T3);
        void mailbox_read(int16 i);
        //全局變量
        Uint32  ErrorCount;
        Uint32  MessageReceivedCount;
        Uint32  TestMbox1 = 0;
        Uint32  TestMbox2 = 0;
        Uint32  TestMbox3 = 0;
        //主函數
        void main(void)
        {
            Uint16  j;
                struct ECAN_REGS ECanaShadow;
          //步驟1.初始化系統控制(PLL, 看門狗,使能外設時鐘)
            InitSysCtrl();
        //步驟2.初始化 GPIO
        //InitGpio();             //本例中略過
        //步驟3.清除所有中斷并初始化PIE向量表
            DINT;                     //禁止 CPU 所有中斷
        //初始化 PIE 控制寄存器組.
        //InitPieCtrl();         //本例中略過
        //禁止CPU所有中斷并清除所有中斷標志位
            IER = 0x0000;
            IFR = 0x0000;
        //InitPieVectTable(); //本例中略過
        //步驟4.初始化所有外設
        //InitPeripherals();     //本例中不需要
        //步驟5.用戶程序段
            MessageReceivedCount = 0;
            ErrorCount = 0;
        InitECan();             //初始化eCAN
            //可以一次向郵箱寫16位或32位數據
            //向發送郵箱MBOX0~15寫入MSGID(ID號)
            ECanaMboxes.MBOX0.MSGID.all = 0x9555AAA0;
            ECanaMboxes.MBOX1.MSGID.all = 0x9555AAA1;
            ECanaMboxes.MBOX2.MSGID.all = 0x9555AAA2;
            ECanaMboxes.MBOX3.MSGID.all = 0x9555AAA3;
            ECanaMboxes.MBOX4.MSGID.all = 0x9555AAA4;
            ECanaMboxes.MBOX5.MSGID.all = 0x9555AAA5;
            ECanaMboxes.MBOX6.MSGID.all = 0x9555AAA6;
            ECanaMboxes.MBOX7.MSGID.all = 0x9555AAA7;
            ECanaMboxes.MBOX8.MSGID.all = 0x9555AAA8;
            ECanaMboxes.MBOX9.MSGID.all = 0x9555AAA9;
            ECanaMboxes.MBOX10.MSGID.all = 0x9555AAAA;
            ECanaMboxes.MBOX11.MSGID.all = 0x9555AAAB;
            ECanaMboxes.MBOX12.MSGID.all = 0x9555AAAC;
            ECanaMboxes.MBOX13.MSGID.all = 0x9555AAAD;
            ECanaMboxes.MBOX14.MSGID.all = 0x9555AAAE;
            ECanaMboxes.MBOX15.MSGID.all = 0x9555AAAF;
            //向接收郵箱 MBOX16~31寫入MSGID(ID號)
            ECanaMboxes.MBOX16.MSGID.all = 0x9555AAA0;
            ECanaMboxes.MBOX17.MSGID.all = 0x9555AAA1;
            ECanaMboxes.MBOX18.MSGID.all = 0x9555AAA2;
            ECanaMboxes.MBOX19.MSGID.all = 0x9555AAA3;
            ECanaMboxes.MBOX20.MSGID.all = 0x9555AAA4;
            ECanaMboxes.MBOX21.MSGID.all = 0x9555AAA5;
            ECanaMboxes.MBOX22.MSGID.all = 0x9555AAA6;
            ECanaMboxes.MBOX23.MSGID.all = 0x9555AAA7;
            ECanaMboxes.MBOX24.MSGID.all = 0x9555AAA8;
            ECanaMboxes.MBOX25.MSGID.all = 0x9555AAA9;
            ECanaMboxes.MBOX26.MSGID.all = 0x9555AAAA;
            ECanaMboxes.MBOX27.MSGID.all = 0x9555AAAB;
            ECanaMboxes.MBOX28.MSGID.all = 0x9555AAAC;
            ECanaMboxes.MBOX29.MSGID.all = 0x9555AAAD;
            ECanaMboxes.MBOX30.MSGID.all = 0x9555AAAE;
            ECanaMboxes.MBOX31.MSGID.all = 0x9555AAAF;
            //配置郵箱0~15作為發送郵箱,16~31作為接收郵箱
            //因為在這里寫操作是針對整個寄存器而不是某一位,所以不需要映射寄存器組
            ECanaRegs.CANMD.all = 0xFFFF0000;
            //使能所有的郵箱
            ECanaRegs.CANME.all = 0xFFFFFFFF;
            //設置每次發送和接收數據為8位格式    
            ECanaMboxes.MBOX0.MSGCTRL.bit.DLC = 8;
            ECanaMboxes.MBOX1.MSGCTRL.bit.DLC = 8;
            ECanaMboxes.MBOX2.MSGCTRL.bit.DLC = 8;
            ECanaMboxes.MBOX3.MSGCTRL.bit.DLC = 8;
            ECanaMboxes.MBOX4.MSGCTRL.bit.DLC = 8;
            ECanaMboxes.MBOX5.MSGCTRL.bit.DLC = 8;
            ECanaMboxes.MBOX6.MSGCTRL.bit.DLC = 8;
            ECanaMboxes.MBOX7.MSGCTRL.bit.DLC = 8;
            ECanaMboxes.MBOX8.MSGCTRL.bit.DLC = 8;
            ECanaMboxes.MBOX9.MSGCTRL.bit.DLC = 8;
            ECanaMboxes.MBOX10.MSGCTRL.bit.DLC = 8;
            ECanaMboxes.MBOX11.MSGCTRL.bit.DLC = 8;
            ECanaMboxes.MBOX12.MSGCTRL.bit.DLC = 8;
            ECanaMboxes.MBOX13.MSGCTRL.bit.DLC = 8;
            ECanaMboxes.MBOX14.MSGCTRL.bit.DLC = 8;
            ECanaMboxes.MBOX15.MSGCTRL.bit.DLC = 8;
            //向發送郵箱MBOX0~15中寫入要發送的數據
            ECanaMboxes.MBOX0.MDL.all = 0x9555AAA0;
            ECanaMboxes.MBOX0.MDH.all = 0x89ABCDEF;
            ECanaMboxes.MBOX1.MDL.all = 0x9555AAA1;
            ECanaMboxes.MBOX1.MDH.all = 0x89ABCDEF;
            ECanaMboxes.MBOX2.MDL.all = 0x9555AAA2;
            ECanaMboxes.MBOX2.MDH.all = 0x89ABCDEF;
            ECanaMboxes.MBOX3.MDL.all = 0x9555AAA3;
            ECanaMboxes.MBOX3.MDH.all = 0x89ABCDEF;
            ECanaMboxes.MBOX4.MDL.all = 0x9555AAA4;
            ECanaMboxes.MBOX4.MDH.all = 0x89ABCDEF;
            ECanaMboxes.MBOX5.MDL.all = 0x9555AAA5;
            ECanaMboxes.MBOX5.MDH.all = 0x89ABCDEF;
            ECanaMboxes.MBOX6.MDL.all = 0x9555AAA6;
            ECanaMboxes.MBOX6.MDH.all = 0x89ABCDEF;
            ECanaMboxes.MBOX7.MDL.all = 0x9555AAA7;
            ECanaMboxes.MBOX7.MDH.all = 0x89ABCDEF;
            ECanaMboxes.MBOX8.MDL.all = 0x9555AAA8;
            ECanaMboxes.MBOX8.MDH.all = 0x89ABCDEF;
            ECanaMboxes.MBOX9.MDL.all = 0x9555AAA9;
            ECanaMboxes.MBOX9.MDH.all = 0x89ABCDEF;
            ECanaMboxes.MBOX10.MDL.all = 0x9555AAAA;
            ECanaMboxes.MBOX10.MDH.all = 0x89ABCDEF;
            ECanaMboxes.MBOX11.MDL.all = 0x9555AAAB;
            ECanaMboxes.MBOX11.MDH.all = 0x89ABCDEF;
            ECanaMboxes.MBOX12.MDL.all = 0x9555AAAC;
            ECanaMboxes.MBOX12.MDH.all = 0x89ABCDEF;
            ECanaMboxes.MBOX13.MDL.all = 0x9555AAAD;
            ECanaMboxes.MBOX13.MDH.all = 0x89ABCDEF;
            ECanaMboxes.MBOX14.MDL.all = 0x9555AAAE;
            ECanaMboxes.MBOX14.MDH.all = 0x89ABCDEF;
            ECanaMboxes.MBOX15.MDL.all = 0x9555AAAF;
            ECanaMboxes.MBOX15.MDH.all = 0x89ABCDEF;
            //配置eCAN為自測試模式,并使能CAN模塊為eCAN模式
            EALLOW;
            ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
            ECanaShadow.CANMC.bit.STM = 1;         //配置自測試模式
            ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
            EDIS;
            //開始發送數據
            while(1)
            {
                ECanaRegs.CANTRS.all = 0x0000FFFF; //設置TRS位,全部郵箱都發送數據
                while(ECanaRegs.CANTA.all != 0x0000FFFF ) {}  
          //等待所有的 TAn 置位,此時說明所有郵箱數據都已經發送
                ECanaRegs.CANTA.all = 0x0000FFFF;   //清除發送位
                MessageReceivedCount++;
                //從接收郵箱中讀取數據,并檢驗數據
                for(j=0; j<16; j++)                 //讀取并檢驗 16 個接收郵箱數據
                {
                  mailbox_read(j);                   //函數功能為讀取郵箱ID及數據
                  mailbox_check(TestMbox1,TestMbox2,TestMbox3); //檢測接收的數據
                }
            }
        }
        //該函數功能為讀取郵箱 ID 及數據
        void mailbox_read(int16 MBXnbr)
        {
            volatile struct MBOX *Mailbox;
            Mailbox = &ECanaMboxes.MBOX0 + MBXnbr;
            TestMbox1 = Mailbox->MDL.all;   //郵箱數據低字節為0x9555AAAn(n是郵箱號)
            TestMbox2 = Mailbox->MDH.all;   //郵箱數據高字節為0x89ABCDEF
            TestMbox3 = Mailbox->MSGID.all; //郵箱ID為0x9555AAAn(n是郵箱號)
        //測試程序
        void mailbox_check(int32 T1, int32 T2, int32 T3)
        {
            if((T1 != T3) || ( T2 != 0x89ABCDEF))
            {
                ErrorCount++;
            }
        }
         
        關閉窗口
        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮