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

📄 sub.lst

📁 本程序是mc145572U接口驱动程序,有一些问题,希望大家指点.
💻 LST
字号:
C51 COMPILER V8.02   SUB                                                                   11/29/2006 17:29:51 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE SUB
OBJECT MODULE PLACED IN .\obj\sub.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE sub.c BROWSE DEBUG OBJECTEXTEND OBJECT(.\obj\sub.obj)

line level    source

   1          #define   SUB //定义子函数
   2          
   3          #include "reg51.h"
   4          #include "intrins.h"
   5          #include "absacc.h"
   6          #include "io.h"//AT89C2051的IO定义
   7          #include "spi.h"//将SPI子函数定义为外部函数
   8          #include "sub.h"//激活子函数定义为外部函数
   9          #include "ch.h"//通道子函数定义为外部函数
  10          
  11          /*********软件复位函数**********/
  12          
  13           void reset()//软件复位,NR0地址0-000,数据1000
  14            {
  15   1         _nop_();
  16   1       writedata(0X08,8);//0-000-1000 复位
  17   1        delayus(100);    //大于6个时钟周期
  18   1       writedata(0x00,8);//0-000-0000 复位后恢复正常
  19   1         }
  20          
  21          /********选择NT AUTO-eoc初始化**********/
  22          
  23           void NT_initial()
  24             {
  25   1          _nop_();
  26   1              writedata(0x70,8);//M4 Channel transmit BR0地址0111-0000
  27   1              _nop_();
  28   1              writedata(0x77,8);//BR0数据77
  29   1              _nop_();
  30   1              writedata(0x71,8);//M4 Channel receive BR1先写入地址0111-0001
  31   1              _nop_();
  32   1              writedata(0x7F,8);//如果是NT写入数据7F-01111111
  33   1              _nop_();
  34   1              writedata(0x72,8);//M5/M6 channel BR2先写入地址0111-0010
  35   1              _nop_();
  36   1              writedata(0xF0,8);//如果是NT写入数据F0-11110000
  37   1              _nop_();
  38   1              writedata(0x79,8);//EOC/M4/M5/M6 channel control BR9先写入地址0111-1001
  39   1              _nop_();
  40   1              writedata(0x1C,8);//如果是NT写入数据1C-00011100//automatic eoc mode->00----non auto eoc->10
  41   1              _nop_();
  42   1              writedata(0x7A,8);//BR10先写入地址0111-1010  
  43   1              _nop_();
  44   1              writedata(0x01,8);//写入数据01-00000001 选择overlay reg有效
  45   1              _nop_();
  46   1              writedata(0x01,8);//OR7(bo)置1,M4通道模式
  47   1              _nop_();
  48   1              writedata(0x7A,8);//BR10先写入地址0111-1010
  49   1              _nop_();
  50   1              writedata(0x00,8);//bo为0 选择overlay reg无效
  51   1              _nop_();
  52   1              writedata(0x4A,8);//NR4中断使能1010,IRQ1,IRQ3使能
  53   1              delayms(50);
  54   1              }
  55          
C51 COMPILER V8.02   SUB                                                                   11/29/2006 17:29:51 PAGE 2   

  56                  
  57          /*******选择NT AUTO-eco中断处理*********/
  58          
  59          
  60          unsigned char NT_interrupt()
  61          {
  62   1       unsigned char dat,val;
  63   1       if(dat&0x38==0x38)//NR3(b3) = 1
  64   1        {
  65   2        //Test for successful initial activation
  66   2          if((dat&0x1a==0x1a)||(dat&0x1b==0x1b))//IF NR1 = A or B AND  initial activation
  67   2              {
  68   3               writedata(0x74,8);//BR4 address
  69   3              _nop_();         
  70   3              writedata(0x00,8);//write BR4-00
  71   3              _nop_();         
  72   3               writedata(0x75,8);//BR5 address
  73   3              _nop_();         
  74   3              writedata(0x00,8);//write BR5-00
  75   3                      _nop_();
  76   3              if(dat&0x02==0x02)   //IF S/T interface is active- M4的b1位:sai为1 for S/T activity
  77   3                {
  78   4                      writedata(0x70,8);//BR0地址0111-0000
  79   4                      _nop_();
  80   4                      writedata(0xf7,8);//BR0数据f7
  81   4                      _nop_();
  82   4                 }
  83   3               }
  84   2         else if(dat&0x14==0x14) //NR1 = 0100
  85   2           {
  86   3               //disable interrupts activation unsuccessfull
  87   3                } 
  88   2          return(val); 
  89   2         }
  90   1       else
  91   1       { 
  92   2        if(dat&0x32==0x32)//NR3(b1) = 1
  93   2        {
  94   3         //IF BR1(b7) = 1 AND last received BR1(b7) = 0 AND BR1(b6) = 1
  95   3         if(1)
  96   3           {
  97   4              writedata(0x29,8);//NR2(b0)=1
  98   4           }
  99   3         else
 100   3         {
 101   4          //handle other M4 status changes here
 102   4           }
 103   3         }
 104   2       }
 105   1       
 106   1      }
 107          
 108          /*******选择NT AUTO-eoc激活********/
 109          //激活:1.软件复位;2. 初始化相关寄存器;3.设置激活请求;4.若有激活请求中断进入中断处理
 110          
 111           void NT_activation()
 112           {
 113   1              _nop_();
 114   1              reset();
 115   1              _nop_();
 116   1              NT_initial();
 117   1              _nop_();
C51 COMPILER V8.02   SUB                                                                   11/29/2006 17:29:51 PAGE 3   

 118   1              writedata(0x28,8);//NR2的b3置1激活请求
 119   1              _nop_();
 120   1              //判断是否有激活中断请求
 121   1              //进入中断处理
 122   1               NT_interrupt();
 123   1       }
 124          
 125          
 126            /********LT 初始化**********/
 127             void LT_initial()
 128             {
 129   1          _nop_();
 130   1              writedata(0x70,8);//BR0地址0111-0000
 131   1              _nop_();
 132   1              writedata(0x7F,8);//M4发送数据,BR0数据7F-01111111
 133   1              _nop_();
 134   1              writedata(0x71,8);//BR1先写入地址0111-0001
 135   1              _nop_();
 136   1              writedata(0x7F,8);//M4写入数据,BR1数据7F-01111111
 137   1              _nop_();
 138   1              writedata(0x72,8);//BR2写入地址0111-0010
 139   1              _nop_();
 140   1              writedata(0xF0,8);//M5和M6写入数据,BR2数据F0-11110000
 141   1              _nop_();
 142   1              writedata(0x79,8);//BR9先写入地址0111-1001
 143   1              _nop_();
 144   1              writedata(0x8C,8);//BR9写入数据8C-10001100
 145   1              _nop_();
 146   1              writedata(0x7A,8);//BR10先写入地址0111-1010
 147   1              _nop_();
 148   1              writedata(0x01,8);//写入数据01-00000001 选择overlay reg有效
 149   1              _nop_();
 150   1              writedata(0x01,8);//OR7(bo)置1,M4通道模式
 151   1              _nop_();
 152   1              writedata(0x7A,8);//BR10先写入地址0111-1010
 153   1              _nop_();
 154   1              writedata(0x00,8);//写入数据00-00000000 选择overlay reg无效
 155   1              _nop_();
 156   1              writedata(0x61,8);//R6地址0-110和前4位数据0001
 157   1              _nop_();
 158   1              writedata(0xFF,8);//R6后8位数据11111111
 159   1              _nop_();
 160   1              writedata(0x4E,8);//NR4中断使能1110,IRQ1,IRQ2,IRQ3使能
 161   1              delayms(50);
 162   1              }
 163          
 164          
 165          /*******LT中断处理*********/
 166          unsigned char LT_interrupt()
 167          {
 168   1       unsigned char dut;
 169   1              if(1)
 170   1              {
 171   2          
 172   2              ; }
 173   1               else
 174   1              {
 175   2                ;}
 176   1              return(dut);
 177   1      }
 178          
 179          
C51 COMPILER V8.02   SUB                                                                   11/29/2006 17:29:51 PAGE 4   

 180          /*******LT激活********/
 181          //激活:1.软件复位;2. 初始化相关寄存器;3.设置激活请求;4.若有激活请求中断进入中断处理
 182          
 183           void LT_activation()
 184           {
 185   1              _nop_();
 186   1              reset();
 187   1              _nop_();
 188   1              LT_initial();
 189   1              _nop_();
 190   1              writedata(0x28,8);//NR2的b3置1激活请求
 191   1              //判断是否有激活中断请求
 192   1              //进入中断处理
 193   1              LT_interrupt();
 194   1       }
 195          
 196                  /******初始化各控制寄存器*******/
 197          
 198             void initial_reg()
 199           {
 200   1        delayms(100);
 201   1       
 202   1        //unsigned char x,y;
 203   1       /*****************************************************
 204   1       Nibble registers NR0~NR5为8位  地址是高4位的后3位为0-A2-A1-A0 低4位为数据
 205   1       //3位地址与NR0~NR5对应;地址6和7有其他作用
 206   1       //例如:NR1对应地址001
 207   1       ******************************************************/ 
 208   1       
 209   1        
 210   1       //WRITE NR2 有效控制寄存器
 211   1       writedata(0x24,8);//地址0-010,数据0100
 212   1      
 213   1      //WRITE NR4 中断使能寄存器
 214   1       writedata(0x4F,8); //IRQ使能都有效,地址0-100,数据1111
 215   1      
 216   1      //WRITE NR5 IDL2数据控制寄存器
 217   1        writedata(0x51,8);//地址0-101,block阻塞B1,B2通道,数据0001  0001不阻塞B1,B2通道
 218   1      
 219   1       
 220   1      
 221   1       /****************************************************
 222   1       Nibble register R6为双8位,R6的地址是前8位的高4位0-A2-A1-A0后12位为数据
 223   1       //固定地址6: 写地址为0-A2-A1-A0为0110读数据0-A2-A1-A0为1110
 224   1       // R6写读都可以为8位和16位选择 
 225   1      ******************************************************/
 226   1      
 227   1      //R6 eoc 数据寄存器 Embedded Operations Channel (eoc)
 228   1       
 229   1      
 230   1      
 231   1      
 232   1      
 233   1       /****************************************************
 234   1       Byte registers BR0~BR15为双8位,前8位的低4位为地址0111-A3-A2-A1-A0后8位为数据
 235   1       //4位地址与BR0~BR15对应?
 236   1       // BR0~BR15写读都可以为8位和16位选择
 237   1      ******************************************************/
 238   1      
 239   1       //WRITE BR0 M4发送数据寄存器
 240   1      
 241   1      writedata(0x70,8);// 先写入地址0111-0000
C51 COMPILER V8.02   SUB                                                                   11/29/2006 17:29:51 PAGE 5   

 242   1      writedata(0xfd,8);// (选择写入数据)如果是网络到NT写入数据11111101/uoa-只有u接口有效置0
 243   1      writedata(0x8f,8);// 如果是NT到网络写入数据10001111/
 244   1       
 245   1       //WRITE BR1 M4接收数据寄存器
 246   1      writedata(0x71,8);//先写入地址0111-0001
 247   1      writedata(0xfd,8);// (选择写入数据)如果是网络到NT写入数据11111101/uoa-只有u接口有效置0
 248   1      writedata(0x8f,8);// 如果是NT到网络写入数据10001111/
 249   1      
 250   1       //WRITE BR2 M5与M6发送数据寄存器
 251   1      
 252   1      writedata(0x72,8); //先写入地址0111-0010
 253   1      writedata(0xf0,8); //b0-b3必须为0
 254   1      
 255   1      //WRITE BR3 M5与M6接收数据寄存器
 256   1      
 257   1      writedata(0x73,8); //先写入地址0111-0011
 258   1      writedata(0xf0,8); //
 259   1      
 260   1       //WRITE BR4 febe 计数器
 261   1       //WRITE BR5 nebe 计数器
 262   1       //WRITE BR6 loopback IDL2 控制
 263   1       //WRITE BR7  IDL2 配置
 264   1       //WRITE BR8  发送帧和模式控制
 265   1       //WRITE BR9  主通道配置
 266   1       //WRITE BR10 覆盖选择寄存器
 267   1      
 268   1       //WRITE BR13 eco canceller测试寄存器
 269   1       //WRITE BR14 测试寄存器
 270   1       //WRITE BR15 校订数寄存器
 271   1      
 272   1       }
 273          
 274          /**********************读出各状态寄存器的信息的函数***************/
 275           unsigned char read_statusReg()
 276          {
 277   1      unsigned char ddt;
 278   1       
 279   1      //READ NR1  有效状态寄存器
 280   1      
 281   1      //reaad BR1 and BR3
 282   1      
 283   1      //READ BR11 有效状态寄存器
 284   1      
 285   1      //READ BR12 有效状态测试寄存器
 286   1      
 287   1      return(ddt);
 288   1       }
 289          
 290          
 291           //延时程序us和ms
 292          
 293          void delayus(unsigned int a)//OSC-in用11.0592MHz
 294           {
 295   1         while(a--)
 296   1         {
 297   2          _nop_();//每一个nop指令周期为1us
 298   2         }
 299   1       }
 300          
 301          
 302          void delayms(unsigned int b)//OSC-in用11.0592MHz
 303           {
C51 COMPILER V8.02   SUB                                                                   11/29/2006 17:29:51 PAGE 6   

 304   1         unsigned int c; 
 305   1         while(b--)
 306   1          {
 307   2         for(c=0;c<1001;c++)//1000us=1ms
 308   2           { 
 309   3               _nop_();
 310   3               }
 311   2          }
 312   1       }
 313          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    544    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       4
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -