?? sacm_dvr1600.asm
字號(hào):
//========================================================
// 文件名稱: SACM_DVR1600.asm
// 功能描述: DVR1600語(yǔ)音播放用戶接口程序
// 一般情況下僅需修改C_SYSTEMCLOCK和C_CLOCK_SET即可
// 維護(hù)記錄: 2006-10-16 v1.0, by Qwerty
//========================================================
//=========================================================================
// 包含文件
//=========================================================================
.INCLUDE SPCE061A.inc
//=========================================================================
// 常量和助記符定義
//=========================================================================
.DEFINE C_20M 20480000
.DEFINE C_24M 24576000
.DEFINE C_32M 32768000
.DEFINE C_40M 40960000
.DEFINE C_49M 49152000
//***** 請(qǐng)自行修改C_SYSTEMCLOCK和C_CLOCK_SET ******************************
.DEFINE C_SYSTEM_CLOCK C_49M
.DEFINE C_CLOCK_SET C_Fosc_49M // value of [P_SystemClock], defined in spce061a.inc
//*************************************************************************
.DEFINE C_Timer_Setting_8K 65536 - (C_SYSTEM_CLOCK/2)/8000
.DEFINE C_Timer_Setting_16K 65536 - (C_SYSTEM_CLOCK/2)/16000
.DEFINE C_Timer_Setting_32K 65536 - (C_SYSTEM_CLOCK/2)/32000
.DEFINE C_DVR1600_Timer_Setting_X1 C_Timer_Setting_8K
.DEFINE C_DVR1600_Timer_Setting_X2 C_Timer_Setting_16K
.DEFINE C_DVR1600_Timer_Setting_X4 C_Timer_Setting_32K
//=========================================================================
// 全局函數(shù)聲明
//=========================================================================
.PUBLIC F_SACM_DVR1600_Init
.PUBLIC F_SACM_DVR1600_DAC_Timer_X1
.PUBLIC F_SACM_DVR1600_DAC_Timer_X2
.PUBLIC F_SACM_DVR1600_ADC_Timer_X1
.PUBLIC F_SACM_DVR1600_ADC_Timer_X2
.PUBLIC F_SACM_DVR1600_ADC_Timer_X4
.PUBLIC F_SACM_DVR1600_SendDAC1
.PUBLIC F_SACM_DVR1600_SendDAC2
.PUBLIC F_SACM_DVR1600_GetADC
.PUBLIC F_SACM_DVR1600_EndPlay
.PUBLIC F_SACM_DVR1600_EndRecord
.PUBLIC F_SACM_DVR1600_RampUpDAC1
.PUBLIC F_SACM_DVR1600_RampUpDAC2
.PUBLIC F_SACM_DVR1600_RampDnDAC1
.PUBLIC F_SACM_DVR1600_RampDnDAC2
.CODE
//======================================================
// 函數(shù)名稱: SACM_DVR1600_Init
// C調(diào)用: 無(wú)
// 匯編調(diào)用: F_SACM_DVR1600_Init
// 實(shí)現(xiàn)功能: (僅被庫(kù)函數(shù)調(diào)用)DVR1600初始化過(guò)程
// 入口參數(shù): 無(wú)
// 出口參數(shù): 無(wú)
// 破壞寄存器: r1
//======================================================
F_SACM_DVR1600_Init:
fir_mov off
r1 = C_CLOCK_SET // Setup system clock
[P_SystemClock] = r1
r1 = 0x00A0 // Latch DAC1 by TimerA; Latch DAC2 by TimerA
[P_DAC_Ctrl] = r1
r1 = 0x0005
[P_ADC_Ctrl] = r1
r1 = [P_INT_Mask]
r1 |= C_FIQ_TMA // Enable Timer A FIQ
[P_INT_Mask] = r1
fiq on
retf
//======================================================
// 函數(shù)名稱: SACM_DVR1600_DAC_Timer_X1
// C調(diào)用: 無(wú)
// 匯編調(diào)用: F_SACM_DVR1600_DAC_Timer_X1
// 實(shí)現(xiàn)功能: (僅被庫(kù)函數(shù)調(diào)用)當(dāng)DAC_FIRType選擇0時(shí)執(zhí)行的Timer初始化過(guò)程(初始化為8000Hz)
// 入口參數(shù): 無(wú)
// 出口參數(shù): 無(wú)
// 破壞寄存器: 無(wú)
//======================================================
F_SACM_DVR1600_DAC_Timer_X1:
push r1 to [sp]
r1 = 0x0030 // TimerA CKA=Fosc/2 CKB=1 Tout:off
[P_TimerA_Ctrl] = r1
r1= C_DVR1600_Timer_Setting_X1 // TimerA setting
[P_TimerA_Data] = r1
pop r1 from [sp]
retf
//======================================================
// 函數(shù)名稱: SACM_DVR1600_DAC_Timer_X2
// C調(diào)用: 無(wú)
// 匯編調(diào)用: F_SACM_DVR1600_DAC_Timer_X2
// 實(shí)現(xiàn)功能: (僅被庫(kù)函數(shù)調(diào)用)當(dāng)DAC_FIRType選擇1~3時(shí)執(zhí)行的Timer初始化過(guò)程(初始化為16000Hz)
// 入口參數(shù): 無(wú)
// 出口參數(shù): 無(wú)
// 破壞寄存器: 無(wú)
//======================================================
F_SACM_DVR1600_DAC_Timer_X2:
push r1 to [sp]
r1 = 0x0030 // TimerA CKA=Fosc/2 CKB=1 Tout:off
[P_TimerA_Ctrl] = r1
r1= C_DVR1600_Timer_Setting_X2 // TimerA setting
[P_TimerA_Data] = r1
pop r1 from [sp]
retf
//======================================================
// 函數(shù)名稱: SACM_DVR1600_ADC_Timer_X1
// C調(diào)用: 無(wú)
// 匯編調(diào)用: F_SACM_DVR1600_ADC_Timer_X1
// 實(shí)現(xiàn)功能: (僅被庫(kù)函數(shù)調(diào)用)當(dāng)ADC_FIRType選擇0時(shí)執(zhí)行的Timer初始化過(guò)程(初始化為8000Hz)
// 入口參數(shù): 無(wú)
// 出口參數(shù): 無(wú)
// 破壞寄存器: 無(wú)
//======================================================
F_SACM_DVR1600_ADC_Timer_X1:
push r1 to [sp]
r1 = 0x0030 // TimerA CKA=Fosc/2 CKB=1 Tout:off
[P_TimerA_Ctrl] = r1
r1= C_DVR1600_Timer_Setting_X1 // TimerA setting
[P_TimerA_Data] = r1
pop r1 from [sp]
retf
//======================================================
// 函數(shù)名稱: SACM_DVR1600_ADC_Timer_X2
// C調(diào)用: 無(wú)
// 匯編調(diào)用: F_SACM_DVR1600_ADC_Timer_X2
// 實(shí)現(xiàn)功能: (僅被庫(kù)函數(shù)調(diào)用)當(dāng)ADC_FIRType選擇1時(shí)執(zhí)行的Timer初始化過(guò)程(初始化為16000Hz)
// 入口參數(shù): 無(wú)
// 出口參數(shù): 無(wú)
// 破壞寄存器: 無(wú)
//======================================================
F_SACM_DVR1600_ADC_Timer_X2:
push r1 to [sp]
r1 = 0x0030 // TimerA CKA=Fosc/2 CKB=1 Tout:off
[P_TimerA_Ctrl] = r1
r1= C_DVR1600_Timer_Setting_X2 // TimerA setting
[P_TimerA_Data] = r1
pop r1 from [sp]
retf
//======================================================
// 函數(shù)名稱: SACM_DVR1600_ADC_Timer_X4
// C調(diào)用: 無(wú)
// 匯編調(diào)用: F_SACM_DVR1600_ADC_Timer_X4
// 實(shí)現(xiàn)功能: (僅被庫(kù)函數(shù)調(diào)用)當(dāng)ADC_FIRType選擇2時(shí)執(zhí)行的Timer初始化過(guò)程(初始化為32000Hz)
// 入口參數(shù): 無(wú)
// 出口參數(shù): 無(wú)
// 破壞寄存器: 無(wú)
//======================================================
F_SACM_DVR1600_ADC_Timer_X4:
push r1 to [sp]
r1 = 0x0030 // TimerA CKA=Fosc/2 CKB=1 Tout:off
[P_TimerA_Ctrl] = r1
r1= C_DVR1600_Timer_Setting_X4 // TimerA setting
[P_TimerA_Data] = r1
pop r1 from [sp]
retf
//======================================================
// 函數(shù)名稱: SACM_DVR1600_SendDAC1
// C調(diào)用: 無(wú)
// 匯編調(diào)用: F_SACM_DVR1600_SendDAC1
// 實(shí)現(xiàn)功能: (僅被庫(kù)函數(shù)調(diào)用)解碼后的數(shù)字量由DAC1輸出過(guò)程
// 入口參數(shù): r1 - 即將輸出的數(shù)字量
// 出口參數(shù): 無(wú)
// 破壞寄存器: 無(wú)
//======================================================
F_SACM_DVR1600_SendDAC1:
push r1 to [sp]
[P_DAC1] = r1
pop r1 from [sp]
retf
//======================================================
// 函數(shù)名稱: SACM_DVR1600_SendDAC2
// C調(diào)用: 無(wú)
// 匯編調(diào)用: F_SACM_DVR1600_SendDAC2
// 實(shí)現(xiàn)功能: (僅被庫(kù)函數(shù)調(diào)用)解碼后的數(shù)字量由DAC2輸出過(guò)程
// 入口參數(shù): r1 - 即將輸出的數(shù)字量
// 出口參數(shù): 無(wú)
// 破壞寄存器: 無(wú)
//======================================================
F_SACM_DVR1600_SendDAC2:
push r1 to [sp]
[P_DAC2] = r1
pop r1 from [sp]
retf
//======================================================
// 函數(shù)名稱: SACM_DVR1600_GetADC
// C調(diào)用: 無(wú)
// 匯編調(diào)用: F_SACM_DVR1600_GetADC
// 實(shí)現(xiàn)功能: (僅被庫(kù)函數(shù)調(diào)用)執(zhí)行A/D轉(zhuǎn)換
// 入口參數(shù): 無(wú)
// 出口參數(shù): r1 - 轉(zhuǎn)換得到的數(shù)字量
// 破壞寄存器: r1
//======================================================
F_SACM_DVR1600_GetADC:
r1 = [P_ADC]
retf
//======================================================
// 函數(shù)名稱: SACM_DVR1600_EndPlay
// C調(diào)用: 無(wú)
// 匯編調(diào)用: SACM_DVR1600_EndPlay
// 實(shí)現(xiàn)功能: (僅被庫(kù)函數(shù)調(diào)用)當(dāng)一段語(yǔ)音播放完畢時(shí)執(zhí)行的過(guò)程
// 入口參數(shù): 無(wú)
// 出口參數(shù): 無(wú)
// 破壞寄存器: 無(wú)
//======================================================
F_SACM_DVR1600_EndPlay:
nop
retf
//======================================================
// 函數(shù)名稱: SACM_DVR1600_EndRecord
// C調(diào)用: 無(wú)
// 匯編調(diào)用: SACM_DVR1600_EndRecord
// 實(shí)現(xiàn)功能: (僅被庫(kù)函數(shù)調(diào)用)當(dāng)一段語(yǔ)音播放完畢時(shí)執(zhí)行的過(guò)程
// 入口參數(shù): 無(wú)
// 出口參數(shù): 無(wú)
// 破壞寄存器: 無(wú)
//======================================================
F_SACM_DVR1600_EndRecord:
nop
retf
//======================================================
// 函數(shù)名稱: SACM_DVR1600_RampUpDAC1
// C調(diào)用: 無(wú)
// 匯編調(diào)用: F_SACM_DVR1600_RampUpDAC1
// 實(shí)現(xiàn)功能: (僅被庫(kù)函數(shù)調(diào)用)在一段語(yǔ)音播放開始前執(zhí)行的漸入過(guò)程(DAC1)
// 入口參數(shù): 無(wú)
// 出口參數(shù): 無(wú)
// 破壞寄存器: 無(wú)
//======================================================
F_SACM_DVR1600_RampUpDAC1:
push r1 to [sp]
r1 = [P_DAC1]
r1 &= 0xffc0
cmp r1, 0x8000
jb ?L_Loop2
je ?L_Exit
?L_Loop1:
call F_SACM_RampDelay
r1 -= 0x0040
[P_DAC1] = r1
cmp r1, 0x8000
jne ?L_Loop1
jmp ?L_Exit
?L_Loop2:
call F_SACM_RampDelay
r1 += 0x0040
[P_DAC1] = r1
cmp r1, 0x8000
jne ?L_Loop2
?L_Exit:
pop r1 from [sp]
retf
//======================================================
// 函數(shù)名稱: SACM_DVR1600_RampUpDAC2
// C調(diào)用: 無(wú)
// 匯編調(diào)用: F_SACM_DVR1600_RampUpDAC2
// 實(shí)現(xiàn)功能: (僅被庫(kù)函數(shù)調(diào)用)在一段語(yǔ)音播放開始前執(zhí)行的漸入過(guò)程(DAC2)
// 入口參數(shù): 無(wú)
// 出口參數(shù): 無(wú)
// 破壞寄存器: 無(wú)
//======================================================
F_SACM_DVR1600_RampUpDAC2:
push r1 to [sp]
r1 = [P_DAC2]
r1 &= 0xffc0
cmp r1, 0x8000
jb ?L_Loop2
je ?L_Exit
?L_Loop1:
call F_SACM_RampDelay
r1 -= 0x0040
[P_DAC2] = r1
cmp r1, 0x8000
jne ?L_Loop1
jmp ?L_Exit
?L_Loop2:
call F_SACM_RampDelay
r1 += 0x0040
[P_DAC2] = r1
cmp r1, 0x8000
jne ?L_Loop2
?L_Exit:
pop r1 from [sp]
retf
//======================================================
// 函數(shù)名稱: SACM_DVR1600_RampDnDAC1
// C調(diào)用: 無(wú)
// 匯編調(diào)用: F_SACM_DVR1600_RampDnDAC1
// 實(shí)現(xiàn)功能: (僅被庫(kù)函數(shù)調(diào)用)在一段語(yǔ)音播放結(jié)束后執(zhí)行的漸出過(guò)程(DAC1)
// 入口參數(shù): 無(wú)
// 出口參數(shù): 無(wú)
// 破壞寄存器: 無(wú)
//======================================================
F_SACM_DVR1600_RampDnDAC1:
push r1 to [sp]
r1 = [P_DAC1]
r1 &= 0xffc0
jz ?L_Exit
?L_Loop:
call F_SACM_RampDelay
r1 -= 0x0040
[P_DAC1] = r1
jnz ?L_Loop
?L_Exit:
pop r1 from [sp]
retf
//======================================================
// 函數(shù)名稱: SACM_DVR1600_RampDnDAC2
// C調(diào)用: 無(wú)
// 匯編調(diào)用: F_SACM_DVR1600_RampDnDAC2
// 實(shí)現(xiàn)功能: (僅被庫(kù)函數(shù)調(diào)用)在一段語(yǔ)音播放結(jié)束后執(zhí)行的漸出過(guò)程(DAC2)
// 入口參數(shù): 無(wú)
// 出口參數(shù): 無(wú)
// 破壞寄存器: 無(wú)
//======================================================
F_SACM_DVR1600_RampDnDAC2:
push r1 to [sp]
r1 = [P_DAC2]
r1 &= 0xffc0
jz ?L_Exit
?L_Loop:
call F_SACM_RampDelay
r1 -= 0x0040
[P_DAC2] = r1
jnz ?L_Loop
?L_Exit:
pop r1 from [sp]
retf
//======================================================
// 函數(shù)名稱: SACM_RampDelay
// C調(diào)用: 無(wú)
// 匯編調(diào)用: F_SACM_RampDelay
// 實(shí)現(xiàn)功能: (僅被RampUp/RampDn函數(shù)調(diào)用)延時(shí)程序
// 入口參數(shù): 無(wú)
// 出口參數(shù): 無(wú)
// 破壞寄存器: 無(wú)
//======================================================
.DEFINE C_SACM_RAMP_DELAY 80
F_SACM_RampDelay:
push r1 to [sp]
r1 = C_SACM_RAMP_DELAY // Ramp Up/Dn delay per step
?L_Loop:
r1 -= 0x0001
jnz ?L_Loop
pop r1 from [sp]
retf
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -