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

📄 fm_i2cdrv1.msa

📁 yts收音模块用汇编语言写的,介绍了收音的搜台和处理过程
💻 MSA
📖 第 1 页 / 共 2 页
字号:
/********************************************************************************************
Nigata NS953 FM module YTS7001 driver(I2C DRIVER)
writen by Gongjian. for GL3951 S1. 05-1-18
********************************************************************************************/
#include "actos.h"
    module    NS953_DIVER
    
public     FM_INIT_Drv                    //FM initialization
public     FM_EXIT_Drv                    //release bus
public     FM_SETFREQ_Drv                 //FM set frequency
public     FM_SEARCH_Drv                  //Search operation upwards or downwards
public     FM_SETMUTE_Drv                 //Set muted or no muted
public     FM_STANDBY_Drv                 //Set standby status
public     FM_STEREO_Drv                  //Set stereo or mono
public     FM_GETSTATUS_Drv               //Judge preset operation complete
public     FM_VolumeSet_Drv               //Set Volume Level
public     FM_result
public     Register_Data 
public     Register_Address
public	   	FREQ_RF
public		WRITE_BUFFER
public		READ_BUFFER
public		R1_PCNTL
public		R2_PCNTH
public		R8_PDETTST
//From  FM_DRV2.msa
extern     CALCULATE_PLL
extern     I2C_Init
extern     I2C_Exit
extern     READ_Stereo
extern     Write_Register
extern     WRITE_ONEFRAME
extern     Read_Register
extern     READ_ONEFRAME
extern     R8_Readdata
extern     FMwait20ms
extern     FMwait10ms
extern     FMwait30ms
//********************************************************************************
 RSEG    RCODE   //入口:位 ,输入,输出,输入数据,输出数据  
//Write operation buffer,size 14 bytes
WRITE_BUFFER        DEFB    00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H      
 //Read operation buffer,size 14 bytes
READ_BUFFER         DEFB    00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H 
R0                  DEFB    10H     //Register R0    
R0_PE               DEFB    00H     //Bit 0 of R0(Power)                                  
R0_MUTE             DEFB    00H     //Bit 1 of R0(Mute)                                  
R0_IFCST            DEFB    00H     //Bit 2 of R0(IFCST)                                 
R0_MOST             DEFB    00H     //Bit 3 of R0(Stereo) 
R0_SWSTD            DEFB    01H     //Bit 4 to 7 of R0(STDO OUTPUT)    
R1_PCNTL            DEFB    00H     //Bit 0 to 7 of R1(PLL LOW)
R2_PCNTH            DEFB    00H     //Bit 0 to 5 of R2(PLL HIGH) 
R2_XSEL             DEFB    01H     //Bit 6 of R2(Xtal.)
R2_FSEL             DEFB    01H     //Bit 7 of R2(Synthe Freq.)
R3_DEMP             DEFB    01H     //Bit 0 of R3(De-emphasis)
R3_PESNC            DEFB    01H     //Bit 1 of R3(SNC)
R3_PEHCC            DEFB    01H     //Bit 2 of R3(HCC)
R3_SDREG            DEFB    04H     //Bit 3 to 6 of R3(Seek judgement level)
R3_ACNT             DEFB    00H     //Bit 7 of R3(For Test)
R4_SMTREG           DEFB    07H     //Bit 0 to 4 of R4(For Test)
R4_SNCREG           DEFB    0CH     //Bit 5 to 7 of R4(For Test)
R5_HCCREG           DEFB    03H     //Bit 0 to 2 of R5(HCC)
R5_SEP              DEFB    0CH     //Bit 3 to 7 of R5(For Test)
R6                  DEFB    88H     //Bit 0 to 7 of R6(For Test)
R7                  DEFB    5DH     //Bit 0 to 7 of R7(For Test)
R8                  DEFB    0FH     //Register R8
R9                  DEFB    8DH     //Bit 0 to 7 of R9(For Test)                            
R10                 DEFB    28H     //Bit 0 TO 7 of R10(For Test)                                 
R11                 DEFB    8CH     //Bit 0 TO 7 of R11(For Test)
R12                 DEFB    04H     //Bit 0 TO 7 of R12(For Test)
R8_OTHERS           DEFB    00H     //Bit 0 to 6 of R8(For Test)
R8_PDETTST          DEFB    00H     //Bit 7 of R8(For Test)                                  

FREQ_RF             DEFB    00H,00H    //省去最高位1
FM_result           DEFB    00H        //00 mean error,1 mean true
//中间变量
Register_Data       DEFB          00H
Register_Address    DEFB          00H

SOFT_SUD            DEFB     00H
VolumeLEV           DEFB    00H

Analogtempbuf       DEFB    00H,00H

//Register Address
#define	    REG0	   0

//VCCOUT Enable 
#define     POWER_CONTROL       0DFH
#define     VCCOUT_num          01H

//------------------------------------------------------------------------------------------            
                     RSEG    FM_CTRL_D
/********************************************************************************************
Function is FM initialization and enable bus.
Input parameter:DE(DE is first address of input structurn).        
                1.band information.1-Japan 0-US
                2.SDREG:LEVEL        
********************************************************************************************/
FM_INIT_Drv:
        PUSH    AF
        PUSH    BC
        PUSH    DE
        
        LD      A,(DE)
        LD      (LWRD R3_DEMP),A        
        INC     DE 
        LD      A,(DE)
        LD      (LWRD R3_SDREG),A       

        LD      DE,LWRD Analogtempbuf
        LD      A,08H
        LD      (DE),A
        mEnableAIn
        
        LD      E,02H
        LD      C,05H
        mSetAGain
        
        					//change by  ybfu
        LD      DE,LWRD Analogtempbuf
        LD      A,02H
        LD      (DE),A
        INC     DE
//volume set!!   
        LD      A,00H
        LD      (DE),A
        DEC	DE
        //CALL    LWRD EnablePA
        mPA_Enable
        
                                  
        CALL    LWRD I2C_Init
        //IN      A,(POWER_CONTROL)         //OPEN VDD,POWER ON-VCCOUT 
        //SET     VCCOUT_num,A
        //OUT     (POWER_CONTROL),A 
        
        //CALL    LWRD FMwait20ms               //NEED DELAY;WAIT POWER UP

        LD      B,03H              
FM_INIT_LOOP:
        DEC     B
        JR      Z,FM_INIT_EXIT                      
        LD      E,REG0                    //PE=0-POWER OFF,MUTE ON
        LD      C,02H
        CALL    LWRD Write_Register
        CP      00H
        JR      Z,FM_INIT_LOOP

FM_INIT_EXIT:
        POP    DE
        POP    BC  
        POP    AF
        RET
        
/*************************************************************
 Function is FM exit and release bus.
      Input parameter:no.
      Output parameter:no
**************************************************************/
FM_EXIT_Drv:
        PUSH    AF 
        PUSH    BC
        
        //IN      A,(POWER_CONTROL)           //POWER OFF-VCCOUT Disable
        //RES     VCCOUT_num,A
        //OUT     (POWER_CONTROL),A 
        CALL    LWRD I2C_Exit        

        mDisableAIn
        mPA_Disable

        POP    BC
        POP    AF
        RET
        
/***************************************************************
Function is preset FM to the current frequency.
Input parameter:DE(DE is first address of input structurn).
        1.Initialization preset frequency(2 bytes).
****************************************************************/
FM_SETFREQ_Drv:
        PUSH    AF
        PUSH    DE
        LD      A,(DE)                  //FREQ_RF LOW byte
        LD      (LWRD FREQ_RF),A
        INC     DE
        LD      A,(DE)                  //FREQ_RF middle byte
        LD      (LWRD FREQ_RF+1),A
        CALL    LWRD FM_setfrequency         
        POP     DE
        POP     AF
        RET

/**************************************************************
Function is Auto Search Station
Input parameter:DE(DE is first address of input structure).
    1.serch frequency
    2.serch direction
*************************************************************/       
FM_SEARCH_Drv:
        PUSH    AF
        PUSH    BC
        PUSH    DE
        
        LD      A,(DE)
        LD      L,A
        INC     DE
        LD      A,(DE)
        LD      H,A
        LD      (LWRD FREQ_RF),HL            //frequency
        INC     DE
        LD      A,(DE)
        LD      (LWRD SOFT_SUD),A            //serach direction;暂时不用
        
        CALL    LWRD CALCULATE_PLL
  
        CALL    LWRD Checkstation                 //看是否存在台
        LD      A,(LWRD FM_result)
        CP      0
        JR      Z,FMSearcherrexit
        LD      A,01H    
        LD      (LWRD FM_result),A
        JR      FM_SEARCH_Drv_exit
FMSearcherrexit:
        LD      A,00H    
        LD      (LWRD FM_result),A
FM_SEARCH_Drv_exit:
        POP     DE
        POP     BC
        POP     AF
        RET
                        
/*********************************************************
Function is set mute.
    Input parameter:DE(DE is first address of input structure)
    1.Mute flag(1 byte).
    Output parameter:no
    Operation condition:
***********************************************************/
FM_SETMUTE_Drv:
      PUSH    AF
      PUSH    BC
      PUSH    HL
    
      LD      A,(LWRD R0)
      SET     0,A
      LD      (LWRD R0),A                 //POWER ON-PE=1
      
      PUSH    DE
      LD      HL,LWRD R0
      RES     1,(HL)
      LD      A,(DE)
      CP      00H
      JR      Z,FM_SETMUTE_start
      SET     1,(HL)
      
      LD      B,3
FM_SETMUTE_start:    
      DEC     B
      JR      Z,FM_SETMUTE_exit
      LD      E,REG0                   //SET R0 MUTE
      LD      A,(LWRD R0)
      LD      C,A
      CALL    LWRD Write_Register
      CP      00H
      JR      Z,FM_SETMUTE_start 
FM_SETMUTE_exit:
      POP     DE
         
      LD      A,(DE)                    //Judge MUTE ON or OFF
      AND     A
      JR      NZ,FM_SETMUTE_exit1
      IN      A,(0D5H)                  //0-3951 FM MUTE
      SET     2,A
      OUT     (0D5H),A
      JR      FM_SETMUTE_exit2
FM_SETMUTE_exit1:                      //1-3951 FM MUTE
      IN      A,(0D5H)
      RES     2,A
      OUT     (0D5H),A
FM_SETMUTE_exit2:            
      POP     HL
      POP     BC
      POP     AF
      RET

/*******************************************************
Function is set standby.
Input parameter:DE(DE is first address of input structure).
    1.PE flag(1 byte):00H-standby.
    Output parameter:no.
    Operation condition:
********************************************************/
FM_STANDBY_Drv:
      PUSH    AF
      PUSH    BC
      PUSH    HL
      
      LD      HL,LWRD R0
      RES     0,(HL)
      LD      A,(DE)
      CP      00H
      JR      Z,FM_STANDBY_start
      SET     0,(HL)
      
      LD      B,3
FM_STANDBY_start:     
      DEC     B
      JR      Z,FM_STANDBY_exit
      LD      E,REG0                   //SET R0 PE
      LD      A,(LWRD R0)
      LD      C,A
      CALL    LWRD Write_Register
      CP      00H
      JR      Z,FM_STANDBY_start 
FM_STANDBY_exit:         
      POP    HL
      POP    BC
      POP    AF
      RET
      
/**************************************************************
Function is set mono or stereo.
Input parameter:DE(DE is first address of input structure).
    1.Stereo flag(1 byte).
    Output parameter:no.
    Operation condition:
*************************************************************/
FM_STEREO_Drv:
      PUSH    AF
      PUSH    BC
      PUSH    HL
      
      LD      A,(LWRD R0)
      SET     0,A
      LD      (LWRD R0),A                //POWER ON-PE=1
      
      LD      HL,LWRD R0
      RES     3,(HL)
      LD      A,(DE)
      CP      00H
      JR      Z,FM_STEREO_start
      SET     3,(HL)
      
      LD      B,3
FM_STEREO_start:     
      DEC     B
      JR      Z,FM_STEREO_exit

⌨️ 快捷键说明

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