📄 evb061test.lst
字号:
< .EXTERNAL F_SP_Set_P_ADC_Ctrl
<
<
<
< //--------------------------------------------
< SACM_MACRO1: .MACRO
<
< .ENDM
<
< SACM_MACRO2: .MACRO
<
< .ENDM
<
<
<
<
< //.define PC_Play_Enable_A2000 1 // Enable the PC-Play function for SACM-A2000 module
< //.define PC_Play_Enable_S480 1 // Enable the PC-Play function for SACM-S480 module
< //.define PC_Play_Enable_S240 1 // Enable the PC-Play function for SACM-S240 module
< //.define PC_Play_Enable_MS01 1 // Enable the PC-Play function for SACM-MS01 module
<
<
<
< //========================================================================================
< // End of hardware.inc
< //========================================================================================
00008D43 .code
//=====================================//
//函数名称:unsigned IOTest()
//出口参数:1.测试成功0、测试失败
//无入口参数
//硬件连接:A口B口短接
//=====================================//
.public _IOTest;
_IOTest: .proc
InitPortAinput_Boutput:
00008D43 40 92 r1=0x0000 //初始化A口为输入端
00008D44 19 D3 02 70 [P_IOA_Dir]=r1
00008D46 19 D3 03 70 [P_IOA_Attrib]=r1
00008D48 19 D3 00 70 [P_IOA_Data]=r1
//初始化B口为输出端
00008D4A 09 93 FF FF r1=0xffff
00008D4C 19 D3 07 70 [P_IOB_Dir]=r1
00008D4E 19 D3 08 70 [P_IOB_Attrib]=r1
00008D50 40 92 r1=0x0000
00008D51 19 D3 05 70 [P_IOB_Data]=r1
WritePortB:
00008D53 09 93 FF FF r1 = Write_Port_Data; //向B口写数据0xaaaa
LoopWrite:
00008D55 41 22 r1 = r1-1;
00008D56 0D 5E jz InitPortBinput_Aoutput;//
00008D57 19 D3 05 70 [P_IOB_Data]=r1
ReadPortA:
//使数据稳定
00008D59 00 EE nop;
00008D5A 00 EE nop;
00008D5B 12 95 00 70 r2 = [P_IOA_Data]; //读A口数据
00008D5D 02 43 cmp r1,r2; //比较读写数据是否相同
00008D5E 4A 5E je LoopWrite;
//je InitPortBinput_Aoutput;
00008D5F 00 EE nop;
00008D60 40 92 r1 = 0x0000; //测试失败
00008D61 00 EE nop;
00008D62 00 EE nop;
00008D63 90 9A retf;
InitPortBinput_Aoutput:
00008D64 40 92 r1=0x0000 //初始化B口为输入
00008D65 19 D3 07 70 [P_IOB_Dir]=r1
00008D67 19 D3 08 70 [P_IOB_Attrib]=r1
00008D69 19 D3 05 70 [P_IOB_Data]=r1
//初始化A口为输出
00008D6B 09 93 FF FF r1=0xffff
00008D6D 19 D3 02 70 [P_IOA_Dir]=r1
00008D6F 19 D3 03 70 [P_IOA_Attrib]=r1
00008D71 40 92 r1=0x0000
00008D72 19 D3 00 70 [P_IOA_Data]=r1
WritePortA: //向A口写数据
00008D74 09 93 FF FF r1 = Write_Port_Data
LoopWrite0:
00008D76 41 22 r1 = r1 - 1;
00008D77 0A 5E jz TestSuc;
00008D78 19 D3 00 70 [P_IOA_Data]=r1
ReadPortB:
//使数据稳定
00008D7A 00 EE nop;
00008D7B 00 EE nop;
00008D7C 12 95 05 70 r2 = [P_IOB_Data]; //读B口数据
00008D7E 02 43 cmp r1,r2; //比较读写数据是否相同
00008D7F 4A 5E je LoopWrite0;
00008D80 40 92 r1 = 0x0000; //测试失败
00008D81 90 9A retf;
TestSuc:
00008D82 41 92 r1 = 0x0001;
00008D83 90 9A retf;
.endp
//===========================================//
//函数名称:unsigned KeyWakeUp()
//出口参数:1.测试成功0、测试失败
//无入口参数
//硬件连接:A口B口短接
//=====================================//
.public _KeyWakeUp;
_KeyWakeUp: .proc
.define P_IOA_RL 0x7004
//InitPortA_input_B_output0:
00008D84 40 92 r1=0x0000 //初始化A口为输入端
00008D85 19 D3 02 70 [P_IOA_Dir]=r1
00008D87 19 D3 03 70 [P_IOA_Attrib]=r1
00008D89 19 D3 00 70 [P_IOA_Data]=r1
//初始化B口为输出端
00008D8B 09 93 FF FF r1=0xffff
00008D8D 19 D3 07 70 [P_IOB_Dir]=r1
00008D8F 19 D3 08 70 [P_IOB_Attrib]=r1
00008D91 40 92 r1=0x0000
00008D92 19 D3 05 70 [P_IOB_Data]=r1
00008D94 11 93 10 70 r1 = [P_INT_Ctrl]
00008D96 44 A2 r1 |= 0x0004 //中断初始化
00008D97 19 D3 10 70 [P_INT_Ctrl] = r1;
00008D99 11 93 04 70 r1=[P_IOA_RL]
00008D9B 41 F1 INT IRQ //开中断
00008D9C 57 92 r1=0x0017; //on 32768
00008D9D 19 D3 13 70 [P_SystemClock]=r1 //进入睡眠状态
// R1 = 0x0001; // Clear Watch Dog
//[P_Watchdog_Clear] = R1;
00008D9F 40 92 r1 = 0x0000
00008DA0 19 D3 13 70 [P_SystemClock]=r1
00008DA2 41 92 r1 = 0x0001; //测试成功
00008DA3 90 9A retf;
.endp
//********************************//
//键唤醒中断
//*******************************//
00008094 .text
.public _IRQ3
_IRQ3:
00008094 A0 D8 push r1,r4 to [sp]
00008095 09 93 80 00 r1=0x0080
00008097 11 C3 10 70 test r1,[P_INT_Ctrl] //是否为键唤醒中断
00008099 04 5E jz L_notKeyArouse //否,退出中断程序
0000809A 09 93 80 00 r1=0x0080
0000809C 19 D3 11 70 [P_INT_Clear]=r1 //是,清中断
L_notKeyArouse:
0000809E A0 90 pop r1,r4 from [sp]
0000809F 98 9A reti
//==============================//
// MIC测试部分
//==============================//
00008DA4 .CODE
_InitAD_DA:
00008DA4 40 F1 INT OFF;
00008DA5 70 92 R1 = 0x0030; // 时钟频率为CLKA的Fosc/2
00008DA6 19 D3 0B 70 [P_TimerA_Ctrl] = R1; //
00008DA8 09 93 23 FA R1 = TIMER_DATA_FOR_8KHZ; // 采样率为 8kHz
00008DAA 19 D3 0A 70 [P_TimerA_Data] = R1; //
00008DAC 55 92 R1 = 0x0015; // 设置AGC
//R1 = 0x0011 // 取消AGC
00008DAD 19 D3 15 70 [P_ADC_Ctrl] = R1; // 采用自动方式、且通过MIC_IN通道输入,
00008DAF 09 93 A8 00 R1 = 0x00A8; //通过定时器A的溢出锁存数据,ADC为自动方式
00008DB1 19 D3 2A 70 [P_DAC_Ctrl] = R1;
00008DB3 09 93 00 10 R1 = 0x1000; //
00008DB5 19 D3 10 70 [P_INT_Ctrl] = R1; // 开中断IRQ1_TM
00008DB7 41 F1 INT IRQ;
00008DB8 90 9A retf;
//主程序
.PUBLIC _MICTEST
_MICTEST: .PROC
00008DB9 40 F0 A4 8D call _InitAD_DA // 调用AD 初始化子程序
.ENDP
loop:
00008DBB 41 92 R1 = 0x0001; // Clear Watch Dog
00008DBC 19 D3 12 70 [P_Watchdog_Clear] = R1;
00008DBE 44 EE jmp loop
000080A0 .text
.PUBLIC _IRQ1
_IRQ1:
000080A0 88 D2 push R1 to [SP]
000080A1 11 93 14 70 R1 = [P_ADC]
000080A3 19 D3 17 70 [P_DAC1] = R1
000080A5 19 D3 16 70 [P_DAC2] = R1
000080A7 09 93 00 10 R1 = 0x1000
000080A9 19 D3 11 70 [P_INT_Clear] = R1
000080AB 88 90 pop R1 from [SP]
000080AC 98 9A reti
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -