📄 sport0.c
字号:
#include "talkthrough.h"
int iCodecRegs[SIZE_OF_CODEC_REGS] =//存放控制字的数组
{ //用表达式形式表示控制字的数值
//格式:设备及寄存器地址|编程写模式|寄存器的值
CONTROL_B_1 | CONTROL | 0x0F,//CODEC2的B寄存器数值
CONTROL_B_0 | CONTROL | 0x0F,//CODEC1的B寄存器数值
// |
//该位置的HEX数 +----->C D E F
//对应的AD73322L的采样率(KHz) 8 16 32 64
CONTROL_C_1 | CONTROL | 0x79,
CONTROL_C_0 | CONTROL | 0x79,
CONTROL_D_1 | CONTROL | 0x20,
CONTROL_D_0 | CONTROL | 0x20,
// ||
//该位置的HEX数 |+----> 0 1 2 3 4 5 6 7
//对应的AD73322L的输入增益(dB) | 0 6 12 18 20 26 32 38
//该位置的HEX数 +-----> 0 1 2 3 4 5 6 7
//对应的AD73322L的输出增益(dB) 6 3 0 -3 -6 -9 -12 -15
CONTROL_E_1 | CONTROL | 0x00,
CONTROL_E_0 | CONTROL | 0x00,
CONTROL_F_1 | CONTROL | 0x10,
CONTROL_F_0 | CONTROL | 0x10,
CONTROL_G_1 | CONTROL | 0xFF,
CONTROL_G_0 | CONTROL | 0xFF,
CONTROL_H_1 | CONTROL | 0xFF,
CONTROL_H_0 | CONTROL | 0xFF,
CONTROL_A_1 | CONTROL | 0x11,//注意:必须最后才能初始化寄存器A,这是因为
CONTROL_A_0 | CONTROL | 0x11//最低位置1后,CODEC将过渡到数据模式
};
int iTxIsrCounter, iCodecInitFinished;//发送中断发生次数,CODEC初始化完成标志
/****************初始化SPORT0程序****************/
void InitSport0(void)
{
int *pSys_Ctrl_Reg = &(* (int *) Sys_Ctrl_Reg);// 将地址值强制转换为指针类型
int *pSport0_Autobuf_Ctrl = &(* (int *) Sport0_Autobuf_Ctrl);
int *pSport0_Ctrl_Reg = &(* (int *) Sport0_Ctrl_Reg);
int temp;
temp=*pSys_Ctrl_Reg;
*pSys_Ctrl_Reg = temp&(0xEFFF); //停止SPORT0工作
*pSport0_Autobuf_Ctrl = 0x0000; //禁用SPORT0的autobuffering功能
*pSport0_Ctrl_Reg = 0x2a0f;//设置SPORT0工作模式
temp=*pSys_Ctrl_Reg;
*pSys_Ctrl_Reg=temp|(0x1000);//启动SPORT0工作
}
/****************初始化CODEC程序****************/
void InitCodec(void)//完成对Codec的采样率和增益等初始化
{
sport_write(SPORT_0, iCodecRegs[0]);// 启动串口发送
while(!iCodecInitFinished);// 检查初始化完成标志,如果没有完成一直等待
sysreg_bit_clr(sysreg_IMASK, 0x0040);// 屏蔽发送中断
interrupt(SIGSPORT0RECV, Sport0RxIsr);// 关联SPORT0接收中断和中断服务程序
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -