/****************************************************************************** �� �� ����MSCAN0.h ����������MSCAN0�����շ����ƺ�����ͷ�ļ� �� �ߣ����� �� ����V1.0 �� �ڣ�2016.11.5 ******************************************************************************/ #ifndef _MSCAN0_H_ #define _MSCAN0_H_ #include "stdint.h" #include "CRG.h" extern uint8_t NM_RECEIVE; /****************************************************************************** ���������� =============================================================================== - MSCANͨ����Ԥ��Ƶ������ʱ������Tq��Ϊ����CAN�źŵ�ʱ�� - ���� Bosch CAN 2.0A/B ��׼, MSCAN����/����ÿһλ��ʱ�䱻��Ϊ��������: ---------------------------------------------------------------------------- | Sync_Seg | Time Segment 1 | Time Segment 2 | ---------------------------------------------------------------------------- |<- 1 Tq ->|<------------ 4 ~ 16 Tq ----------->|<----- 2 ~ 8 Tq ----->| | | |<--------------------------- Total 8 ~ 25 Tq -------------------------->| Sync_Seg�������й̶���1Tqʱ��,CAN�������źŵ��������½����ڱ��β���(����ʱ)�� ��������(����ʱ),��־CAN����һ������λ�շ��Ŀ�ʼ,����ͬ���շ� ʱ�� 1 �����ΰ���CAN��׼��PROP_SEG�κ�PHASE_SEG1��,����ʱ,���ݵIJ��������ڱ� �εĺ�ο�����һ�δ�,���ε�ʱ����������Ϊ 4 ~ 16 Tq ʱ�� 2 �����ΰ���CAN��׼��PHASE_SEG2��,���ε�ʱ����������Ϊ 2 ~ 8 Tq - ͬ����ת����SJW������ͬ���ڼ�,�������λ�ñ��ƶ�������Tq,��ʱ��ݶ�������� ��ֵ��Ϊͬ����ת����,���ɱ�����Ϊ 1 ~ 4 Tq - �û�������ȷ��λʱ���������CAN��׼ -------------------------------------------------- ʱ�� 1 | ʱ�� 2 | ͬ����ת���� -------------------------------------------------- 5 ~ 10 | 2 | 1 ~ 2 4 ~ 11 | 3 | 1 ~ 3 5 ~ 12 | 4 | 1 ~ 4 6 ~ 13 | 5 | 1 ~ 4 7 ~ 14 | 6 | 1 ~ 4 8 ~ 15 | 7 | 1 ~ 4 9 ~ 16 | 8 | 1 ~ 4 -------------------------------------------------- ******************************************************************************/ #define MSCAN0_BAUD_RATE 500 //������,��λkbps #define MSCAN0_T_SEG1 11 //ʱ���1��Tq�� #define MSCAN0_T_SEG2 4 //ʱ���2��Tq�� #define MSCAN0_SAMPLE_POINT MSCAN0_SAMPLE_1POINT #define MSCAN0_SJW 3 //ͬ����ת���� /****************************************************************************** ��������ѡ�� ******************************************************************************/ #define MSCAN0_SAMPLE_1POINT 0x00 //ÿλ����1������(����CAN�Ƽ�) #define MSCAN0_SAMPLE_3POINT 0x80 //ÿλ����3������ /****************************************************************************** Bus-off���� ******************************************************************************/ #define MSCAN0_BUS_OFF_AUTO_RECOVERY 0 //Bus-off�Զ��ָ�ʹ�� #define MSCAN0_BUS_OFF_LV1_RECOVERY_TIME 100 //Bus-off�ָ�ʱ��,��λms #define MSCAN0_BUS_OFF_LV2_RECOVERY_TIME 1000 //Bus-off�ָ�ʱ��,��λms #define MSCAN0_BUS_LIMP_MODE_ENABLE 0 //����ģʽʹ�� #define MSCAN0_BUS_LIMP_MODE_THRESHOLD 11 //��������ģʽ���� /****************************************************************************** ������Ԥ���� ******************************************************************************/ #define MSCAN0_PRESCALER (OSCCLK / (1 + MSCAN0_T_SEG1 + MSCAN0_T_SEG2) / MSCAN0_BAUD_RATE / 1000) #define MSCAN0_BTR0_VALUE ((uint8_t)((MSCAN0_SJW - 1) << 6) | (uint8_t)(MSCAN0_PRESCALER - 1)) #define MSCAN0_BTR1_VALUE (MSCAN0_SAMPLE_POINT | (uint8_t)((MSCAN0_T_SEG2 - 1) << 4) | (uint8_t)(MSCAN0_T_SEG1 - 1)) /****************************************************************************** Bus-off״̬ ******************************************************************************/ #define MSCAN0_BUS_STABLE 0x00 #define MSCAN0_BUS_OFF_LV1 0x01 #define MSCAN0_BUS_OFF_LV2 0x02 #define MSCAN0_BUS_LIMP 0x03 /****************************************************************************** ���ķ���״̬ ******************************************************************************/ #define COMPLETE 0x00 #define NOT_COMPLETE (!COMPLETE) /****************************************************************************** Bus-off��ؽṹ ******************************************************************************/ typedef struct { uint8_t Status; uint8_t Timer; uint8_t Cnt; } MSCAN0BusoffMonitorStruct; /****************************************************************************** �������� ******************************************************************************/ void MSCAN0_L_Data_Request(uint32_t Identifier, uint8_t DLC, uint8_t *Data, uint8_t Priority); void MSCAN0_L_Data_Indication(uint32_t Identifier, uint8_t DLC, uint8_t *Data); void MSCAN0_L_Data_Confirm(uint32_t Identifier, uint8_t TransferStatus); void bsp_CAN_SleepRelease ( void ); void bsp_tx_msgbuf_abort ( void ); void bsp_CAN_Sleep ( void ); void MSCAN0_Bus_Off_Monitoring_Service ( void ); uint8_t MSCAN0_Get_Bus_Status ( void ); void MSCAN0_Init ( void ); void MSCAN0_Enter_Low_Power_Mode ( void ); void MSCAN0_Exit_Low_Power_Mode ( void ); uint8_t MSCAN0_Get_Wake_Up_Flag ( void ); void MSCAN0_L_Data_Service(void); #endif