11
Dependents: yezhong_main_controller_copy_3_
Diff: CAN3.cpp
- Revision:
- 1:dbc44582f2f8
- Child:
- 7:2abb9b7eec25
diff -r d8f50b1e384f -r dbc44582f2f8 CAN3.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CAN3.cpp Sun Jun 13 09:52:03 2010 +0000 @@ -0,0 +1,95 @@ +#include "CAN3.h" + +#include "mbed.h" +#include "mcp2515.h" +#include "mcp2515_can.h" +#include "mcp2515_defs.h" + + +CAN3::CAN3(SPI& _spi, PinName ncs, PinName itr) + : spi(_spi), _mcp(spi, ncs), _itr(itr) { + printf("\n\rcan = %d",this); + +} + +uint8_t CAN3::read(CANMessage *msg) { + uint8_t stat, res; + + stat = _mcp.readStatus(); + + if ( stat & MCP_STAT_RX0IF ) { + // Msg in Buffer 0 + _mcp.read_canMsg( MCP_RXBUF_0, msg); + _mcp.modifyRegister(MCP_CANINTF, MCP_RX0IF, 0); + res = CAN_OK; + } else if ( stat & MCP_STAT_RX1IF ) { + // Msg in Buffer 1 + _mcp.read_canMsg( MCP_RXBUF_1, msg); + _mcp.modifyRegister(MCP_CANINTF, MCP_RX1IF, 0); + res = CAN_OK; + } else { + res = CAN_NOMSG; + } + + return res; +} + +uint8_t CAN3::checkReceive(void) { + uint8_t res; + + res = _mcp.readStatus(); // RXnIF in Bit 1 and 0 + if ( res & MCP_STAT_RXIF_MASK ) { + return CAN_MSGAVAIL; + } else { + return CAN_NOMSG; + } +} + +void CAN3::write(CANMessage* test) { + uint8_t txbuf_n; + _mcp.getNextFreeTXBuf(&txbuf_n); + _mcp.write_canMsg(txbuf_n,test); + _mcp.start_transmit( txbuf_n ); +} + +void CAN3::rise(void (*fptr)(void)) { + _itr.rise(fptr); +} + +void CAN3::fall(void (*fptr2)(void)) { + _itr.fall(fptr2); +} + +void CAN3::frequency(int canSpeed) { + + uint8_t res; + + res = _mcp.init(canSpeed); //CAN_500KBPS_8MHZ + wait(.001); + if (res == MCP2515_OK) { + printf("CAN Init OK\n\r"); + + } else { + printf("CAN Init FAIL\n\r"); + } + + _mcp.setRegister(MCP_CANINTE, 0x3);//0x3); //MCP_RX_INT); + _mcp.setRegister(MCP_CANINTF, 0x3);// 0xff); + + +//RX0,1 as rx0,1 digital interrupt outputs +//_mcp.setRegister(BFPCTRL, 0xf); + +//[Set TX0,1,2 as digital inputs +//_mcp.setRegister(TXRTSCTRL, 0x0); + + printf("Setting Normal-Mode - \n\r "); + if ( _mcp.setCANCTRL_Mode(MODE_NORMAL) == MCP2515_OK) { //MODE_NORMAL MODE_LOOPBACK + printf("OK\n\r"); + } else { + printf("failed\n\r"); + } + + _mcp.dumpExtendedStatus(); + wait(.001); +} \ No newline at end of file