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

📄 basal_fmradio.lst

📁 5807收音机模块用于炬力平台
💻 LST
📖 第 1 页 / 共 4 页
字号:
##############################################################################
#                                                                            #
# IAR Z80/64180 C-Compiler V4.04B/WIN                                        #
# Front End V4.20N                                       25/Feb/109  14:18:02 #
# Global Optimizer V1.05D                                                    #
#                                                                            #
#       Target option =  Z80                                                 #
#       Memory model  =  banked                                              #
#       Source file   =  d:\case_i_d95f\ap\ap_radio\basal_fmradio.c          #
#       List file     =  d:\case_i_d95f\ap\ap_radio\list\basal_fmradio.lst   #
#       Object file   =  d:\case_i_d95f\ap\ap_radio\obj\basal_fmradio.r01    #
#       ASM file      =  d:\case_i_d95f\ap\ap_radio\list\basal_fmradio.s01   #
#       Command line  =  -v0 -mb -OD:\case_i_d95f\ap\ap_radio\Obj\ -e -K -w  #
#                        -gA -s9 -RCODE -r0 -DNAPDEBUG                       #
#                        -LD:\case_i_d95f\ap\ap_radio\List\ -q -t8           #
#                        -AD:\case_i_d95f\ap\ap_radio\List\                  #
#                        -Id:\sdk_i_95f\inc\ -Id:\case_i_d95f\inc\           #
#                        d:\case_i_d95f\ap\ap_radio\basal_fmradio.c          #
#                                                                            #
#                                             (c) Copyright IAR Systems 1996 #
##############################################################################

   \   0000                    NAME    basal_fmradio(17)
   \   0000                    RSEG    MOD_BS_FMRADIO(0)
   \   0000                    RSEG    RCODE(0)
   \   0000                    EXTERN  BankSwitch
   \   0000                    EXTERN  FM_Exit
   \   0000                    EXTERN  FM_GetStatus
   \   0000                    EXTERN  FM_Init
   \   0000                    EXTERN  FM_MUTE
   \   0000                    EXTERN  FM_Search
   \   0000                    EXTERN  FM_SetFreq
   \   0000                    EXTERN  FM_Standby
   \   0000                    EXTERN  FM_VolumeSet
   \   0000                    EXTERN  abs
   \   0000                    PUBLIC  d_FMStatus
   \   0000                    PUBLIC  disable_hosc
   \   0000                    PUBLIC  fmSendCommand
   \   0000                    PUBLIC  m_FMPlaystatus
   \   0000                    PUBLIC  m_FMStationTab
   \   0000                    EXTERN  ?CLZ80B_4_04_L00
   \   0000                    EXTERN  ?SL_RSH_L03
   \   0000                    EXTERN  ?C_V_SWITCH_L06
   \   0000                    EXTERN  ?BANK_CALL_DIRECT_L08
   \   0000                    EXTERN  ?BANK_FAST_LEAVE_L08
   \   0000                    RSEG    MOD_BS_FMRADIO
   \   0000            fmSendCommand:
      1          /*
      2           *******************************************************************************
      3           *                ACTOS AP
      4           *        FM tunner basal module implementation
      5           *
      6           *        (c) Copyright Actions Co,Ld.
      7           *
      8           *******************************************************************************
      9           */
     10          #include "actos.h"
     11          #include "fmradio.h"     
     12          //#include "chip_cfg.h" 
     13          //#include "../inc/typeext.h"
     14          //#include "../inc/mmcmd.h"
     15          //---公共变量区
     16          
     17          
     18          //extern WORD FMStationTab[20];
     19          //WORD            G_FMStationTab[20];
     20          //fm_play_status_t    G_FMPlaystatus;
     21          
     22          
     23          //-----basal module ----
     24          #pragma memory=dataseg(RCODE)
     25          
     26          //电台频率对照表(注:频率范围87M-108M 以K为精度要三位数,但由于最高位都是1,所以就可不记录,只记中低位就可以了).
     27          
     28          WORD m_FMStationTab[20]; 
     29          fm_play_status_t m_FMPlaystatus; //当前电台信息
     30          FMStatus_Tab_t d_FMStatus; //从FM硬件读取的当前频率和声道信息
     31          char disable_hosc;
     32          
     33          
     34          #pragma memory=default
     35          //extern WORD SearchFreq;
     36          //extern WORD SetFreq;
     37          
     38          #pragma codeseg(MOD_BS_FMRADIO)
     39          
     40          BOOL fmSendCommand(BYTE cmd, int param)
     41          {
   \   0000  FDE5              PUSH    IY
   \   0002  DDE5              PUSH    IX
   \   0004  DD210000          LD      IX,0
   \   0008  DD39              ADD     IX,SP
   \   000A  C5                PUSH    BC
   \   000B  D5                PUSH    DE
   \   000C  F5                PUSH    AF
   \   000D  F5                PUSH    AF
     42              int i;
     43              uchar k;
     44              uint Tempfreq; 
     45          
     46          //    if( (0x7f34 < m_FMPlaystatus.freq) && ( m_FMPlaystatus.freq < 0x80c4) ) disable_hosc = 1;
     47          //    else disable_hosc = 0;
     48          //    
     49          
     50              switch (cmd)
   \   000E  CD0000            CALL    LWRD ?C_V_SWITCH_L06
   \   0011  1200              DEFW    18
   \   0013  01                DEFB    1
   \   0014  02                DEFB    2
   \   0015  04                DEFB    4
   \   0016  07                DEFB    7
   \   0017  09                DEFB    9
   \   0018  0A                DEFB    10
   \   0019  0B                DEFB    11
   \   001A  0C                DEFB    12
   \   001B  11                DEFB    17
   \   001C  12                DEFB    18
   \   001D  40                DEFB    64
   \   001E  44                DEFB    68
   \   001F  45                DEFB    69
   \   0020  53                DEFB    83
   \   0021  55                DEFB    85
   \   0022  56                DEFB    86
   \   0023  83                DEFB    131
   \   0024  84                DEFB    132
   \   0025  0104              DEFW    ?0000
   \   0027  2B03              DEFW    ?0093
   \   0029  AD02              DEFW    ?0084
   \   002B  9903              DEFW    ?0101
   \   002D  3C03              DEFW    ?0094
   \   002F  4802              DEFW    ?0080
   \   0031  8702              DEFW    ?0083
   \   0033  6602              DEFW    ?0082
   \   0035  4F02              DEFW    ?0081
   \   0037  FD03              DEFW    ?0112
   \   0039  F203              DEFW    ?0111
   \   003B  C303              DEFW    ?0106
   \   003D  BE01              DEFW    ?0060
   \   003F  A601              DEFW    ?0059
   \   0041  3501              DEFW    ?0034
   \   0043  6000              DEFW    ?0003
   \   0045  9701              DEFW    ?0057
   \   0047  E203              DEFW    ?0110
   \   0049  4B00              DEFW    ?0001
   \   004B            ?0001:
     51              {
     52                  case MC_OPEN:
     53                  BankSwitch(address_24_of(FM_Init) >> 16);
   \   004B  210000            LD      HL,FM_Init
   \   004E  0E00              LD      C,BYTE3 FM_Init
   \   0050  CD2504            CALL    LWRD ?0141
     54                  return FM_Init(m_FMPlaystatus.mode, (BYTE) param);
   \   0053  DD4EFE            LD      C,(IX-2)
   \   0056  ED5B2D00          LD      DE,(m_FMPlaystatus+5)
   \   005A  CD0000            CALL    LWRD FM_Init
   \   005D  C3BA01            JP      LWRD ?0126
     55                  case MC_PLAY:
   \   0060            ?0002:
     56                  BankSwitch(address_24_of(FM_SetFreq) >> 16);
     57                     Tempfreq = (m_FMPlaystatus.freq<<6) + 0x0010;
     58                     FM_SetFreq(Tempfreq);                 
     59                  break;
   \   0060            ?0003:
     60          
     61                  case MC_STEP:
     62                  if (m_FMPlaystatus.station_count == 0)
   \   0060  3A2C00            LD      A,(m_FMPlaystatus+4)
   \   0063  B7                OR      A
   \   0064  CA4203            JP      Z,?0128
   \   0067            ?0004:
     63                      return FALSE;
   \   0067            ?0005:
     64                  k = 0;
   \   0067  DD36F800          LD      (IX-8),0
     65                  switch (param)
   \   006B  3E01              LD      A,1
   \   006D  A9                XOR     C
   \   006E  B0                OR      B
   \   006F  205A              JR      NZ,?0020
   \   0071            ?0007:
     66                  {
     67                      case UP: //找到下一电台频率
     68                      if (m_FMPlaystatus.station == m_FMPlaystatus.station_count)
   \   0071  3A2C00            LD      A,(m_FMPlaystatus+4)
   \   0074  47                LD      B,A
   \   0075  3A2B00            LD      A,(m_FMPlaystatus+3)
   \   0078  B8                CP      B
   \   0079  2004              JR      NZ,?0009
   \   007B            ?0008:
     69                          m_FMPlaystatus.station = 0;
   \   007B  AF                XOR     A
   \   007C  322B00            LD      (m_FMPlaystatus+3),A
   \   007F            ?0009:
     70                      m_FMPlaystatus.station++;
   \   007F  212B00            LD      HL,m_FMPlaystatus+3
   \   0082  34                INC     (HL)
     71                      for (i = 0; i < 20; i++)
   \   0083  FD210000          LD      IY,0
   \   0087            ?0011:
   \   0087  011480            LD      BC,32788
   \   008A  FDE5              PUSH    IY
   \   008C  E1                POP     HL
   \   008D  78                LD      A,B
   \   008E  AC                XOR     H
   \   008F  67                LD      H,A
   \   0090  ED42              SBC     HL,BC
   \   0092  301E              JR      NC,?0010
   \   0094            ?0012:
     72                      {
     73                          if (m_FMStationTab[i] != 0)
   \   0094  FDE5              PUSH    IY
   \   0096  E1                POP     HL
   \   0097  29                ADD     HL,HL
   \   0098  010000            LD      BC,m_FMStationTab
   \   009B  09                ADD     HL,BC
   \   009C  7E                LD      A,(HL)
   \   009D  23                INC     HL
   \   009E  B6                OR      (HL)
   \   009F  280D              JR      Z,?0017
   \   00A1            ?0014:
     74                          {
     75                              k++;
   \   00A1  DD34F8            INC     (IX-8)
     76                              if (k == m_FMPlaystatus.station)
   \   00A4  3A2B00            LD      A,(m_FMPlaystatus+3)
   \   00A7  47                LD      B,A
   \   00A8  DD7EF8            LD      A,(IX-8)
   \   00AB  B8                CP      B
   \   00AC  2804              JR      Z,?0010
   \   00AE            ?0016:
     77                                  break;
   \   00AE            ?0017:
   \   00AE            ?0015:
   \   00AE  FD23              INC     IY
   \   00B0  18D5              JR      ?0011
   \   00B2            ?0010:
     78                          }
     79          
     80                      }
     81                      if (i >= 20) // 如没有找到电台,重新设置电台数
   \   00B2  011480            LD      BC,32788
   \   00B5  FDE5              PUSH    IY
   \   00B7  E1                POP     HL
   \   00B8  78                LD      A,B
   \   00B9  AC                XOR     H
   \   00BA  67                LD      H,A
   \   00BB  ED42              SBC     HL,BC
   \   00BD  3868              JR      C,?0032
   \   00BF            ?0018:
     82                      {
     83                          m_FMPlaystatus.station_count = k - 1;
   \   00BF  DD7EF8            LD      A,(IX-8)
   \   00C2  C6FF              ADD     A,255
   \   00C4  322C00            LD      (m_FMPlaystatus+4),A
     84                          m_FMPlaystatus.station = 1;

⌨️ 快捷键说明

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