?? lpc2400canreg.c
字號:
/****************************************Copyright (c)**************************************************
** 廣州致遠電子有限公司
** 工業(yè)通信網(wǎng)絡事業(yè)部
** http://www.embedcontrol.com
**-------------------------------------文件信息--------------------------------------------------------
** 文 件 名: LPC2400CANReg.C
** 當 前 版 本: v2.0
** 日 期: 2008年4月26日
** 描 述:
**-------------------------------------歷史創(chuàng)建--------------------------------------------------------
** 文 件 名: LPC2400CANReg.C
** 版 本: v1.0
** 日 期: 2008年4月26日
** 創(chuàng) 建 人: liuyanlong
** 描 述: 全新版本的LPC系列CAN控制器驅(qū)動函數(shù)庫,CAN控制器寄存器定義
**-------------------------------------歷史修改--------------------------------------------------------
** 文 件 名:
** 版 本:
** 日 期:
** 修 改 人:
** 描 述:
********************************************************************************************************/
#define LPC2400PCONP (*((volatile unsigned long*)0xE01FC0C4))
#define LPC2400PINSEL0 (*((volatile unsigned long*)0xE002C000))
#define LPC2400PINSEL1 (*((volatile unsigned long*)0xE002C004))
#define LPC2400PINSEL4 (*((volatile unsigned long*)0xE002C010))
#define LPC2400_CAN_CTRLRAG_BASEADDR 0xE0044000
#define LPC2400_CANCTRLOR_ADDR_OFFSET 0x4000
#define LPC2400REG(CH, REGOFFSET) (*((volatile unsigned long*)(LPC2400_CAN_CTRLRAG_BASEADDR + LPC2400_CANCTRLOR_ADDR_OFFSET*CH + REGOFFSET*4)))
enum LPC2400CANCTRLOR_REGOFFSET {MOD=0,CMR,GSR,ICR,IER,BTR,EWL,SR,RFS,RID,RDA,RDB,TFI1,TID1,TDA1,TDB1,TFI2,TID2,TDA2,TDB2,TFI3,TID3,TDA3,TDB3};
/*
*********************************************************************************************************************
** 定義 CANMOD 寄存器:
1.This register controls the basic operating mode of the CAN Controller.
2.Bits not listed read as 0 and should be written as 0.
*********************************************************************************************************************
*/
typedef union _canmod_
{
unsigned long DWord;
struct {
unsigned int RM :1; //定義RM位(復位位)
unsigned int LOM :1; //定義LOM位(只聽模式位)
unsigned int STM :1; //定義STM位 "0"發(fā)送的信息必須被應答才被認可
//"1"自測試模式,CANCMR的SRR位一起使用,可以達到自發(fā)自收的效果
unsigned int TPM :1; //定義TPM位 "0"3個發(fā)送緩沖區(qū)的優(yōu)先級由各自的CAN ID決定
//"1"3個發(fā)送緩沖區(qū)的優(yōu)先級由各自的Tx優(yōu)先級域決定
unsigned int SM :1; //定義SM位(睡眠模式位)
unsigned int RPM :1; //定義RPM位 "0"如果傳輸?shù)氖秋@性位,Rx和Tx腳為低電平
//"1"翻轉(zhuǎn)極性模式--如果傳輸?shù)氖秋@性位,Rx腳為高電平
unsigned int RSV1 :1; //保留位
unsigned int TM :1; //定義TM位(測試模式)
unsigned int RSV24 :24; //保留位
}Bits;
}REG_CANMOD;
/*
**********************************************************************************************************************
** 定義 CANBTR 寄存器:
1.This register controls how various CAN timings are derived from the VPB clock.
2.It can be read at any time, but can only be written if the RM bit in CANmod is 1.
**********************************************************************************************************************
*/
typedef union _canbtr_
{
unsigned long DWord; //字操作定義
struct
{
unsigned int BRP :10; //預分頻位組合定義
unsigned int RSV4 :4; //保留位
unsigned int SJW :2; //同步跳轉(zhuǎn)寬度
unsigned int TSEG1 :4; //時間段1
unsigned int TSEG2 :3; //時間段2
unsigned int SAM :1; //采樣模式位
unsigned int RSV8 :8; //保留
}Bits;
}REG_CANBTR;
/*
**********************************************************************************************************************
** 定義 CANCMR 寄存器:
1.Writing to this write-only register initiates an action.
2.Bits not listed should be written as 0. Reading this register yields zeroes.
**********************************************************************************************************************
*/
typedef union _cancmr_
{
unsigned long DWord;
struct
{
unsigned int TR :1; //定義TR位(發(fā)送請求)
unsigned int AT :1; //定義AT位(發(fā)送中止)
unsigned int RRB :1; //定義RRB位(接收緩沖區(qū)釋放)
unsigned int CDO :1; //清除數(shù)據(jù)溢出位
unsigned int SRR :1; //定義SRR位(自接收請求)
unsigned int STB1 :1; //定義SEND TxBUF1位(選擇BUF1發(fā)送)
unsigned int STB2 :1; //定義SEND TxBUF2位(選擇BUF2發(fā)送)
unsigned int STB3 :1; //定義SEND TxBUF3位(選擇BUF3發(fā)送)
unsigned int RSV24 :24; //保留位
}Bits;
}REG_CANCMR;
/*
**********************************************************************************************************************
** 定義 CANRFS 寄存器:
1.This register defines the characteristics of the current received message.
2.It is read-only in normal operation, but can be written for testing purposes if the RM bit in CANMOD is 1.
**********************************************************************************************************************
*/
typedef union _canrfs_
{
unsigned long DWord; //字操作定義
struct
{
unsigned int IDIN :10; //ID索引值
unsigned int BP :1; //BP
unsigned int RSV5 :5; //保留
unsigned int DLC :4; //數(shù)據(jù)長度
unsigned int RSV10 :10; //保留
unsigned int RTR :1; //遠程幀、數(shù)據(jù)幀識別位
unsigned int FF :1; //擴展幀、標準幀識別位
}Bits;
}REG_CANRFS;
/*
******************************************************************
CAN控制器結(jié)構體定義
******************************************************************
*/
typedef struct _CANCONTROLLOR
{
unsigned char m_Channel; //CAN通道
//unsigned char m_bIsLOM; //只聽模式標志
//unsigned char m_bSLPM; //睡眠模式標志
unsigned long m_SysClk; //系統(tǒng)時鐘
unsigned char m_Status; //狀態(tài)
/*INT8U m_EWL; //出錯警告值
INT32U m_CAN_Baud; //CAN波特率值
INT32U m_RegBaseAddr; //CAN控制器的起始基址
REG_CANRxBUF *m_RxBufAddr; //接收緩沖區(qū)首地址指針
INT16U m_iCAN_RxBufLen;//接收緩沖區(qū)數(shù)量長度
INT16U m_iRdPoint; //接收緩沖區(qū)讀入口
INT16U m_iWrPiont; //接收緩沖區(qū)寫入口
INT16U m_iDataCout; //接收緩沖區(qū)有效數(shù)據(jù)數(shù)目
BOOL m_bIsFull; //接收緩沖區(qū)滿標志
BOOL m_IsSendOK; //發(fā)送成功標志
void *pSendSem; //發(fā)送信號量
void *pRecvSem; //接收信號量
void *pRcvMutexSem; //接收獨占信號量
void *pSndMutexSem; //發(fā)送獨占信號量*/
}CANCONTROLLOR;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -