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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3228|回復: 1
收起左側

AT91+MCP2515驅動C語言程序

[復制鏈接]
ID:900853 發表于 2021-4-5 13:24 | 顯示全部樓層 |閱讀模式
具體詳見附件
51hei.png

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


  5. /*****************************************************************************
  6. 函數功能:MCP2515初始化
  7. 入口參數:無
  8. 返    回:無
  9. 備    注:無
  10. ******************************************************************************/
  11. void MCP2515_Init()
  12. {       
  13.         //復位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.         //配置相關引腳
  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.         //設置波特率(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.         //復位MCP2515的錯誤標志寄存器
  33.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->EFLG)), EFLG_INIT_VAL, ARG_UNUSED);
  34.        
  35.         //配置TXBnCTRL(發送緩沖器控制寄存器)
  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. 函數功能:MCP2515相關命令操作
  58. 入口參數:cmd: 對MCP2515的相關命令; add: 地址信息; arg1,arg2: 命令的相關參數
  59. 返    回:若命令要求有返回值,則返回相應的數據;如果沒有返回值的,則返回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. 函數功能:MCP2515發送一幀數據
  101. 入口參數:TXnBuf: 選擇發送緩沖器; IDType: 標準幀或者擴展幀選擇; id: 發送數據的ID號;
  102.          DataLen: 發送的數據長度; SendData: 指向要發送數據的首地址
  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.         //發送幀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.         //判別數據長度,若數據長度大于8,則取前8個數據
  145.         if( DataLen>8 )
  146.                 DataLen = 8;
  147.         //發送數據長度
  148.         MCP2515_SPI_CMD( MCP2515_CMD_WRITE, TO_UINT(&(MCP2515_MAP->TXB0DLC))+offset, DataLen, ARG_UNUSED );
  149.        
  150. ……………………

  151. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
51hei.png
所有資料51hei提供下載:
AT91_MCP2515_INT.rar (547.79 KB, 下載次數: 38)


評分

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

查看全部評分

回復

使用道具 舉報

ID:891089 發表于 2022-8-5 14:45 | 顯示全部樓層
大家注意了,這不是用keil編的,也不是51系列,比像我一樣 ,看走了眼
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线观看亚洲专区 | 精品久久久久久久久久久下田 | 国产精品久久国产精品 | 国产高清免费 | 久久久久久成人 | 国产精品久久久久久久久久久久 | 精品国产一区二区在线 | 国产午夜精品一区二区三区四区 | 国产精品二区三区 | 在线午夜电影 | 亚洲黄色在线免费观看 | 中文字幕亚洲视频 | 美女高潮网站 | 91偷拍精品一区二区三区 | 午夜精品影院 | 国产资源在线观看 | 中文字幕精品视频 | 国产一区二区在线观看视频 | 91免费高清 | 久久精品视频网站 | 欧美一级在线 | 国产精品毛片无码 | 亚洲欧美在线观看 | 精品视频一区二区三区在线观看 | 91中文在线观看 | 在线观看国产视频 | 国产精品久久久久久久久久久久久 | 日韩中文在线视频 | 亚洲人成人一区二区在线观看 | 国产一区二区三区色淫影院 | 久久久久久久一区 | 在线国产欧美 | 国产乱码高清区二区三区在线 | 色爱综合网 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 夜久久| 欧美福利 | 日本视频一区二区三区 | 深爱激情综合 | 国产精品视频一区二区三区 | 精品国产一区二区三区四区在线 |