📄 main.lst
字号:
829 00FE ;modify 2006-08-28
830 00FE 3421 CLR USR.@USR_EP0F ;Fix OHCI Volume
831 00FF 0001 clr wdt
832 0100 1F05 clr acc
833 0101 4419 xor a,nCmdIndex1
834 0102 3D0A sz z
835 0103 2979 jmp USB_EP0_ISR_END
836 0104
837 0104 USB_EP0_OUT_TOKEN_Loop:
838 0104 0001 clr wdt
839 0105 2000 E CALL Check_Real_Cmd
840 0106 7D11 sz bFlag_Real_Cmd
841 0107 293E jmp USB_EP0_OUT_TOKEN_End
842 0108
843 0108 0001 clr wdt
844 0109 2000 E CALL FIFO0_RD_CHECK
845 010A 7991 SNZ bFlag_FIFO_Ready
846 010B 2904 JMP USB_EP0_OUT_TOKEN_Loop
847 010C
848 010C 7D12 SZ bFlag_OutTokenRemainInt
849 010D 2915 JMP USB_EP0_OUT_TOKEN_ReadRemain
850 010E
851 010E 0F54 MOV A,OFFSET FIFO_TYPE
852 010F 4086 MOV Data_RStart,A
853 0110 5F05 CLR DATA_RCount
854 0111 7112 SET bFlag_OutTokenRemainInt ;首次终端中,设定标记下次为剩余数据的中断
855 0112
856 0112
857 0112 2000 E CALL READ_FIFO0_EX
858 0113
859 0113 2000 E CALL Send_Hand_Shake
860 0114
861 0114 2917 JMP USB_EP0_OUT_TOKEN_ReadDoneCheck
862 0115 USB_EP0_OUT_TOKEN_ReadRemain:
863 0115 2000 E CALL READ_FIFO0_EX
864 0116
865 0116 2000 E CALL Send_Hand_Shake
866 0117
867 0117 USB_EP0_OUT_TOKEN_ReadDoneCheck:
868 0117 ;根据Setup阶段的数据包确定Data阶段的数据大小检查是否已经完成
869 0117 4704 MOV A,Data_Length
870 0118 4405 XOR A,Data_RCount
871 0119 390A SNZ Z
872 011A 293E JMP USB_EP0_OUT_TOKEN_End
873 011B
874 011B USB_EP0_OUT_TOKEN_ReadDone: ;数据接收完毕
875 011B 0000 NOP
876 011C ;为了与原先的处理流程兼容将Data_Buf的数据保存到FIFO中,
877 011C
878 011C 0F64 MOV A,OFFSET Data_Buf
879 011D 0081 MOV MP0,A
880 011E 0F54 MOV A,OFFSET FIFO_Type
881 011F 0083 MOV MP1,A
882 0120
883 0120 0F08 MOV A,8
884 0121 408B MOV Loop_Counter,A
885 0122
文件:MAIN.ASM 盛群编译器版本 2.86 页次16
886 0122 USB_EP0_OUT_TOKEN_COPYFIFO:
887 0122 0700 MOV A,R0
888 0123 0082 MOV R1,A
889 0124
890 0124 1481 INC MP0
891 0125 1483 INC MP1
892 0126
893 0126 558B DEC Loop_Counter
894 0127 390A SNZ Z
895 0128 2922 JMP USB_EP0_OUT_TOKEN_COPYFIFO
896 0129
897 0129
898 0129 ;decode command
899 0129 ;//parse Cmd , 21H = SetReport Out Data
900 0129 0F21 mov a,21H
901 012A 4419 xor a,nCmdIndex1
902 012B 3D0A sz z
903 012C 2A75 jmp ProcessOutData
904 012D
905 012D ;//parse Cmd , 18H = Speaker Mute Control
906 012D 0F18 mov a,18H
907 012E 4419 xor a,nCmdIndex1
908 012F 3D0A sz z
909 0130 2940 jmp Implement_Speaker_Mute
910 0131
911 0131 ;//parse Cmd , 19H = Mic Mute Control
912 0131 0F19 mov a,19H
913 0132 4419 xor a,nCmdIndex1
914 0133 3D0A sz z
915 0134 294F jmp Implement_Mic_Mute
916 0135
917 0135
918 0135 ;//parse Cmd , 28H = Speaker Volume Control
919 0135 0F28 mov a,28H
920 0136 4419 xor a,nCmdIndex1
921 0137 3D0A sz z
922 0138 2959 jmp Implement_Speaker_Volume
923 0139
924 0139 ;//parse Cmd , 29H = Mic Volume Control
925 0139 0F29 mov a,29H
926 013A 4419 xor a,nCmdIndex1
927 013B 3D0A sz z
928 013C 295F jmp Implement_Mic_Volume
929 013D
930 013D
931 013D
932 013D ;//unknow command
933 013D 293E jmp USB_EP0_OUT_TOKEN_End
934 013E
935 013E USB_EP0_OUT_TOKEN_End:
936 013E 5F19 clr nCmdIndex1
937 013F 2979 JMP USB_EP0_ISR_END
938 0140
939 0140
940 0140 Implement_Speaker_Mute:
941 0140 0001 clr wdt
942 0141 3C54 sz FIFO_out1.0
943 0142 379C clr USVC.7 ;mute
944 0143 3854 snz FIFO_out1.0
945 0144 339C set USVC.7 ;unmute
文件:MAIN.ASM 盛群编译器版本 2.86 页次17
946 0145
947 0145 3C54 sz FIFO_out1.0
948 0146 7192 set bFlag_Audio_Mute ;mute
949 0147 3854 snz FIFO_out1.0
950 0148 7592 clr bFlag_Audio_Mute ;unmute
951 0149
952 0149 7992 snz bFlag_Audio_Mute
953 014A 294E jmp Implement_Speaker_Mute_1
954 014B
955 014B 0FE0 mov a,Min_Volume
956 014C 009C mov USVC,a
957 014D
958 014D 379C clr USVC.7
959 014E
960 014E
961 014E Implement_Speaker_Mute_1:
962 014E 293E jmp USB_EP0_OUT_TOKEN_End
963 014F
964 014F
965 014F Implement_Mic_Mute:
966 014F 0001 clr wdt
967 0150 3C54 sz FIFO_OUT1.0
968 0151 37B0 clr PGA_CTRL.7 ;mute
969 0152 3854 snz FIFO_OUT1.0
970 0153 33B0 set PGA_CTRL.7 ;unmute
971 0154
972 0154 3C54 sz FIFO_out1.0
973 0155 7212 set bFlag_Mic_Mute ;mute
974 0156 3854 snz FIFO_out1.0
975 0157 7612 clr bFlag_Mic_Mute ;unmute
976 0158
977 0158
978 0158 293E jmp USB_EP0_OUT_TOKEN_End
979 0159
980 0159
981 0159
982 0159
983 0159 Implement_Speaker_Volume:
984 0159 0001 clr wdt
985 015A kmov VolumeH_Save,FIFO_out1
986 015C kmov VolumeL_Save,FIFO_out2
987 015E Implement_Speaker_Volume_End:
988 015E 293E jmp USB_EP0_OUT_TOKEN_End
989 015F
990 015F Implement_Mic_Volume:
991 015F 0001 clr wdt
992 0160 0F7F mov a,7FH
993 0161 0455 xor a,FIFO_OUT2
994 0162 3D0A sz z
995 0163 296B jmp Implement_Mic_Volume_Set_Max
996 0164
997 0164 0F80 mov a,80H
998 0165 0455 xor a,FIFO_OUT2
999 0166 3D0A sz z
1000 0167 296F jmp Implement_Mic_Volume_Set_Min
1001 0168
1002 0168 kmov FIFO_TEMP,FIFO_OUT2
1003 016A 2973 jmp Implement_Mic_Volume_1
1004 016B
1005 016B Implement_Mic_Volume_Set_Max:
文件:MAIN.ASM 盛群编译器版本 2.86 页次18
1006 016B 0001 clr wdt
1007 016C kmov FIFO_TEMP,MIC_Max_Volume
1008 016E 2973 jmp Implement_Mic_Volume_1
1009 016F Implement_Mic_Volume_Set_Min:
1010 016F 0001 clr wdt
1011 0170 kmov FIFO_TEMP,MIC_Min_Volume
1012 0172 2973 jmp Implement_Mic_Volume_1
1013 0173 Implement_Mic_Volume_1:
1014 0173 0001 clr wdt
1015 0174 0F80 mov a,80H
1016 0175 0630 and a,PGA_CTRL
1017 0176
1018 0176 4510 or a,FIFO_TEMP
1019 0177 00B0 mov PGA_CTRL,a
1020 0178 Implement_Mic_Volume_End:
1021 0178 293E jmp USB_EP0_OUT_TOKEN_END
1022 0179
1023 0179 USB_EP0_ISR_END:
1024 0179 ;modify 2006-07-27
1025 0179 ;CLR USR.@USR_EP0F ;Fix Bus Enumeration Stress
1026 0179 28CD JMP USB_ISR_END
1027 017A ;-----------------------------------------------------
1028 017A ;EPNPOINT 1 Interrupt
1029 017A ;-----------------------------------------------------
1030 017A USB_EP1_ISR:
1031 017A ;check the data is in fifo ?
1032 017A ;CALL FIFO1_RD_CHECK
1033 017A ;SNZ bFlag_FIFO_Ready
1034 017A ;JMP USB_EP1_ISR_END
1035 017A ;CALL Read_FIFO1
1036 017A
1037 017A ;;CALL FIFO1_WR_CHECK
1038 017A ;;SNZ bFlag_FIFO_Ready
1039 017A ;;JMP USB_EP1_ISR_END
1040 017A ;;MOV A,00H
1041 017A ;;MOV FIFO_OUT1,A
1042 017A ;;MOV A,01H
1043 017A ;;MOV FIFO_SendLen,A
1044 017A ;;CALL WRITE_FIFO1
1045 017A
1046 017A ;JMP USB_EP1_ISR_END
1047 017A
1048 017A ;准备写入数据
1049 017A ;检查是否需要被写入的数据
1050 017A 50B4 SZ CMD_SCount
1051 017B 297D JMP USB_EP1_ISR_Write
1052 017C 29A9 JMP USB_EP1_ISR_END
1053 017D USB_EP1_ISR_Write:
1054 017D 2000 E CALL FIFO1_WR_CHECK
1055 017E 7991 SNZ bFlag_FIFO_Ready
1056 017F 29A9 JMP USB_EP1_ISR_END
1057 0180
1058 0180 ;将CMD_Buf的数据发送出去
1059 0180 ;----------------------------------------------------------------------
1060 0180 ; EP1_InData:
1061 0180 ; EP1在收到IN Token后调用该函数,返回CMD_SPtr, CMD_SCount 指定的数据
1062 0180 ; 若数据
1063 0180 ;
1064 0180 ;----------------------------------------------------------------------
1065 0180 EP1_InData:
文件:MAIN.ASM 盛群编译器版本 2.86 页次19
1066 0180 0001 clr wdt
1067 0181 EP1_InData_stage:
1068 0181 0001 clr wdt
1069 0182 0F00 MOV A,0H
1070 0183 408B MOV Loop_Counter,A ;本次发送的字节数
1071 0184 00D3 MOV FIFO_SendLen,A
1072 0185
1073 0185 ;
1074 0185 ;1)将数据保存到FIFO_OUT
1075 0185 ;2)再将数据写入到FIFO
1076 0185 ;
1077 0185
1078 0185
1079 0185 4734 MOV A,CMD_SCount ;检查是否仍有待处理数据
1080 0186 0C00 XOR A,00H
1081 0187 3D0A SZ Z
1082 0188 29A9 JMP USB_EP1_ISR_END ;A=00H
1083 0189
1084 0189 4735 MOV A,CMD_SPtr
1085 018A 0081 MOV MP0,A
1086 018B ;准备装载数据到内存
1087 018B EP1_InData_dma_load_loop:
1088 018B 3026 SET MISC.@MISC_REQ
1089 018C EP1_Write_FIFO_Loop:
1090 018C
1091 018C 0001 clr wdt
1092 018D 4734 MOV A,CMD_SCount
1093 018E 0C00 XOR A,00H
1094 018F 3D0A SZ Z
1095 0190 29A1 JMP EP1_Write_FIFO_End
1096 0191
1097 0191 0F29 MOV A,USB_FIFO1
1098 0192 0083 MOV MP1,A
1099 0193
1100 0193 0700 MOV A,R0
1101 0194 0082 MOV R1,A
1102 0195 55B4 DEC CMD_SCount
1103 0196
1104 0196 54B5 INC CMD_SPtr
1105 0197
1106 0197 4734 MOV A,CMD_SCount
1107 0198 0C00 XOR A,00H
1108 0199 3D0A SZ Z
1109 019A 29A1 JMP EP1_Write_FIFO_End ;FIFO_SendLen=0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -