如何为 DAC8760计算 CRC? 请提供源代码"C"或足够的信息、以便我完成工作吗?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
除了我还没有使用表之外、我几乎像您提供的链接一样做得非常好。 在创建表之前、我想验证我是否可以使用 CRC 与 DAC 通信。
以下是代码:
字节 CalcCRC8 (int count、字节*pdata)
{
INT 位、I = 0;
字节 CRC = 0x00;
while (i < count)//对于每个字节
{
CRC ^=*pdata;//获取数据字节
for (bit = 0;bit < 8;bit++)
{
if ((CRC & 0x80)!= 0x00)
CRC =(CRC << 1)^ CRC8_ATM; // CRC8_ATM = 0x07
其他
CRC <<= 1;
}//结束
pdata +;//下一个字节
i++;
}//结束 while
返回 CRC;
}/*结束 CalcCRC8 */
下面是调用函数:
void DAC8760_OUT_CRC (const int ch、const uint 值)
{
W2B 评估;
UINT 垃圾;
内部时间;
字节 msg[3];
字节 CRC;
Val.w =值;
//地址字节= DAC 寄存器
MSG[0]= DAC8760_DAC_REG;
MSG[1]= vL.b[1];// MSB
MSG[2]= val.b[0];// LSB
CRC = CalcCRC8 (3、msg);
//地址字节
DAC_SPI_OUT_BUF = DAC8760_DAC_REG;
时间= DAC_SPI_WAIT_TM;
WAIT4_SPI2_Xmit;
while (!DAC_SPI_RBF)&&(time->0);//等待完成
垃圾= DAC_SPI_IN_BUF;
DAC_SPI_OUT_BUF = val.b[1];// MSB
时间= DAC_SPI_WAIT_TM;
WAIT4_SPI2_Xmit;
while (!DAC_SPI_RBF)&&(time->0);//等待完成
垃圾= DAC_SPI_IN_BUF;
DAC_SPI_OUT_BUF = val.b[0];// LSB
时间= DAC_SPI_WAIT_TM;
WAIT4_SPI2_Xmit;
while (!DAC_SPI_RBF)&&(time->0);//等待完成
垃圾= DAC_SPI_IN_BUF;
DAC_SPI_OUT_BUF = CRC;// CRC
时间= DAC_SPI_WAIT_TM;
WAIT4_SPI2_Xmit;
while (!DAC_SPI_RBF)&&(time->0);//等待完成
垃圾= DAC_SPI_IN_BUF;
ENTER_CRITICAL_SECTION (50);
DAC8760_Latch_Low (ch);
DAC8760_Latch_High (ch);
exit_critical SECTION ();
返回;
}//结束 DAC8760_OUT_CRC */
您可以看到、我发送的32位包含 CRC、DAC 没有相应地设置输出。
当我不在 DAC 中启用 CRC、因此仅发送24位(来自不附加 CRC 的其他函数)时、它会很好地工作!! 除了 SPI 总线上的其他器件、它们在通过 SPI 总线或其他一些会导致 DAC 降低其输出的 Phenom 接收数据时、很可能会导致数据"不对齐"、 但这是我需要处理的另一个问题...首先是 CRC??
上面的代码是否看起来应该正常工作?
此致、
Mike