📄 a1600.lst
字号:
Sunplus u'nSP Assembler - Ver. 1.14.4
Listing File Has Been Relocated
//.include SPT6608.inc
//.include Resource.inc
//
//.public T_SACM_A1600_Table;
//.public F_SACM_DVR1600_Init_; // Hardware Setting
//.public _IRQ2;
//
//// Hasc_Kernel.asm reference Function
//.external F_SACM_DVR1600_Init; //这个初始化,好象.asm文件中有的
//.external F_SACM_DVR1600_IRQ_ServiceLoop; //怎么没有看到啊?
//.external F_SACM_DVR1600_ServiceLoop; //执行DVR1600解码或编码操作
//.external F_SACM_DVR1600_Volume; //设定DVR1600的播放音量
//.external F_SACM_DVR1600_Status; //获取当前DVR1600录放音的状态
//.external F_SACM_DVR1600_Pause; //暂停播放
//.external F_SACM_DVR1600_Resume; //继续播放
//
//.external HASC_FIFO;
//.external HascDEC_FIFO_PTR;
//.external _StatusData;
////.external _aaaa;
//// Purpose: DVR1600 Demo program for SPT6604
//// : It can control Volume and VoiceIndex by Key.
//
//
////---------------------------
////语音播放时用到的单元
//.RAM
//DataRomAddr: .DW 0;
//SegDataRomAddr: .DW 0;
//W_InterRAM_Ptr: .DW 0;
//DataFlag: .DW 0;
//
//
////-----------------------------
////程序调用他时候给的2个值单元地址
//.RAM
//R_SongIndex: .DW 0;
//R_Volume: .DW 0;
//
//
//
//
////.PUBLIC F_SACM_DVR1600_SendDAC
////F_SACM_DVR1600_SendDAC: .PROC
//
//.CODE
////.PUBLIC _FSpeech
//// _F_Speech: .proc_
//.public _InilSpeech
// _InilSpeech: .proc
// PUSH BP to [sp];
// BP=sp+1;
// R1=[BP+3];
// [R_SongIndex] = R1; //歌曲索引为0
// R1=[BP+4]; //歌曲的音量
// [R_Volume]=R1;
//
// //---IO口设置
// R1 = [P_IOC_Dir];
// R1|=0x40;
// [P_IOC_Dir] = R1; // IOC OutPut Mode
//
// R1=[P_IOC_Data];
// R1|=0x40;
// [P_IOC_Data]=R1; //IOC 输出高电压
//
// //---设置音量(0-3)共4级
// R1=[R_Volume];
// CALL F_SACM_DVR1600_Volume;
//
////?Go_play:
// R1 = 0;
// [DataFlag] = R1; //数据标志为0
// R2 -= R2;
// [W_InterRAM_Ptr] = R2;
//
// //---取语音索引号
// R1=[R_SongIndex];
//
// BP =offset T_SACM_A1600_Table;
// BP+ =R1;
// BP=[BP];
//
//
// //---For manual mode, fill the first 32 Data to HASC_FIFO
// R1 = HASC_FIFO;
// R2 = [BP++];
// R3 = [bp]
// R3 = R3 LSL 4
// R3 = R3 LSL 4
// R3 = R3 LSL 2 //左移10位
// [SegDataRomAddr] = R3
//?_FillHASC_FIFO:
// Sr &= 0x3FF //段寄存器 有程序段CS和数据段DS
// SR |= R3
// R4 =DS: [R2];
// R2 +=1
// JNZ ?L_Nover
// R3 +=0x400
// [SegDataRomAddr] = R3 //以上是放音频的基地址
//?L_Nover:
// CALL F_ChangeHighLowByte; //将R4的高、低位互掉
// [R1++] = R4;
// CMP R1,HASC_FIFO+32;
// JNZ ?_FillHASC_FIFO;//以上可能是从新放置音频信息吧?
// [DataRomAddr] = R2;
//
//
// R1 = 0xFFFF; // Voice Index , 0xFFFF means manual mode
// R2 = 2; // Volume Index, 0 ~ 3 .
// call F_SACM_DVR1600_Init;//这个初始化,好象.asm文件中有的
//
// pop BP from[sp];
// RETF;
//.endp
//
//
////---------------------------------
//// 解码播放语音的主循环程序
////---------------------------------
//?_play_loop:
//?_wait_music_end:
// CALL F_SACM_DVR1600_ServiceLoop; //03080 执行DVR1600解码或编码操作
// CALL F_FillRingBuf; // For manual mode, users must fill the HASC_DEC_FIFO
// CALL F_SACM_DVR1600_Status; //获取当前DVR1600录放音的状态
// test R1, 0x0001; //Voice end ?
// JNZ ?_wait_music_end;
// test R1,0x0002; // Voice Pause
// JNZ ?_wait_music_end;
//// call F_Stop_Play; //Stop playback DVR1600
//
////----------------------------
////定时器和ADC的设置
////----------------------------
////-----------------------------------------------------
//// Set Fosc , TimerA or TimerB , TimerData , P_DAC_Ctrl
////-----------------------------------------------------
//F_SACM_DVR1600_Init_: //这个初始化,好象.asm文件中有的
//
// INT OFF;
//
// R1 = 0x0081;
// R1|=[P_SystemClock];
// [P_SystemClock] = R1; //Set High Speed and (/1)
// R1=0x80;
// [P_SystemClock] = R1; //Set High Speed and (/1)
//
// R1 = 0x04;
// [P_IntClr]= R1;
//
// R1 = 0xD500; //Base 32768Hz
// [P_Tmr_Ctrl] = R1;
//
// R1 = 0xFFFC; // 8.192k
// [P_TmrA_Data] = R1; //Set play rate
// [P_TmrA_Load] = R1;
//
// R1 = 0x0004;
// R1|=[P_Int];
// [P_Int] = R1; //Enabel TimerA INT
//
// R1 = 0x0200; //From DACO pin
//// R1|=[P_DtmfTone];
// [P_DtmfTone] = R1;
//
// R1 = 1
//// R1|=[0x7026];
// [0x7026] = R1
// INT IRQ; //IRQ ON;
//
// RETF;
//
//
////*************************************************************************************
//// Stop MIDI : Clear Flag, Disable TimerA and INT
//// 停止播放音乐时,清楚相应的标志位
////*************************************************************************************
//.public _T_Stop_Play
// _T_Stop_Play: .proc
// push R1,R5 to [sp];
// R1 = 0x4;
// [P_IntClr] = R1;
//
// R1 = 0x0000; //Disable TimerA
// [P_Tmr_Ctrl] = R1;
//
// R1 = [P_Int];
// R1 &= 0xFFFF - 0x0004;
// [P_Int] = R1; //Disable INT
//
// r1= [0x7022]
// r1 &= 0xfcff //关闭0x7022(P_DtmfTone_Def)REG 的 DACEN 和 Tone_DACO 两位
// [0x7022] =r1
//
// r1= [0x7026]
// r1 &= 0xfffe //U_AFECtrl->B.EN_DAC2 =0;
// [0x7026] = r1
//
// r1= [P_IOC_Data]
// r1 &=0xfff7 //话机 通过PD。3关闭功放POS机 PC。6
// [P_IOC_Data] = r1
//
// pop R1,R5 from [sp];
// retf
// .endp
//
//// ------------------------------------------------------------------------------------------------------------//
//// Purpose: In the manual mode, user must fill the ring buf after each F_SACM_DVR1600_ServiceLoop is over
//// HascDEC_FIFO_PTR will show the message that the next "Data Pointer"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -