📄 parelle.c.bak
字号:
TMOD=0x10; // T1为16位计数器模式,作系统时钟发生器GATE C/-T M1M0
TH1=0xFC;
TL1=0x17; //* 24MHZ晶振下,定时初值为0.5ms
// ======= 中断初始化( 注意开中断! ) ======
EA=1; // 开所有中断
//INT中断触发方式
// IT0=1; // INT0为边沿触发
// IT1=1; // INT1为边沿触发
//中断优先权
// PX0=1; // INT0为高优先权
// PX1=1; // INT1为高优先权
PT0=1; // T1为高优先权
// PT1=1; // T0为高优先权
//开关中断
// EX0=1; // 开INT0中断
// EX1=1; // 开INT1中断
// ET0=1; // 开T0中断
ET1=1; // 开T1中断
//开关定时器
// TR0=0; // 启动T0
TR1=1; // 启动T1
*/
}
void ambe_ini(void)
{
/* ===== A/D D/A 选择配置表 ======
u律 A律 16位线性
C_SEL2 0 1 1
C_SEL1 0 0 1
C_SEL0 0 0 1
===== 信道接口配置表 ========
帧格式: 并行被动 并行主动 串行主动 串行被动
CH_SEL2 0 0 0 0
CH_SEL1 0 0 1 1
CH_SEL0 0 1 0 1
非帧格式:串行被动1 串行被动2 串行被动3 串行被动4
CH_SEL2 1 1 1 1
CH_SEL1 0 0 1 1
CH_SEL0 0 1 0 1
====== 码率设置配置表 (单位bps) ========
2400bps | 3600bps | 4000bps | 4800bps
2400(0) 2350(50)|3600(0) 3350(250)|3750(250)|4800(0) 4550(250) 3600(1200) 2550(2250)
BP_SEL3 0 0 | 0 1 | 1 | 0 0 0 1
BP_SEL2 0 1 | 0 0 | 1 | 0 1 0 0
BP_SEL1 0 0 | 0 0 | 1 | 1 1 1 0
BP_SEL0 0 1 | 1 1 | 0 | 1 1 0 0
6400bps | 7200bps | 8000bps | 9600bps
4150(2250)| 4400(2800)|7750(250) 4650(3350) | 9600(0) 4850(4750)
BP_SEL3 1 | 1 | 1 1 | 0 0
BP_SEL2 0 | 0 | 1 1 | 1 1
BP_SEL1 1 | 0 | 0 0 | 0 1
BP_SEL0 0 | 1 | 0 1 | 0 0
====== 特殊功能配置表 ========
功能 使能 禁止
VAD_EN 语音活动检测 1 0
ECHO_EN 回波消除 1 0
SLEEP_EN 标准睡眠 1 0
SLIP_EN 时钟滑动控制 1 0
*/
//========================================
//======== AMBE-1000硬件初始化 ========
//========================================
//AD/DA芯片选择
/* AMBE_CSEL2 = 0; // A律
AMBE_CSEL1 = 0;
AMBE_CSEL0 = 0;
*/
/*
AMBE_CSEL2 = 0; // u律
AMBE_CSEL1 = 0;
AMBE_CSEL0 = 0;
//信道接口选择
AMBE_CHSEL2 = 0; //并行被动模式 帧格式
AMBE_CHSEL1 = 0;
AMBE_CHSEL0 = 0;
//码率选择
AMBE_BPSSEL3 = 0; //9600(0)bps
AMBE_BPSSEL2 = 1;
AMBE_BPSSEL1 = 0;
AMBE_BPSSEL0 = 0;
//特殊功能选择
AMBE_VAD_EN = 1;
AMBE_ECHO_EN = 0;
AMBE_SLEEP_EN = 0;
AMBE_SLIP_EN = 1;
*/
MC5480_UASEL = 1; //u律
// MC5480_UASEL = 0; //A律
AMBE_UASEL = 0; //AMBE1000 u律
delay(100);
//AMBE复位
AMBE_RESET = 1;
delay(100);
AMBE_RESET = 0;
delay(255);
delay(255);
delay(255);
AMBE_RESET = 1;
//读写选通复位
AMBE_READ_STRB = 1;
AMBE_WRITE_STRB = 1;
/*======== AMBE1000初始化控制字 ==========*/
/*
//======码率设置
order_data[HEADER_H] = 0x13; //帧头标志
order_data[HEADER_L] = 0xEC;
order_data[ID] = RATE_CONFIG; //帧ID
order_data[CONTROL_0] = 0x00; //控制字0
order_data[CONTROL_1H] = 0xE4; //控制字1 9600bps
order_data[CONTROL_1L] = 0xC0; //控制字1
order_data[CONTROL_2H] = 0x00; //控制字2
order_data[CONTROL_2L] = 0x00; //控制字2
order_data[CONTROL_3H] = 0x00; //控制字3
order_data[CONTROL_3L] = 0x00; //控制字3
//======音量设置
order_data[HEADER_H] = 0x13; //帧头标志
order_data[HEADER_L] = 0xEC;
order_data[ID] = VOLUME_CONFIG; //帧ID
order_data[CONTROL_0] = 0x00; //控制字0
order_data[CONTROL_1H] = 0x00; //控制字1 输入增益0dB (默认)
order_data[CONTROL_1L] = 0x80; //控制字1 输出增益1.00
order_data[CONTROL_2H] = 0x01; //控制字2
order_data[CONTROL_2L] = 0xF4; //控制字2
order_data[CONTROL_3H] = 0x00; //控制字3
order_data[CONTROL_3L] = 0x00; //控制字3
//=====特殊功能设置
order_data[HEADER_H] = 0x13; //帧头标志
order_data[HEADER_L] = 0xEC;
order_data[ID] = SPECIAL_CONFIG; //帧ID
order_data[CONTROL_0] = 0x00; //控制字0
order_data[CONTROL_1H] = 0x00; //控制字1 输入增益0dB (默认)
order_data[CONTROL_1L] = 0x80; //控制字1 输出增益1.00
order_data[CONTROL_2H] = 0x01; //控制字2
order_data[CONTROL_2L] = 0xF4; //控制字2
order_data[CONTROL_3H] = 0x00; //控制字3
order_data[CONTROL_3L] = 0x00; //控制字3
//=====标准睡眠模式
data_buffer[HEADER_H] = 0x13; //帧头标志
data_buffer[HEADER_L] = 0xEC;
data_buffer[ID] = POWER_CONFIG ; //帧ID
data_buffer[CONTROL_0] = 0x00; //控制字0
data_buffer[CONTROL_1H] = 0x00; //控制字1 输入增益0dB (默认)
data_buffer[CONTROL_1L] = 0x00; //控制字1 输出增益1.00
data_buffer[CONTROL_2H] = 0x00; //控制字2
data_buffer[CONTROL_2L] = 0x00; //控制字2
data_buffer[CONTROL_3H] = 0x00; //控制字3
data_buffer[CONTROL_3L] = 0x00; //控制字3
//============唤醒
data_buffer[HEADER_H] = 0x13; //帧头标志
data_buffer[HEADER_L] = 0xEC;
data_buffer[ID] = WAKE_UP ; //帧ID
data_buffer[CONTROL_0] = 0x20; //控制字0
data_buffer[CONTROL_1H] = 0x00; //控制字1 输入增益0dB (默认)
data_buffer[CONTROL_1L] = 0x00; //控制字1 输出增益1.00
data_buffer[CONTROL_2H] = 0x00; //控制字2
data_buffer[CONTROL_2L] = 0x00; //控制字2
data_buffer[CONTROL_3H] = 0x00; //控制字3
data_buffer[CONTROL_3L] = 0x00; //控制字3
*/
}
//====================================================
//===================并行输入输出=====================
//====================================================
void parellel_read(uchar input_data[])
{
uchar i;
for(i=0;i<34;i++)
{
AMBE_READ_STRB = 0; //开始读入数据
input_data[i] = P1; //从AMBE1000读入数据到缓冲区
AMBE_READ_STRB = 1;
}
delay(10);
}
void parellel_write(uchar output_data[])
{
uchar i;
for(i=0;i<34;i++)
{
AMBE_WRITE_STRB = 0; //开始写入数据
P1 = output_data[i]; //从缓冲区写数据到AMBE1000
AMBE_WRITE_STRB = 1;
}
delay(10);
}
/*===============================================================================*/
/* 主程序区 */
/*===============================================================================*/
void main(void) /*--- main函数 ---- */
{
uchar data i = 0,
j = 0,
// k = 1,
counter1 = 0,
counter2 = 0,
counter3 = 0;
uchar data data_buffer[34]; //并行数据交换区
//系统初始化
system_ini(); // 调用系统初始化程序
//AMBE1000初始化
ambe_ini();
//主循环
while(1)
{
if(AMBE_EPR == 1) //编码包准备好,AMBE可以向外发送数据
{
parellel_read( data_buffer );
//指示灯闪烁
counter1++;
if (counter1 >= 20)
{
counter1 = 0;
LED1 = ~LED1;
if ( (data_buffer[0] == 0x13) && (data_buffer[1]== 0xEC))
{
LED3 = ~LED3;
}
/*
if ( (data_buffer[3]&0xF0)==0x00 )
{
LED2=~LED2;
}
if ( (data_buffer[3]&0x0F)==0x00 )
{
LED3=~LED3;
}
*/
}
}//if(EPR) end
if( AMBE_DPE == 1 )//等待解码包空,AMBE可以接收数据
{
parellel_write( data_buffer );
counter2++;
if (counter2 >= 20)
{
counter2 = 0;
LED2 = ~LED2;
}
}
}//while end
}//main end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -