亚洲欧美第一页_禁久久精品乱码_粉嫩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
--------------------

*/

/* 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;	/* prevent codes are optimized */
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;
	//NU_Sleep(50);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品一区二区三区99| 亚洲欧美激情视频在线观看一区二区三区| 国产**成人网毛片九色| 日韩欧美的一区二区| 91成人在线精品| 亚洲欧洲另类国产综合| 91香蕉国产在线观看软件| 亚洲男人的天堂一区二区| 日韩三级视频中文字幕| 日韩一二三四区| 亚洲欧洲日产国码二区| 欧美精品色一区二区三区| 色哟哟国产精品| 精品国产三级电影在线观看| 久久精品亚洲一区二区三区浴池 | 国产成人免费视频一区| 99riav久久精品riav| 国产乱码字幕精品高清av| 国产一区二区不卡老阿姨| 久久久精品影视| 91污片在线观看| 日韩成人午夜电影| 久久午夜色播影院免费高清| 91年精品国产| 久久9热精品视频| 国产精品久久久久精k8| 欧美日韩国产一区二区三区地区| 蜜臀精品一区二区三区在线观看| 久久综合九色综合欧美98| 91在线云播放| 久久国产视频网| 亚洲日本青草视频在线怡红院| 欧美久久久久久蜜桃| 国产成人在线视频网址| 亚洲第一综合色| 久久精品一区八戒影视| 欧美三级日韩在线| 成人午夜私人影院| 天涯成人国产亚洲精品一区av| 久久精品人人做人人综合| 欧美午夜精品久久久久久孕妇| 国产在线精品一区二区| 午夜精品福利一区二区三区蜜桃| 国产日韩欧美精品综合| 欧美欧美欧美欧美| 9久草视频在线视频精品| 美女视频黄 久久| 亚洲一区二区精品久久av| 久久久久久黄色| 日韩三级免费观看| 欧美性猛交一区二区三区精品| 成人中文字幕合集| 老司机免费视频一区二区三区| 一区二区三区在线不卡| 国产精品美女久久久久久久久| 欧美哺乳videos| 91精品国产91久久久久久一区二区| 精品人在线二区三区| 色婷婷综合久久久久中文 | 色哟哟一区二区| 成人性视频免费网站| 国产河南妇女毛片精品久久久| 久久精品国产精品亚洲综合| 亚洲第一在线综合网站| 伊人性伊人情综合网| 国产精品毛片久久久久久久| 国产亚洲精品福利| 久久嫩草精品久久久精品| 精品动漫一区二区三区在线观看| 欧美综合欧美视频| 欧美性极品少妇| 欧美亚洲一区二区三区四区| 一本色道久久加勒比精品| 91丨国产丨九色丨pron| av成人免费在线| 91久久香蕉国产日韩欧美9色| 97se亚洲国产综合自在线观| 成人国产电影网| av不卡在线观看| 色婷婷综合在线| 91成人免费网站| 欧美日韩情趣电影| 欧美日韩免费一区二区三区| 欧美专区亚洲专区| 欧美美女网站色| 欧美一级片免费看| 久久毛片高清国产| 国产性色一区二区| 国产精品大尺度| 一区二区三区免费网站| 亚洲午夜久久久久久久久电影网| 亚洲成人午夜电影| 麻豆国产欧美日韩综合精品二区| 欧美a级一区二区| 国产精品88888| 91啪在线观看| 欧美男女性生活在线直播观看| 欧美一区二区网站| 国产午夜精品一区二区三区嫩草| 中文字幕av一区二区三区| 亚洲欧美视频在线观看视频| 亚洲国产sm捆绑调教视频| 日产欧产美韩系列久久99| 久久成人久久爱| 成人av在线一区二区三区| 欧亚一区二区三区| 精品三级在线看| 最新国产の精品合集bt伙计| 亚洲国产精品久久人人爱| 久久国产日韩欧美精品| 丰满少妇久久久久久久| 欧美午夜精品一区二区蜜桃| 精品久久久久久亚洲综合网| 中文字幕制服丝袜成人av | 91免费国产视频网站| 欧美猛男超大videosgay| 久久九九久精品国产免费直播| 亚洲免费伊人电影| 久久www免费人成看片高清| www.亚洲精品| 欧美电影免费观看高清完整版在线观看 | 欧美巨大另类极品videosbest | 国产精品美女久久久久高潮| 一区二区三区国产精华| 国产真实乱对白精彩久久| 在线影视一区二区三区| 久久精品人人做人人综合| 婷婷丁香激情综合| gogogo免费视频观看亚洲一| 日韩欧美一区二区视频| 亚洲色图欧洲色图| 国内精品国产成人国产三级粉色 | 日本va欧美va瓶| 在线看一区二区| 国产亚洲人成网站| 免费在线视频一区| 91黄色免费观看| 国产精品卡一卡二| 国产一区二区不卡在线| 91麻豆精品国产91久久久更新时间 | 欧美一级精品大片| 一区二区三区在线视频免费| 粉嫩av一区二区三区| 欧美一区二区三区免费视频| 一区二区三区资源| av在线免费不卡| 国产色91在线| 国产一区美女在线| 欧美一区二区在线免费播放| 亚洲成av人片| 欧美这里有精品| 亚洲欧美激情视频在线观看一区二区三区 | 99久久夜色精品国产网站| 26uuu色噜噜精品一区二区| 午夜影院久久久| 欧美日韩午夜精品| 一区二区三区四区不卡视频| 99久久国产免费看| 亚洲男同性恋视频| av不卡一区二区三区| 自拍偷拍国产精品| a4yy欧美一区二区三区| 国产精品久久久久aaaa| 粉嫩高潮美女一区二区三区| 国产日韩精品一区二区三区| 国产高清亚洲一区| 国产精品素人视频| 成人av影院在线| 1000精品久久久久久久久| aaa亚洲精品| 一区二区三区在线免费播放| 欧洲国产伦久久久久久久| 亚洲一区二区av电影| 欧美日韩亚洲丝袜制服| 亚洲成av人综合在线观看| 日韩视频国产视频| 国产一区二区三区久久悠悠色av| 精品久久人人做人人爰| 国产露脸91国语对白| 国产精品青草久久| 91欧美一区二区| 亚洲成av人片一区二区| 日韩西西人体444www| 九九久久精品视频| 国产亚洲精品资源在线26u| eeuss鲁片一区二区三区| 亚洲综合免费观看高清完整版在线| 欧美中文字幕亚洲一区二区va在线| 亚洲五月六月丁香激情| 91精品国产综合久久福利| 国产精品一级黄| 中文字幕一区二区三区在线观看| 色综合久久久久网| 免费人成黄页网站在线一区二区| 精品国产乱码久久久久久夜甘婷婷 | 日韩亚洲欧美成人一区| 国产一区二区三区黄视频| 中文字幕亚洲一区二区va在线| 91福利国产成人精品照片| 另类小说一区二区三区|