📄 isd1730.lst
字号:
C51 COMPILER V8.02 ISD1730 05/18/2008 16:43:12 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE ISD1730
OBJECT MODULE PLACED IN ISD1730.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ISD1730.C LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************
2 * 版权所有 (C)2007,深圳豪恩科技有限公司
3 *
4 * 文件名称: ISD1730.C
5 * 文件标识:
6 * 内容摘要: ISD1730 程序
7 * 其它说明: IC:AT89S52,12MHz,ISD1730典型电路
8 * 当前版本: 0.000
9 * 作 者: 涂常亮(豪恩科技研发中心安全主机组)
10 * 完成日期:
11 *
12 * 修改纪录1:
13 * 修改日期:
14 * 版 本 号:
15 * 修 改 人:
16 * 修改内容:
17 * 修改纪录2:
18 *******************************************************************************/
19
20 /*******************************************************************************
21 !! .
22 ISD1730时序说明:
23 参考:void Send_1Byte(uchar ucData_s)和uchar Receive_1Byte(void)的说明.
24 应先发"RESET"命令再发"PWR_UP"命令,后发"RESET"命令可能不正常工作.
25 1730最高地址只有0xFF,所以对指定地址的操作函数的参数使用了"unsigned char"类型,
26 17系列的其它型号可能才用得到"unsigned int",借用时注意,将对应注释掉的部分还原.!!!
27 *******************************************************************************/
28
29 #include <reg52.h>
30 #include <intrins.h>
31 #include "head.h"
32
33 //ISD1730 命令定义
34 #define PWR_UP 0x01
35 #define STOP 0x02 //停止当前操作
36 #define RESET 0x03 //复位,发送后需再发"PWR_UP",连发出错
37 #define CLR_INT 0x04 //清除中断和EOM位
38 #define RD_STATUS 0x05 //后跟2字节,读取状态寄存器和当前地址
39 #define RD_PLAY_PTR 0x06 //后跟3字节,读取状态寄存器、当前地址和播放指针
40 #define PWR_DOWN 0x07
41 #define RD_REC_PTR 0x08 //后跟3字节,读取状态寄存器、当前地址和录音指针
42 #define RD_DEV_ID 0x09 //后跟2字节,读取器件ID
43
44 #define PLAY_CUR 0x40 //播放当前曲目
45 #define REC 0x41 //从当前地址开始录音
46 #define ERASE_CUR 0x42 //擦除当前曲目
47 #define G_ERASE 0x43 //擦除提示音外所有曲目
48 #define RD_APC 0x44 //后跟3字节,读取状态寄存器、当前地址和APC寄存器
49 #define WR_APC1 0x45 //后跟2字节,将D11:D0写入APC寄存器,由VOC脚调节音量.
50 #define WR_APC2 0x65 //后跟2字节,将D11:D0写入APC寄存器,并由D2:D0调节音量.
51 #define WR_NVCFG 0x46 //将APC的内容写到NVCFG
52 #define LD_NVCFG 0x47 //将NVCFG的内容加载到APC
53 #define PLAY_FWD 0x48 //下一曲
54 #define CHK_MEM 0x49 //检查环形存储结构
55 #define EN_EXTCLK 0x4A //是否使能外部时钟
C51 COMPILER V8.02 ISD1730 05/18/2008 16:43:12 PAGE 2
56 #define SET_PLAY 0x80 //后跟5个字节,从<S10:S0>开始播放,直到<E10:E0>或EOM
57 #define SET_REC 0x81 //后跟5个字节,从<S10:S0>开始录音,直到<E10:E0>
58 #define SET_ERASE 0x82 //后跟5个字节,擦除<S10:S0>到<E10:E0>的内容
59
60 typedef unsigned char uchar;
61 typedef unsigned int uint;
62
63 extern bit g_FlagVoiceOn;
64 extern uint idata g_uiVoiceTimer;
65 extern uchar const idata g_ucAlarmTypes;
66
67 sfr AUXR = 0x8E;
68
69 sbit pin_MISO = P0^4;
70 sbit pin_MOSI = P0^2;
71 sbit pin_ISD_SCLK = P0^1;
72 sbit pin_SS = P0^0;
73 sbit pin_Spk = P0^6;
74
75 void Send_1Byte(uchar ucData_s);
76 uchar Receive_1Byte(void);
77 void SendISD1730CmnCmd(uchar ucCmd);
78
79 uchar ReadStatus(void); //uchar ReadStatus(uchar idata * data p_Status);
80 void WrApcReg(uchar idata ucAPCL,uchar idata ucAPCH);
81 void PlayISD(uchar ucSect, bit FlagSpk); //void PlayISD(uchar ucAddStart, uchar ucAddEnd);
82 void EraseAdd(void);
83 void RecAdd(void);
84
85 /*******************************************************************************
86 * 函数名称:void Send_1Byte(uchar ucData_s)
87 * 功能介绍:发送一个字节到ISD1730
88 * 输入参数:要发送的数据
89 * 输出参数:无
90 * 返 回 值:无
91 * 其它说明:需在调用该函数前后设置好 pin_SS,pin_ISD_SCLK.
92 * SCLK上升沿1730接收数据.
93 * 数据稳定200ns以上再发上升沿,上升沿数据再保持至少200ns.
94 * SCLK上升沿500ns之后,SS才能为高
95 * SCLK的高电平至少保持400ns,低电平至少保持400ns.
96 * SS有效500ns之后再进行操作,SS必须保持为高1us后才能再次为低.
97 * 修改日期 版本号 修改人 修改内容
98 *-------------------------------------------------------------------------------
99 *2007-5-25 V0.0 涂常亮 初次编写
100 *******************************************************************************/
101 void Send_1Byte(uchar ucData_s)
102 {
103 1 uchar i;
104 1
105 1 for (i=0; i<8; i++)
106 1 {
107 2 pin_ISD_SCLK = 0;
108 2 pin_MOSI = (ucData_s%2);
109 2 ucData_s >>= 1;
110 2 pin_ISD_SCLK = 1;
111 2 }
112 1 }
113
114
115 /*******************************************************************************
116 * 函数名称:uchar Receive_1Byte(void)
117 * 功能介绍:接收ISD1730的一个字节数据
C51 COMPILER V8.02 ISD1730 05/18/2008 16:43:12 PAGE 3
118 * 输入参数:无
119 * 输出参数:无
120 * 返 回 值:接收到的数据
121 * 其它说明:需在调用该函数前后设置好 pin_SS,pin_ISD_SCLK.下降沿1730发送数据.
122 * 输出延时500ns,即SCLK下降沿500ns之后ISD1730输出数据才是有效的.
123 * 修改日期 版本号 修改人 修改内容
124 *-------------------------------------------------------------------------------
125 *2007-5-25 V0.0 涂常亮 初次编写
126 *******************************************************************************/
127 uchar Receive_1Byte(void)
128 {
129 1 uchar i;
130 1 uchar ucData_r = 0;
131 1 pin_MOSI = 0;
132 1 for (i=0; i<8; i++)
133 1 {
134 2 pin_ISD_SCLK = 0;
135 2 ucData_r >>= 1;
136 2 ucData_r |= ((uchar)pin_MISO << 7);
137 2 pin_ISD_SCLK = 1;
138 2 }
139 1 return ucData_r;
140 1 }
141
142 /*******************************************************************************
143 * 函数名称:void SendISD1730CmnCmd(uchar ucCmd)
144 * 功能介绍:发送一个格式为XX00的命令到ISD1730
145 * 输入参数:要发送的命令
146 * 输出参数:无
147 * 返 回 值:无
148 * 其它说明:
149 * 修改日期 版本号 修改人 修改内容
150 *-------------------------------------------------------------------------------
151 *2007-5-25 V0.0 涂常亮 初次编写
152 *******************************************************************************/
153 void SendISD1730CmnCmd(uchar ucCmd)
154 {
155 1 pin_MISO = 1;
156 1 pin_MOSI = 0;
157 1 pin_ISD_SCLK = 1;
158 1 pin_SS = 0;
159 1 Send_1Byte(ucCmd);
160 1 Send_1Byte(0x00);
161 1 pin_ISD_SCLK = 1;
162 1 pin_SS = 1;
163 1 pin_MOSI = 0;
164 1 pin_MISO = 1;
165 1 }
166
167 /*******************************************************************************
168 * 函数名称:uchar ReadStatus(uchar idata * data p_Status)
169 * 功能介绍:读取ISD1730的状态寄存器
170 * 输入参数:无
171 * 输出参数:状态寄存器的值
172 * 返 回 值:下一次可用指针地址
173 * 其它说明:
174 * 修改日期 版本号 修改人 修改内容
175 *-------------------------------------------------------------------------------
176 *2007-5-26 V0.0 涂常亮 初次编写
177 *******************************************************************************/
178 uchar ReadStatus(void)
179 {
C51 COMPILER V8.02 ISD1730 05/18/2008 16:43:12 PAGE 4
180 1 uchar ucStatu;
181 1 pin_MISO = 1;
182 1 pin_MOSI = 0;
183 1 pin_ISD_SCLK = 1;
184 1 pin_SS = 0;
185 1 Send_1Byte(RD_STATUS);
186 1 Send_1Byte(0x00); //可以直接从这里开始接收,只是先接收到的是byte2.
187 1 Send_1Byte(0x00);
188 1
189 1 ucStatu = Receive_1Byte();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -