亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mcp2515.c

?? 車用液晶儀表中s3c2410的can接口程序
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
#include <string.h>
#include "2410addr.h"
#include "2410lib.h"
#include "mcp2515.h"
#include "def.h"
#include "main.h"
#include "sp706.h"

////////////////////////////////////////////////////////////////////
/*--------------------SPI初始化--------------------*/
void MCP2515_SPI_Init(void)
{
    #ifdef MCP2515_SPI_0
    rGPECON=((rGPECON&0xf03fffff)|0xa800000);
    rGPGCON=((rGPGCON&0xffffffcf)|0x10); // Master(GPIO_Output)
    rGPGDAT|=0x4; // Activate nSS
    
    
    rSPPRE0=0x19;	//if PCLK=50Mhz,SPICLK=1Mhz
    rSPCON0=(0<<5)|(1<<4)|(1<<3)|(0<<2)|(0<<1)|(0<<0);//int,en-SCK,master,high,A,normal
    //rSPCON0=(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(0<<0);//int,en-SCK,master,low,B,normal
    rSPPIN0=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
    
    //rGPGDAT&=0xfffffffb; // Activate nSS 
    #else
    rGPGCON=((rGPGCON&0xffff03f3) | (0xf<<12) | (3<<10) | (1<<2));  //SPIMOSI1,SPIMISO1,SPICLK1
    rGPGDAT|=0x2; //EINT9 AS THE CS 
    
    rSPPRE1=0x19;	//if PCLK=50Mhz,SPICLK=1Mhz
    rSPCON1=(0<<5)|(1<<4)|(1<<3)|(0<<2)|(0<<1)|(0<<0);//int,en-SCK,master,high,A,normal
    //rSPCON0=(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(0<<0);//int,en-SCK,master,low,B,normal
    rSPPIN1=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
    #endif
}

/*--------------------SPI引腳設(shè)定--------------------*/
void MCP2515_SPI_PORT_SET(void)
{
	//rGPGCON=((rGPGCON&0xff3fffcf) | 0x10 | (1<<22));
	//rGPGDAT =  rGPGDAT & (0<<2) & (0<<11);
}

/*--------------------SPI發(fā)送單字節(jié)數(shù)據(jù)--------------------*/
void MCP2515_SPI_SendByte(unsigned char data)
{
	#ifdef MCP2515_SPI_0
	rSPTDAT0 = data;
	while(!(rSPSTA0&0x1));
	
	#else
	
	rSPTDAT1 = data;
	while(!(rSPSTA1&0x1));
	#endif
}

/*--------------------SPI接收單字節(jié)數(shù)據(jù)--------------------*/
unsigned char MCP2515_SPI_ReadByte(void)
{
    #ifdef MCP2515_SPI_0
    rSPTDAT0 = 0xff;
    while(!(rSPSTA0&0x1));
    return(rSPRDAT0);
    
    #else
    
    rSPTDAT1 = 0xff;
    while(!(rSPSTA1&0x1));
    return(rSPRDAT1);
    #endif
}

/*--------------------片選信號(hào)控制--------------------*/
void MCP2515_CS(unsigned char data)
{
    #ifdef MCP2515_SPI_0
    if(data == 0)
    	rGPGDAT = rGPGDAT & ~(1<<2);
    else
        rGPGDAT |= 0x4;
    
    #else
    if(data == 0)
    	rGPGDAT = rGPGDAT & ~(1<<1);
    else
        rGPGDAT |= 0x2;
    #endif
}

/*--------------------CAN復(fù)位操作--------------------*/
void CAN_Reset(void)            //reset CAN controler
{
	MCP2515_CS(0);
	
	MCP2515_SPI_SendByte(CMD_RESET);
	
	MCP2515_CS(1);
}

/*--------------------CAN單命令操作--------------------*/
void CAN_CMD(U8 cmd)            //can command control
{
	MCP2515_CS(0);
	
	MCP2515_SPI_SendByte(cmd);
	
	MCP2515_CS(1);
}

