|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2016-10-10 09:52:00
|
显示全部楼层
- void mcp_rx_buff_int_task(uint32_t npcs,volatile fifo_desc_t *m_can_fifo)
- {
- unsigned char tem_can_buff[100];
- unsigned char ID_temp[4] = {0,0,0,0};
- unsigned char tem_read,i,length;
- //send_uart1_to_computer(0,0x05);
- mcp_read_register(npcs,CANINTF,&tem_read);
- DEBUG_STRING("CANINTF:");
- debug_ascii(0,tem_read);
- DEBUG_STRING("\r\n");
- //send_uart1_to_computer(0,tem_read);
- if (GET_BIT(tem_read,ERRIF))//报文错误
- {
- unsigned char tem_eflg;
- mcp_read_register(npcs,EFLG,&tem_eflg);
- if (GET_BIT(tem_eflg,RX1OVR))
- {
- mcp_bit_modify(npcs,EFLG,1 << RX1OVR,0);
- }
- else if (GET_BIT(tem_eflg,RX0OVR))
- {
- mcp_bit_modify(npcs,EFLG,1 << RX0OVR,0);
- }
- else
- {
- mcp_bit_modify(npcs,EFLG,0x3F,0);
- }
- CLR_BIT(tem_read,5);
- }
- if (GET_BIT(tem_read,RX0IF)) //RX BUFF0 接收满中断
- {
- length = 0;
- unsigned char rtr_tem;
- mcp_read_register(npcs,RXB0CTRL,&rtr_tem);
- if (GET_BIT(rtr_tem,RXRTR))
- {
- mcp_read_register_p( npcs,RXB0SIDH , ID_temp , 4); //读取4个字节的ID信息
- DEBUG_STRING("RTR FRAME!\r");
- }
- else
- {
- mcp_read_register_p( npcs,RXB0SIDH , ID_temp , 2); //读取4个字节的ID信息
- }
- mcp_read_register( npcs,RXB0DLC,&length); //读取数据字节长度
- //
- length &= 0x0F;
- mcp_read_register_p(npcs,RXB0D0,tem_can_buff,length);
-
- //send_uart1_to_computer(ID_temp,4);
- DEBUG_STRING("Receive data:");
- debug_ascii(tem_can_buff,length);
- //send_uart1_to_computer(tem_can_buff,length);
- //
- mcp_write_register(npcs,CANINTF,0);
- //mcp_bit_modify(npcs,CANINTF,1 << RX0IF,0);
- // for (i= 0;i<4;i++)
- // {
- // fifo_set_u8t(m_can_fifo,ID_temp[i]);
- // }
- // for (i=0;i<length;i++)
- // {
- // fifo_set_u8t(m_can_fifo,tem_can_buff[i]);
- // }
- CLR_BIT(tem_read,0);
- }
- //
- if (GET_BIT(tem_read,RX1IF)) //RX BUFF1 接收满中断
- {
- length = 0;
- unsigned char rtr_tem;
- mcp_read_register(npcs,RXB1CTRL,&rtr_tem);
- if (GET_BIT(rtr_tem,RXRTR))
- {
- mcp_read_register_p( npcs,RXB1SIDH , ID_temp , 4); //读取4个字节的ID信息
- DEBUG_STRING("RTR FRAME!\r");
- }
- else
- {
- mcp_read_register_p( npcs,RXB1SIDH , ID_temp , 2); //读取4个字节的ID信息
- }
- //mcp_read_register_p( npcs,RXB1SIDH , ID_temp , 4); //读取4个字节的ID信息
- mcp_read_register( npcs,RXB1DLC,&length); //读取数据字节长度
- //
- length &= 0x0F;
- mcp_read_register_p(npcs,RXB1D0,tem_can_buff,length);
- send_uart1_to_computer(tem_can_buff,length);
- //
- mcp_write_register(npcs,CANINTF,0);
- //mcp_bit_modify(npcs,CANINTF,1 << RX1IF,0);
- // for (i= 0;i<4;i++)
- // {
- // fifo_set_u8t(m_can_fifo,ID_temp[i]);
- // }
- // for (i=0;i<length;i++)
- // {
- // fifo_set_u8t(m_can_fifo,tem_can_buff[i]);
- // }
- CLR_BIT(tem_read,1);
- }
- if (GET_BIT(tem_read,TX0IF))
- {
- mcp_write_register(npcs,CANINTF,0);
- //mcp_bit_modify(npcs,CANINTF,1 << TX0IF,0);
- CLR_BIT(tem_read,2);
- }
- if (GET_BIT(tem_read,TX1IF))
- {
- mcp_write_register(npcs,CANINTF,0);
- //mcp_bit_modify(npcs,CANINTF,1 << TX1IF,0);
- CLR_BIT(tem_read,3);
- }
- if (GET_BIT(tem_read,TX2IF))
- {
- mcp_write_register(npcs,CANINTF,0);
- //mcp_bit_modify(npcs,CANINTF,1 << TX2IF,0);
- CLR_BIT(tem_read,4);
- }
- if (GET_BIT(tem_read,MERRE))
- {
- get_mcp_state(npcs);
- if (npcs == NPCSA)
- {
- //clear_mcp_rx_buf(npcs);
- }
- else if(npcs == NPCSB)
- {
- //clear_mcp_tx_buf(npcs);
- }
- mcp_write_register(npcs,CANINTF,0);
- CLR_BIT(tem_read,7);
- }
- }
复制代码
中断接收函数 |
|