⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isd1730.lst

📁 内容摘要: LHD6000主板主芯片程序 ISD1730时序说明: 参考:void Send_1Byte(uchar ucData_s)和uchar Receive_1Byte(void)的说明.
💻 LST
📖 第 1 页 / 共 2 页
字号:
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 + -