亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mt88l89v2.~c

?? DTMF收發芯片88L89完美驅動(Arm,SDT251環境)
?? ~C
?? 第 1 頁 / 共 2 頁
字號:
/* MT88L89V2.c --- MT88L89 DTMF bsp source file of PBI4A */

/* Copyright 1994-2001 Wuhan Jinglun Electronic Co., Ltd. */

/*
modification history
--------------------
01a,2003-07-25,Huang-XM: written.

*/

/* includes */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>

#include "..\inc\MT88L89V2.h"
#include "nucleus.h"
#include "irq.h"
#include "cog7312.h"
#include "routon.h"

#include "intfuimm.h"
#include "intftone.h"
#include "intfmntn.h"
#include "configio.h"
/* defines */

#define DTMF_TX_BASE		(0x200000DF)	/* DTMF send register base address */
#define DTMF_RX_BASE        (0x200000DF)	/* DTMF receive register base address */
#define DTMF_CONTROL_BASE   (0x20000020)	/* DTMF control register base address */
#define DTMF_STATUS_BASE    (0x20000020)	/* DTMF status register base address */

#define SETBIT32(var,x)		(var=var|( (unsigned long)1 << (x)))
#define DTMF_HISR_STACK_SIZE  	(1024)
#define DTMF_TX_IDLE  			(0xFF)
#define DTMF_TX_WORK  			(0x00)

#define DTMF_WRITE_STATE_IDLE			0
#define DTMF_WRITE_STATE_BUZY			-1

#define TONE_TRACE		//printf

/* globals */
unsigned char DTMF_TONE_PERD;
unsigned char DTMF_PAUSE_PERD;

unsigned char g_MastStatus;       /* status for master */
unsigned char g_MastDataRx;       /* data for rx master */
unsigned char g_MastDataTxStatus; /* tx is busy or not */
unsigned char g_MastDataTx;       /* data for Tx master */
unsigned char g_DtmfOpenStatus;   /* DTMF open status */

char g_ChannelSave = 0x0;
/* point of access register */

/* before sending DTMF, close headphone; send finished, open headphone */
extern void _HeadPhone_open(void);
extern void _HeadPhone_close(void);

//end
unsigned char * g_pStatus;
volatile /*!!!!!!Attention */ unsigned char * g_pCtrl;
unsigned char * g_pData;

/* HISR or poll timer */

NU_TIMER	DTMF_Mast_TimerCtrl;        /* poll timer for master */
NU_TIMER    DTMF_Mast_TimerCtrlTxTone;  /* tone period control timer for master */
NU_TIMER    DTMF_Mast_TimerCtrlTxPause; /* pause period control timer for master */
NU_TIMER	DTMF_Dither_TimerCtrl;		/* Dial check disdither timer */

/* predeclartions */

unsigned char CharToDTMF(unsigned char _ch);
unsigned char DTMFToChar(unsigned char _DTMFData);
void dtmfSwitchCtrl(int _terminal, int _code);
void DTMF_Timer_Expiration(unsigned long id);
void DTMF_TxTone_Timer_Expiration(unsigned long id);
void DTMF_TxPause_Timer_Expiration(unsigned long id);
void DTMF_Dither_Timer_Expiration(unsigned long id);

/* externs */
extern int g_atthMntnFlag ;
extern void	PhDrCloseVoice(int chan_no);  /* stop RXing voice */
extern void	PhDrOpenVoice(int chan_no);   /* stop TXing voice */
extern char GetChanFromMachID(int mach_id); 

extern NU_PIPE rtn_pipe[UIMM_MAIL + 1];
#if 0
char PrintBuffer[30*1024];
void TRACE
(
	char *ps, ...	/* information to print*/
)
{
	#if 0
	char temp[256];
	va_list ap; 
   		
	//NU_Obtain_Semaphore(&ScreenSema, NU_SUSPEND);

	memset(temp, 0x0, 256);
	va_start(ap, ps);
	vsprintf(temp, ps, ap);
	va_end(ap);
	strcat(PrintBuffer, temp);
	
	//NU_Release_Semaphore(&ScreenSema);	
	#endif
}
#endif
/***************************************************
*
* DTMFSend - send DTMF message
*
* This routine send DTMF message to others module
*
* RETURNS: void
*
*/

void DTMFSend
(
	unsigned short msgcode, /* message code */
//	int orient, 	/* send direction */
	char DTMFData 	/* send data*/
)
{
	#if 1
	/* 
		LED orr, only for B295-4
		just for test...
	*/
	RtnMSG	  msg; 
	*(unsigned char *)0x80000003 ^= 0x1;
	
		
	if (msgcode == 0)	/* DTMF send finished */
	{
		msg.msg_len = 0;
		msg.msg_code = MSG_TONE_DTMFSEND_FINISH;
		NU_Send_To_Pipe( &rtn_pipe[TONE],&msg,4 + msg.msg_len,NU_NO_SUSPEND); 
	}
	else if (msgcode == 1) /* DTMF Rx data */
	{
	    msg.msg_len = 1;
	    msg.msg_data[0] = DTMFData;
	    if ( g_atthMntnFlag == 1)
	    {
	        msg.msg_code = MSG_MNTN_DTMF_DETECT_ATTH;
	        NU_Send_To_Pipe( &rtn_pipe[MNTN],&msg,4 + msg.msg_len,NU_NO_SUSPEND); 
	    }
	    else
	    {
	        msg.msg_code = MSG_UIMM_DTMF_DETECT_ATTH;
	        NU_Send_To_Pipe( &rtn_pipe[UIMM],&msg,4 + msg.msg_len,NU_NO_SUSPEND);           
	    }
	}
	else if (msgcode == 2)	/* detect dial tone */
	{
	    msg.msg_len = 0;
	    if( DTMFData == DTMF_DIAL)
			msg.msg_code = MSG_UIMM_DIALTONE_UIMM;
		else
			msg.msg_code = MSG_UIMM_DIALTONE_CLEAR_UIMM;
			
		NU_Send_To_Pipe( &rtn_pipe[UIMM],&msg,4 + msg.msg_len,NU_NO_SUSPEND);           
	}

    //printf("ATTH --- DTMFData = %c\n",DTMFData);
	#endif
}

/***************************************************
*
* DTMF_Decode_Init - DTMF initialize
*
* This routine initialize DTMF module,it will
*     1 --- register one LISR 
*     2 --- create four HISR 
*
* RETURNS: int --- 0  OK
*				   -1 Error
*
*/

int DTMF_Decode_Init(void)
{
    STATUS  status = 0;
    static  int initok = 0;
	CfgPARAM  *ptr;
	char	   param[1];
	
    if (initok == 1)
    {
    	//TONE_TRACE("BSP -- DTMF_Decode_Init has been called... \n");
    	return 0;
    }
  	
    //TONE_TRACE("BSP -- entering DTMF_Decode_Init...... \n");

	/* init status */
    g_MastDataTxStatus = DTMF_TX_IDLE;
	g_MastDataTx = DTMF_TX_IDLE;

	ptr = OneCfgParamGet (2016); //2016
	if( ptr != NULL )
	{
		memcpy(param, (char *)ptr->pVal, 4);
		DTMF_TONE_PERD = (unsigned char)(param[0]/10) + 5;
		DTMF_PAUSE_PERD = (unsigned char)(param[1]/10);
		NU_free((char *)ptr);		
	}
	if( DTMF_TONE_PERD < 4 || DTMF_TONE_PERD > 25 )
	{
		DTMF_TONE_PERD = 8;
	}
	if( DTMF_PAUSE_PERD < 4 || DTMF_PAUSE_PERD > 25 )
	{
		DTMF_PAUSE_PERD = 8;
	}
	/* create timers */
	
    status = NU_Create_Timer(&DTMF_Mast_TimerCtrl, "DTMFTMR0", DTMF_Timer_Expiration,
    						1, 2, 2, NU_DISABLE_TIMER/*NU_ENABLE_TIMER*/);
    status += NU_Create_Timer(&DTMF_Mast_TimerCtrlTxTone, "DTMFTMR2", DTMF_TxTone_Timer_Expiration,
							1, DTMF_TONE_PERD, DTMF_TONE_PERD, NU_DISABLE_TIMER);
    status += NU_Create_Timer(&DTMF_Mast_TimerCtrlTxPause, "DTMFTMR4", DTMF_TxPause_Timer_Expiration,
							1, DTMF_PAUSE_PERD, DTMF_PAUSE_PERD, NU_DISABLE_TIMER);
    status += NU_Create_Timer(&DTMF_Dither_TimerCtrl, "DTMFTMR5", DTMF_Dither_Timer_Expiration,
    						1, 4, 4, NU_DISABLE_TIMER);
    if (status != NU_SUCCESS)
    {
        //TONE_TRACE("BSP -- NU_Create_Timer error in code %d\n",status);
        return -1;
    } 
	
    g_DtmfOpenStatus = 0;	/* init open status */
    initok = 1;
    //TONE_TRACE("BSP -- successful in DTMF_Decode_Init...... \n");
	return 0;
}

/***************************************************
*
* DTMFOpen - open DTMF 
*
* This routine open DTMF device,Please call this routine before receiving or
* sending DTMF data
*
* RETURNS: int --- 0  OK
*				   <0 Error
*
*/

int DTMFOpen(void)
{
    STATUS status;
            
    /* already opened flag check */
	if (g_DtmfOpenStatus == 1)
	{
		TONE_TRACE("BSP -- DTMF has opened !!!!\n");
		return DTMF_HAS_OPENED;
	}
	
    status = NU_Control_Timer(&DTMF_Mast_TimerCtrl, NU_ENABLE_TIMER);
	//status += NU_Control_Timer(&DTMF_Dither_TimerCtrl, NU_DISABLE_TIMER);
    if (status != NU_SUCCESS)
    {
        return -1;
    }
    g_pCtrl = (volatile unsigned char *)DTMF_CONTROL_BASE;
	/* set already opened flag */
	g_DtmfOpenStatus = 1;
	
    /* DTMF initialize */
    /* See INITIALIZATION PROCEDURE, Fig15, P4-132, MT88L89 */
	*g_pCtrl = 0x00;	 
    *g_pCtrl = 0x00;	   
    *g_pCtrl = 0x08; 
    *g_pCtrl = 0x00;   

	/* See TYPICAL CONTROL SEQUENCE FOR BURST MODE APPLICATIONSM,
	   Fig15, P4-132, MT88L89 */
#define DTMF_MODE 2	   
#if DTMF_MODE == 1 /* irq mode */
    //*g_pCtrl = 0x0d;    /* disable tone out, DTMF, IRQ, Select Control Register B */
    //*g_pCtrl = 0x00;    /* burst mode */
    
#elif DTMF_MODE == 2 /* poll mode */
    *g_pCtrl = 0x08;    /* disable tone out, DTMF, no IRQ, Select Control Register B */
    *g_pCtrl = 0x01;    /* NOT burst mode: the transmit tone burst duration is determinated
                           by TOUT bit (Control Register A, b0) */
#endif
	TONE_TRACE("BSP -- DTMF open now !!!!\n");

	return 0;
}

/***************************************************
*
* DTMFClose - close DTMF device
*
* this function stop receive and send DTMF data, PLEASE call this 
* function after receiving or sending DTMF data
*
* RETURNS: int --- 0  OK
*				   <0 Error
*
*/

int DTMFClose(void)
{
   /* already opened flag check */
   
	if (g_DtmfOpenStatus == 0)
	{
		return DTMF_HAS_CLOSED;
	}
		
	g_DtmfOpenStatus = 0;	/* set already closed flag */

    NU_Control_Timer(&DTMF_Mast_TimerCtrl, NU_DISABLE_TIMER);    

	TONE_TRACE("BSP -- DTMF close now !!!!\n");

	return 0;
}

/***************************************************
*
* DTMFCheckDialOpen - check dial tone
*
* this routine first set DTMF control register, then check the special 
* bit of status register
*
* RETURNS: int --- 0  no dial tone
*				   1  a dial tone checked
*
*/
static unsigned int g_iDitherTimes = 0;
static unsigned int g_IsCheckDial = 0;
static unsigned int g_IsCheckDialOpen = 0;
int DTMFCheckDialOpen
(
	int _isDial		/* is check dial or check dial finish */
)
{
	char status;

	if ((_isDial != 0x0) && (_isDial != 0x1))
	{
		return (-1);
	}
	if (g_IsCheckDialOpen == 1) /* purpose: to avoid reopen */
	{
		return (-1);
	}
    status = NU_Control_Timer(&DTMF_Mast_TimerCtrl, NU_DISABLE_TIMER);
    if (status != NU_SUCCESS)
    {
        return (-1);
    }
	g_pCtrl = (unsigned char *)DTMF_CONTROL_BASE;	
	#if 0
	*g_pCtrl = 0x00;	/* Initialize */
	*g_pCtrl = 0x0a;	/* disable DTMF output, move ctrl to CRB*/
	*g_pCtrl = 0x00; 	/* clear CRB, no burst, no test, DTMF, bank single tone */  
	*g_pCtrl = 0x07;    /* enable tone out, CP, IRQ */
	#endif

	 
	 #if 1
	*g_pCtrl = 0x00;	/* Initialize */
	*g_pCtrl = 0x0e;	/* disable DTMF output, move ctrl to CRB*/
	*g_pCtrl = 0x00; 	/* clear CRB, no burst, no test, DTMF, bank single tone */  
	*g_pCtrl = 0x05;    /* enable tone out, CP, IRQ */
	#endif
	
	g_iDitherTimes = 0;
	g_IsCheckDial = _isDial;
	g_DtmfOpenStatus = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色老综合老女人久久久| 岛国精品在线播放| 亚洲18色成人| 一区二区三区成人| 一区二区久久久久| 亚洲夂夂婷婷色拍ww47| 亚洲日本护士毛茸茸| 亚洲免费在线观看视频| 亚洲一区二区av在线| 亚洲国产乱码最新视频| 日韩精品一区第一页| 麻豆精品视频在线观看免费| 国内成人精品2018免费看| 国产精品99久久久| voyeur盗摄精品| 91搞黄在线观看| 在线综合亚洲欧美在线视频 | 国产精品无码永久免费888| 久久亚洲一区二区三区四区| 国产精品色噜噜| 一区二区三区在线看| 老司机免费视频一区二区| 精品一区二区三区在线播放视频 | 欧美一区二区三区爱爱| 精品国产99国产精品| 日本一区二区三区国色天香 | 亚洲人成亚洲人成在线观看图片| 一二三四社区欧美黄| 日本不卡不码高清免费观看 | 国产精品福利影院| 亚洲综合激情网| 精品亚洲欧美一区| 色婷婷激情综合| 欧美成人官网二区| 亚洲欧洲制服丝袜| 老司机免费视频一区二区 | 日韩成人av影视| 丁香六月综合激情| 911精品国产一区二区在线| 国产午夜一区二区三区| 亚洲国产美国国产综合一区二区| 国产一区视频导航| 欧美三级中文字幕| 中文字幕成人av| 日韩专区在线视频| 一本色道久久综合狠狠躁的推荐| 91精品国产品国语在线不卡| 中文字幕综合网| 国产一区二区久久| 欧美一级视频精品观看| 亚洲欧美另类小说视频| 韩国理伦片一区二区三区在线播放| 91蜜桃视频在线| 国产欧美日韩亚州综合 | 久久嫩草精品久久久久| 三级在线观看一区二区| 欧美在线播放高清精品| 国产精品久久久久久久久免费丝袜 | 国产一区二区三区免费观看| 欧美色图免费看| 日韩毛片在线免费观看| 国产乱码精品一区二区三区av | 成人av电影免费在线播放| 精品福利一区二区三区免费视频| 天天做天天摸天天爽国产一区 | 欧美国产一区在线| 国产精品资源站在线| 欧美mv日韩mv国产网站| 日韩经典中文字幕一区| 欧美色综合久久| 夜夜爽夜夜爽精品视频| 色婷婷av一区二区三区之一色屋| 一区在线播放视频| 99久久er热在这里只有精品66| 欧美高清在线精品一区| 成人av在线电影| 日韩理论片网站| 在线观看日韩电影| 午夜电影网一区| 欧美一级免费观看| 蜜臀av国产精品久久久久 | 91看片淫黄大片一级在线观看| 久久久久久久久久久久久女国产乱| 久久精品国产成人一区二区三区| 欧美一级精品大片| 狠狠色狠狠色综合日日91app| 日韩免费在线观看| 国产精品一区二区久久不卡 | 日韩三级视频在线看| 久久精品国产77777蜜臀| 精品免费日韩av| 国产一区中文字幕| 国产精品乱人伦中文| 在线亚洲人成电影网站色www| 亚洲综合成人网| 欧美va亚洲va国产综合| 丁香六月综合激情| 亚洲国产乱码最新视频| 日韩欧美123| 99久久精品费精品国产一区二区| 亚洲一区在线看| 亚洲精品一区二区三区福利| 成人av电影在线播放| 亚洲国产精品久久不卡毛片 | 亚洲在线一区二区三区| 欧美一区二区播放| 国产91精品精华液一区二区三区| 亚洲欧美日韩国产综合| 欧美一区二区在线看| 国产成人综合精品三级| 玉足女爽爽91| 日韩精品在线网站| 日本精品免费观看高清观看| 久久精品久久精品| 亚洲一区免费视频| 欧美国产激情二区三区| 91超碰这里只有精品国产| caoporn国产精品| 裸体一区二区三区| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲精品一区二区三区蜜桃下载| 日本久久电影网| 国产电影一区在线| 精品一区免费av| 首页国产欧美久久| 亚洲激情男女视频| 国产精品入口麻豆九色| 日韩一级免费观看| 欧美片在线播放| 91一区二区在线观看| 国产精品一区二区三区网站| 免费在线观看一区| 亚洲国产精品欧美一二99| 亚洲情趣在线观看| 久久久夜色精品亚洲| 日韩精品一区二区三区在线播放 | 欧美日韩在线三区| 色94色欧美sute亚洲线路二| 国产91色综合久久免费分享| 卡一卡二国产精品| 蜜桃精品视频在线观看| 丝袜美腿亚洲一区| 日韩精品色哟哟| 日本欧美一区二区三区| 天堂va蜜桃一区二区三区漫画版| 亚洲一区在线电影| 亚洲成人免费观看| 五月婷婷激情综合网| 亚洲国产精品麻豆| 爽好久久久欧美精品| 日韩成人一级大片| 久久成人免费网站| 黄色日韩网站视频| 国产激情一区二区三区| 国产成人亚洲综合a∨猫咪| 国产一本一道久久香蕉| 高清视频一区二区| 99在线视频精品| 99精品黄色片免费大全| 97国产一区二区| 色av成人天堂桃色av| 欧美色爱综合网| 欧美一级片在线| 久久久噜噜噜久久人人看| 久久久久9999亚洲精品| 中文字幕乱码亚洲精品一区| 欧美高清在线一区二区| 成人欧美一区二区三区1314| 一区二区三区高清不卡| 三级成人在线视频| 国产在线精品一区二区夜色| 成人午夜视频在线观看| 色综合久久久久综合体桃花网| 91福利国产精品| 欧美电视剧免费全集观看 | 91捆绑美女网站| 日韩一区二区中文字幕| 国产亚洲精品精华液| 中文字幕一区二区三区乱码在线 | 色综合久久久久| 欧美一区二区三区精品| 国产午夜三级一区二区三| 亚洲色图视频免费播放| 另类小说一区二区三区| 91年精品国产| 久久品道一品道久久精品| 亚洲免费在线电影| 狠狠色狠狠色综合系列| 在线精品视频一区二区三四| 精品国产伦一区二区三区观看体验 | 91丝袜呻吟高潮美腿白嫩在线观看| 欧美体内she精视频| 久久亚洲综合色一区二区三区| 日韩理论片一区二区| 久久丁香综合五月国产三级网站| aaa亚洲精品| 久久久久久免费网| 亚洲成av人综合在线观看| 国产经典欧美精品| 欧美一区二区福利视频|