久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3194|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

AT91+MCP2515驅(qū)動C語言程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:900853 發(fā)表于 2021-4-5 13:24 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
具體詳見附件


單片機源程序如下:
  1. #include "AT91RM9200.h"
  2. #include "lib_AT91RM9200.h"
  3. #include "AT91_SPI.h"
  4. #include "MCP2515.h"


  5. /*****************************************************************************
  6. 函數(shù)功能:MCP2515初始化
  7. 入口參數(shù):無
  8. 返    回:無
  9. 備    注:無
  10. ******************************************************************************/
  11. void MCP2515_Init()
  12. {       
  13.         //復(fù)位MCP2515
  14.         MCP2515_SPI_CMD( MCP2515_CMD_RESET, ARG_UNUSED, ARG_UNUSED, ARG_UNUSED );
  15.        
  16.         //進入配置模式
  17.         MCP2515_SPI_CMD( MCP2515_CMD_BITMOD, TO_UINT(&(MCP2515_MAP->CANCTRL)), 0xe0, 0x80 );
  18.        
  19.         //配置相關(guān)引腳
  20.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->BFPCTRL)), BFPCTRL_INIT_VAL, ARG_UNUSED);
  21.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->TXRTSCTRL)), TXRTSCTRL_INIT_VAL, ARG_UNUSED);
  22.        
  23.         //設(shè)置波特率(125k)
  24.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->CNF1)), CNF1_INIT_VAL, ARG_UNUSED );
  25.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->CNF2)), CNF2_INIT_VAL, ARG_UNUSED );
  26.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->CNF3)), CNF3_INIT_VAL, ARG_UNUSED );
  27.        
  28.         //配置中斷
  29.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->CANINTE)), CANINTE_INIT_VAL, ARG_UNUSED );
  30.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->CANINTF)), CANINTF_INIT_VAL, ARG_UNUSED );
  31.        
  32.         //復(fù)位MCP2515的錯誤標(biāo)志寄存器
  33.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->EFLG)), EFLG_INIT_VAL, ARG_UNUSED);
  34.        
  35.         //配置TXBnCTRL(發(fā)送緩沖器控制寄存器)
  36.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->TXB0CTRL)), TXBnCTRL_INIT_VAL, ARG_UNUSED );
  37.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->TXB1CTRL)), TXBnCTRL_INIT_VAL, ARG_UNUSED );
  38.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->TXB2CTRL)), TXBnCTRL_INIT_VAL, ARG_UNUSED );
  39.        
  40.         //配置接收緩沖器控制寄存器
  41.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->RXB0CTRL)), RXB0CTRL_INIT_VAL, ARG_UNUSED );
  42.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->RXB1CTRL)), RXB1CTRL_INIT_VAL, ARG_UNUSED );
  43.        
  44.         //配置MCP2515的驗收濾波寄存器
  45.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->RXF0SIDL)), RXF0SIDL_INIT_VAL, ARG_UNUSED );
  46.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->RXF0SIDH)), RXF0SIDH_INIT_VAL, ARG_UNUSED );
  47.        
  48.         //配置MCP2515的驗收屏蔽寄存器
  49.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->RXM0SIDL)), RXM0SIDL_INIT_VAL, ARG_UNUSED );
  50.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->RXM0SIDH)), RXM0SIDH_INIT_VAL, ARG_UNUSED );
  51.        
  52.         //進入正常工作模式
  53.         MCP2515_SPI_CMD( MCP2515_CMD_BITMOD, TO_UINT(&(MCP2515_MAP->CANCTRL)), 0xe7, 0x04 );
  54. }
  55. /******************************** End of Function ****************************/


  56. /*****************************************************************************
  57. 函數(shù)功能:MCP2515相關(guān)命令操作
  58. 入口參數(shù):cmd: 對MCP2515的相關(guān)命令; add: 地址信息; arg1,arg2: 命令的相關(guān)參數(shù)
  59. 返    回:若命令要求有返回值,則返回相應(yīng)的數(shù)據(jù);如果沒有返回值的,則返回0
  60. 備    注:無
  61. ******************************************************************************/
  62. unsigned char MCP2515_SPI_CMD( unsigned char cmd, unsigned char addr, unsigned char arg1, unsigned char arg2 )
  63. {
  64.         unsigned char data = 0x00;
  65.        
  66.         switch(cmd)
  67.         {
  68.                 case MCP2515_CMD_RESET:
  69.                 AT91_SPI_SendByte( MCP2515_CMD_RESET );
  70.                 break;
  71.                
  72.                 case MCP2515_CMD_BITMOD:
  73.                 AT91_SPI_SendByte( MCP2515_CMD_BITMOD );
  74.                 AT91_SPI_SendByte( addr );
  75.                 AT91_SPI_SendByte( arg1 );
  76.                 AT91_SPI_SendByte( arg2 );
  77.                 break;
  78.                
  79.                 case MCP2515_CMD_WRITE:
  80.                 AT91_SPI_SendByte( MCP2515_CMD_WRITE );
  81.                 AT91_SPI_SendByte( addr );
  82.                 AT91_SPI_SendByte( arg1 );
  83.                 break;
  84.                
  85.                 case MCP2515_CMD_READ:
  86.                 AT91_SPI_SendByte( MCP2515_CMD_READ );
  87.                 AT91_SPI_SendByte( addr );
  88.                 data = AT91_SPI_ReadByte();
  89.                 break;
  90.                
  91.                 default:
  92.                 data = 0x00;
  93.                 break;
  94.         }
  95.         return data;
  96.                
  97. }
  98. /******************************** End of Function ****************************/


  99. /*****************************************************************************
  100. 函數(shù)功能:MCP2515發(fā)送一幀數(shù)據(jù)
  101. 入口參數(shù):TXnBuf: 選擇發(fā)送緩沖器; IDType: 標(biāo)準(zhǔn)幀或者擴展幀選擇; id: 發(fā)送數(shù)據(jù)的ID號;
  102.          DataLen: 發(fā)送的數(shù)據(jù)長度; SendData: 指向要發(fā)送數(shù)據(jù)的首地址
  103. 返    回:無
  104. 備    注:無
  105. ******************************************************************************/
  106. void MCP2515_TX( int TXnBuf, int IDType, unsigned int id, int DataLen, unsigned char *SendData )
  107. {
  108.         int i, offset;
  109.         unsigned flag;
  110.         unsigned char finish;
  111.        
  112.         switch( TXnBuf )
  113.         {
  114.                 case TXBUF0:
  115.                 offset = 0;
  116.                 flag = 0x04;
  117.                 break;
  118.                
  119.                 case TXBUF1:
  120.                 offset = 0x10;
  121.                 flag = 0x08;
  122.                 break;
  123.                
  124.                 case TXBUF2:
  125.                 offset = 0x20;
  126.                 flag = 0x10;
  127.                 break;
  128.         }
  129.        
  130.         //發(fā)送幀ID
  131.         if( IDType == STAND_ID )
  132.         {
  133.                 MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->TXB0SIDL))+offset, (id<<5)&0xe0, ARG_UNUSED );
  134.                 MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->TXB0SIDH))+offset, (id>>3)&0xff, ARG_UNUSED );
  135.         }
  136.         else if( IDType == EXT_ID )
  137.         {
  138.                 MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->TXB0EID0))+offset, id&0xff, ARG_UNUSED );
  139.                 MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->TXB0EID8))+offset, (id>>8)&0xff, ARG_UNUSED );
  140.                 MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->TXB0SIDL))+offset, ((id>>16)&0x03)|((id>>13)&0xe0)|0x08, ARG_UNUSED );
  141.                 MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->TXB0SIDH))+offset, (id>>21)&0xff, ARG_UNUSED );
  142.         }
  143.        
  144.         //判別數(shù)據(jù)長度,若數(shù)據(jù)長度大于8,則取前8個數(shù)據(jù)
  145.         if( DataLen>8 )
  146.                 DataLen = 8;
  147.         //發(fā)送數(shù)據(jù)長度
  148.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->TXB0DLC))+offset, DataLen, ARG_UNUSED );
  149.        
  150. ……………………

  151. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
AT91_MCP2515_INT.rar (547.79 KB, 下載次數(shù): 38)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:891089 發(fā)表于 2022-8-5 14:45 | 只看該作者
大家注意了,這不是用keil編的,也不是51系列,比像我一樣 ,看走了眼
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品美女久久久 | 亚洲色欲色欲www | 国产成人精品a视频一区www | 久久国产精品久久国产精品 | 亚洲综合网站 | 精品久久久久久国产 | 中文字幕欧美一区 | 粉嫩国产精品一区二区在线观看 | 在线播放国产一区二区三区 | 亚洲欧美一区二区三区国产精品 | 91看片网址 | 国产精品视频免费观看 | 亚洲欧美日韩精品久久亚洲区 | 伦理午夜电影免费观看 | 久久性色 | 亚洲综合激情 | 91n成人| 久久久久久成人 | 欧美日韩在线一区二区三区 | h视频在线观看免费 | 一区二区视频在线 | 日韩图区| 国产成人精品a视频 | 黄色网址在线免费观看 | 欧美激情在线一区二区三区 | 精品福利视频一区二区三区 | 成人二区| 亚洲人一区 | 69性欧美高清影院 | 韩日在线 | 亚洲成人精选 | 欧美激情国产日韩精品一区18 | 国产成在线观看免费视频 | 欧美小视频在线观看 | 麻豆精品一区二区三区在线观看 | 粉嫩一区二区三区性色av | 成人欧美一区二区三区视频xxx | 国产精品成人一区二区三区 | 天天射天天干 | 日韩综合在线播放 | 在线成人免费av |