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

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

    • 分享

      DND開(kāi)發(fā)論壇

       瘋狂金屬 2011-05-03

      以文本方式查看主題

      - DND開(kāi)發(fā)論壇 (http://www./cgi-bin/forum/leoboard.cgi)
      -- (http://www./cgi-bin/forum/forums.cgi?forum=2)
      --- DSP CAN控制器是不是和獨(dú)立控制器不一樣? (http://www./cgi-bin/forum/forums.cgi?forum=2&topic=595)


      -- 作者: ccforever
      -- 發(fā)布時(shí)間: 2008/07/08 10:41am

      上次winshton大哥說(shuō),作為接受節(jié)點(diǎn),如果其標(biāo)識(shí)符做了filter&mask,那么當(dāng)從節(jié)點(diǎn)發(fā)送消息時(shí),接受節(jié)點(diǎn)通過(guò)讀自己的標(biāo)識(shí)符,可以知道從節(jié)點(diǎn)的標(biāo)識(shí)符。
      如主機(jī)設(shè)置成可接受任意節(jié)點(diǎn)(全部filter&mask)的消息,當(dāng)從節(jié)點(diǎn)以標(biāo)識(shí)符1000 0000 010 發(fā)過(guò)來(lái)消息時(shí),主機(jī)讀自己的11位標(biāo)示符,可以讀到1000 0000 010。
       
        可我在DSP 280X里面用mailbox郵箱做實(shí)驗(yàn)室不是這樣的情況:
        郵箱0 做發(fā)送郵箱,標(biāo)識(shí)符設(shè)置成:0000 0000 001  發(fā)送數(shù)據(jù)01H
        郵箱13(任意選的,做接收郵箱)標(biāo)識(shí)符初始化設(shè)置成:1111 1111 111。數(shù)據(jù)初始化為0x0H
      然后設(shè)置郵箱13 的驗(yàn)收濾波全部屏蔽,即可以接受任意11位標(biāo)示符發(fā)過(guò)來(lái)的消息,結(jié)果是數(shù)據(jù)成功接收,但接受成功后再讀郵箱13的標(biāo)識(shí)符,還是1111 1111 111。沒(méi)有變成0000 0000 001.
        我很郁悶,根本標(biāo)識(shí)符不變,這樣的話,郵箱13怎么知道01H是郵箱0發(fā)過(guò)來(lái)的消息呢? 也沒(méi)辦法像兩位版主教我的那樣,通過(guò)讀標(biāo)識(shí)符來(lái)識(shí)別功能碼+地址碼了
       


      -- 作者: yuanfang
      -- 發(fā)布時(shí)間: 2008/07/08 10:44am

      你能否確定是郵箱13接收了報(bào)文??

      比如郵箱1,郵箱2在default的情況下是不是也是接收模式??是不是數(shù)據(jù)成功接收後放到了郵箱1中,你卻一直去讀郵箱13??

      你的CAN接收是中斷還是查詢方式??如果是中斷,就知道是哪一個(gè)mail box發(fā)生了接收中斷,如果是查詢,也應(yīng)該知道是查到哪一個(gè)mailbox時(shí)有新數(shù)據(jù)。


      -- 作者: ccforever
      -- 發(fā)布時(shí)間: 2008/07/08 11:21am


      遠(yuǎn)方大哥:
      我只使能了郵箱0 和郵箱13
      其他的我都關(guān)閉了,
      另外,我使用的是中斷方式,也只有mail0 和mailbox13使能了中斷,分別是發(fā)送中斷和接受中斷,切用的不同的中斷響應(yīng)線。我能判斷是只有mail13發(fā)生了接受中斷


      -- 作者: ccforever
      -- 發(fā)布時(shí)間: 2008/07/08 11:23am

      另外,我還做了試驗(yàn),讓郵箱0發(fā)送成功一次產(chǎn)生一次中斷,同時(shí)發(fā)送數(shù)據(jù)+1,這樣,接受數(shù)據(jù)也會(huì)+1.
      試驗(yàn)結(jié)果一樣 數(shù)據(jù)是接收到了,但I(xiàn)D沒(méi)有變呢。呵呵,


      -- 作者: ccforever
      -- 發(fā)布時(shí)間: 2008/07/08 11:25am

      所以才比較郁悶,這里只有我一個(gè)人搞這個(gè),又是新手,所以問(wèn)題較多,請(qǐng)版主多多包涵。


      -- 作者: ccforever
      -- 發(fā)布時(shí)間: 2008/07/08 11:51am

      下面是我的代碼,調(diào)試是成功的,沒(méi)有語(yǔ)法錯(cuò)誤,有詳細(xì)的注釋,反正實(shí)際情況就跟我描述的一樣;
      void InitECana(void)// Initialize eCAN-A module
      {EALLOW;// EALLOW enables access to protected bits
      /* Configure eCAN RX and TX pins for eCAN transmissions using eCAN regs*/  
         ECanaRegs.CANTIOC.bit.TXFUNC = 1;
         ECanaRegs.CANRIOC.bit.RXFUNC = 1;  

      ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
      ECanaShadow.CANMC.bit.SCB = 1;//擴(kuò)展幀模式
      ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;

         ECanaMboxes.MBOX0.MSGCTRL.all = 0x00000000;//初始化
         ECanaMboxes.MBOX17.MSGCTRL.all = 0x00000000;

      //中斷設(shè)置
      ECanaRegs.CANMIM.all=0x00020001;//允許Mail17和Mail0在接收、發(fā)送到信息時(shí)產(chǎn)生中斷
      ECanaRegs.CANMIL.all=0x00000001;//郵箱0在發(fā)送成功后在ECan1INT上產(chǎn)生中斷,郵箱17在接收成功后在ECan0INT上產(chǎn)生中斷

         ECanaShadow.CANGIM.all = 0;
         ECanaShadow.CANGIM.bit.I0EN = 1;   // Enable eCAN1INT or eCAN0INT
      ECanaShadow.CANGIM.bit.I1EN = 1;   // Enable eCAN1INT or eCAN0INT
         ECanaRegs.CANGIM.all = ECanaShadow.CANGIM.all;
       ECanaRegs.CANMD.all=0xFFFF0000;//郵箱屬性設(shè)置,1為接收郵箱,0為發(fā)送郵箱
      /* Disable all Mailboxes  */
      ECanaRegs.CANME.all = 0;// Required before writing the MSGIDs
         
      ECanaLAMRegs.LAM17.all=0x9FFFFFFF;//LAMI=1,LAM[28~0]全部為1,表示全部屏蔽


         EDIS;
      }

      void SelfTest(void)   //實(shí)際測(cè)試函數(shù)
      {
         ECanaMboxes.MBOX0.MSGID.all=0x9555AAA0;
         ECanaMboxes.MBOX17.MSGID.all=0xD5550001;
         ECanaMboxes.MBOX17.MDL.all=0;
         ECanaMboxes.MBOX17.MDH.all=0;

         ECanaMboxes.MBOX0.MSGCTRL.bit.DLC=8;
         ECanaMboxes.MBOX17.MSGCTRL.bit.DLC=8;

          ECanaMboxes.MBOX0.MDL.all = 0x00000001;
          ECanaMboxes.MBOX0.MDH.all = 0x00000000;
      EALLOW;

      ECanaRegs.CANME.all=0x00020001;//允許郵箱0和郵箱17使用

      ECanaRegs.CANMC.bit.STM=1;   //設(shè)置CAN為自測(cè)試模式

      EDIS;

      ECanaLAMRegs.LAM17.all=0x9FFFFFFF;//LAMI=1,LAM[28~0]全部為1,表示全部屏蔽

      for(i=0;i<1000;i++)//循環(huán)做試驗(yàn)
      {  
         
       if(ECanaRegs.CANRMP.all==0x00020000)
      {

        ECanaRegs.CANRMP.all=0x00020000;
      }

           ECanaRegs.CANTA.all = 0xFFFFFFFF;

           ECanaRegs.CANTRS.all = 0x00000001;                      // 允許郵箱0發(fā)送
         
           while(ECanaRegs.CANTA.all != 0x00000001 ) {}            // 等待發(fā)送成功
           ECanaRegs.CANTA.all = 0x00000001;                      // 發(fā)送成功后 復(fù)位 發(fā)送成功標(biāo)志
           loopcount++;

         
         
      }
         
      interrupt void ECana_receive_isr(void)//接收中斷函數(shù)
      {
       

       ReceiveID=ECanaMboxes.MBOX17.MSGID.all;//讀取接收郵箱ID

       ECanaRegs.CANRMP.bit.RMP17=1;//復(fù)位接收成功標(biāo)示,為下一次接收做準(zhǔn)備
       Flagreceive++;     //中斷一次標(biāo)志加1
       
       PieCtrlRegs.PIEACK.all |= PIEACK_GROUP9;    // Issue PIE ACK

       }


      interrupt void ECana_send_isr(void)//發(fā)送中斷函數(shù)
      {
       
       Flagsend++;  //中斷一次標(biāo)志加1
       ECanaMboxes.MBOX0.MDL.all++;//同時(shí)發(fā)送數(shù)據(jù)加1
       
       PieCtrlRegs.PIEACK.all |= PIEACK_GROUP9;    // Issue PIE ACK

      }



      -- 作者: ccforever
      -- 發(fā)布時(shí)間: 2008/07/08 11:55am

      哦,對(duì)了,yuanfang大哥:我讀的是17號(hào)郵箱,上面說(shuō)舉例時(shí),我說(shuō)的是13號(hào)郵箱,不過(guò),沒(méi)有什么區(qū)別,我也只使能了這兩個(gè)郵箱


      -- 作者: ccforever
      -- 發(fā)布時(shí)間: 2008/07/08 02:29pm

      我剛才看了devicenet上一個(gè)叫youngerreader的網(wǎng)友發(fā)的那篇關(guān)于2407 CAN功能的文章,知道了其實(shí)DSP的CAN 的郵箱的標(biāo)識(shí)符在啟用濾波的情況下是具備隨發(fā)送節(jié)點(diǎn)的標(biāo)識(shí)符而改變的功能的
       可能是我哪里沒(méi)有設(shè)置好,但該設(shè)置的我都設(shè)置了?。?


      -- 作者: winshton
      -- 發(fā)布時(shí)間: 2008/07/08 02:33pm

      看不清楚濾波寄存器和屏蔽寄存器都是用什么表示的,你貼出來(lái)的像這樣ECanaLAMRegs.LAM17.all 的變量,我們沒(méi)用過(guò)不知道是指什么寄存器。
      從程序結(jié)構(gòu)上看倒是沒(méi)什么問(wèn)題。


      -- 作者: ccforever
      -- 發(fā)布時(shí)間: 2008/07/08 03:55pm

      按照 DSP的寄存器定義:LAM17.31=1:表示接受信息是標(biāo)準(zhǔn)格式或者擴(kuò)展格式,可以使用濾波
                             LAM17.28~0=1:標(biāo)示屏蔽濾波,即無(wú)論是1還是0 都可以接受,如果LAM17.18~0=0;標(biāo)示必須與接受郵箱的ID嚴(yán)格匹配才行。


      -- 作者: winshton
      -- 發(fā)布時(shí)間: 2008/07/08 04:00pm

      我覺(jué)得還是軟件設(shè)置上的問(wèn)題,可以到網(wǎng)上找一找CAN接口的測(cè)試代碼來(lái)試試,比較一下看看設(shè)置有什么不同


      -- 作者: ccforever
      -- 發(fā)布時(shí)間: 2008/07/08 04:39pm

      a !!
      我突然覺(jué)得可能是我一直在 自測(cè)試模式下 做的試驗(yàn),結(jié)果不成功。有沒(méi)有這個(gè)可能呢?可惜我沒(méi)有兩塊硬件做實(shí)驗(yàn),不然可以驗(yàn)證一下

      因?yàn)樵贒SP CAN 文檔里有這樣一句話:
      “在自測(cè)試工作模式下,CAN模塊產(chǎn)生自己的應(yīng)答信號(hào),不連接到總線上也可以工作,消息不發(fā)送,但讀取回來(lái)存放在相應(yīng)的郵箱里,接收到的消息的MSGID不保存在MBR”
       因?yàn)镸SGID剛好是包含消息ID的寄存器,這樣的話,就不保存了


      -- 作者: ccforever
      -- 發(fā)布時(shí)間: 2008/07/08 06:56pm

      但是我不能確認(rèn)一定就是這里出現(xiàn)了問(wèn)題,我沒(méi)有設(shè)備可以試。
      如果真是這里有問(wèn)題就好了,今天打電話聯(lián)系TI在中國(guó)的技術(shù)支持,那里的幾個(gè)工程師一口咬定說(shuō)DSP 里面CAN不能支持上述功能,即不能獲取收到消息的ID,一旦每個(gè)郵箱的ID設(shè)置好,即使使用了屏蔽濾波,也是只能收消息,但郵箱本身的ID不會(huì)改變。
         真把我郁悶得要死,我在想,如果DSP里面的CAN模塊不能支持這些功能,不能支持對(duì)標(biāo)識(shí)符的解析,那CANopen 這些上層協(xié)議在DSP面前也無(wú)能為力了。


      -- 作者: winshton
      -- 發(fā)布時(shí)間: 2008/07/09 08:01am

      看芯片手冊(cè)上怎么說(shuō),不支持接收ID獲取還是符合CAN協(xié)議標(biāo)準(zhǔn)的CAN控制器么?TI的芯片設(shè)計(jì)師不會(huì)腦殘到這種地步吧


      -- 作者: ccforever
      -- 發(fā)布時(shí)間: 2008/07/09 09:02am

      的確他們這樣跟我說(shuō),我還專門(mén)找了幾個(gè)不同的人問(wèn),說(shuō)不行,要發(fā)送廣播信息,就要一個(gè)一個(gè)的發(fā),不就是廣播了嗎?有一個(gè)這樣說(shuō)。
      恩,搞得我真是……。
      過(guò)了一會(huì)另一個(gè)打電話過(guò)來(lái)說(shuō),他說(shuō)他做實(shí)驗(yàn)了,不行。我說(shuō)網(wǎng)上都有人用24系列的做成了,都那樣用了,他說(shuō)不知道,他做實(shí)驗(yàn)的結(jié)果是不行。
      后來(lái),我問(wèn)是不是自測(cè)試模式下不行,他說(shuō)不清楚,他之前也是在自測(cè)試模式下做的,要另做實(shí)驗(yàn)才知道,再給我電話。
        芯片上說(shuō)明了支持CAN2.0A&B協(xié)議的標(biāo)準(zhǔn)CAN控制器的。是不是只要是支持這協(xié)議就必定具備這功能?winshton大哥?
        芯片手冊(cè)上沒(méi)有說(shuō)不支持接受ID獲取,當(dāng)然也沒(méi)有明說(shuō)支持。
        只說(shuō)自測(cè)試模式下,MSGID不保存到MBR中,但他也沒(méi)說(shuō)MBR是什么東西,整個(gè)手冊(cè)里就出現(xiàn)MBR一次。


      -- 作者: winshton
      -- 發(fā)布時(shí)間: 2008/07/09 01:49pm

      那就在正常模式下試試,兩個(gè)CAN節(jié)點(diǎn)對(duì)發(fā),看看什么結(jié)果.
      MBR 有可能是 Memory buffer register   緩沖區(qū)的意思


      -- 作者: yuanfang
      -- 發(fā)布時(shí)間: 2008/07/09 06:24pm

      不會(huì)吧,收到了報(bào)文,但卻沒(méi)有標(biāo)識(shí)符?我覺(jué)得是TI的這個(gè)工程師對(duì)CAN的功能不太熟悉,總的感覺(jué)不太可能有這樣的設(shè)計(jì)。
      我知道Infineon的做法是這樣的,即只有一個(gè)mask寄存器,一般的還有一個(gè)專門(mén)的Filter寄存器,如果Mask被設(shè)置了,則要看Filter寄存器的值來(lái)比對(duì)。

      但I(xiàn)nfineon的CAN就是只設(shè)置Mask寄存器,而Filter寄存器設(shè)置在接收緩沖區(qū)的ID裡面,如果每個(gè)位都被設(shè)置為要比對(duì),那就是接收緩沖區(qū)的ID永遠(yuǎn)也不會(huì)變,因?yàn)椴灰粯拥腎D進(jìn)不來(lái),進(jìn)來(lái)了就是一樣的,但如果不是每個(gè)位都mask,那就是變化。


      -- 作者: ccforever
      -- 發(fā)布時(shí)間: 2008/07/10 10:20am

      是的,后來(lái)我收到了TI的一封郵件,說(shuō)正常模式下可以實(shí)現(xiàn)接受ID隨發(fā)送報(bào)文ID而改變的功能。
       呵呵,哎,終于弄清楚了……
      謝謝版主

       


      © 版權(quán)所有: DNDev.COM  版本: LB5000MX 2.00

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(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)論公約

        類似文章 更多