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

📄 msm9841.c

📁 通过车载终端采集GPS数据
💻 C
字号:
#include "typedef.h"
#include "msm9841.h"
#include <intrins.h>
#include "nf_drv.h"


Uchar volatile xdata COMMAND_INPUT _at_ 0xc800;
Uchar volatile xdata DATA_INPUT _at_ 0xc801;

Uint8 voiceSynMethod;
Uint8 volumeVal;
Uint8 samplingFreq;

extern Uchar volatile xdata D12_Y1;//原来的xCONTROLBYTE81K;
extern idata Byte D16CS;//原来的xConByte81KValue;

Byte msm_is_full()
{
    if (1 == MSM_FULL)
        return OK;
    else
        return KO;
}

#define msm_input_command(command) (COMMAND_INPUT = (command))
/*
void msm_input_command(Uint8 command)
{
    COMMAND_INPUT = command;
}*/

#define msm_input_data(databuf) (DATA_INPUT = (databuf))
/*void msm_input_data(Uint8 databuf)
{
    DATA_INPUT = databuf;
}*/

void msm_read_status(Byte* pbuf)
{
    *pbuf = COMMAND_INPUT;
}

/**change strobe to 4 machine cycles**/
void msm_modify_strobe_width()
{
//    CKCON |= 0x02;
}

void msm_default_strobe_width()
{
//	CKCON &= 0xf9;
}

void msm_stop_playback()
{   
    Uint8 configData;
    msm_modify_strobe_width();
    configData = STOP|BOTH_SIDEVOICE;
    msm_input_command(configData);
    msm_default_strobe_width();
}

void msm_change_volume(Byte volume)
{
    volatile Uint8 configData;
    msm_modify_strobe_width();
    configData = VOLUME_SETTING|volume;
    //left voice
    msm_input_command(configData);
    _nop_();
    _nop_();
    //right voice
    configData += 8;
    msm_input_command(configData);
    msm_default_strobe_width();
}

void msm_set_toneformat()
{
    Uint8 configData;
    configData = VOICE_SYN+voiceSynMethod;
    msm_input_command(configData);
    _nop_();
    _nop_();
	_nop_();
}
/*
void tts_reset()
{
    Byte i;
    MSM_RESET = 0;

    for (i=0; i<0xff; i++)
    { 
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
        _nop_();
   }

    for (i=0; i<0xff; i++)
    { 
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
        _nop_();
   }
    MSM_RESET = 1;
}
*/
void msm9841_reset_init()
{
    volatile Uint8 configData;

    D16CS &= 0x7f;
    D12_Y1 = D16CS;//reset=0
    _nop_();
    _nop_();
    _nop_();
	_nop_();
	_nop_();
    _nop_();
    _nop_();
    _nop_();
	_nop_();
    D16CS |= 0x80;
    D12_Y1 = D16CS;//reset = 1
    _nop_();
    _nop_();
    _nop_();
	_nop_();

    msm_modify_strobe_width();
    msm_set_toneformat();
    //analog specification 1;
    //we use default config,use monaural playback
	configData = ANALOG_SPEC1+0;
	msm_input_command(configData);
	_nop_();
    _nop_();
	_nop_();
    
    //analog specification 2;
    //we use default config
	configData = ANALOG_SPEC2+0;
	msm_input_command(configData);
	_nop_();
    _nop_();
	_nop_();

    //set fifo byte configuration
    configData = FIFO_CONFIG+BIT1024;//BIT1024;
    msm_input_command(configData);
    _nop_();
    _nop_();
	_nop_();

    //set output signal
    configData = SIGNAL_FORMAT+0;
    msm_input_command(configData);
    _nop_();
    _nop_();
	_nop_();
    msm_default_strobe_width();
}

void msm9841_init()
{
    volatile Uint8 configData;
    //first should reset msm9841
    //MSM_CH = 0;

    D16CS |= 0x80;
    D12_Y1 = D16CS;//reset = 1
    for (configData=0; configData<0xff; configData++)
    { 
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
        _nop_();
   }

    for (configData=0; configData<0xff; configData++)
    { 
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
        _nop_();
   }

    D16CS &= 0x7f;
    D12_Y1 = D16CS;//reset=0
    
    for (configData=0; configData<0xff; configData++)
    { 
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
        _nop_();
   }

    for (configData=0; configData<0xff; configData++)
    { 
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
        _nop_();
   }
    D16CS |= 0x80;
    D12_Y1 = D16CS;//reset = 1
    
    //delay
    for (configData=0; configData<0xff; configData++)
    { 
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
    	_nop_();
        _nop_();
        _nop_();
        _nop_();
    	_nop_();
        _nop_();
   }
    //end delay
    
    msm_modify_strobe_width();

    //set synthesis method
    configData = VOICE_SYN+BIT4_ADPCM;
    msm_input_command(configData);
    _nop_();
    _nop_();
	_nop_();
    //analog specification 1;
    //we use default config,use monaural playback
	configData = ANALOG_SPEC1+0;
	msm_input_command(configData);
	_nop_();
    _nop_();
	_nop_();
    
    //analog specification 2;
    //we use default config
	configData = ANALOG_SPEC2+0;
	msm_input_command(configData);
	_nop_();
    _nop_();
	_nop_();

    //set fifo byte configuration
    configData = FIFO_CONFIG+BIT1024;//BIT1024;
    msm_input_command(configData);
    _nop_();
    _nop_();
	_nop_();

    //set output signal
    configData = SIGNAL_FORMAT+0;
    msm_input_command(configData);
    _nop_();
    _nop_();
	_nop_();

    volumeVal = DB_0;
    samplingFreq = HZ160K;    

    msm_default_strobe_width();
}

void msm_start_playback()
{
    volatile Uint8 configData;
    msm_modify_strobe_width();
    configData = PLAYBACK_START + samplingFreq;
    msm_input_command(configData);
    msm_default_strobe_width();
}
/**************************for test********************************/
/*
xdata Byte testBuf[12*1024];

void init_test_buf()
{
	Uint16 i;
    Uint32 addr;
	addr=0x50000;
	i=0;
	while (i < 96)
	{
		nf_read_tobuf(addr, testBuf+(128*i), 128);
//		c512_config_read(addr, testBuf+addr, 128);
		addr += 128;
		i++;
	}
}*/


Byte msm_senddata(Byte* pBuf, Byte nLen)
{
    Byte datalen = 0;
    
    msm_modify_strobe_width();
    while (datalen < nLen)
    {
		if (1 == MSM_FULL)
			break;
        msm_input_data(*(pBuf+datalen));
        datalen++;
    }
    
    msm_default_strobe_width();
    return datalen;
}

⌨️ 快捷键说明

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