📄 can.lst
字号:
604 // instead of the function CAN_vConfigMsgObj. The message
605 // object should be accessed by calling the function
606 // CAN_ubRequestMsgObj before calling this function. This
607 // prevents the CAN controller from working with invalid data.
608 //
609 //----------------------------------------------------------------------------
610 // @Returnvalue None
611 //
612 //----------------------------------------------------------------------------
613 // @Parameters ubObjNr:
C166 COMPILER V6.04, CAN 09/08/2007 14:27:20 PAGE 11
614 // Number of the message object to be configured (0-31)
615 // @Parameters *pubData:
616 // Pointer on a data buffer
617 //
618 //----------------------------------------------------------------------------
619 // @Date 2007-5-25
620 //
621 //****************************************************************************
622
623 // USER CODE BEGIN (LoadData,1)
624
625 // USER CODE END
626
627 void CAN_vLoadData(ubyte ubObjNr, ubyte *pubData)
628 {
629 1 ubyte i;
630 1
631 1 CAN_HWOBJ[ubObjNr].uwMSGCTR = 0xfaff; // set CPUUPD and NEWDAT
632 1
633 1 for(i = 0; i < (CAN_HWOBJ[ubObjNr].uwMSGCFG & 0xf0) >> 4; i++)
634 1 {
635 2 CAN_HWOBJ[ubObjNr].ubData[i] = *(pubData++);
636 2 }
637 1
638 1 CAN_HWOBJ[ubObjNr].uwMSGCTR = 0xf7ff; // reset CPUUPD
639 1
640 1 } // End of function CAN_vLoadData
641
642
643 //****************************************************************************
644 // @Function void CAN_viSRN0(void)
645 //
646 //----------------------------------------------------------------------------
647 // @Description This is the interrupt service routine for the Service
648 // Request Node 0 of the TwinCAN module.
649 //
650 //----------------------------------------------------------------------------
651 // @Returnvalue None
652 //
653 //----------------------------------------------------------------------------
654 // @Parameters None
655 //
656 //----------------------------------------------------------------------------
657 // @Date 2007-5-25
658 //
659 //****************************************************************************
660
661 // USER CODE BEGIN (SRN0,1)
662
663 // USER CODE END
664
665 void CAN_viSRN0(void) interrupt CAN_SRN0INT
666 {
667 1 uword uwStatusA;
668 1
669 1 // USER CODE BEGIN (SRN0,2)
670 1
671 1 // USER CODE END
672 1
673 1 while((( ((ulong)CAN_TXIPNDH << 16) + CAN_TXIPNDL) & 0x00000001) || (CAN_ASR & 0x0018))
674 1 {
675 2
C166 COMPILER V6.04, CAN 09/08/2007 14:27:20 PAGE 12
676 2 // status change interrupt of node A
677 2
678 2 uwStatusA = CAN_ASR;
679 2 if (uwStatusA & 0x0008) // if TXOK
680 2 {
681 3 // Indicates that a message has been transmitted successfully
682 3 // (error free and acknowledged by at least one other node).
683 3
684 3 uwStatusA &= 0xfff7;
685 3 CAN_ASR = uwStatusA; // reset TXOK
686 3
687 3 // USER CODE BEGIN (SRN0_NODEA,3)
688 3
689 3 // USER CODE END
690 3 }
691 2
692 2 if (uwStatusA & 0x0010) // if RXOK
693 2 {
694 3 // Indicates that a message has been received successfully.
695 3
696 3 uwStatusA &= 0xffef;
697 3 CAN_ASR = uwStatusA; // reset RXOK
698 3
699 3 // USER CODE BEGIN (SRN0_NODEA,4)
700 3
701 3 // USER CODE END
702 3 }
703 2
704 2
705 2 // USER CODE BEGIN (SRN0_NODEA,13)
706 2
707 2 // USER CODE END
708 2
709 2
710 2
711 2 // message object 0 interrupt
712 2
713 2 if((CAN_HWOBJ[0].uwMSGCTR & 0x0003) == 0x0002) // if INTPND
714 2 {
715 3 if(CAN_TXIPNDL & CAN_TXIPNDL_TXIPND0) // message object 0 transmit interrupt
716 3 {
717 4
718 4 // The transmission of the last message object
719 4 // was successful.
720 4
721 4 // USER CODE BEGIN (SRN0_OBJ0,4)
722 4
723 4 // USER CODE END
724 4
725 4 CAN_HWOBJ[0].uwMSGCTR = 0xfdff; // reset NEWDAT
726 4
727 4 } // End of TXIPND0
728 3
729 3 CAN_HWOBJ[0].uwMSGCTR = 0xfffd; // reset INTPND
730 3
731 3 // USER CODE BEGIN (SRN0_OBJ0,6)
732 3
733 3 // USER CODE END
734 3
735 3 }
736 2
737 2
C166 COMPILER V6.04, CAN 09/08/2007 14:27:20 PAGE 13
738 2 // USER CODE BEGIN (SRN0,3)
739 2
740 2 // USER CODE END
741 2
742 2
743 2 } // End of while()
744 1
745 1 // USER CODE BEGIN (SRN0,7)
746 1
747 1 // USER CODE END
748 1
749 1 } // End of function CAN_viSRN0
750
751
752 //****************************************************************************
753 // @Function void CAN_viSRN1(void)
754 //
755 //----------------------------------------------------------------------------
756 // @Description This is the interrupt service routine for the Service
757 // Request Node 1 of the TwinCAN module.
758 //
759 //----------------------------------------------------------------------------
760 // @Returnvalue None
761 //
762 //----------------------------------------------------------------------------
763 // @Parameters None
764 //
765 //----------------------------------------------------------------------------
766 // @Date 2007-5-25
767 //
768 //****************************************************************************
769
770 // USER CODE BEGIN (SRN1,1)
771
772 // USER CODE END
773
774 void CAN_viSRN1(void) interrupt CAN_SRN1INT
775 {
776 1 uword uwStatusB;
777 1
778 1 // USER CODE BEGIN (SRN1,2)
779 1
780 1 // USER CODE END
781 1
782 1 while((( ((ulong)CAN_RXIPNDH << 16) + CAN_RXIPNDL) & 0x00000002) || (CAN_BSR & 0x0018))
783 1 {
784 2
785 2 // status change interrupt of node B
786 2
787 2 uwStatusB = CAN_BSR;
788 2 if (uwStatusB & 0x0008) // if TXOK
789 2 {
790 3 // Indicates that a message has been transmitted successfully
791 3 // (error free and acknowledged by at least one other node).
792 3
793 3 uwStatusB &= 0xfff7;
794 3 CAN_BSR = uwStatusB; // reset TXOK
795 3
796 3 // USER CODE BEGIN (SRN1_NODEB,3)
797 3
798 3 // USER CODE END
799 3 }
C166 COMPILER V6.04, CAN 09/08/2007 14:27:20 PAGE 14
800 2
801 2 if (uwStatusB & 0x0010) // if RXOK
802 2 {
803 3 // Indicates that a message has been received successfully.
804 3
805 3 uwStatusB &= 0xffef;
806 3 CAN_BSR = uwStatusB; // reset RXOK
807 3
808 3 // USER CODE BEGIN (SRN1_NODEB,4)
809 3
810 3 // USER CODE END
811 3 }
812 2
813 2
814 2 // USER CODE BEGIN (SRN1_NODEB,13)
815 2
816 2 // USER CODE END
817 2
818 2
819 2
820 2 // message object 1 interrupt
821 2
822 2 if((CAN_HWOBJ[1].uwMSGCTR & 0x0003) == 0x0002) // if INTPND
823 2 {
824 3 if(CAN_RXIPNDL & CAN_RXIPNDL_RXIPND1) // message object 1 receive interrupt
825 3 {
826 4
827 4 if((CAN_HWOBJ[1].uwMSGCTR & 0x0300) == 0x0200) // if NEWDAT is set
828 4 {
829 5
830 5 if ((CAN_HWOBJ[1].uwMSGCTR & 0x0c00) == 0x0800) // if MSGLST is set
831 5 {
832 6 // Indicates that the CAN controller has stored a new
833 6 // message into this object, while NEWDAT was still set,
834 6 // ie. the previously stored message is lost.
835 6
836 6 CAN_HWOBJ[1].uwMSGCTR = 0xf7ff; // reset MSGLST
837 6
838 6 // USER CODE BEGIN (SRN1_OBJ1,1)
839 6
840 6 // USER CODE END
841 6 }
842 5 else
843 5 {
844 6 // The CAN controller has stored a new message
845 6 // into this object.
846 6
847 6 // USER CODE BEGIN (SRN1_OBJ1,2)
848 6
849 6 // USER CODE END
850 6 }
851 5
852 5 CAN_HWOBJ[1].uwMSGCTR = 0xfdff; // reset NEWDAT
853 5 }
854 4
855 4 } // End of RXIPND1
856 3
857 3
858 3 CAN_HWOBJ[1].uwMSGCTR = 0xfffd; // reset INTPND
859 3
860 3 // USER CODE BEGIN (SRN1_OBJ1,6)
861 3
C166 COMPILER V6.04, CAN 09/08/2007 14:27:20 PAGE 15
862 3 // USER CODE END
863 3
864 3 }
865 2
866 2
867 2 // USER CODE BEGIN (SRN1,3)
868 2
869 2 // USER CODE END
870 2
871 2
872 2 } // End of while()
873 1
874 1 // USER CODE BEGIN (SRN1,7)
875 1
876 1 // USER CODE END
877 1
878 1 } // End of function CAN_viSRN1
879
880
881
882 // USER CODE BEGIN (CAN_General,10)
883
884 // USER CODE END
885
MODULE INFORMATION: INITIALIZED UNINITIALIZED
CODE SIZE = 1564 --------
NEAR-CONST SIZE = -------- --------
FAR-CONST SIZE = -------- --------
HUGE-CONST SIZE = -------- --------
XHUGE-CONST SIZE = -------- --------
NEAR-DATA SIZE = -------- --------
FAR-DATA SIZE = -------- --------
XHUGE-DATA SIZE = -------- --------
IDATA-DATA SIZE = -------- --------
SDATA-DATA SIZE = -------- --------
BDATA-DATA SIZE = -------- --------
HUGE-DATA SIZE = -------- --------
BIT SIZE = -------- --------
INIT'L SIZE = -------- --------
END OF MODULE INFORMATION.
C166 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -