?? can.h
字號:
/*! \file CAN.h
\brief CAN總線收發數據頭文件
\author 丁雷
\version 0.1
*/
#ifndef CAN_H
#define CAN_H
#define CAN_MAX_CHAR_IN_MESSAGE (8) //!<MAX_CHAR_IN_MESSAGE
#define CAN_OK (0) //!<OK
#define CAN_FAILINIT (1) //!<FAILTX
#define CAN_FAILTX (2) //!<FAILTX
#define CAN_MSGAVAIL (3) //!<MSGAVAIL
#define CAN_NOMSG (4) //!<NOMSG
#define CAN_CTRLERROR (5) //!<CTRLERROR
#define CAN_FAIL (0xff) //!<FAIL
#define CAN_STDID (0) //!<STDID
#define CAN_EXTID (1) //!<EXTID
#define CANDEFAULTIDENT (0x1111) //!<DEFAUTIDENT
#define CANDEFAULTIDENTEXT (0x0) //!<DEFAULTIDENTEXT
// 自定義命令
#define RED_LIGHT_OPEN 101
#define RED_LIGHT_CLOSE 102
#define GREEN_LIGHT_OPEN 103
#define GREEN_LIGHT_CLOSE 104
#define BLUE_LIGHT_OPEN 105
#define BLUE_LIGHT_CLOSE 106
extern char CAN_Message[8];
typedef struct {
unsigned char extended_identifier; /*!< identifier CAN_xxxID */
unsigned int identifier; /*!< either extended (the 29 LSB) or standard (the 11 LSB) */
unsigned int dlc; //!< data length:
char dta[CAN_MAX_CHAR_IN_MESSAGE];
//!<used for receive only:
//!< Received Remote Transfer Bit
//!< (0=no... 1=remote transfer request received)
unsigned char rtr;
unsigned char filhit; //!<Acceptence Filter that enabled the reception
} CanMessage;
#define CAN_20KBPS 1 //!<CAN總線比特率20k
#define CAN_125KBPS CAN_20KBPS+1 //!<CAN總線比特率125k
/** 數據發送函數
* @param[in] value 要發送的數據
* @param[in] n 要發送的數據的長度
*/
void CAN_Write(char * value,int n);
/** CAN總線初始化函數
*/
void CAN_Init(void); //CAN總線初始化
/** CAN總線中斷響應函數
*/
void __irq CAN_LISR(void);
/** CAN總線發送數據函數
* @param[in] msg 待發送的CanMessage結構體
* @param[out] 發送數據是否成功狀態
*/
unsigned char can_sendMessage(CanMessage* msg);
int ReadForRxMsgBuf(char *msg);
void can_initBuf(void);
#endif
/*! \mainpage CAN總線實驗
\author 丁雷
\version 1.0
\date 2006-9-1
\section ABSTRACT 概要
\n 在兩臺嵌入式實驗設備之間實現主、從站工作模式。主站和從站之間可以信息數據的互相傳感;主站對從站的遠程控制;
\n 從站實驗設備狀態的改變可以及時的反映到主站的相關設備上。
\section HARDWARE 硬件
\n 2410實驗箱、CAN總線擴展卡(MCP2515,MCP2551)
\section SOFTERWARE 軟件
\n DEMO實驗平臺
*/
/*! \defgroup Introduction 使用說明
\n每一塊S3C2410實驗板都可以選擇主站/從站模式(通過觸摸屏上自繪按鈕的選擇)。當兩塊實驗板的主/從站模式選擇好了以后,兩塊實驗板上CPU,CAN總線控制器,CAN總線收發器等設備的初始化就會接著完成。兩個實驗板分別進入主站或從站窗口。
\image html images\main.gif
\n主站窗口
\n"+":點擊一下,將"數值顯示區"中的原有數值加1并在從站實驗板的"數值顯示區"顯示。
\n"-":點擊一下,將"數值顯示區"中的原有數值減1并在從站實驗板的"數值顯示區"顯示。
\n紅燈開按鈕:點亮從站實驗板上的紅燈,并且在從站窗口中紅燈旁邊顯示"開"。
\n紅燈關按鈕:熄滅從站實驗板上的紅燈,并且在從站窗口中紅燈旁邊顯示"關"。
\n綠燈開按鈕:點亮從站實驗板上的綠燈,并且在從站窗口中綠燈旁邊顯示"開"。
\n綠燈關按鈕:熄滅從站實驗板上的綠燈,并且在從站窗口中綠燈旁邊顯示"關"。
\n多行文本框:用于顯示從站實驗板上的一些操作記錄,例如:外部中斷鍵按下等。
\image html images\master.gif
\n從站窗口
\n"+":點擊一下,將"數值顯示區"中的原有數值加1并在主站實驗板的"數值顯示區"顯示。
\n"-":點擊一下,將"數值顯示區"中的原有數值減1并在主站實驗板的"數值顯示區"顯示。
\n多行文本框:用于顯示從站本身實驗板上的一些操作記錄,例如:外部中斷按下等。
\image html images\slave.gif
*/
/*! \defgroup CONSTRUCTION 《CAN總線》軟件模塊結構圖
\n CAN總線實驗分為3大模塊:應用層模塊,SPI讀寫模塊和MCP2515驅動程序。這三個模塊之間的調用關系如圖所示:
\image html images\construction.gif
*/
/*! \defgroup SPI SPI讀寫模塊
\n SPI讀函數:unsigned char ReadSPI( void )
\n 返回:從SPI0接口讀取一個字節的數據
\n ReadSPI程序流程圖如下:
\image html images\spiread.gif
\n SPI寫函數:void WriteSPI(unsigned char DataOut)
\n 輸入:要通過SPI0接口輸出的一字節數據
\n WriteSPI程序流程圖如下:
\image html images\spiwrite.gif
*/
/*! \defgroup MCP2515 MCP2515驅動程序
\n MCP2515芯片初始化函數:unsigned char mcp2515_Init(const unsigned char canSpeed)
\n 輸入:MCP2515的位速率
\n 輸出:MCP2515初始化成功與否的狀態
\n mcp2515_Init程序流程圖如下:
\image html images\mcp2515init.gif
\n MCP2515申請發送緩沖器函數:unsigned char mcp2515_getNextFreeTXBuf(unsigned char *txbuf_n)
\n 輸入:一個字符,保存申請到的發送緩沖器的序號
\n 輸出:MCP2515申請發送緩沖器成功與否的狀態
\n mcp2515_getNextFreeTXBuf程序流程圖如下:
\image html images\mcp2515_getNextFreeTXBuf.gif
\nMCP2515寫發送緩沖器函數:void mcp2515_write_canMsg(unsigned char buffer_sidh_addr, CanMessage * msg)
\n輸入:buffer_sidh_addr--發送緩沖器地址 Msg--要在CAN總線上發送的消息的結構體
\n功能:將要發送的數據的內容,數據的長度,一幀數據的標識符等分別放入發送緩沖器n的相應配套寄存器中。
\n
\n MCP2515啟動一幀數據發送函數:void mcp2515_start_transmit(const unsigned char buffer_sidh_addr)
\n輸入:buffer_sidh_addr--發送緩沖器地址
\n功能:根據發送緩沖器的地址,發送相應的SPI RTS命令。即啟動先前放入緩沖器中的一幀數據的發送。
\n 緩沖器 RTS命令
\n發送緩沖器0 0x81
\n發送緩沖器1 0x82
\n發送緩沖器2 0x84
\n MCP2515讀狀態寄存器函數: unsigned char mcp2515_readStatus(void)
\n返回:狀態寄存器中的數值
\n mcp2515_readStatus程序流程圖如下:
\image html images\mcp2515_readStatus.gif
\n MCP2515讀一幀數據函數:void mcp2515_read_canMsg(unsigned char buffer_sidh_addr,CanMessage * msg)
\n輸入:buffer_sidh_addr--接收緩沖器地址 Msg--存放接收到的一幀數據的消息結構體
\n功能:根據接收緩沖器地址buffer_sidh_addr,從接收緩沖器RXBn的相關寄存器中讀取需要的一幀數據內容到消息結構體msg中。
\n
\n MCP2515寄存器位修改函數:void mcp2515_modifyRegister(const unsigned char address, const unsigned char mask, const unsigned char data)
\n輸入:address--要修改的寄存器的地址
\n Mask--寄存器中要修改的相應位的掩碼。(見參考資料2)
\n Data--需要修改的數據
\image html images\mcp2515_modifyRegister.gif
*/
/*! \defgroup APPLICATION 應用層模塊
\n CAN總線消息結構體:
\n typedef struct {
\n unsigned char extended_identifier; //擴展標識符
\n unsigned int identifier; //標識符
\n unsigned int dlc; //發送數據長度
\n char dta[CAN_MAX_CHAR_IN_MESSAGE];//待發送數據區
\n unsigned char rtr; //是否為遠程發送請求
\n unsigned char filhit; //Acceptence Filter that enabled the reception
\n } CanMessage;
\n CAN總線發送數據函數:unsigned char can_sendMessage(CanMessage* msg)
\n 輸入:msg--待發送的CanMessage結構體
\n 輸出:發送數據是否成功狀態
\n WriteSPI程序流程圖如下:
\image html images\can_sendMessage.gif
\n 數據發送函數:void CAN_Write(char * value, int n)
\n 輸入:value--發送的數據 n--發送的數據長度
\n 功能:根據輸入參數value,n初始化一個新的CanMessage結構體,然后調用can_sendMessage(CanMessage* msg)函數發送一幀數據。
\n CAN總線中斷服務程序:void __irq CAN_LISR(void)
\n CAN_LISR程序流程圖如下:
\image html images\CAN_LISR.gif
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -