乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      關(guān)于F2812的CAN問題

       瘋狂金屬 2011-02-16
      關(guān)于F2812的CAN問題

      2812得can說起來不復(fù)雜,但是我調(diào)了有一段時(shí)間。我是看了TI提供得例子程序,然后修改放在自己上面得,剛開始得時(shí)候不知道為什么總是不行,后來在網(wǎng)上搜,問別人,答案都不讓人滿意。于是我就放置了,過了一段時(shí)間再拿出來看,問題卻解決了。我很感嘆自己從中得經(jīng)歷,所以將自己開發(fā)得過程和得出得教訓(xùn)寫給大家,以供參考。
      我是先參考TI得例子程序來做得,TI得例子程序可以從網(wǎng)站上下載。can得例子程序是自測(cè)試得,而且程序是再ram里面跑得,修改和下載都比較方便,只是沒有用到濾波,中斷,標(biāo)準(zhǔn)模式,我想這些也是比較容易添加得,前提是要資料看會(huì)了,還有個(gè)辦法就是參考can得例子程序,這個(gè)文件名是《Programming Examples for the TMS320F281x eCAN.pdf》里面有不少例子。
      快說糊涂了,其實(shí)我想說明4個(gè)問題,1 怎么樣快速得得到自己得程序 2 can接收到發(fā)送方得id后怎么存放得。3 發(fā)送郵箱得數(shù)據(jù)修改 4 發(fā)送和接收中斷得使用
      1 怎么樣快速得到自己得程序
      參考ti提供得例子程序,先將他們得例子在自己得板子上跑起來,其實(shí)就是用自測(cè)試得方式來驗(yàn)證一下程序,也可以加些中斷,看看程序怎么跑得。這步?jīng)]問題得話,可以改寫程序,當(dāng)然還在自測(cè)試模式下先試,如果可以改寫后,在自測(cè)試模式下可以。那么就差不多了,將自測(cè)試模式改成正常模式,將程序移植到自己得程序中,拿一個(gè)經(jīng)過驗(yàn)證可以正常通訊得can模塊通訊,記得兩個(gè)can得速率要一致。當(dāng)然這個(gè)can模塊還要能讓你看到或者說能驗(yàn)證你得can是否通訊正常。例如can轉(zhuǎn)232接口得板子,如果收到你得can數(shù)據(jù)通過232口輸出到電腦上。
      我經(jīng)過驗(yàn)證,ti得例子基本上,只要將自測(cè)試模式改成正常模式,基本上就可以正常通訊。修改成那種方式,可以參看《Programming Examples for the TMS320F281x eCAN.pdf》
      2 can接收id得問題
      如果在不使用濾波得情況下,基本不用考慮id因?yàn)橹挥邢嗤琲d得才能接收。如果使用id濾波,那么對(duì)于增強(qiáng)性ecan模式來說,發(fā)送方得id就放在接收郵箱得id標(biāo)志符里面,這個(gè)我經(jīng)過程序驗(yàn)證了。這個(gè)問題我看了資料但是不很明白,程序驗(yàn)證后才明白得。另外,不知道怎么回事我在自測(cè)試模式下,發(fā)送方得id沒有放到接收郵箱得id標(biāo)志符里面。程序燒到flash中和外面得程序通訊才看到確實(shí)放在那里了。
      3 發(fā)送郵箱數(shù)據(jù)得修改
      cpu可以直接對(duì)發(fā)送郵箱得數(shù)據(jù)進(jìn)行修改,不需要對(duì)其他操作。這個(gè)2407不一樣。
      4 發(fā)送和接收得中斷
      如果發(fā)送和接收得中斷都開發(fā)后,在發(fā)送和接收成功后,都會(huì)有產(chǎn)生中斷,那么在中斷中一定要記得清除中斷標(biāo)志。
      順便給大家一個(gè)例子程序。
      void InitECan(void)
      {
      struct ECAN_REGS ECanaShadow;
      EALLOW;
      ECanaShadow.CANTIOC.all = ECanaRegs.CANTIOC.all;
      ECanaShadow.CANTIOC.bit.TXFUNC = 1;
      ECanaRegs.CANTIOC.all = ECanaShadow.CANRIOC.all;

      ECanaShadow.CANRIOC.all = ECanaRegs.CANRIOC.all;
      ECanaShadow.CANRIOC.bit.RXFUNC = 1;
      ECanaRegs.CANRIOC.all = ECanaShadow.CANRIOC.all;
      EDIS;

      ECanaRegs.CANME.all = 0;

      //客流的轉(zhuǎn)換模塊的發(fā)送ID 0x02 接收0x20
      /*發(fā)送郵箱的ID號(hào)*/
      ECanaMboxes.MBOX0.MSGID.all = 0x8000ffff;//發(fā)送0x01 擴(kuò)展

      /*接收郵箱的ID號(hào)*/
      ECanaMboxes.MBOX31.MSGID.all =0xC0000001;//接收0x01//使用屏蔽位

      ECanaLAMRegs.LAM31.all=0x1FFFFFFF;

      /*15 is TX,31 is RX*/
      ECanaRegs.CANMD.all = 0x80000000;

      /*32個(gè)郵箱使能*/
      ECanaRegs.CANME.all = 0x80000001;

      /*數(shù)據(jù)長度 8個(gè)BYTE*/
      ECanaMboxes.MBOX0.MSGCTRL.bit.DLC = 8;
      ECanaMboxes.MBOX31.MSGCTRL.bit.DLC = 8;

      ECanaMboxes.MBOX0.MSGCTRL.bit.TPL=0;
      ECanaMboxes.MBOX31.MSGCTRL.bit.TPL=0;
        
      /*沒有遠(yuǎn)方應(yīng)答幀被請(qǐng)求*/
      ECanaMboxes.MBOX0.MSGCTRL.bit.RTR = 0;
      ECanaMboxes.MBOX31.MSGCTRL.bit.RTR = 0;


      ECanaMboxes.MBOX0.MDL.all = 0x01234567;
      ECanaMboxes.MBOX0.MDH.all = 0x89ABCDEF;

      EALLOW;
      /*郵箱屏蔽使能*/
      ECanaRegs.CANMIM.all = 0xFFFFFFFF;
      ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
      ECanaShadow.CANMC.bit.CCR = 1;
      ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
      EDIS;

      do
      {
         ECanaShadow.CANES.all = ECanaRegs.CANES.all;
      }while(ECanaShadow.CANES.bit.CCE != 1);

      EALLOW;
      /*(BRPREG+1)=200   波特率50K*/
      ECanaShadow.CANBTC.bit.BRPREG = 199;
      ECanaShadow.CANBTC.bit.TSEG2REG = 2;
      ECanaShadow.CANBTC.bit.TSEG1REG = 10;

      ECanaRegs.CANBTC.all = ECanaShadow.CANBTC.all;

      ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
      ECanaShadow.CANMC.bit.CCR = 0;
      ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
      EDIS;

      do
      {
         ECanaShadow.CANES.all = ECanaRegs.CANES.all;
      }while(ECanaShadow.CANES.bit.CCE != 0);

      EALLOW;
      ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
      ECanaShadow.CANMC.bit.STM = 0;//自測(cè)試模式=1
      ECanaShadow.CANMC.bit.SCB = 1;//ecan模式=1
      ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
      EDIS;
      EALLOW;
      ECanaRegs.CANMIM.all = 0xFFFFffff;
      ECanaRegs.CANMIL.all = 0;
      ECanaRegs.CANGIF0.all = 0xFFFFFFFF;
      ECanaRegs.CANGIM.bit.I0EN = 1;
      ECanaRegs.CANGIM.bit.I1EN = 1;
      ECanaRegs.CANGIM.all = 0x3ff07;

      EDIS;

      PieCtrlRegs.PIEIER9.bit.INTx6 = 1;
      PieCtrlRegs.PIEIER9.bit.INTx5 = 1;
      }
      void can_send_operation()
      {
        
         static Uint16 count=0;
        
         ECanaRegs.CANTRS.all = 0x00000001;
        
         while(ECanaRegs.CANTA.all != 0x00000001);
        
         ECanaRegs.CANTA.all = 0x00000001; //清除中斷標(biāo)志
        
         delay_ms(2000);
        
         if(can_send_flag==1)
           {
             can_send_flag=0;
            
             senda_char_one('F');
             senda_char_one(ECanaMboxes.MBOX31.MSGID.all);
             senda_char_one((ECanaMboxes.MBOX31.MSGID.all)>>8);      
                   
           }
        
        
         count++;
            
         ECanaMboxes.MBOX0.MDL.all= count;
        
         if(count==0xffff)
           {
             count=0;
           }

      }
      interrupt void ECAN0INTA_ISR(void) // eCAN-A
      {
         
      PieCtrlRegs.PIEACK.bit.ACK9 = 1;

      senda_char_one('Y');

      if(ECanaRegs.CANRMP.bit.RMP31==1)
         {
           senda_char_one('S');
           can_send_flag=1;
          
           ECanaRegs.CANRMP.bit.RMP31=1;
         }
        
      EINT;
      }
      例子使用了濾波。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多