/*--------------------CAN讀單個(gè)寄存器數(shù)據(jù)--------------------*/
unsigned char CAN_Read(unsigned char reg_addr)     //read one byte data from register
{   unsigned char temp;
	MCP2515_CS(0);
	
	MCP2515_SPI_SendByte(CMD_READ);        //read command;
	MCP2515_SPI_SendByte(reg_addr);        //read reg address;
	
	temp=MCP2515_SPI_ReadByte();
	MCP2515_CS(1);
	return(temp);
	
	
}

/*--------------------CAN讀多個(gè)寄存器數(shù)據(jù)--------------------*/
void CAN_Read_Data(U8 reg_addr, U8* data, U8 d_long)
{
	int ii;
	
	MCP2515_CS(0);
	
	MCP2515_SPI_SendByte(CMD_READ);        //read command;
	MCP2515_SPI_SendByte(reg_addr);        //read reg address;
	
	for(ii=0;ii<d_long;ii++)
	{
		data[ii] = MCP2515_SPI_ReadByte();
	}
	
	MCP2515_CS(1);
}

/*--------------------讀狀態(tài)--------------------*/
unsigned char CAN_Read_State(void)
{   
	unsigned char temp;
    MCP2515_CS(0);
    
    MCP2515_SPI_SendByte(CMD_STATE);          //0xa0
    
    temp=MCP2515_SPI_ReadByte();
    MCP2515_CS(1);
    return (temp);
}

/*--------------------讀RX狀態(tài)--------------------*/
unsigned char CAN_Read_RXState(void)
{   
    unsigned char temp;
    MCP2515_CS(0);
    
    MCP2515_SPI_SendByte(CMD_RXSTATE);       //0xb0
    temp=MCP2515_SPI_ReadByte();
    MCP2515_CS(1);
    return (temp);
}

/*--------------------CAN寫單個(gè)寄存器數(shù)據(jù)--------------------*/
void CAN_Write(unsigned char reg_addr, unsigned char data)    //write one byte data to register
{
    MCP2515_CS(0);
    
    MCP2515_SPI_SendByte(CMD_WRITE);
    MCP2515_SPI_SendByte(reg_addr); 
    MCP2515_SPI_SendByte(data);
    
    MCP2515_CS(1);
}

/*--------------------CAN寫多個(gè)寄存器數(shù)據(jù)--------------------*/
void CAN_Write_Data(U8 reg_addr, U8* data, U8 d_long)
{
	int ii;
	
	MCP2515_CS(0);
	
	MCP2515_SPI_SendByte(CMD_WRITE);
    MCP2515_SPI_SendByte(reg_addr); 
    
    for(ii=0;ii<d_long;ii++)
    {
    	MCP2515_SPI_SendByte(data[ii]);
    }
	
	MCP2515_CS(1);
}

/*-------------------設(shè)置波特率---------------*/
void CAN_SetBaudRate(U8 cnf1, U8 cnf2, U8 cnf3)
{   
    //Baudrate Sync Prop Phase1 Phase2 BRP CNF1 CNF2 CNF3
    //10Kpbs   
    //25Kpbs  
    //50Kpbs     1    9     5     5     7    
    //125Kpbs    1    7     4     4     3  0x03 0x9e 0x03 
    //250Kpbs    1    7     4     4     1  0x01 0x9e 0x03
    //500Kps     1    7     4     4     0  0x00 0x9e 0x03
    //800Kps     1    5     2     2     0  0x00 0x8c 0x01
    //1000Kps    1    3     2     2     0  0x00 0x8a 0x01
    //
    //( 6 <= Tq <= 25 ) 
    //Tq = 1/((Sync+Prop+Phasel+Phase2)*Baudrate)   
    //Tq = 2*(BRP+1)/Fosc
    //BRP = Fosc/(2*Baudrate*(Sync+Prop+Phasel+Phase2))
    //Fosc = 16*10e6     
      
    CAN_Write(CNF1, cnf1); //CNF1
    CAN_Write(CNF2, cnf2); //CNF2
    CAN_Write(CNF3, cnf3); //CNF3   
}

/*-------------------位修改------------------*/
void CAN_Bit_cmd(U8 add, U8 mask, U8 data)
{
    MCP2515_CS(0);
    
    MCP2515_SPI_SendByte(CMD_BIT);
    MCP2515_SPI_SendByte(add);
    MCP2515_SPI_SendByte(mask);
    MCP2515_SPI_SendByte(data);
    
    MCP2515_CS(1);
}

/*-------------------設(shè)置工作模式-------------*/
//0x00正常模式,0x80配置模式,0x40環(huán)回模式, 
//0x60監(jiān)聽模式, 0x20休眠模式
void CAN_SetMode(U8 workmode)
{
     U8  state;
          
     CAN_Bit_cmd(CANCTRL, 0xe0, workmode);
     state = CAN_Read(CANSTAT);
     
     while(!((state & 0xe0) == workmode))
     {
         state = CAN_Read(CANSTAT);	 
         Delay(1);
     }   
}

void CAN_Init(void)
{
	//int i;
	//U8 dat[30]={0};
	
	MCP2515_SPI_Init();
	MCP2515_FM_Set();
	//////////////////////////////進(jìn)入配置模式:
	CAN_Reset();
	//CAN_Write(0x0f,0x80);
	CAN_SetMode(CONFIG_MODE);
	//Uart_SendString("config mode!!\n");
	//Uart_Printf("result1 is 0x%x\n",CAN_Read(CANSTAT));
	//////////////////////////////////////
	CAN_Bit_cmd(CANCTRL, 0x1f, 0x00);           //P.58
	///////////////設(shè)置通訊波特率//////////////////////////
	CAN_SetBaudRate(0x00,0x9e,0x03);   //500kpbs
	//CAN_SetBaudRate(0x01,0x9e,0x03);   //250kbps
	
	//中斷
    CAN_Write(CANINTE, 0x00);       //中斷禁止     //P.50
    CAN_Write(CANINTF, 0x00);       //清中斷標(biāo)志   //P.51
	
	//發(fā)送
    CAN_Write(TXRTSCTRL, 0x07);          //芯片發(fā)送引腳使能設(shè)置  //P.19
    CAN_Bit_cmd(TXB0CTRL, 0x03, 0x03);   //TXB0 higher           //P.18
    CAN_Bit_cmd(TXB1CTRL, 0x03, 0x02);   //TXB1 middle
    CAN_Bit_cmd(TXB2CTRL, 0x03, 0x01);   //TXB2 lower
	
	//濾波(數(shù)據(jù)幀)和屏蔽(接受所有報(bào)文)
    CAN_Write_Data(RXF0SIDH, F_M_data0, 12);       //P.34
    CAN_Write_Data(RXF3SIDH, F_M_data1, 12);
    CAN_Write_Data(RXM0SIDH, F_M_data2, 8);
	
	//接受
    //0x60關(guān)閉屏蔽和濾波,接受所有報(bào)文  //0x01 滾存
    //0x00正常屏蔽濾波
    CAN_Write(RXB0CTRL, 0x21);  //若RXB0滿,滾存至RXB1  //0x64  //P.27
    CAN_Write(RXB1CTRL, 0x20);  //只接收符合濾波條件的擴(kuò)展、標(biāo)準(zhǔn)的有效報(bào)文
	
	CAN_Write(BFPCTRL, 0x00);   //接收引腳控制使能   //P.29
	
	//Uart_Printf("result0 is 0x%x\n",CAN_Read(RXM0SIDH));
	//Uart_Printf("result0 is 0x%x\n",CAN_Read(RXM0SIDL));
	//CAN_Write(CANINTE, 0x03); //中斷使能
	//進(jìn)入正常模式
    CAN_SetMode(NORMAL_MODE);
	
	CAN_Write(CANINTE,0x03); //中斷使能  CANINTE,0x23
	CAN_Write(CANINTE,0x03); //中斷使能
	//CAN_Write(CANINTE,0x03); //中斷使能
}

void MCP2515_test(void)
{
	//CAN_Init();
	
	U8 data[8] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01};
	//標(biāo)準(zhǔn)標(biāo)識(shí)符 or 擴(kuò)展標(biāo)識(shí)符
    //數(shù)據(jù)幀 or 遠(yuǎn)程幀
    //標(biāo)準(zhǔn)標(biāo)識(shí)符+擴(kuò)展標(biāo)識(shí)符+數(shù)據(jù)幀+數(shù)據(jù)長度8
	//U8 cmd[6]={0xaa,0xaa,0xaa,0xaa,0x08};    //擴(kuò)展幀
	U8 cmd[6]={0x69,0x20,0x00,0x00,0x08};    //標(biāo)準(zhǔn)幀
    
    CAN_Write_Data(TXB0SIDH, cmd, 5);
	CAN_Write_Data(TXB0D0, data, 8);
	
	CAN_CMD(CMD_TXB0);   //啟動(dòng)發(fā)送
	
}

void MCP2515_FM_Set(void)
{
	F_M_data0[0] = (RXF0>>3) & 0xff;
	F_M_data0[1] = (RXF0 & 0x7)<<5;
	
	F_M_data0[4] = (RXF1>>3) & 0xff;
	F_M_data0[5] = (RXF1 & 0x7)<<5;
	
	F_M_data0[8] = (RXF2>>3) & 0xff;
	F_M_data0[9] = (RXF2 & 0x7)<<5;
	
	F_M_data1[0] = (RXF3>>3) & 0xff;
	F_M_data1[1] = (RXF3 & 0x7)<<5;
	
	F_M_data1[4] = (RXF4>>3) & 0xff;
	F_M_data1[5] = (RXF4 & 0x7)<<5;
	
	F_M_data1[8] = (RXF5>>3) & 0xff;
	F_M_data1[9] = (RXF5 & 0x7)<<5;
	

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩三级视频| 国产一区二区免费在线| 毛片av中文字幕一区二区| 国产乱码精品一区二区三区av | 欧美日本韩国一区| 欧美精品一区二区高清在线观看| 国产视频一区二区在线观看| 韩国精品一区二区| 成人精品鲁一区一区二区| 欧美亚洲禁片免费| wwwwww.欧美系列| 亚洲久本草在线中文字幕| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产成人99久久亚洲综合精品| 在线精品视频一区二区三四| 精品免费国产二区三区| 自拍av一区二区三区| 蜜乳av一区二区三区| 99精品国产视频| 日韩欧美国产高清| 亚洲免费av高清| 国产在线麻豆精品观看| 91福利在线免费观看| 久久夜色精品国产欧美乱极品| 最新国产精品久久精品| 日本欧美韩国一区三区| 99久久精品国产观看| 精品欧美一区二区三区精品久久| 成人欧美一区二区三区小说| 蜜桃视频在线观看一区| 91福利社在线观看| 国产日韩欧美精品电影三级在线| 婷婷久久综合九色国产成人| 成人美女视频在线观看18| 91麻豆精品国产91久久久更新时间| 国产精品乱码久久久久久| 蜜臀久久99精品久久久画质超高清 | 大陆成人av片| 精品国产污污免费网站入口 | 色94色欧美sute亚洲线路一ni| 国产三级一区二区| 麻豆国产欧美一区二区三区| 欧洲人成人精品| 国产精品二区一区二区aⅴ污介绍| 精品亚洲porn| 日韩一级片在线播放| 亚洲已满18点击进入久久| 成人高清免费观看| 久久综合九色综合欧美98| 日韩av一二三| 亚洲欧洲在线观看av| 国内精品写真在线观看| 51精品秘密在线观看| 亚洲综合色视频| 麻豆91小视频| 欧美日本在线观看| 亚洲你懂的在线视频| 国产成人免费视频精品含羞草妖精 | 精品裸体舞一区二区三区| 亚洲福利一区二区三区| 91在线国产观看| 久久精品亚洲麻豆av一区二区| 亚洲一区二区在线免费看| 国产宾馆实践打屁股91| 精品国产3级a| 奇米影视在线99精品| 欧美人与z0zoxxxx视频| 一区二区三区四区乱视频| www.日韩精品| 亚洲国产精品av| 国产美女在线观看一区| 精品日韩一区二区三区免费视频| 午夜婷婷国产麻豆精品| 欧美日韩另类国产亚洲欧美一级| 一区二区三区在线免费观看| 久久精品国产成人一区二区三区| 91精品国产综合久久久蜜臀粉嫩| 亚洲尤物在线视频观看| 日本二三区不卡| 亚洲久草在线视频| 色屁屁一区二区| 一区二区在线观看免费| 99国内精品久久| 亚洲永久精品大片| 欧美在线一区二区| 亚洲一区二区三区四区五区中文| 色一情一伦一子一伦一区| 亚洲啪啪综合av一区二区三区| 91麻豆文化传媒在线观看| 亚洲码国产岛国毛片在线| 色综合天天综合狠狠| 亚洲黄色av一区| av亚洲精华国产精华精华| 亚洲一区二区av电影| 欧美婷婷六月丁香综合色| 亚洲动漫第一页| 制服丝袜中文字幕亚洲| 日本vs亚洲vs韩国一区三区二区 | 亚洲成人免费电影| 91精品国产福利| 久久激情五月婷婷| 久久久久青草大香线综合精品| 国产一区二区视频在线播放| 国产色一区二区| 成人av手机在线观看| 亚洲精品国产高清久久伦理二区| 欧美性感一类影片在线播放| 日韩和欧美一区二区| 精品久久国产老人久久综合| 国产在线精品一区二区夜色| 中文字幕精品一区二区精品绿巨人| 精品一区二区三区在线观看国产| 国产精品国产自产拍高清av王其 | 91精品福利视频| 亚洲va欧美va人人爽| 日韩一级二级三级精品视频| 国产精品夜夜爽| 亚洲欧美日韩国产一区二区三区| 成人精品国产福利| 香蕉乱码成人久久天堂爱免费| 日韩欧美激情在线| 国产91清纯白嫩初高中在线观看 | 蜜乳av一区二区三区| 国产欧美精品一区二区色综合| 一本一道综合狠狠老| 青青国产91久久久久久| 欧美激情资源网| 欧美午夜电影网| 韩国在线一区二区| 中文字幕一区二区三| 日本道在线观看一区二区| 国产乱妇无码大片在线观看| 亚洲黄网站在线观看| 精品国产乱码久久久久久夜甘婷婷| 成人精品视频一区| 日韩在线一区二区三区| 国产午夜精品一区二区三区嫩草| 欧洲日韩一区二区三区| 国产一区二区三区| 亚洲免费观看高清完整版在线| 精品国产一区二区三区av性色| 一本到不卡免费一区二区| 九九精品视频在线看| 一区二区三区精品视频| 精品国产亚洲一区二区三区在线观看| 91视频一区二区三区| 毛片一区二区三区| 一区二区三区精密机械公司| 日韩你懂的电影在线观看| 欧美日韩中文精品| 国产91精品一区二区| 日韩成人免费电影| 亚洲欧洲综合另类| 久久久亚洲高清| 7777精品伊人久久久大香线蕉完整版 | 一区二区三区国产| 国产欧美日韩综合精品一区二区| 欧美日韩精品一区视频| www.亚洲国产| 国产乱子伦一区二区三区国色天香| 一区二区高清在线| 国产精品久久影院| 欧美一级日韩不卡播放免费| 欧美在线播放高清精品| 成人午夜私人影院| 久久精工是国产品牌吗| 午夜免费久久看| 亚洲男同性视频| 国产精品网友自拍| 精品福利一区二区三区| 欧美在线免费视屏| jvid福利写真一区二区三区| 成人丝袜18视频在线观看| 久久99久国产精品黄毛片色诱| 亚洲无人区一区| 一区二区视频免费在线观看| 欧美国产日韩亚洲一区| 久久久久久夜精品精品免费| 欧美一级片在线看| 欧美日韩和欧美的一区二区| 91网站最新地址| 国产99一区视频免费| 成人一区二区三区视频| 国产在线精品国自产拍免费| 久久精品国产亚洲a| 青青草国产精品97视觉盛宴| 午夜影院久久久| 亚洲一区二区三区四区五区中文| 亚洲少妇中出一区| 久久精品视频一区二区三区| www激情久久| 精品国产凹凸成av人网站| 日韩一区二区三区免费看 | 亚洲欧美福利一区二区| 国产精品毛片a∨一区二区三区| 国产欧美日韩麻豆91| 久久久精品人体av艺术| 国产清纯在线一区二区www| 国产精品视频第一区| 国产欧美日韩久久|