590 lines
11 KiB
C
590 lines
11 KiB
C
|
/**
|
||
|
ECAN Generated Driver API Header File
|
||
|
|
||
|
@Company
|
||
|
Microchip Technology Inc.
|
||
|
|
||
|
@File Name
|
||
|
ecan.h
|
||
|
|
||
|
@Summary
|
||
|
This is the generated header file for the ECAN driver using PIC10 / PIC12 / PIC16 / PIC18 MCUs
|
||
|
|
||
|
@Description
|
||
|
This header file provides APIs driver for ECAN.
|
||
|
Generation Information :
|
||
|
Product Revision : PIC10 / PIC12 / PIC16 / PIC18 MCUs - 1.81.7
|
||
|
Device : PIC18F26K83
|
||
|
Driver Version : 3.0.0
|
||
|
The generated drivers are tested against the following:
|
||
|
Compiler : XC8 2.31 and above
|
||
|
MPLAB : MPLAB X 5.45
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
(c) 2018 Microchip Technology Inc. and its subsidiaries.
|
||
|
|
||
|
Subject to your compliance with these terms, you may use Microchip software and any
|
||
|
derivatives exclusively with Microchip products. It is your responsibility to comply with third party
|
||
|
license terms applicable to your use of third party software (including open source software) that
|
||
|
may accompany Microchip software.
|
||
|
|
||
|
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
|
||
|
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY
|
||
|
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS
|
||
|
FOR A PARTICULAR PURPOSE.
|
||
|
|
||
|
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
|
||
|
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
|
||
|
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP
|
||
|
HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO
|
||
|
THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
|
||
|
CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT
|
||
|
OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS
|
||
|
SOFTWARE.
|
||
|
*/
|
||
|
|
||
|
#ifndef ECAN_H
|
||
|
#define ECAN_H
|
||
|
|
||
|
|
||
|
/**
|
||
|
Section: Included Files
|
||
|
*/
|
||
|
|
||
|
#include <stdbool.h>
|
||
|
#include <stdint.h>
|
||
|
|
||
|
/**
|
||
|
|
||
|
Global Defines
|
||
|
|
||
|
*/
|
||
|
typedef union {
|
||
|
|
||
|
struct {
|
||
|
uint8_t idType;
|
||
|
uint32_t id;
|
||
|
uint8_t dlc;
|
||
|
uint8_t data0;
|
||
|
uint8_t data1;
|
||
|
uint8_t data2;
|
||
|
uint8_t data3;
|
||
|
uint8_t data4;
|
||
|
uint8_t data5;
|
||
|
uint8_t data6;
|
||
|
uint8_t data7;
|
||
|
uint8_t rtr;
|
||
|
} frame;
|
||
|
uint8_t array[15];
|
||
|
} uCAN_MSG;
|
||
|
|
||
|
/**
|
||
|
Defines
|
||
|
*/
|
||
|
|
||
|
#define dSTANDARD_CAN_MSG_ID_2_0B 1
|
||
|
#define dEXTENDED_CAN_MSG_ID_2_0B 2
|
||
|
|
||
|
/**
|
||
|
Section: ECAN APIs
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
@Summary
|
||
|
Initializes the ECAN module.
|
||
|
|
||
|
@Description
|
||
|
This routine sets all the set parameters to the ECAN module.
|
||
|
|
||
|
@Preconditions
|
||
|
None
|
||
|
|
||
|
@Param
|
||
|
None
|
||
|
|
||
|
@Returns
|
||
|
None
|
||
|
|
||
|
@Example
|
||
|
<code>
|
||
|
ECAN_Initialize();
|
||
|
</code>
|
||
|
*/
|
||
|
void ECAN_Initialize(void);
|
||
|
|
||
|
/**
|
||
|
|
||
|
@Summary
|
||
|
CAN_sleep
|
||
|
|
||
|
@Description
|
||
|
Puts the CAN module to sleep
|
||
|
|
||
|
@Param
|
||
|
None
|
||
|
|
||
|
@Returns
|
||
|
None
|
||
|
|
||
|
@Example
|
||
|
<code>
|
||
|
CAN_init();
|
||
|
</code>
|
||
|
|
||
|
*/
|
||
|
|
||
|
void CAN_sleep(void);
|
||
|
|
||
|
/**
|
||
|
@Summary
|
||
|
CAN_transmit
|
||
|
|
||
|
@Description
|
||
|
Transmits out sCAN_MSG
|
||
|
|
||
|
@Param
|
||
|
Pointer to a sCAN_MSG
|
||
|
|
||
|
@Returns
|
||
|
True or False if message was loaded to transmit buffer
|
||
|
|
||
|
@Example
|
||
|
<code>
|
||
|
uCAN_MSG txMessage;
|
||
|
CAN_transmit(&txMessage);
|
||
|
</code>
|
||
|
*/
|
||
|
uint8_t CAN_transmit(uCAN_MSG *tempCanMsg);
|
||
|
|
||
|
|
||
|
/**
|
||
|
|
||
|
@Summary
|
||
|
CAN_receive
|
||
|
|
||
|
@Description
|
||
|
Receives CAN messages
|
||
|
|
||
|
@Param
|
||
|
Pointer to a sCAN_MSG
|
||
|
|
||
|
@Returns
|
||
|
True or False for a new message
|
||
|
|
||
|
@Example
|
||
|
<code>
|
||
|
uCAN_MSG rxMessage;
|
||
|
CAN_receive(&rxMessage);
|
||
|
</code>
|
||
|
|
||
|
*/
|
||
|
uint8_t CAN_receive(uCAN_MSG *tempCanMsg);
|
||
|
|
||
|
/**
|
||
|
|
||
|
@Summary
|
||
|
CAN_messagesInBuffer
|
||
|
|
||
|
@Description
|
||
|
Checks to see how many messages are in the buffer
|
||
|
|
||
|
@Param
|
||
|
None
|
||
|
|
||
|
@Returns
|
||
|
Returns total number of messages in the buffers
|
||
|
|
||
|
@Example
|
||
|
<code>
|
||
|
uint8_t nrMsg;
|
||
|
nrMsg = CAN_messagesInBuffer();
|
||
|
</code>
|
||
|
*/
|
||
|
uint8_t CAN_messagesInBuffer(void);
|
||
|
|
||
|
/**
|
||
|
|
||
|
@Summary
|
||
|
CAN_isBusOff
|
||
|
|
||
|
@Description
|
||
|
Checks to see if module is busoff
|
||
|
|
||
|
@Param
|
||
|
None
|
||
|
|
||
|
@Returns
|
||
|
True if module is in Busoff, False is if it is not
|
||
|
|
||
|
@Example
|
||
|
<code>
|
||
|
uint8_t busOff;
|
||
|
busOff = CAN_isBusOff();
|
||
|
</code>
|
||
|
|
||
|
*/
|
||
|
|
||
|
uint8_t CAN_isBusOff(void);
|
||
|
|
||
|
/**
|
||
|
|
||
|
@Summary
|
||
|
CAN_isRXErrorPassive
|
||
|
|
||
|
@Description
|
||
|
Checks to see if module is RX Error Passive
|
||
|
|
||
|
@Param
|
||
|
None
|
||
|
|
||
|
@Returns
|
||
|
True if module is in RX Error Passive, False is if it is not
|
||
|
|
||
|
@Example
|
||
|
<code>
|
||
|
uint8_t errRxPasive;
|
||
|
errRxPasive = CAN_isRXErrorPassive();
|
||
|
</code>
|
||
|
|
||
|
*/
|
||
|
|
||
|
uint8_t CAN_isRXErrorPassive(void);
|
||
|
|
||
|
/**
|
||
|
|
||
|
@Summary
|
||
|
CAN_isTXErrorPassive
|
||
|
|
||
|
@Description
|
||
|
Checks to see if module is TX Error Passive
|
||
|
|
||
|
@Param
|
||
|
None
|
||
|
|
||
|
@Returns
|
||
|
True if module is in TX Error Passive, False is if it is not
|
||
|
|
||
|
@Example
|
||
|
<code>
|
||
|
uint8_t errTxPasive;
|
||
|
errTxPasive = CAN_isTXErrorPassive();
|
||
|
</code>
|
||
|
|
||
|
*/
|
||
|
|
||
|
uint8_t CAN_isTXErrorPassive(void);
|
||
|
|
||
|
/**
|
||
|
@Summary
|
||
|
ECAN_SetRXBnInterruptHandler
|
||
|
|
||
|
@Description
|
||
|
Sets the ECAN Receive buffer n interrupt handler
|
||
|
|
||
|
@Param
|
||
|
Address of the callback routine
|
||
|
|
||
|
@Returns
|
||
|
None
|
||
|
|
||
|
@Example
|
||
|
<code>
|
||
|
volatile bool customRXBnFlag = false;
|
||
|
|
||
|
void CustomRXBnInterruptHandler(void)
|
||
|
{
|
||
|
customRXBnFlag = true;
|
||
|
// ...
|
||
|
}
|
||
|
|
||
|
void main(void)
|
||
|
{
|
||
|
// ...
|
||
|
ECAN_SetRXBnInterruptHandler(CustomRXBnInterruptHandler);
|
||
|
|
||
|
while (1)
|
||
|
{
|
||
|
if (customRXBnFlag) {
|
||
|
customRXBnFlag = false;
|
||
|
// ...
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</code>
|
||
|
*/
|
||
|
void ECAN_SetRXBnInterruptHandler(void (*handler)(void));
|
||
|
|
||
|
/**
|
||
|
@Summary
|
||
|
ECAN_RXBnI_ISR
|
||
|
|
||
|
@Description
|
||
|
Implements the ECAN Receive buffer n interrupt service routine
|
||
|
|
||
|
@Param
|
||
|
None
|
||
|
|
||
|
@Returns
|
||
|
None
|
||
|
*/
|
||
|
void ECAN_RXBnI_ISR(void);
|
||
|
|
||
|
/**
|
||
|
@Summary
|
||
|
ECAN_SetRXBnOverflowHandler
|
||
|
|
||
|
@Description
|
||
|
Sets the ECAN Receive buffer n overflow interrupt handler
|
||
|
|
||
|
@Param
|
||
|
Address of the callback routine
|
||
|
|
||
|
@Returns
|
||
|
None
|
||
|
|
||
|
@Example
|
||
|
<code>
|
||
|
volatile bool customRXBnOverflowFlag = false;
|
||
|
|
||
|
void CustomRXBnOverflowHandler(void)
|
||
|
{
|
||
|
customRXBnOverflowFlag = true;
|
||
|
// ...
|
||
|
}
|
||
|
|
||
|
void main(void)
|
||
|
{
|
||
|
// ...
|
||
|
ECAN_SetRXBnOverflowHandler(CustomRXBnOverflowHandler);
|
||
|
|
||
|
while (1)
|
||
|
{
|
||
|
if (customRXBnOverflowFlag) {
|
||
|
customRXBnOverflowFlag = false;
|
||
|
// ...
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</code>
|
||
|
*/
|
||
|
void ECAN_SetRXBnOverflowHandler(void (*handler)(void));
|
||
|
|
||
|
/**
|
||
|
@Summary
|
||
|
ECAN_SetBusOffHandler
|
||
|
|
||
|
@Description
|
||
|
Sets the ECAN Bus off interrupt handler
|
||
|
|
||
|
@Param
|
||
|
Address of the callback routine
|
||
|
|
||
|
@Returns
|
||
|
None
|
||
|
|
||
|
@Example
|
||
|
<code>
|
||
|
volatile bool customBusOffFlag = false;
|
||
|
|
||
|
void CustomBusOffHandler(void)
|
||
|
{
|
||
|
customBusOffFlag = true;
|
||
|
// ...
|
||
|
}
|
||
|
|
||
|
void main(void)
|
||
|
{
|
||
|
// ...
|
||
|
ECAN_SetBusOffHandler(CustomBusOffHandler);
|
||
|
|
||
|
while (1)
|
||
|
{
|
||
|
if (customBusOffFlag) {
|
||
|
customBusOffFlag = false;
|
||
|
// ...
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</code>
|
||
|
*/
|
||
|
void ECAN_SetBusOffHandler(void (*handler)(void));
|
||
|
|
||
|
/**
|
||
|
@Summary
|
||
|
ECAN_SetTXPassiveHandler
|
||
|
|
||
|
@Description
|
||
|
Sets the ECAN TX passive interrupt handler
|
||
|
|
||
|
@Param
|
||
|
Address of the callback routine
|
||
|
|
||
|
@Returns
|
||
|
None
|
||
|
|
||
|
@Example
|
||
|
<code>
|
||
|
volatile bool customTXPassiveFlag = false;
|
||
|
|
||
|
void CustomTXPassiveHandler(void)
|
||
|
{
|
||
|
customTXPassiveFlag = true;
|
||
|
// ...
|
||
|
}
|
||
|
|
||
|
void main(void)
|
||
|
{
|
||
|
// ...
|
||
|
ECAN_SetTXPassiveHandler(CustomTXPassiveHandler);
|
||
|
|
||
|
while (1)
|
||
|
{
|
||
|
if (customTXPassiveFlag) {
|
||
|
customTXPassiveFlag = false;
|
||
|
// ...
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</code>
|
||
|
*/
|
||
|
void ECAN_SetTXPassiveHandler(void (*handler)(void));
|
||
|
|
||
|
/**
|
||
|
@Summary
|
||
|
ECAN_SetRXPassiveHandler
|
||
|
|
||
|
@Description
|
||
|
Sets the ECAN RX passive interrupt handler
|
||
|
|
||
|
@Param
|
||
|
Address of the callback routine
|
||
|
|
||
|
@Returns
|
||
|
None
|
||
|
|
||
|
@Example
|
||
|
<code>
|
||
|
volatile bool customRXPassiveFlag = false;
|
||
|
|
||
|
void CustomRXPassiveHandler(void)
|
||
|
{
|
||
|
customRXPassiveFlag = true;
|
||
|
// ...
|
||
|
}
|
||
|
|
||
|
void main(void)
|
||
|
{
|
||
|
// ...
|
||
|
ECAN_SetRXPassiveHandler(CustomRXPassiveHandler);
|
||
|
|
||
|
while (1)
|
||
|
{
|
||
|
if (customRXPassiveFlag) {
|
||
|
customRXPassiveFlag = false;
|
||
|
// ...
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</code>
|
||
|
*/
|
||
|
void ECAN_SetRXPassiveHandler(void (*handler)(void));
|
||
|
|
||
|
/**
|
||
|
@Summary
|
||
|
ECAN_SetTXWarningHandler
|
||
|
|
||
|
@Description
|
||
|
Sets the ECAN TX warning interrupt handler
|
||
|
|
||
|
@Param
|
||
|
Address of the callback routine
|
||
|
|
||
|
@Returns
|
||
|
None
|
||
|
|
||
|
@Example
|
||
|
<code>
|
||
|
volatile bool customTXWarningFlag = false;
|
||
|
|
||
|
void CustomTXWarningHandler(void)
|
||
|
{
|
||
|
customTXWarningFlag = true;
|
||
|
// ...
|
||
|
}
|
||
|
|
||
|
void main(void)
|
||
|
{
|
||
|
// ...
|
||
|
ECAN_SetTXWarningHandler(CustomTXWarningHandler);
|
||
|
|
||
|
while (1)
|
||
|
{
|
||
|
if (customTXWarningFlag) {
|
||
|
customTXWarningFlag = false;
|
||
|
// ...
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</code>
|
||
|
*/
|
||
|
void ECAN_SetTXWarningHandler(void (*handler)(void));
|
||
|
|
||
|
/**
|
||
|
@Summary
|
||
|
ECAN_SetRXWarningHandler
|
||
|
|
||
|
@Description
|
||
|
Sets the ECAN RX warning interrupt handler
|
||
|
|
||
|
@Param
|
||
|
Address of the callback routine
|
||
|
|
||
|
@Returns
|
||
|
None
|
||
|
|
||
|
@Example
|
||
|
<code>
|
||
|
volatile bool customRXWarningFlag = false;
|
||
|
|
||
|
void CustomRXWarningHandler(void)
|
||
|
{
|
||
|
customRXWarningFlag = true;
|
||
|
// ...
|
||
|
}
|
||
|
|
||
|
void main(void)
|
||
|
{
|
||
|
// ...
|
||
|
ECAN_SetRXWarningHandler(CustomRXWarningHandler);
|
||
|
|
||
|
while (1)
|
||
|
{
|
||
|
if (customRXWarningFlag) {
|
||
|
customRXWarningFlag = false;
|
||
|
// ...
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</code>
|
||
|
*/
|
||
|
void ECAN_SetRXWarningHandler(void (*handler)(void));
|
||
|
|
||
|
/**
|
||
|
@Summary
|
||
|
ECAN_ERRI_ISR
|
||
|
|
||
|
@Description
|
||
|
Implements the ECAN Module error interrupt service routine
|
||
|
|
||
|
@Param
|
||
|
None
|
||
|
|
||
|
@Returns
|
||
|
None
|
||
|
*/
|
||
|
void ECAN_ERRI_ISR(void);
|
||
|
|
||
|
|
||
|
#endif // ECAN_H
|