?? sacm_a1600.asm
字號:
//========================================================
// 文件名稱: SACM_A1600.asm
// 功能描述: A1600語音播放用戶接口程序
// 一般情況下僅需修改C_SYSTEMCLOCK和C_CLOCK_SET即可
// 維護記錄: 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
//***** 請自行修改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_A1600_Timer_Setting_X1 C_Timer_Setting_8K
.DEFINE C_A1600_Timer_Setting_X2 C_Timer_Setting_16K
//=========================================================================
// 全局函數聲明
//=========================================================================
.PUBLIC F_SACM_A1600_Init
.PUBLIC F_SACM_A1600_DAC_Timer_X1
.PUBLIC F_SACM_A1600_DAC_Timer_X2
.PUBLIC F_SACM_A1600_SendDAC1
.PUBLIC F_SACM_A1600_SendDAC2
.PUBLIC F_SACM_A1600_EndPlay
.PUBLIC F_SACM_A1600_RampUpDAC1
.PUBLIC F_SACM_A1600_RampUpDAC2
.PUBLIC F_SACM_A1600_RampDnDAC1
.PUBLIC F_SACM_A1600_RampDnDAC2
.CODE
//======================================================
// 函數名稱: SACM_A1600_Init
// C調用: 無
// 匯編調用: F_SACM_A1600_Init
// 實現功能: (僅被庫函數調用)A1600初始化過程
// 入口參數: 無
// 出口參數: 無
// 破壞寄存器: r1
//======================================================
F_SACM_A1600_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 = [P_INT_Mask]
r1 |= C_FIQ_TMA // Enable Timer A FIQ
[P_INT_Mask] = r1
fiq on
retf
//======================================================
// 函數名稱: SACM_A1600_DAC_Timer_X1
// C調用: 無
// 匯編調用: F_SACM_A1600_DAC_Timer_X1
// 實現功能: (僅被庫函數調用)當DAC_FIRType選擇0時執行的Timer初始化過程(初始化為8000Hz)
// 入口參數: 無
// 出口參數: 無
// 破壞寄存器: 無
//======================================================
F_SACM_A1600_DAC_Timer_X1:
push r1 to [sp]
r1 = 0x0030 // TimerA CKA=Fosc/2 CKB=1 Tout:off
[P_TimerA_Ctrl] = r1
r1= C_A1600_Timer_Setting_X1 // TimerA setting
[P_TimerA_Data] = r1
pop r1 from [sp]
retf
//======================================================
// 函數名稱: SACM_A1600_DAC_Timer_X2
// C調用: 無
// 匯編調用: F_SACM_A1600_DAC_Timer_X2
// 實現功能: (僅被庫函數調用)當DAC_FIRType選擇1~3時執行的Timer初始化過程(初始化為16000Hz)
// 入口參數: 無
// 出口參數: 無
// 破壞寄存器: 無
//======================================================
F_SACM_A1600_DAC_Timer_X2:
push r1 to [sp]
r1 = 0x0030 // TimerA CKA=Fosc/2 CKB=1 Tout:off
[P_TimerA_Ctrl] = r1
r1= C_A1600_Timer_Setting_X2 // TimerA setting
[P_TimerA_Data] = r1
pop r1 from [sp]
retf
//======================================================
// 函數名稱: SACM_A1600_SendDAC1
// C調用: 無
// 匯編調用: F_SACM_A1600_SendDAC1
// 實現功能: (僅被庫函數調用)解碼后的數字量由DAC1輸出過程
// 入口參數: r1 - 即將輸出的數字量
// 出口參數: 無
// 破壞寄存器: 無
//======================================================
F_SACM_A1600_SendDAC1:
push r1 to [sp]
[P_DAC1] = r1
pop r1 from [sp]
retf
//======================================================
// 函數名稱: SACM_A1600_SendDAC2
// C調用: 無
// 匯編調用: F_SACM_A1600_SendDAC2
// 實現功能: (僅被庫函數調用)解碼后的數字量由DAC2輸出過程
// 入口參數: r1 - 即將輸出的數字量
// 出口參數: 無
// 破壞寄存器: 無
//======================================================
F_SACM_A1600_SendDAC2:
push r1 to [sp]
[P_DAC2] = r1
pop r1 from [sp]
retf
//======================================================
// 函數名稱: SACM_A1600_EndPlay
// C調用: 無
// 匯編調用: SACM_A1600_EndPlay
// 實現功能: (僅被庫函數調用)當一段語音播放完畢時執行的過程
// 入口參數: 無
// 出口參數: 無
// 破壞寄存器: 無
//======================================================
F_SACM_A1600_EndPlay:
nop
retf
//======================================================
// 函數名稱: SACM_A1600_RampUpDAC1
// C調用: 無
// 匯編調用: F_SACM_A1600_RampUpDAC1
// 實現功能: (僅被庫函數調用)在一段語音播放開始前執行的漸入過程(DAC1)
// 入口參數: 無
// 出口參數: 無
// 破壞寄存器: 無
//======================================================
F_SACM_A1600_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
//======================================================
// 函數名稱: SACM_A1600_RampUpDAC2
// C調用: 無
// 匯編調用: F_SACM_A1600_RampUpDAC2
// 實現功能: (僅被庫函數調用)在一段語音播放開始前執行的漸入過程(DAC2)
// 入口參數: 無
// 出口參數: 無
// 破壞寄存器: 無
//======================================================
F_SACM_A1600_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
//======================================================
// 函數名稱: SACM_A1600_RampDnDAC1
// C調用: 無
// 匯編調用: F_SACM_A1600_RampDnDAC1
// 實現功能: (僅被庫函數調用)在一段語音播放結束后執行的漸出過程(DAC1)
// 入口參數: 無
// 出口參數: 無
// 破壞寄存器: 無
//======================================================
F_SACM_A1600_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
//======================================================
// 函數名稱: SACM_A1600_RampDnDAC2
// C調用: 無
// 匯編調用: F_SACM_A1600_RampDnDAC2
// 實現功能: (僅被庫函數調用)在一段語音播放結束后執行的漸出過程(DAC2)
// 入口參數: 無
// 出口參數: 無
// 破壞寄存器: 無
//======================================================
F_SACM_A1600_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
//======================================================
// 函數名稱: SACM_RampDelay
// C調用: 無
// 匯編調用: F_SACM_RampDelay
// 實現功能: (僅被RampUp/RampDn函數調用)延時程序
// 入口參數: 無
// 出口參數: 無
// 破壞寄存器: 無
//======================================================
.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
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -