基于S3C2410的CAN總線(xiàn)通信設計與開(kāi)發(fā)
圖2 濾池就地控制單元硬件結構圖
S3C2410的SPI可以工作在四種模式,但是MCP2515的SPI接口只支持其中的兩種。因此應該將S3C2410的SPI接口配置為MCP2515支持的模式工作。從圖1中可以看出S3C2410的SPI應該配置為正常模式的中斷方式,具體配置操作請見(jiàn)參考文獻[2]。
S3C2410-SPI的單個(gè)字節讀、寫(xiě)函數實(shí)現如下:
unsigned char ReadSPI( void )
{
SPRDAT0 = 0x00; // 初始化SPI總線(xiàn)
while ( !REDY );
// 判斷接收數據是否完成
return ( SPRDAT0 );
// 獲取接收到的數據
}
unsigned char WriteSPI( unsigned char data )
{
SPRDAT0 = data; // 寫(xiě)數據到發(fā)送緩沖區
if ( DCOL ) return ( -1 );
// 判斷是否發(fā)生沖突,發(fā)生沖突則返回錯誤標準
else while( !REDY );
// 否則等待數據發(fā)送完成
return ( 0 ); // 返回發(fā)送成功標準
}
對MCP2515的讀寫(xiě)函數原型如下:
void Mcp_Read( unsigned char Addr, unsigned char *ReadData, unsigned char Length );
void Mcp_Write( unsigned char Addr, unsigned char *WriteData, unsigned char Length );
Addr:要讀寫(xiě)區域的首地址;
ReadData/WriteData:讀取數據存放區、寫(xiě)出數據緩沖區首地址;
Length:要讀、寫(xiě)數據的字節數。
其它對MCP2515的操作在此不一一列舉,請見(jiàn)參考文獻[3]。
3.2 CAN總線(xiàn)數據收發(fā)軟件設計
本設計采用外部中斷1響應MCP2515的總中斷,并且配置控制器始終處于喚醒模式,發(fā)送器工作在正常模式,使能接收、發(fā)送、錯誤中斷。中斷方式處理CAN總線(xiàn)數據收發(fā)的流程如圖3,分別從發(fā)送處理、接收處理、錯誤處理三個(gè)部分加以說(shuō)明。
圖3 中斷方式實(shí)現CAN總線(xiàn)數據收發(fā)流程圖
評論