📄 mainsrc.lst
字号:
702 024c bfb0 AND #0FF00H
024d ff00
TMS320C1x/C2x/C2xx/C5x COFF Assembler Version 7.00 Mon Aug 2 11:21:40 2004
Copyright (c) 1987-1999 Texas Instruments Incorporated
mainsrc.asm PAGE 17
703 024e 6d45 OR MAIN_TEMP_0
704 024f 9080 SACL *
705
706 0250 _CHECK_NUM_CLR_DTMF:
707 ;将NO_DTMF_COUNT计数清零
708 0250 1046 LACC MAIN_TEMP_1
709 0251 bf90 ADD #NO_DTMF_COUNT
0252 0830
710 0253 9047 SACL MAIN_TEMP_2
711 0254 0147 LAR AR1 , MAIN_TEMP_2
712
713 0255 1080 LACC *
714 0256 9047 SACL MAIN_TEMP_2
715
716 0257 bf80 LACC #0H
0258 0000
717 0259 9080 SACL * , 0;
718
719 025a 7980 B _CHECK_NUM_END
025b 0284'
720 ;!DEBUG
721 025c 1061 LACC ASP_SEND_W_PTR
722 025d bf90 ADD #ASP_SEND_BUF
025e 0380
723 025f 9062 SACL ASP_POINTER
724 0260 0162 LAR AR1 , ASP_POINTER
725 0261 1046 LACC MAIN_TEMP_1
726 0262 bfb0 AND #0FFH
0263 00ff
727 0264 9080 SACL *
728
729 0265 1061 LACC ASP_SEND_W_PTR
730 0266 b801 ADD #1H
731 0267 bfb0 AND #3FH
0268 003f
732 0269 9061 SACL ASP_SEND_W_PTR
733
734 026a 1061 LACC ASP_SEND_W_PTR
735 026b bf90 ADD #ASP_SEND_BUF
026c 0380
736 026d 9062 SACL ASP_POINTER
737 026e 0162 LAR AR1 , ASP_POINTER
738 026f 1044 LACC MAIN_TEMP_3
739 0270 bfb0 AND #0FFH
0271 00ff
740 0272 9080 SACL *
741
742 0273 1061 LACC ASP_SEND_W_PTR
743 0274 b801 ADD #1H
744 0275 bfb0 AND #3FH
0276 003f
745 0277 9061 SACL ASP_SEND_W_PTR
746
747 0278 1061 LACC ASP_SEND_W_PTR
TMS320C1x/C2x/C2xx/C5x COFF Assembler Version 7.00 Mon Aug 2 11:21:40 2004
Copyright (c) 1987-1999 Texas Instruments Incorporated
mainsrc.asm PAGE 18
748 0279 bf90 ADD #ASP_SEND_BUF
027a 0380
749 027b 9062 SACL ASP_POINTER
750 027c 0162 LAR AR1 , ASP_POINTER
751 027d 1047 LACC MAIN_TEMP_2
752 027e 9080 SACL *
753
754 027f 1061 LACC ASP_SEND_W_PTR
755 0280 b801 ADD #1H
756 0281 bfb0 AND #3FH
0282 003f
757 0283 9061 SACL ASP_SEND_W_PTR
758
759 0284 _CHECK_NUM_END:
760 0284 ef00 RET
761
762 ;**********************************************************
763 ;***清除1f指定的时隙的数据缓冲区为0 ,并设定发送到cpu的清
764 ;***没有检测到数据,而且一次发送已经完成后就清除发送
765 ;***#acc0 缓冲的数据低4位为mfc
766 ;**********************************************************
767 0285 FUN_NO_DTMF_PRO:
768 ;取出当前检测的时隙数字
769 ;*************************************************
770 0285 8b89 MAR * , AR1
771 0286 101f LACC DEC_TIMESLOT_INDEX
772 0287 bf90 ADD #TIME_SLOT_TBL , 0
0288 01ce+
773 0289 a646 TBLR MAIN_TEMP_1
774
775 028a 1046 LACC MAIN_TEMP_1
776 028b bf90 ADD #RECIEVE_DTMF_BUF
028c 0810
777 028d 9047 SACL MAIN_TEMP_2
778 028e 0147 LAR AR1 , MAIN_TEMP_2
779
780 028f 1080 LACC *
781 0290 bfa0 SUB #07FFFH
0291 7fff
782 0292 e388 BCND NO_DTMF_END , EQ
0293 02b5'
783
784 ;统计NO_DTMF_COUNT
785 0294 1046 LACC MAIN_TEMP_1
786 0295 bf90 ADD #NO_DTMF_COUNT
0296 0830
787 0297 9044 SACL MAIN_TEMP_3
788 0298 0144 LAR AR1 , MAIN_TEMP_3
789
790 0299 1080 LACC *
791 029a b801 ADD #1H
792 029b 9080 SACL *
793
794 029c ba02 SUB #VAL_NO_DTMF_MAX
TMS320C1x/C2x/C2xx/C5x COFF Assembler Version 7.00 Mon Aug 2 11:21:40 2004
Copyright (c) 1987-1999 Texas Instruments Incorporated
mainsrc.asm PAGE 19
795 029d e344 BCND NO_DTMF_END , LT
029e 02b5'
796
797 029f 0147 LAR AR1 , MAIN_TEMP_2
798
799 ;将数据设为没有发送数据
800 02a0 bf80 LACC #07FFFH
02a1 7fff
801 02a2 9080 SACL *
802
803 ;发送DTMF到交换矩阵
804 ;*************************************************
805 02a3 1046 LACC MAIN_TEMP_1
806 02a4 be0a SFR
807 02a5 bf90 ADD #SEND_DTMF_BUF
02a6 0800
808 02a7 9047 SACL MAIN_TEMP_2
809
810 02a8 0147 LAR AR1 , MAIN_TEMP_2
811 02a9 1080 LACC *
812
813 ;低时隙,高8位,高时隙低8位
814 02aa 4f46 BIT MAIN_TEMP_1 , 15
815 02ab e100 BCND NO_DTMF_HIGH , TC
02ac 02b2'
816
817 02ad bfb0 AND #0FFH
02ae 00ff
818 02af 9080 SACL *
819 02b0 7980 B NO_DTMF_END
02b1 02b5'
820
821 02b2 NO_DTMF_HIGH:
822 02b2 bfb0 AND #0FF00H
02b3 ff00
823 02b4 9080 SACL *
824
825 02b5 NO_DTMF_END:
826
827 02b5 ef00 RET
828
829 **********************************************************
830 *** Goerztel能量计算
831 *** ;f(n)*f(n)-2*cosf*f(n)*f(n-1)+f(n-1)*f(n-1)
832 *** =(f(n)-f(n-1)) * (f(n)-f(n-1))-2*f(n)*f(n-1)*(1+cosf)
833 *** 临时变量VAR_GOERZTEL
834 *** 不变量1ch=#1
835 *** 返回时计算结果保存在acc并且ar1=ar1-1
836 **********************************************************
837 02b6 FUN_GOERTZEL_EN:
838 ;Fx=(1+cosf)
839 ;VAR_GOERZTEL = (1+cosf)
840 ;***************************
841 02b6 bf8f LACC #8000H , 15 ;1,作为定点算法的Q15
TMS320C1x/C2x/C2xx/C5x COFF Assembler Version 7.00 Mon Aug 2 11:21:40 2004
Copyright (c) 1987-1999 Texas Instruments Incorporated
mainsrc.asm PAGE 20
02b7 8000
842 02b8 2f99 ADD *- , 15 , AR1
843 02b9 9829 SACH VAR_GOERZTEL
844
845 ;VAR_GOERZTEL=fx=2*(1+cosf)*f(n-1)
846 ;****************************
847 02ba 7390 LT *-
848 02bb 5429 MPY VAR_GOERZTEL
849 02bc be03 PAC
850 02bd 9929 SACH VAR_GOERZTEL , 1
851
852 ;VAR_GOERZTEL=fx=2*(1+cosf)*f(n-2)*f(n-1)
853 ;*****************************
854 02be 73a0 LT *+
855 02bf 5429 MPY VAR_GOERZTEL
856 02c0 be03 PAC
857 02c1 9929 SACH VAR_GOERZTEL , 1
858
859 ;Fx=abs(f(n-1)-f(n-2))
860 02c2 1f90 LACC *- , 15
861 02c3 3f80 SUB * , 15
862 02c4 be00 ABS
863 02c5 9880 SACH * , 0
864
865 ; (abs(f(n-1)-f(n-2)))^2-2*2*(1+cosf)*f(n-2)*f(n-1)
866 02c6 7380 LT *
867 02c7 5480 MPY *
868 02c8 be03 PAC ;注意数据保存在低位
869 02c9 3f29 SUB VAR_GOERZTEL , 15 ;返回时计算结果保存在acc并且ar1=ar1-1
870 02ca ef00 RET
871
872 *******************************************************
873 ***GOERTZEL算法中的(f(n-2)与f(n-1))计算
874 *** f(n)=2*f(n-1)*cosf-f(n-2)+x(n)
875 ***输入参数: ar7,每次运算循环个数 一次滤波时应该是102个
876 *** ar1,f(n)(第一个),f(n-1)(第二个)的起始地址
877 *** 27H,运算的次数 =8次,
878 *** 后向运算应该为4次对应于4个后向频率 ,二次滤波应该为1次
879 *** ar3,cosf的起始地址,为#100H 二次滤波应该为9
880 *** ar2,数据缓冲区指针
881 *** 全局变量GOERTZEL_DEC_COUNT,GOERTZEL_DEC_DATA_PTR
882 *******************************************************
883 02cb FUN_GOERTZEL_ADD:
884 02cb 738a LT * , AR2
885 02cc 1075 LACC DIV_VALUE_VAR
886 02cd e308 BCND _GOERTZEL_ADD1 , NEQ
02ce 02db'
887
888 02cf _GOERTZEL_ADD:
889 02cf 1aa9 LACC *+ , VAL_VALUE_DIV , AR1 ;x(n)-f(n-2)+2*f(n-1)*cosf
890 02d0 6590 SUB *- , 16
891 02d1 548
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -