音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

求助ARM2119的CAN中斷程序

作者:bendanguo 欄目:ARM技術(shù)
求助ARM2119的CAN中斷程序


小弟用ARM2119想實現(xiàn)CAN2口發(fā)送信息,CAN1中斷接收這一簡單的功能,編了下面的程序,可是調(diào)試時發(fā)現(xiàn)無法進(jìn)入接收中斷,很是著急,不知問題出在哪里,請各位大俠指點(diǎn)!小弟感激不盡!
程序如下:
/********************************************************************************************************/
#include  "config.h"
#define    BPS_125K        (0 << 23)|(1 << 20)|(3 << 16)|(0 << 14)| 31
#define    BPS_250K        (0 << 23)|(1 << 20)|(3 << 16)|(0 << 14)| 15
#define    BPS_500K        (0 << 23)|(1 << 20)|(3 << 16)|(0 << 14)| 7
#define    CAN1 0
#define    CAN2 1

/****************************************************************************
* 名稱:PinSet(uint8 CanNum)
* 功能:實現(xiàn)CAN接口硬件連接。
* 入口參數(shù):CanNum
* 出口參數(shù):無
****************************************************************************/

void PinSet(uint8 CanNum)
{
  PCONP |=~((uint32)0x01<<(13+CanNum));
  SWITCH(CanNum)
  {
case  CAN1:
  PINSEL1&=~((uint32)0x03<<18);
  PINSEL1|=((uint32)0x01<<18);
  break;
case  CAN2:
  PINSEL1&=~((uint32)0x0F<<14);
  PINSEL1|=((uint32)0x05<<14);
  break;
default:
break;
  }
}

/****************************************************************************
* 名稱:SetBaud(uint8 CanNum)
* 功能:設(shè)置CAN通訊波特率。
* 入口參數(shù):CanNum
* 出口參數(shù):無
****************************************************************************/
void SetBaud(uint8 CanNum)
{

  SWITCH(CanNum)
  {
case  CAN1:
  CAN1BTR=BPS_500K;
  break;
case  CAN2:
  CAN2BTR=BPS_500K;
  break;
default:
break;
  }

}

/****************************************************************************
* 名稱:SetWarmVal(uint8 CanNum)
* 功能:設(shè)置錯誤寄存器值。
* 入口參數(shù):CanNum
* 出口參數(shù):無
****************************************************************************/
void SetWarmVal(uint8 CanNum)
{

  SWITCH(CanNum)
  {
case  CAN1:
  CAN1EWL=0x60;
  break;
case  CAN2:
   CAN2EWL=0x60;
  break;
default:
break;
  }

}

/****************************************************************************
* 名稱:SetInterrupt(uint8 CanNum)
* 功能:設(shè)置CAN通訊中斷。
* 入口參數(shù):無
* 出口參數(shù):無
****************************************************************************/
void SetInterrupt(uint8 CanNum)
{

  SWITCH(CanNum)
  {
case  CAN1:
  CAN1IER=0x01;
  break;
case  CAN2:
   CAN2IER=0x01;
  break;
default:
break;
  }

}

/****************************************************************************
* 名稱:InitCAN(uint8 CanNum)
* 功能:初始化CAN控制器。
* 入口參數(shù):CanNum
* 出口參數(shù):無
****************************************************************************/
void InitCAN(uint8 CanNum)
{
  
  PinSet(CanNum);
  SWITCH(CanNum)
  {
case  CAN1:
  CAN1MOD=CAN1MOD|0x01;
  SetWarmVal(CAN1);
  SetBaud(CAN1);
  SetInterrupt(CAN1);
  CAN1MOD=CAN1MOD&0xFE;
  break;
case  CAN2:
  CAN2MOD=CAN2MOD|0x01;
  SetWarmVal(CAN2);
  SetBaud(CAN2);
  SetInterrupt(CAN2);
  CAN2MOD=CAN2MOD&0xFE;
  break;
default:
  break;
  }

}


/****************************************************************************
* 名稱:CAN1IntPrg(void)
* 功能:CAN1口接收中斷程序
* 入口參數(shù):無
* 出口參數(shù):無
****************************************************************************/
void __irq CANIntPrg(void)
{
  uint32 dataA,dataB,dataID;
  unsigned LONG TEMP;
   TEMP=CAN1ICR;
   dataID=CAN1RID;
   dataA=CAN1RDA;
   dataB=CAN1RDB;
   CAN1CMR=CAN1CMR|0x04;          
   VICVectAddr=0x00;
   
}

/****************************************************************************
* 名稱:CAN2SendMSG()
* 功能:CAN2口發(fā)送信息。
* 入口參數(shù):msg
* 出口參數(shù):無
****************************************************************************/
void CAN2SendMSG()
{   uint32 index,buf[8];
    uint8 i;
         for (i=0;i<8;i++)
      {
       buf[i]=9;       
      }      
    CAN2TFI1=0<<31|0<<30|8<<16|0x00;        //標(biāo)準(zhǔn)數(shù)據(jù)幀,8位數(shù)據(jù)
    CAN2TID1=(3<<8)|0x02;    
    CAN2TDA1=(buf[0])|(buf[1]<<8)|(buf[2]<<16)|(buf[3]<<24);
    CAN2TDB1=buf[4]|buf[5]<<8|buf[6]<<16|buf[7]<<24;
    CAN2CMR=1<<5|0x01;                    //正常發(fā)送

}

/****************************************************************************
* 名稱:main()
* 功能:實現(xiàn)系統(tǒng)通訊及控制功能。
* 入口參數(shù):無
* 出口參數(shù):無
****************************************************************************/
int main (void)
{  unsigned LONG TEMP;
   TargetInit();                            // 初始化系統(tǒng)時鐘                          
   InitCAN(CAN1);                           // 初始化CAN1口
   InitCAN(CAN2);                           // 初始化CAN2口
   VICDefVectAddr=(uint32)CANIntPrg;
   VICIntEnable|=(1<<19)|(1<<20)|(1<<21)|(1<<22)|(1<<23);
   CAN2SendMSG();                           //CAN2口發(fā)送信息
   while(1);                                //等待CAN1口接收中斷
}



/******
2樓: >>參與討論
sen_81
你是用了《基礎(chǔ)與實戰(zhàn)》上的例子吧?
你換個工程模板試試。
我用光盤上project MODULE_new里面模板,然后將CAN-232添加進(jìn)去,也是進(jìn)不了中斷的;然后我后來比較了SRC的內(nèi)容,用了project MODULE目錄里的模板,正常進(jìn)中斷。

3樓: >>參與討論
bendanguo
求助ARM2119的CAN中斷程序
樓上的老師能不能把您說的那個模板給我發(fā)一份啊!我的郵箱是bendanguo@126.com,我在光盤里面沒有找到,萬分感謝!

4樓: >>參與討論
sen_81
在光盤的\EXAMPLES目錄下
 
5樓: >>參與討論
ajing429
我也求助過這個問題
如果你使用的工程模板,那么需要在startup.s中打開中斷,下面是startup.s中

的代碼:

;設(shè)置系統(tǒng)模式堆棧
        MSR     CPSR_c, #0xdf
        LDR     SP, =StackUsr

將0xdf改為0x5f


6樓: >>參與討論
ZorroCN
禁止扔板兒磚
另外還有一個問題,就是如果已清零I位,這里
VICIntEnable|=(1<<19)|(1<<20)|(1<<21)|(1<<22)|(1<<23);
也就是說,CAN的所有接收,發(fā)送,以及其他異常都會引發(fā)中斷,也就是說,CAN2發(fā)送的同時,2119也會進(jìn)入你所定義的非向量中斷,也就是說程序雖然進(jìn)入了你的中斷函數(shù),但是引起這個中斷的卻不是你所希望的CAN1的接收中斷,而是CAN2的發(fā)送中斷。
所以這里應(yīng)該將CAN2發(fā)送中斷屏蔽掉

7樓: >>參與討論
bendanguo
救命啊!
首先謝謝樓上各位的熱心幫助!可是小弟按照你們說的都試過了,還是不行,CAN1ICR能夠置位,可是進(jìn)不了中斷程序,還請各位指點(diǎn)!現(xiàn)在真是心急如焚阿!
謝謝了!

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
大家又碰過這種情況嗎?(ads1.2)
請問ZLG用你們的IIC程序怎樣進(jìn)行指定單字節(jié)的讀寫?
是不是不能把LPC2220片外flash程序搬到片內(nèi)運(yùn)行?
sst39vf1601中的1代表什么?
再問一個關(guān)于IAP的問題
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號