Changeset 195 for rtos_arduino/trunk
- Timestamp:
- Mar 30, 2016, 4:57:34 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
rtos_arduino/trunk/arduino_lib/libraries/NcesCan/mcp_can.cpp
r136 r195 22 22 */ 23 23 #include "mcp_can.h" 24 25 #ifdef TOPPERS_WITH_ARDUINO 26 #include "rca.h" 27 #define ENTER_CRITICAL wai_sem(SPI_SEM); 28 #define LEAVE_CRITICAL sig_sem(SPI_SEM); 29 #else /* !TOPPERS_WITH_ARDUINO */ 30 #define WAIT_TIMEOUT 31 #define ENTER_CRITICAL 32 #define LEAVE_CRITICAL 33 #endif /* TOPPERS_WITH_ARDUINO */ 24 34 25 35 #define spi_readwrite SPI.transfer … … 553 563 { 554 564 INT8U res; 555 565 566 ENTER_CRITICAL 556 567 SPI.begin(); 557 568 res = mcp2515_init(speedset); 569 LEAVE_CRITICAL 570 558 571 if (res == MCP2515_OK) return CAN_OK; 559 572 else return CAN_FAILINIT; … … 566 579 INT8U MCP_CAN::enableInterrupt(INT8U mask) 567 580 { 581 ENTER_CRITICAL 568 582 mcp2515_modifyRegister(MCP_CANINTE, mask, mask); 583 LEAVE_CRITICAL 584 569 585 return CAN_OK; 570 586 } … … 576 592 INT8U MCP_CAN::disableInterrupt(INT8U mask) 577 593 { 594 ENTER_CRITICAL 578 595 mcp2515_modifyRegister(MCP_CANINTE, mask, !mask); 596 LEAVE_CRITICAL 597 579 598 return CAN_OK; 580 599 } … … 597 616 { 598 617 INT8U res = MCP2515_OK; 618 619 ENTER_CRITICAL; 599 620 #if DEBUG_MODE 600 621 Serial.print("Begin to set Mask!!\r\n"); … … 605 626 Serial.print("Enter setting mode fall\r\n"); 606 627 #endif 628 LEAVE_CRITICAL; 607 629 return res; 608 630 } … … 621 643 Serial.print("Enter normal mode fall\r\n"); 622 644 #endif 645 LEAVE_CRITICAL; 623 646 return res; 624 647 } … … 626 649 Serial.print("set Mask success!!\r\n"); 627 650 #endif 651 LEAVE_CRITICAL; 628 652 return res; 629 653 } … … 636 660 { 637 661 INT8U res = MCP2515_OK; 662 663 ENTER_CRITICAL; 638 664 #if DEBUG_MODE 639 665 Serial.print("Begin to set Filter!!\r\n"); … … 645 671 Serial.print("Enter setting mode fall\r\n"); 646 672 #endif 673 LEAVE_CRITICAL; 647 674 return res; 648 675 } … … 686 713 delay(10); 687 714 #endif 715 LEAVE_CRITICAL; 688 716 return res; 689 717 } … … 693 721 delay(10); 694 722 #endif 695 723 LEAVE_CRITICAL; 696 724 return res; 697 725 } … … 705 733 CHECK_RXBID(rxbid); 706 734 735 ENTER_CRITICAL; 707 736 #if (DEBUG_RXANY==1) 708 737 /* enable both receive-buffers */ … … 732 761 } 733 762 #endif 734 763 LEAVE_CRITICAL; 764 735 765 return CAN_OK; 736 766 } … … 748 778 CHECK_TXBID(txbid); 749 779 780 ENTER_CRITICAL; 750 781 mcp2515_write_canMsg(txbid, id, len, p_buf, ext, rtr); 751 782 mcp2515_modifyRegister(MCP_CANINTF, intf_bit, 0); 752 783 mcp2515_start_transmit( txbid ); 753 784 LEAVE_CRITICAL; 754 785 return CAN_OK; 755 786 } … … 784 815 INT8U stat_bit = (rxbid == 0)? MCP_STAT_RX0IF : MCP_STAT_RX1IF; 785 816 INT8U intf_bit = (rxbid == 0)? MCP_RX0IF : MCP_RX1IF; 786 817 818 ENTER_CRITICAL; 787 819 stat = mcp2515_readStatus(); 788 820 … … 796 828 res = CAN_NOMSG; 797 829 } 830 LEAVE_CRITICAL; 798 831 return res; 799 832 } … … 841 874 INT8U MCP_CAN::checkReceive(INT8U rxbid) 842 875 { 843 INT8U res ;876 INT8U res = CAN_NOMSG; 844 877 CHECK_RXBID(rxbid); 878 879 ENTER_CRITICAL; 845 880 res = mcp2515_readStatus(); /* RXnIF in Bit 1 and 0 */ 846 881 if (rxbid == 0) { 847 882 if ( (res & MCP_STAT_RX0IF) == MCP_STAT_RX0IF) { 848 re turnCAN_MSGAVAIL;883 res = CAN_MSGAVAIL; 849 884 } 850 885 } 851 886 else if (rxbid == 1) { 852 887 if ( (res & MCP_STAT_RX1IF) == MCP_STAT_RX1IF ) { 853 re turnCAN_MSGAVAIL;888 res = CAN_MSGAVAIL; 854 889 } 855 890 } 856 return CAN_NOMSG; 891 LEAVE_CRITICAL; 892 893 return res; 857 894 } 858 895 … … 863 900 INT8U MCP_CAN::checkSend(INT8U txbid) 864 901 { 865 INT8U res ;902 INT8U res = CAN_NOSENDWAIT; 866 903 INT8U txbx_ctrl[MCP_N_TXBUFFERS] = { MCP_TXB0CTRL, MCP_TXB1CTRL, MCP_TXB2CTRL }; 867 904 868 905 CHECK_TXBID(txbid); 869 906 907 ENTER_CRITICAL; 870 908 res = mcp2515_readRegister(txbx_ctrl[txbid]); 871 909 872 910 if ( (res & MCP_TXB_TXREQ_M) == MCP_TXB_TXREQ_M) { 873 return CAN_SENDWAIT; 874 } 875 911 res = CAN_SENDWAIT; 912 } 913 LEAVE_CRITICAL; 914 876 915 return CAN_NOSENDWAIT; 877 916 } … … 883 922 INT8U MCP_CAN::checkError(void) 884 923 { 924 INT8U res = CAN_OK; 925 926 ENTER_CRITICAL; 885 927 INT8U eflg = mcp2515_readRegister(MCP_EFLG); 886 928 887 929 if ( eflg & MCP_EFLG_ERRORMASK ) 888 930 { 889 return CAN_CTRLERROR; 890 } 891 else 892 { 893 return CAN_OK; 894 } 931 res = CAN_CTRLERROR; 932 } 933 LEAVE_CRITICAL; 934 935 return res; 895 936 } 896 937
Note:
See TracChangeset
for help on using the changeset viewer.