对讲芯片BK4819中CDCSS接受判断的问题
记录一个困扰了一天的问题,最近一个产品需要更换对讲芯片,测试的时候发现无论如何接受数字哑音读取不出来,代码是从另一个工程拷贝过来的,在给对讲芯片写完数据之后,打开了CDCSS的中断,经过实际测试,关掉中断就好了,实际上读取CDCSS状态码使用的轮询的方式,也用不到中断,直接把代码拷贝过来用,在以后的工作中,需要多多思考,他人的代码也并不是完全正确。
放一个生成24位的CDCSS码留着备用,目前工程中的码都是用的是查表法。
unsigned int CalDcs23BitData(unsigned short DcsCode, unsigned char InvertEn)
{
unsigned short DcsTmpCode, DcsTmpCode1;
unsigned int DcsTmpCode2;
//9 bits + 100 ==> 12 bits
DcsTmpCode1 = DcsCode & 0x01FF; //179&0x1FF=179=0xB3
DcsTmpCode1 = DcsTmpCode1 | 0x0800; //179|0x800=0x8B3
//Normal or Invert DCS
DcsCode = DcsCode & 0x6000; //=0
if (InvertEn == 0) //注意此格式为当为反向时为1
DcsTmpCode1 = (~DcsTmpCode1) & 0x0fff;
DcsTmpCode = DcsTmpCode1; //0x8B3
for (unsigned char i = 12; i > 0; i--)
{
if (DcsTmpCode & 0x0001)
{
DcsTmpCode = DcsTmpCode >> 1;
DcsTmpCode = DcsTmpCode | 0x8000;
DcsTmpCode ^= 0x863A;
}
else
DcsTmpCode = DcsTmpCode >> 1;
}
DcsTmpCode2 = (long)DcsTmpCode;
DcsTmpCode2 = DcsTmpCode2 << 12;
DcsTmpCode2 = DcsTmpCode2 | (long)(DcsTmpCode1);
return DcsTmpCode2;
}
其中的输入参数为十六位数据,低九位有效,比如127赫兹的状态码,输入低九位就是 001 010 111,输入进去输出数据就是24bit的码,直接传参数用。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。